Description 有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)

#include <stdio.h>
#include<stdlib.h>
typedef struct Student
{
 char num[10];
 char name[20];
 int score[3];
 float ave;
}STU;


 int main()
{
 STU stu[10],max;
 int i,j,n;
 int sum[3]={0,0,0};
 /*输入n */
 scanf("%d\n",&n);


for(i=0;i<n;i++)
{
 scanf("%s %s %d %d %d",stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
 sum[0]+=stu[i].score[0];
sum[1]+=stu[i].score[1];
sum[2]+=stu[i].score[2];
/*累加各科学生总成绩*/

 stu[i].ave=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
 /*求各学生平均成绩*/
}
printf("%d %d %d\n",sum[0]/n,sum[1]/n,sum[2]/n);
 max=stu[0];
for(j=1;j<n;j++)
{
    if(stu[j].ave>max.ave)
    max=stu[j];
}
printf("%s %s %d %d %d\n",max.num,max.name,max.score[0],max.score[1],max.score[2]);


return 0;
}

Sample Input:
2
1 blue 90 80 70
b clan 80 70 60

Sample Output:
85 75 65
1 blue 90 80 70

  • 16
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 题目描述:有5个学生,每个学生有3成绩,从键盘输入以上数据包括学号姓名,三成绩),计算成绩,将原有的数据和计算的总分数存放在磁盘文件stu.txt中。提示:首先以写方式打开文件stu。 解题思路:首先,需要从键盘输入5个学生的信息,包括学号姓名和三成绩。然后,计算每个学生的总成绩,并将原有的数据和计算的总分数存放在磁盘文件stu.txt中。最后,关闭文件。 代码实现: #include <stdio.h> #include <stdlib.h> int main() { FILE *fp; int i, j, sum; char id[10], name[20]; int score[3]; fp = fopen("stu.txt", "w"); if (fp == NULL) { printf("Cannot open file.\n"); exit(1); } for (i = 0; i < 5; i++) { printf("请输入第%d个学生学号姓名和三成绩:\n", i+1); scanf("%s%s%d%d%d", id, name, &score[0], &score[1], &score[2]); sum = score[0] + score[1] + score[2]; fprintf(fp, "%s %s %d %d %d %d\n", id, name, score[0], score[1], score[2], sum); } fclose(fp); return 0; } ### 回答2: 在解决本题之前,我们先来了解一下文件的打开方式: 在C语言中,通常有3种文件打开方式: 1. 只读方式("r"): 以只读方式打开文件,如果文件不存在则打开失败。 2. 只写方式("w"): 以只写方式打开文件,如果文件不存在则创建新的文件,若文件已经存在,则清空文件内容。 3. 读写方式("a+"): 以读写方式打开文件,如果文件不存在则新建文件,写入的内容会追加到原文件后面。 注:文件指针可以通过fseek和rewind等函数来移动。 现在,我们来解决本题。 首先,我们需要定义学生数据类型: typedef struct { int num; //学号 char name[20]; //姓名 int score[3]; //分数 int sum; //总分 }STU; 然后,我们需要从键盘输入5个学生的信息,存放在一个stu数组中: STU stu[5]; for (int i = 0; i < 5; i++) { printf("请输入第%d个学生学号姓名和分数:\n", i+1); scanf("%d%s%d%d%d", &stu[i].num, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]); stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2]; //计算总分 } 接下来,我们需要以写方式打开文件stu.txt: FILE *fp = fopen("stu.txt", "w"); 如果打开失败,则返回NULL,因此需要进行判断: if (fp == NULL) { printf("打开文件失败!\n"); return 0; } 如果成功打开了文件,我们需要将学生的信息以及总分写入文件;因此,我们可以使用fprintf函数来实现: for (int i = 0; i < 5; i++) { fprintf(fp, "%d %s %d %d %d %d\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].sum); } 注意:每个学生的信息之间需要用空格隔开;每个学生的最后需要加上换行符。 最后,我们需要记得关闭文件: fclose(fp); 至此,本题就解决了。完整代码如下: ### 回答3: 编程是一个充满挑战和创造的领域,而在学习编程的过程中,你会遇到各种问题、练习和实践。此题目是一个涉及文件读写操作的小任务,要求我们输入5个学生的3成绩,并将其总分存储在文件“stu.txt”中。 首先,我们需要根据需求创造1个空白的文件“stu.txt”,然后使用写的方式打开它。一般情况下,程序具有创建一个新文件和打开已经存在的文件两种情况。 创建文件的代码如下: ```python with open('stu.txt', 'w') as f: pass # 占位语句 ``` 如果文件已经存在,我们只需要打开即可: ```python with open('stu.txt', 'w') as f: # 写入数据 ``` 接下来需要输入5个学生的3成绩。我们可以用一个for循环来实现,每次循环中都必须输入1个学生三项成绩,然后将这些数据写入文件。 ```python with open('stu.txt', 'w') as f: for i in range(5): # 循环5次 # 依次输入每个学生学号姓名成绩,并计算总分 stu_id = input("请输入学号:") name = input("请输入姓名:") score1 = int(input("请输入第1成绩:")) score2 = int(input("请输入第2成绩:")) score3 = int(input("请输入第3成绩:")) total = score1 + score2 + score3 # 将学生数据和总分写入文件 data = f"{stu_id}\t{name}\t{score1}\t{score2}\t{score3}\t{total}\n" f.write(data) ``` 在这段代码中,我们利用for循环从1-5输入每个学生学号姓名成绩,然后计算总数,最后将这些信息和总分存储到变量“data”中,并通过写模式将它们写入文件“stu.txt”中。 总地来说,这是一个涉及文件读写操作的小练习,要求我们实现输入五个学生的信息,计算它们的总分数并将它们一起存入文件“stu.txt”中,从而巩固我们的文件读写技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值