#define HH printf("%-12s%-10s%-10s%-10s%-10s%-10s%-10s\n", \ "学号","姓名","语文","数学","英语","总分","平均分"," 排名")
时间: 2023-09-06 07:13:48 浏览: 235
这是一个宏定义,定义了一个名为 HH 的宏,其作用是打印一个表格的表头。具体来说,使用这个宏可以打印出一个包含以下列名的表格:
学号 姓名 语文 数学 英语 总分 平均分 排名
其中,% -12s 表示输出一个左对齐、12个字符宽度的字符串,% -10s 表示输出一个左对齐、10个字符宽度的字符串。通过这样的格式控制,可以使表格的各列对齐。
相关问题
#define HH printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n", \ "学号","姓名","语文","数学","英语","总分","平均分"," 排名")是什么意思
这段代码是一个C语言的宏定义,主要是定义一个格式化输出的格式,其中:
- `%s` 表示输出字符串;
- `%d` 表示输出整数;
- `%f` 表示输出浮点数;
- `%10s` 表示输出字符串的宽度为10个字符,左对齐。
具体来说,这个宏定义定义了一个表格的格式,包括每一列的标题和宽度,其中:
- "学号"、"姓名"、"语文"、"数学"、"英语"、"总分"、"平均分"、"排名" 是每一列的标题;
- `%10s` 表示每一列的宽度为10个字符,并使用左对齐方式对齐。
这个宏定义可以在程序中多次使用,方便输出表格格式的数据。例如:
```
HH;
printf("%-10s%-10s%-10d%-10d%-10d%-10d%-10.2f%-10d\n", "1001", "小明", 80, 90, 85, 255, 85.00, 1);
```
输出的结果如下:
```
学号 姓名 语文 数学 英语 总分 平均分 排名
1001 小明 80 90 85 255 85.00 1
```
某班有5名同学,建立一个学生的简单信息表,包括学号、姓名、3门课程的成绩,编写程序,计算每名学生的平均成绩及名次。(30分) 题目内容: 某班有5名同学,建立一个学生的简单信息表,包括学号、姓名、3门课程的成绩,编写程序,计算每名学生的平均成绩及名次。(注:定义一个结构体类型,用结构指针作为函数参数) 输入格式: %ld %s %f %f %f 输出格式: %-9ld%-10s%-5.1f%-5.1f%-8.1f%-10.1f%-d\n 输入样例: 201701 zhao 29.8 85.4 65.4 201702 qian 96.5 87.5 65.4 201703 sun 85.4 65.4 84.6 201704 li 63.4 95.4 86.3 201705 zhou 65.9 84.6 97.5 输出样例: Number: Name: score: Average: rank: 201701 zhao 29.8 85.4 65.4 60.2 5 201702 qian 96.5 87.5 65.4 83.1 1 201703 sun 85.4 65.4 84.6 78.5 4 201704 li 63.4 95.4 86.3 81.7 3 201705 zhou 65.9 84.6 97.5 82.7 2 时间限制:500ms内存限制:32000kb
以下是一个简单的C语言代码实现:
```c
#include <stdio.h>
#include <string.h>
#define N 5
// 定义学生信息结构体
typedef struct {
long num;
char name[20];
float score[3];
float ave;
int rank;
} student;
// 计算每名学生的平均成绩
void average(student *stu) {
int i;
for (i = 0; i < N; i++) {
stu[i].ave = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0;
}
}
// 计算每名学生的名次
void ranking(student *stu) {
int i, j;
student temp;
for (i = 0; i < N; i++) {
stu[i].rank = 1;
for (j = 0; j < N; j++) {
if (stu[j].ave > stu[i].ave) {
stu[i].rank++;
}
}
}
}
// 输出每名学生的信息
void output(student *stu) {
int i;
printf("Number:\tName:\t\tscore:\t\tAverage:\trank:\n");
for (i = 0; i < N; i++) {
printf("%-9ld%-10s%-5.1f%-5.1f%-5.1f\t%-10.1f%-d\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].ave, stu[i].rank);
}
}
int main() {
student stu[N];
int i;
for (i = 0; i < N; i++) {
scanf("%ld %s %f %f %f", &stu[i].num, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
}
average(stu);
ranking(stu);
output(stu);
return 0;
}
```
输入格式为每个学生的学号、姓名、三门课程的成绩,分别用空格隔开,循环读入5次。然后调用 `average()` 函数计算每名学生的平均成绩,再调用 `ranking()` 函数计算每名学生的名次,最后调用 `output()` 函数输出每名学生的信息。
阅读全文