1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
#include<stdio.h> #define N 999 int putin(int fen[],int n); //输入 函数 double average(int fen[],int n); //平均数函数 int max(int fen[],int n); //最大值函数 int maxindex(int fen[],int n); //最大值下标函数 int min(int fen[],int n); //最小值函数 int minindex(int fen[],int n); //最小值下标函数 int search(int fen[],int i,int x); //查找函数 int sort(int fen[],int n); //排序函数 int main() { int fen[N],ge,zuida,zuixiao,a,b,c,i; double ping; printf("请输入一共有多少学生 "); scanf("%d",&ge); putin(fen,ge); ping=average(fen,ge); printf("平均分是%.2lf ",ping); zuida=max(fen,ge); a=maxindex(fen,ge); a=a+1; printf("最高分是%d,是第%d个同学 ",zuida,a); zuixiao=min(fen,ge); b=minindex(fen,ge); b=b+1; printf("最低分是%d,是第%d个同学 ",zuixiao,b); c=search(fen,ge,c); c=c+1; printf("这是第%d个学生 ",c); sort(fen,ge); printf("排序后的成绩为 "); for(i=0;i<ge;i=i+1) { printf("%4d",fen[i]); } return 0; } int putin(int fen[],int n) { int i; for(i=0;i<n;i=i+1) { printf("请输入成绩 "); scanf("%d",&fen[i]); } } double average(int fen[],int n) { int i,sum; sum=0; for(i=0;i<n;i=i+1) { sum=sum+fen[i]; } return (double)sum/n; } int max(int fen[],int n) { int i,max; max=fen[0]; for(i=0;i<n;i=i+1) { if(fen[i]>max) { max=fen[i]; } } return max; } int maxindex(int fen[],int n) { int i,a; a=0; for(i=0;i<n;i=i+1) { if(fen[i]>fen[a]) { a=i; } } return a; } int min(int fen[],int n) { int i,min; min=fen[0]; for(i=0;i<n;i=i+1) { if(fen[i]<min) { min=fen[i]; } } return min; } int minindex(int fen[],int n) { int i,a; a=0; for(i=0;i<n;i=i+1) { if(fen[i]<fen[a]) { a=i; } } return a; } int search(int fen[],int i,int x) { printf("请输入学生成绩 "); scanf("%d",&x); i=0; while(fen[i]>=0) { if(fen[i]==x) { return i; } i=i+1; } return -1; } int sort(int fen[],int n) { int i,j,k,t; for(i=0;i<n-1;i=i+1) { k=0; for(j=0;j<n-1;j=j+1) { if(fen[j]>fen[j+1]) { t=fen[j]; fen[j]=fen[j+1]; fen[j+1]=t; k=1; } } if(k==0) { break; } } }
2.定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
#include<stdio.h> #define N 100 int main() { int a[N]; int i,n; n=0; for(i=0;i<100;i=i+1) { a[i]=i+1; } for(i=0;i<100;i=i+1) { if(a[i]%3==0||a[i]%7==0) { a[i]=0; } } for(i=0;i<100;i=i+1) { if(a[i]!=0) { n=n+1; printf("%d ",a[i]); } } printf("还剩下%d个数 ",n); return 0; }
二、实验总结:
1.一般情况下,函数中不能有输入输出的语句。
2.各个函数之间一定要区分开,否则容易混淆。
3.冒泡排序就是重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
三、程序分析:
程序一中自定义函数里数组的改变导致实际数组的改变,程序二中swap函数将实参的值复制一份给了形参,形参的改变不会影响到实参的改变。