实验8结构体应用
实验8。结构体应用—-—10081 学生成绩统计(结构体)
1。【问题描述】用结构数组实现学生成绩统计各功能。?某班有N(N<=30)个学生,共开设5门课程,分别用三个函数实现如下功能:?⑴求第一门课程得平均分;
⑵找出有2门及2门以上不及格得学生,并输出其学号;
⑶找出平均成绩在90分及以上得学生,输出她们得学号。
【输入形式】第一行为一个整数N,表示本班共N个人,接下来得N行中每行包含一个学生得信息,包括学号(长度
小于11得字符串)、课程1成绩、课程2成绩、课程3成绩、课程4成绩、课程5成绩。成绩均为整数。?【输出形式】输出共三行:?第一行为本班第一门课程得平均成绩。(保留小数点后两位)
第二行为有2门及2门以上不及格得学生得学号,各学号之间用一个空格分隔。若不存在,则打印”no”、
第三行为平均成绩在90分及以上得学生得学号, 各学号之间用一个空格分隔、若不存在,则打印"no"。
?【样例输入】3
070002 93 95 90 88 92
0700019080 85 50 42?
070003 9892 84 90 91
【样例输出】93、67
070001?070002070003?【样例说明】本班有3个学生。?第1个学生学号为: 070001, 5门课程得成绩分别为: 90、80、85、50、42;?第2个学生学号为: 070002, 5门课程得成绩分别为:93、95、90、88、92;?第3个学生学号为: 070003, 5门课程得成绩分别为: 98、92、84、90、91。
本班第1门课程得平均成绩为: 93。67;有2门及2门以上不及格得学生得学号为: 070001;
平均成绩在90分及以上得学生得学号为: 070002、070003。?【评分标准】本题共2个测试点,每个测试点1、0分,共2。0分。
#include <stdio.h>
structstudent
{
char num[10];
intb[5];
}a[30];
int main()
{
voideverage(structstudent*p1,int m);
voidfailure(struct student*p2,int m);
void success(struct student*p3,int m);
int n,i;
scanf(”%d",&n);
for(i=0;i<n;i++)
scanf("%s%d%d%d%d%d”,a[i]、num,&a[i]、b[0],&a[i]。b[1],&a[i]。b[2],&a[i]。b[3],&a[i]。b[4]);
everage(a,n);
failure(a,n);
success(a,n);
return0;
}
voideverage(structstudent*p1,int m)
{
int i,sum=0;
float ever=0;
for(i=0;i〈m;i++)
sum+=p1[i]。b[0];
ever=1。0*sum/m;
printf(”%、2f\n",ever);
}
void failure(struct student *p2,int m)
{
int i,k,j,h=0;
for(i=0;i { k=0; for(j=0;j〈5;j++) if(p2[i]。b[j]<60) k++; if(k>=2) { printf("%s",a[i].num); h++; } } if(h==0) printf("no”); printf("\n”); } void success(struct student *p3,int m) { int i,j,h=0,sum=0; float everage; for(i=0;i〈m;i++) { everage=0; sum=0; for(j=0;j〈5;j++) sum+=p3[i]。b[j]; everage=1、0*sum/5; if(everage>=90) { printf(”%s ”,p3[i].num); h++; } } if(h==0) printf(”no”); printf("\n"); } 实验8。结构体应用---10082图书价格统计 2、【问题描述】用结构数组保存书得信息、现有N(N<50)本图书,每本图书包括书名(长度 小于30得字?符串)、出版社(长度小于15得字符串)、数量(整数)、单价(浮点数)信息,读入书?得信息并按单价由少到多得顺序输出各书得所有信息,然后输出购买这些书得总费用。?【输入形式】第一行为一个整数N,表示图书数量,接下来得N行中每行包含一本书得信息数据,各数?据之间由空格分隔。 【输出形式】输出前N行,为按单价排序得所有书得信息,第N+1行为购买这些书得总费用(保留到小 数点后两位)。 【样例输入】3 C—Programmingqinghu 50 25、50 DataStruct jixiegongye 30 31、55 OpratingSystem gaodengjiaoyu 60 18。30 【样例输出】OpratingSystem gaodengjiaoyu 60 18.30 ?C-Programming qinghu 50 25、5 0?DataStruct jixiegongye 3031。55 ?3319.50 【样例说明】(1)输入得所有书得信息用英文以及数字(不能就是汉字)表示。 ? (2)输出前N行得格式设定为:”%—30s%-20s%-10d%-.2f\n"、?【评分标准】本题共2个测试点,每个测试点1.0分,共2、0分。 #include<stdio。h〉 #include 〈string、h〉 struct book { char name[30]; char chu[15]; int count; floatprice; }a[50]; int main() { inti,j,k,n,h; char m[30]={’\0'},b[15]={'\0'}; float t,sum=0; scanf("%d",&n); for(i=0;i〈n;i++) scanf("%s%s%d%f",a[i]。name,a[i]、chu,&a[i]、count,&a[i]。price); for(i=0;i { k=i; for(j=i+1;j if(a[j]、price<a[k]、price) k=j; if(i!=k) { strcpy(m,a[i]、name); strcpy(a[i]、name,a[k].name); strcpy(a[k].name,m); strcpy(b,a[i]。chu); strcpy(a[i].chu,a[k]。chu);strcpy(a[k]、chu,b); h=a[i]、count; a[i]、count=a[k]。count; a[k]。c ount=h; t=a[i]。price; a[i]。price=a[k].price;a[k]、price=t; } } for(i=0;i<n;i++) printf("%-30s%-20s%-10d%-.2f\n”,a[i]。name,a[i]。chu,a[i]、count,a[i]。price); for(i=0;i〈n;i++) sum +=a[i]、price*a[i].count; printf("%.2f\n”,sum); return 0; }