c语言 结构体 输入学生个数n。输入这n个学生姓名、学号、五门课成绩。输出姓名、学号、五门课成绩、平均分 输入5个学生的姓名,学号和5门课成绩,用C语言结构体数组实现...

\u8f93\u5165\u4e00\u4e2a\u6b63\u6574\u6570 n\uff0c\u518d\u8f93\u5165 n \u4e2a\u5b66\u751f\u7684\u4fe1\u606f\uff0c\u5305\u62ec\u5b66\u53f7\u59d3\u540d\u548c3\u95e8\u8bfe\u7a0b\u7684\u6210\u7ee9\uff0c\u8f93\u51fa\u603b\u5206\u6700\u9ad8\u5b66\u751f\u7684\u59d3\u540d\u548c\u603b\u5206

......... scanf("%d", &n); for(i=0;i<n;i++){ scanf("%d%s",&stu[i].number,stu[i].name);stu[i].sum = 0; //\u5148\u7ed9sum\u8d4b\u521d\u503c\uff0c\u5426\u5219\u5b83\u662f\u968f\u673a\u503c\uff0c\u5f71\u54cd\u7ed3\u679c for(j=0;j<3;j++){ scanf("%d",&stu[i].score[j]); stu[i].sum+=stu[i].score[j]; } } .......

\u4f60\u628a\u6570\u636e\u6539\u6539\u5c31\u53ef\u4ee5\u4e86\u4e66\u4e0a\u7684
#include
#define N 10
struct student
{
char num[6];
char name[8];
char sex[2]
float score[3];
float avr;
}
stu[N];
void main()
{int i,j,maxi;
float sum,max,average;
for(i=0;i<N;i++)
{printf("input scores of student %d:\n",i+1);
printf("No.:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
printf("sex:");
scanf("%s",stu[i].sex);
for(j=0;j<3;j++)
{printf("score %d:",j+1);
scanf("%f",&stu[i].score[j]);
}}
average=0;
max=0;
maxi=0;
for(i=0;i<N;i++)
{sum=0;
for(j=0;j<3;j++)
sum+=stu[i].score[j];
stu[i].avr=sum/3.0;
average+=stu[i].avr;
if(sum>max)
{max=sum;
maxi=i;
}}
average/=N;
printf("No. name sex score1 score2 score3 average\n");
for(i=0;i<N;i++)
{printf("%5s%10s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
printf("%9.2f",stu[i].score[i]);
printf(" %8.2f\n",stu[i].avr);
}
printf("average=%5.2f\n",average);
printf("The highest score is: student %s,%s.\n",stu[maxi].num,stu[maxi].name);
printf("His score are:%6.2f,%6.2f,%6.2f,average:%5.2f.\n",stu[maxi].score[0],stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr);
}

改好了,少了个头文件,malloc的定义不对2个错误;可以运行,内容对不对就要看你原来写的程序是不是正确的了,下面是改过后的程序
#include<stdio.h>
#include<malloc.h>
struct information
{
char name[21];
char number[21];
int grade[5];
int average;
int total;
};
typedef struct information INFORMATION;

main()
{
int n,i,k=0,p=0;
char ch=0;INFORMATION* Ptr=NULL;
printf("Please input the number of students:");//输入并读取学生数n
scanf("%d",&n);
fflush(stdin);
Ptr=(INFORMATION*)malloc(n*sizeof(INFORMATION));
if(Ptr!=NULL)//若分配内存成功
{
printf("Please input the information:\n") ;//输入学生信息
for(i=0;i<n;i++)//输入姓名(如 bill gates)
{
scanf("%c",&ch);
while(ch!='\n')
{
Ptr[i].name[p]=ch;
p++;
scanf("%c",&ch);
}
Ptr[i].name[p+1]=0;

scanf("%c",ch);//输入学号(含字母、数字)
while(ch!=13)
{
Ptr[i].number[k]=ch;
k++;
scanf("%c",&ch);
}
Ptr[i].number[k+1]=0;

for(k=0;k<5;k++)//输入五门课成绩
{
scanf("%d",&Ptr[i].grade[k]);
}
Ptr[i].total=Ptr[i].grade[0]+Ptr[i].grade[1]+Ptr[i].grade[2]+Ptr[i].grade[3]+Ptr[i].grade[4];
Ptr[i].average=Ptr[i].total/5;
}

printf("The students' information:\n");//打印学生信息
for(i=0;i<n;i++)
{
printf("%s\n",Ptr[i].name);
printf("%s\n",Ptr[i].number);
printf("%d %d %d %d %d\n",Ptr[i].grade[0],Ptr[i].grade[1],Ptr[i].grade[2],Ptr[i].grade[3],Ptr[i].grade[4]);
printf("average:%d total:%d\n\n\n",Ptr[i].average,Ptr[i].total);
}
}
else
{
printf("分配内存失败!");
}

//system("Pause");
return 0;
}

自己运行出来了!你试试。
1、“Ptr=malloc(n*sizeof(INFORMATION));”
2、" scanf("%c",ch);"
3、大循环内,k,p要初始化为零。
4、至于,我加的“getchar();”这是输入成绩后有个回车,不加的话,循环到下一个,“scanf("%c",&ch);”读的就是“\n”.
5、你要仔细注意下循环终止的位置。

#include<stdio.h>
#include<malloc.h>
#include<windows.h>
struct information
{
char name[21];
char number[21];
int grade[5];
int average;
int total;
};
typedef struct information INFORMATION;
main()
{
int n,i,k=0,p=0;
char ch=0;
INFORMATION* Ptr=NULL;
printf("Please input the number of students:");//输入并读取学生数n
scanf("%d",&n);
fflush(stdin);
Ptr=(INFORMATION*)malloc(n*sizeof(INFORMATION));
if(Ptr!=NULL)//若分配内存成功
{
printf("Please input the information:\n") ;//输入学生信息
for(i=0;i<n;i++)//输入姓名,回车结束(如 bill gates)
{
k=0,p=0;

printf("请输入第%i位学生姓名:\n",i+1);
scanf("%c",&ch);
while(ch!='\n')
{
Ptr[i].name[p]=ch;
p++;
scanf("%c",&ch);
}
Ptr[i].name[p]=0;

printf("请输入第%i位学生的学号:\n",i+1);
scanf("%c",&ch);//输入学号(若是4位学号)(含字母、数字)
while(k!=4)
{
Ptr[i].number[k]=ch;
k++;
scanf("%c",&ch);
}
Ptr[i].number[k]=0;

printf("请输入第%i位学生的五门成绩:\n",i+1);
for(k=0;k<5;k++)//输入五门课成绩
{
scanf("%d",&Ptr[i].grade[k]);
}
Ptr[i].total=Ptr[i].grade[0]+Ptr[i].grade[1]+Ptr[i].grade[2]+Ptr[i].grade[3]+Ptr[i].grade[4];
Ptr[i].average=Ptr[i].total/5;
getchar();
}
printf("The students' information:\n");//打印学生信息
for(i=0;i<n;i++)
{
printf("%s\n",Ptr[i].name);
printf("%s\n",Ptr[i].number);
printf("%d %d %d %d %d\n",Ptr[i].grade[0],Ptr[i].grade[1],Ptr[i].grade[2],Ptr[i].grade[3],Ptr[i].grade[4]);
printf("average:%d total:%d\n\n\n",Ptr[i].average,Ptr[i].total);
}
}
else
{
printf("分配内存失败!");
}
system("Pause");
return 0;
}

同上

扩展阅读:c++教程 ... c语言学生信息录入 ... c语言struct结构体数组 ... c语言结构体程序示例 ... c#面试题 ... c语言结构体学生成绩 ... 学生信息录入系统代码 ... c语言定义学生结构体 ... c语言定义一个学生结构体 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网