#include <stdio.h>
#include <stdlib.h>
struct student {
int num
char name[20]
float score[4]
}
void input(struct student a[], int)
void aver(struct student a[], int,struct student b[])
void order(struct student a[], int)
void output(struct student a[], int,struct student b[])
int main() {
struct student stu[100]
struct student b[100]
int n
printf("请输入学生个数:")
scanf("%d", &n)
input(stu, n)
aver(stu, n,b)
order(stu, n)
output(stu, n,b)
return 0
}
void input(struct student a[], int n) {
int i, j
// printf("请输入学生的学号,姓名,英语,数学,物理,语文成绩:\n")
for (i = 0i <ni++) {
printf("请输入第%d个学生的学号,姓名,英语,数学,物理,语文成绩:\n", i + 1)
scanf("%d", &a[i].num)
//gets(a[i].name)
scanf("%s", &a[i].name)
for (j = 0j <4j++)
scanf("%f", &a[i].score[j])
}
}
void aver(struct student a[], int n,struct student b[]) {
int i=0, j
for (i = 0i <ni++) {
b[i].score[0] = 0
for (j = 0j <4j++)
b[i].score[0] += a[i].score[j]
b[i].score[0] = b[i].score[0] / 4
}
}
void order(struct student a[], int n) {
int i, j
struct student t[1]
for (i = 1i <ni++)
for (j = 0j <n - ij++)
if (a[j].score[3] <a[j + 1].score[3]) {
t[1] = a[j]
a[j] = a[j + 1]
a[j + 1] = t[1]
}
}
void output(struct student a[], int n,struct student b[]) {
int i, j
printf("学号\t姓名\t 英语\t 数学\t 物理\t 语文\t 平均成绩如下:\n")
for (i = 0i <ni++) {
printf("%d\t%s\t", a[i].num, a[i].name)
for (j = 0j <4j++)
printf("%.2f\t", a[i].score[j])
printf("%.2f", b[i].score[0])
printf("\n")
}
}
帮你改了一些,看看测试:
分类: 电脑/网络 >>程序设计 >>其他编程语言问题描述:
2.默认的域宽与精度各是多少?
3.精度说明大于或小于实际精度时,应如何处理?
4.FLOAT与DOUBLE的最大精度是多少?
5.如何处理符号位?
6.多余的小数位是被截断还是舍入?
解析:
事实上,您问的问题比较泛,如果结合使用的编译器类型和具体例子来问会比较好些。下面也只是泛泛而谈。
1、域宽小于实际宽度时,通常输出结果以实际宽度为准,如果需要以域宽来输出,那么实际结果需要截断。比如将结果以实际宽度输出到某个字符数组中,再截断。
2、默认的域宽为8位,精度为6位。
3、精度说明大于实际精度时,输出补余;小于实际精度时,输出截断。
4、FLOAT的最大精度是10的负44次方;DOUBLE的最大精度是10的负323次方。
5、整型数据的符号位出现在最高字节的最高位;浮点型数据则出现在字节中间的某个位上。不明白什么叫如何处理符号位?
6、多余的小数位是截断和舍入取决于不同的编译环境。应当结合自己使用的编译环境做一下测试即可明白。