1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
#include<stdio.h> #include<stdlib.h> #define N 101 int x,index_query[N]={0},index_score[N]={0}; int imax(int score[]); int imin(int score[]); double average(int score[]); void input(int score[]); void output(int score[]); void query(int score[],int n); void bubblesort(int score[]); int main() { int score[N]={0}; char c; input(score); printf("计算完毕(输入Y继续) "); fflush(stdin); if((c=getchar())=='Y'||c=='y') { output(score); } } void input(int score[]) { int i; printf("本程序可处理100个以内的成绩统计问题,请输入成绩个数 "); scanf("%d",&x); printf("您共要输入%d个成绩,下面请输入:",x); for(i=0;i<x;i++) { scanf("%d",&score[i]); } } int imax(int score[]) { int i=0,max,ii=0; max=score[0]; for(i=1;i<x;i++) { if(score[i]>=max) { max=score[i]; } } query(score,max); return max; } int imin(int score[]) { int i=0,min,ii=0; min=score[0]; for(i=1;i<x;i++) { if(score[i]<=min) { min=score[i]; } } query(score,min); return min; } double average(int score[]) { int i,sum=0; double ave; for(i=0;i<x;i++) { sum+=score[i]; } ave=(double)sum/x; return ave; } void output(int score[]) { char c; int a,q,i,ii,max,min; double ave; while(1) { system("cls"); printf(" ***************** *1、成绩查询 * *2、显示最大成绩* *3、显示最小成绩* *4、显示平均成绩* *5、成绩单 * *****************"); fflush(stdin); if((c=getchar())=='1') { system("cls"); printf("请输入查询成绩: "); scanf("%d",&a); printf("您查询的成绩为: "); for(i=0;i<x;i++) { query(score,a); if(index_query[0]==0) { printf("无此成绩"); break; } else { if(index_query[i]==0) { printf("号 "); break; } printf("%d ",index_query[i]); } if(i==x-1) printf("号 "); } } else if(c=='2') { system("cls"); max=imax(score); printf("最大成绩为%d,为第",max); for(i=0;i<x;i++) { if(index_query[i]==0&&i!=0) { break; } printf(" %d ",index_query[i]); } printf("号 "); } else if(c=='3') { system("cls"); min=imin(score); printf("最小成绩为%d,为第",min); for(i=0;i<x;i++) { if(index_query[i]==0&&i!=0) { break; } printf(" %d ",index_query[i]); } printf("号 "); } else if(c=='4') { system("cls"); ave=average(score); printf("共有%d人,平均成绩为%.1lf ",x,ave); } else if(c=='5') { system("cls"); bubblesort(score); printf("学号 成绩 名次 "); for(i=0,ii=1;i<x;i++) { query(score,index_score[i]); if(index_score[i]==index_score[i-1]) { printf("%d",index_query[ii]); ii++; } else { printf("%d",index_query[0]); ii=1; } printf(" %d ",index_score[i]); printf("%d ",i+1); } } else { printf("选择错误 "); } printf("是否继续?(Y) "); fflush(stdin); if((c=getchar())=='Y'||c=='y') { continue; } else { printf("感谢使用!"); break; } } } void query(int score[],int n) { int i,ii=0,ia=0; for(i=0;i<x;i++) { index_query[i]=0; } for(i=0;i<x;i++) { if(score[i]==n) { index_query[ii]=i+1; ii++; ia=1; } if(ia=0) { for(ii=0;ii<x;ii++) { index_query[ii]=0; } } } } void bubblesort(int score[]) { int i,ii,a,flag; for(i=0;i<x;i++) { index_score[i]=score[i]; } for(i=0;i<x;i++) { flag=0; for(ii=0;ii<x-1-i;ii++) { if(index_score[ii]<index_score[ii+1]) { a=index_score[ii]; index_score[ii]=index_score[ii+1]; index_score[ii+1]=a; flag=1; } } if(flag==0) break; } }
2.定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
#include<stdio.h> #define N 100 int main() { int i,n=0,sum[N]; for(i=0;i<100;i=i+1) { sum[i]=i+1; } for(i=0;i<100;i=i+1) { if(sum[i]%3==0||sum[i]%7==0) { sum[i]=0; } } for(i=0;i<100;i++) { if(sum[i]!=0) { n++; printf("%d ",sum[i]); } } printf(" 还剩下%d个数 ",n); }
实验报告
1、自定义函数确实好用。
2、处于偷懒目的使用了全局变量和数组。(逃~)
3、时间不够没写附加题。(典型找打)
程序分析
关于两个程序,我个人的理解是,作为实参的变量可以说是一个相对固定的“个体”,而数组则是划定范围的“容器”,形参则是“地标”。作为容器来讲,内部的“个体(下标变量)”是可以被取走或改变的。