查错void average(STUDENT * stu_inf,int n,float * ave_course) { int i,j; int s; for(i=0;i<3;i++) { s=0;//每次算一门课的均分都要重置为0 for(j=0;j<10;j++) {s+=stu_inf->score[i]; stu_inf++;} *ave_course=s/3.0; ave_course++; } }

时间: 2024-03-16 22:45:25 浏览: 19
这段代码存在以下问题: 1. 函数声明中的 `STUDENT` 类型需要定义,否则编译器无法识别。 2. 函数中的 `stu_inf->score[i]` 应该改为 `stu_inf[j].score[i]`,因为 `stu_inf` 是一个指向结构体数组的指针,需要通过下标 `j` 访问数组中的元素。 3. 计算平均分的代码应该在内层循环结束后再执行,因为在内层循环中计算的是每个学生的分数总和,需要在外层循环中将每门课程的分数总和累加后再除以学生数量才能得到平均分。 4. 函数中的 `ave_course++` 应该在计算完平均分后再执行,因为它指向下一个课程的平均分存储位置。 修改后的代码如下所示: ```c typedef struct { int score[3]; } STUDENT; void average(STUDENT *stu_inf, int n, float *ave_course) { int i, j; int s; for (i = 0; i < 3; i++) { s = 0; for (j = 0; j < n; j++) { s += stu_inf[j].score[i]; } ave_course[i] = s / (float)n; } } ```
相关问题

1.有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出求3门课每门课程的平均分, 以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数)。 该题要求使用结构体,设计如下: typedef struct student { long studentID[20]; char studentName[20]; float score[3]; }STUDENT; (1)使用 void input(STUDENT *stu_inf, int n);函数实现输入n个学生的结构体数组,参数n是数组中学生信息的人数; (2)使用 void average (STUDENT * stu_inf, int n, int * ave_course);函数求3门课每门课程的平均分; (3)使用STUDENT max(STUDENT*stu_inf, int n);用max函数找出最高分的学生数据; (4)总平均分和最高分学生的数据都在主函数中输出。

好的,这是一个关于结构体的问题,需要实现三个功能,分别是输入n个学生的结构体数组、求3门课每门课程的平均分、用max函数找出最高分的学生数据。下面是一种可能的解决方案: ```c #include <stdio.h> #include <string.h> typedef struct student { long studentID[20]; char studentName[20]; float score[3]; } STUDENT; void input(STUDENT *stu_inf, int n) { for (int i = 0; i < n; i++) { printf("请输入第%d个学生的信息:\n", i+1); printf("学号:"); scanf("%ld", &(stu_inf+i)->studentID); printf("姓名:"); scanf("%s", (stu_inf+i)->studentName); printf("成绩:"); for (int j = 0; j < 3; j++) { scanf("%f", &(stu_inf+i)->score[j]); } } } void average(STUDENT *stu_inf, int n, float *ave_course) { for (int i = 0; i < 3; i++) { float sum = 0; for (int j = 0; j < n; j++) { sum += (stu_inf+j)->score[i]; } ave_course[i] = sum / n; } } STUDENT max(STUDENT *stu_inf, int n) { STUDENT max_stu; float max_score = 0; for (int i = 0; i < n; i++) { float sum = 0; for (int j = 0; j < 3; j++) { sum += (stu_inf+i)->score[j]; } float ave_score = sum / 3; if (ave_score > max_score) { max_score = ave_score; max_stu = *(stu_inf+i); } } return max_stu; } int main() { STUDENT stu_inf[10]; float ave_course[3]; input(stu_inf, 10); average(stu_inf, 10, ave_course); printf("3门课每门课程的平均分为:\n"); for (int i = 0; i < 3; i++) { printf("课程%d:%.2f\n", i+1, ave_course[i]); } STUDENT max_stu = max(stu_inf, 10); printf("最高分学生的信息为:\n"); printf("学号: %ld\n", max_stu.studentID); printf("姓名: %s\n", max_stu.studentName); printf("成绩: %.2f %.2f %.2f\n", max_stu.score[0], max_stu.score[1], max_stu.score[2]); float max_score = (max_stu.score[0] + max_stu.score[1] + max_stu.score[2]) / 3; printf("平均分: %.2f\n", max_score); return 0; } ``` 运行示例: ``` 请输入第1个学生的信息: 学号:1001 姓名:张三 成绩:90 85 95 请输入第2个学生的信息: 学号:1002 姓名:李四 成绩:80 75 70 请输入第3个学生的信息: 学号:1003 姓名:王五 成绩:60 65 70 请输入第4个学生的信息: 学号:1004 姓名:赵六 成绩:88 92 90 请输入第5个学生的信息: 学号:1005 姓名:钱七 成绩:75 80 85 请输入第6个学生的信息: 学号:1006 姓名:孙八 成绩:60 70 80 请输入第7个学生的信息: 学号:1007 姓名:周九 成绩:85 90 95 请输入第8个学生的信息: 学号:1008 姓名:吴十 成绩:80 85 90 请输入第9个学生的信息: 学号:1009 姓名:郑一 成绩:70 75 80 请输入第10个学生的信息: 学号:1010 姓名:王二 成绩:90 95 100 3门课每门课程的平均分为: 课程1:78.80 课程2:81.20 课程3:85.50 最高分学生的信息为: 学号: 1010 姓名: 王二 成绩: 90.00 95.00 100.00 平均分: 95.00 ```

C语言查错。#include <stdio.h> #include <stdlib.h> #define N 10 typedef struct student { long studentID; char studentName[20]; float score[3]; }STUDENT; void input (STUDENT * stu_inf,int n) { int j; for(j=0;j<n;j++) { scanf("%ld",stu_inf->studentID); scanf("%s",stu_inf->studentName); for(int k=0;k<3;k++) scanf("%f",stu_inf->score[k]); stu_inf++; } } void average(STUDENT * stu_inf,int n,int * ave_course) { int i,j,s; for(i=0;i<N;i++) { s=0; for(j=0;j<3;j++) s+=stu_inf->score[j]; *ave_course=s/3; ave_course++; } } STUDENT max(STUDENT * stu_inf,int n) { STUDENT *top; int i,j,k; float sumscore[10]={0}; for(i=0;i<N;i++) { for(j=0;j<3;j++) sumscore[i]+=stu_inf->score[j]; } for(i=0,k=0;i<9;i++) { if(sumscore[i]>sumscore[k]) k=i; } for(j=0;j<10;j++) { if(j==k) top=stu_inf; break; } return *top; } int main() { int i; float av[10]; STUDENT *inf; STUDENT *ave; ave=av; for(i=0;i<N;i++) {input(inf,N);} average(inf,N,ave); STUDENT m=max(inf,N); printf("总平均分是%f\n最高分学生数据如下:\n",*ave); printf("%ld %s ",m.studentID,m.studentName); int su=0; for(i=0;i<3;i++) { printf("%f ",m.score[i]); su+=m.score[i]; } printf("%f",su/3); return 0; }

这段代码有几个错误: 1.在input函数中,scanf函数的参数应该是&stu_inf->studentID和stu_inf->studentName,因为它们是指向long和char数组的指针,而不是实际的变量。 2.在average函数中,变量i应该从0开始,而不是从N开始。另外,在计算平均分时应该使用float类型的变量,而不是int类型的指针。 3.在max函数中,变量i应该从0开始,而不是从N开始。在查找最高分时,变量k应该初始化为0,而不是为i。 4.在max函数中,返回的是指向STUDENT结构体的指针,而不是STUDENT结构体本身。因此,在main函数中,应该使用*号来解引用指针。 5.在main函数中,变量inf没有分配内存空间,因此无法使用。应该使用malloc函数来分配内存空间,并将返回的指针赋值给inf。另外,变量ave应该是float类型的数组,而不是指针。 以下是修改后的代码: ```c #include <stdio.h> #include <stdlib.h> #define N 10 typedef struct student { long studentID; char studentName[20]; float score[3]; } STUDENT; void input(STUDENT* stu_inf, int n) { int j; for (j = 0; j < n; j++) { scanf("%ld", &stu_inf->studentID); scanf("%s", stu_inf->studentName); for (int k = 0; k < 3; k++) scanf("%f", &stu_inf->score[k]); stu_inf++; } } void average(STUDENT* stu_inf, int n, float* ave_course) { int i, j; for (i = 0; i < N; i++) { float s = 0; for (j = 0; j < 3; j++) s += stu_inf->score[j]; *ave_course = s / 3; ave_course++; stu_inf++; } } STUDENT* max(STUDENT* stu_inf, int n) { STUDENT* top; int i, j, k = 0; float sumscore[10] = { 0 }; for (i = 0; i < N; i++) { for (j = 0; j < 3; j++) sumscore[i] += stu_inf->score[j]; stu_inf++; } for (i = 0; i < 9; i++) { if (sumscore[i] > sumscore[k]) k = i; } stu_inf -= N; for (j = 0; j < 10; j++) { if (j == k) { top = stu_inf; break; } stu_inf++; } return top; } int main() { int i; float av[10]; STUDENT* inf = (STUDENT*)malloc(N * sizeof(STUDENT)); float* ave = av; for (i = 0; i < N; i++) { input(inf, N); } average(inf, N, ave); STUDENT* m = max(inf, N); printf("总平均分是%f\n最高分学生数据如下:\n", *ave); printf("%ld %s ", m->studentID, m->studentName); int su = 0; for (i = 0; i < 3; i++) { printf("%f ", m->score[i]); su += m->score[i]; } printf("%f", su / 3.0); free(inf); return 0; } ```

相关推荐

1、Description 实现一个初步的学生信息管理系统,该系统可以实现对学生信息的:录入、查询、删除和输出。 定义学生结构体,存放学生的学号、姓名、性别、和年龄信息。结构体参考定义如下: struct student { int id; //学生序号:初始为0,当输入第1名学生的信息后序号为1,输入两名学生信息后,序号为2… char no[11]; //学号,例如:2022180219 char name[10]; //姓名,例如:liqiang char sex; //性别:’F’或’M’ int age; }; 定义函数void InputData(struct student *stu, int n)用于实现对n名学生信息的录入, 定义函数int QueryData(struct student *stu, char *stu_no)实现对输入的某学号进行查询,若查询有该学生,则输出该学生的完整信息;若查询失败,则输出:该学号不存在! 定义函数void DeleteData(struct student *stu, char *stu_no)实现对输入学号对应的学生信息的删除,若输入学号不存在,则不操作。(注意数组中后续学生数据应该前移一位,序号也应相应变更) 定义函数void OutputData(struct student *stu, int i)实现对结构体数组中序号为i的学生的信息输出。 主函数中定义结构体数组struct student stu[5],用于存放5名学生的信息。主函数中, (1)、调用InputData函数实现对5名学生的信息录入 (2)、调用QueryData函数实现对某输入学号的查询 (3)、若(2)中所查询学号存在,调用DeleteData函数进行删除 (4)、调用OutputData函数实现对全部的学生信息进行输出

void menu(void); void fun(void(*p)(void)); void fun1(void); void fun2(void); void fun3(void); void fun4(void); struct student{ int id; char name[10]; char gender[5]; float score; }; int count = 0; struct student stu[N]; int main(void) { int input_num; struct student stu[N]; while(1){ menu(); printf("请输入:"); scanf("%d",&input_num); if (1 == input_num || 2 == input_num || 3 == input_num || 4 == input_num || 5 == input_num) switch (input_num) { case 1: fun(fun1); break; case 2: fun(fun2); break; case 3: fun(fun3); break; // case 4: // fun(fun4); case 5: printf("感谢使用\n"); exit(0); break; } else printf("输入错误\n"); } return 0; } void fun1(void) { // char s[5]; printf("请输入学生信息(学号、姓名、性别、成绩\n"); //while(scanf("%s",s) != EOF){ scanf("%d%s%s%f",&stu[count].id,stu[count].name,stu[count].gender,&stu[count].score); count++; // } } void fun2(void) { int i; for(i=0;i<count;i++) printf("学号:%d 姓名:%s 性别:%s 成绩:%f\n",stu[i].id, stu[i].name, stu[i].gender, stu[i].score); } void fun3(void) { int seek_num,i; printf("请输入学号\n"); scanf("%d",&seek_num); for(i=0;i<count;i++) { if(stu[i].id == seek_num) printf("本次搜索学生的信息如下\n学号:%d 姓名:%s 性别:%s 成绩:%f\n",stu[i].id, stu[i].name, stu[i].gender, stu[i].score); } } void fun4(void) { int del_id,i=0; struct student * del_p = stu[N]; struct student * new_p = stu[N]; printf("请输入要删除的学生的学号"); scanf("%d",&del_id); while (i < count) { if(*del_p->id == del_id) { del_p++; i++; } *del_q->id = *del_p->id; *del_q->name = *del_p->name; *del_q->gender = *del_p->gender; *del_q->score = *del_p->score; i++; del_p++; del_q++; } } void fun(void(*p)(void)) { p(); } void menu(void) { printf("|====================================|\n"); printf("| 学 生 管 理 系 统 |\n"); printf("|====================================|\n"); printf("| 1.录入学生信息 |\n"); printf("| 2.查询已录入学生信息 |\n"); printf("| 3.搜索学生信息 |\n"); printf("| 4.删除学生信息 |\n"); printf("| 5.退出程序 |\n"); printf("|====================================|\n"); }为什么我的fun4有问题

最新推荐

recommend-type

基于嵌入式ARMLinux的播放器的设计与实现 word格式.doc

本文主要探讨了基于嵌入式ARM-Linux的播放器的设计与实现。在当前PC时代,随着嵌入式技术的快速发展,对高效、便携的多媒体设备的需求日益增长。作者首先深入剖析了ARM体系结构,特别是针对ARM9微处理器的特性,探讨了如何构建适用于嵌入式系统的嵌入式Linux操作系统。这个过程包括设置交叉编译环境,优化引导装载程序,成功移植了嵌入式Linux内核,并创建了适合S3C2410开发板的根文件系统。 在考虑到嵌入式系统硬件资源有限的特点,通常的PC机图形用户界面(GUI)无法直接应用。因此,作者选择了轻量级的Minigui作为研究对象,对其实体架构进行了研究,并将其移植到S3C2410开发板上,实现了嵌入式图形用户界面,使得系统具有简洁而易用的操作界面,提升了用户体验。 文章的核心部分是将通用媒体播放器Mplayer移植到S3C2410开发板上。针对嵌入式环境中的音频输出问题,作者针对性地解决了Mplayer播放音频时可能出现的不稳定性,实现了音乐和视频的无缝播放,打造了一个完整的嵌入式多媒体播放解决方案。 论文最后部分对整个项目进行了总结,强调了在嵌入式ARM-Linux平台上设计播放器所取得的成果,同时也指出了一些待改进和完善的方面,如系统性能优化、兼容性提升以及可能的扩展功能等。关键词包括嵌入式ARM-Linux、S3C2410芯片、Mplayer多媒体播放器、图形用户界面(GUI)以及Minigui等,这些都反映出本文研究的重点和领域。 通过这篇论文,读者不仅能了解到嵌入式系统与Linux平台结合的具体实践,还能学到如何在资源受限的环境中设计和优化多媒体播放器,为嵌入式技术在多媒体应用领域的进一步发展提供了有价值的经验和参考。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

Python字符串为空判断的动手实践:通过示例掌握技巧

![Python字符串为空判断的动手实践:通过示例掌握技巧](https://img-blog.csdnimg.cn/72f88d4fc1164d6c8b9c29d8ab5ed75c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGFyYm9yIExhdQ==,size_20,color_FFFFFF,t_70,g_se,x_16) # 1. Python字符串为空判断的基础理论 字符串为空判断是Python编程中一项基本且重要的任务。它涉及检查字符串是否为空(不包含任何字符),这在
recommend-type

box-sizing: border-box;作用是?

`box-sizing: border-box;` 是 CSS 中的一个样式属性,它改变了元素的盒模型行为。默认情况下,浏览器会计算元素内容区域(content)、内边距(padding)和边框(border)的总尺寸,也就是所谓的"标准盒模型"。而当设置为 `box-sizing: border-box;` 后,元素的总宽度和高度会包括内容、内边距和边框的总空间,这样就使得开发者更容易控制元素的实际布局大小。 具体来说,这意味着: 1. 内容区域的宽度和高度不会因为添加内边距或边框而自动扩展。 2. 边框和内边距会从元素的总尺寸中减去,而不是从内容区域开始计算。
recommend-type

经典:大学答辩通过_基于ARM微处理器的嵌入式指纹识别系统设计.pdf

本文主要探讨的是"经典:大学答辩通过_基于ARM微处理器的嵌入式指纹识别系统设计.pdf",该研究专注于嵌入式指纹识别技术在实际应用中的设计和实现。嵌入式指纹识别系统因其独特的优势——无需外部设备支持,便能独立完成指纹识别任务,正逐渐成为现代安全领域的重要组成部分。 在技术背景部分,文章指出指纹的独特性(图案、断点和交叉点的独一无二性)使其在生物特征认证中具有很高的可靠性。指纹识别技术发展迅速,不仅应用于小型设备如手机或门禁系统,也扩展到大型数据库系统,如连接个人电脑的桌面应用。然而,桌面应用受限于必须连接到计算机的条件,嵌入式系统的出现则提供了更为灵活和便捷的解决方案。 为了实现嵌入式指纹识别,研究者首先构建了一个专门的开发平台。硬件方面,详细讨论了电源电路、复位电路以及JTAG调试接口电路的设计和实现,这些都是确保系统稳定运行的基础。在软件层面,重点研究了如何在ARM芯片上移植嵌入式操作系统uC/OS-II,这是一种实时操作系统,能够有效地处理指纹识别系统的实时任务。此外,还涉及到了嵌入式TCP/IP协议栈的开发,这是实现系统间通信的关键,使得系统能够将采集的指纹数据传输到远程服务器进行比对。 关键词包括:指纹识别、嵌入式系统、实时操作系统uC/OS-II、TCP/IP协议栈。这些关键词表明了论文的核心内容和研究焦点,即围绕着如何在嵌入式环境中高效、准确地实现指纹识别功能,以及与外部网络的无缝连接。 这篇论文不仅深入解析了嵌入式指纹识别系统的硬件架构和软件策略,而且还展示了如何通过结合嵌入式技术和先进操作系统来提升系统的性能和安全性,为未来嵌入式指纹识别技术的实际应用提供了有价值的研究成果。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

Python字符串为空判断的常见问题解答:解决常见疑惑

![字符串为空判断](https://img-blog.csdnimg.cn/20210620130654176.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTQ0NTExNg==,size_16,color_FFFFFF,t_70) # 1. Python字符串为空判断的必要性 在Python编程中,字符串为空判断是至关重要的,它可以帮助我们处理各种场景,例如: - 数据验证:确保用户输入或从数据库获取的
recommend-type

c++ 中 static的作用

在C++中,static是一个常用的修饰符,它可以用来控制变量和函数的存储方式和可见性。static的作用主要有以下几个方面: 1. 静态局部变量:在函数内部定义的变量,加上static关键字后,该变量就被定义成为一个静态局部变量。静态局部变量只会被初始化一次,而且只能在函数内部访问,函数结束后仍然存在,直到程序结束才会被销毁。 2. 静态全局变量:在全局变量前加上static关键字,该变量就被定义成为一个静态全局变量。静态全局变量只能在当前文件中访问,其他文件无法访问,它的生命周期与程序的生命周期相同。 3. 静态成员变量:在类中定义的静态成员变量,可以被所有该类的对象共享,它的值在所
recommend-type

嵌入式系统课程设计.doc

嵌入式系统课程设计文档主要探讨了一个基于ARM微处理器的温度采集系统的设计与实现。该设计旨在通过嵌入式技术为核心,利用S3C44B0x ARM处理器作为主控单元,构建一个具备智能化功能的系统,包括温度数据的采集、传输、处理以及实时显示。设计的核心目标有以下几点: 1.1 设计目的: - 培养学生的综合应用能力:通过实际项目,学生可以将课堂上学到的理论知识应用于实践,提升对嵌入式系统架构、编程和硬件设计的理解。 - 提升问题解决能力:设计过程中会遇到各种挑战,如速度优化、可靠性增强、系统扩展性等,这有助于锻炼学生独立思考和解决问题的能力。 - 创新思维的培养:鼓励学生在传统数据采集系统存在的问题(如反应慢、精度低、可靠性差、效率低和操作繁琐)上进行改进,促进创新思维的发展。 2.1 设计要求: - 高性能:系统需要具有快速响应速度,确保实时性和准确性。 - 可靠性:系统设计需考虑长期稳定运行,应对各种环境条件和故障情况。 - 扩展性:设计时需预留接口,以便于未来添加更多功能或与其他设备集成。 3.1 硬件设计思路: - 选择了S3C44B0x ARM微处理器作为核心,其强大的处理能力和低功耗特性对于实时数据处理很关键。 - 单独的数据采集模块负责精确测量温度,可能涉及到传感器的选择和接口设计。 4.1 软件设计思路: - 应用RTOS(实时操作系统)来管理任务调度,提高系统的整体效率。 - 编写高效的程序清单,包括数据采集、处理算法和用户界面,确保用户体验良好。 5. 心得体会部分: - 学生可能会分享他们在项目中的学习收获,如团队协作的重要性、项目管理的经验以及如何在实践中优化系统性能。 总结,该设计不仅是一次技术实践,也是一次学习和成长的机会,它着重培养学生的工程实践能力、问题解决能力和创新能力,同时展示了嵌入式系统在现代工业中的实际应用价值。通过完成这个项目,学生将对嵌入式系统有更深入的理解,为未来的职业生涯打下坚实的基础。
recommend-type

关系数据表示学习

关系数据卢多维奇·多斯桑托斯引用此版本:卢多维奇·多斯桑托斯。关系数据的表示学习机器学习[cs.LG]。皮埃尔和玛丽·居里大学-巴黎第六大学,2017年。英语。NNT:2017PA066480。电话:01803188HAL ID:电话:01803188https://theses.hal.science/tel-01803188提交日期:2018年HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaireUNIVERSITY PIERRE和 MARIE CURIE计算机科学、电信和电子学博士学院(巴黎)巴黎6号计算机科学实验室D八角形T HESIS关系数据表示学习作者:Ludovic DOS SAntos主管:Patrick GALLINARI联合主管:本杰明·P·伊沃瓦斯基为满足计算机科学博士学位的要求而提交的论文评审团成员:先生蒂埃里·A·退休记者先生尤尼斯·B·恩