一。实验内容
1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
#include <stdio.h> #define N 100 void scan(int score[],int n); //输入函数 int average(int score[],int n);//平均函数 int maxscore(int score[],int n);//最大值 int maxindex(int score[],int n);//最大值下标 int minscore(int score[],int n);//最小值 int minindex(int score[],int n);//最小值下标 int search(int num[],int n,int x);//查询 void bubblesort(int score[],int n);//升序 void printscore(int score[],int n); //输出函数 int main() { int score[N],n,max,max1,min,min1,m,x; double ave; printf("请输入成绩个数 "); scanf("%d",&n); scan(score,n); ave=average(score,n); printf("平均数是%.2f ",ave); max=maxscore(score,n); printf("最大值是%d ",max); max1=maxindex(score,n)+1; printf("最大值下标为%d ",max1); min=minscore(score,n); printf("最小值是%d ",min); min1=minindex(score,n)+1; printf("最小值下标为%d ",min1); printf("请输入一个成绩 "); scanf("%d",&x); m=search(score,n,x)+1; printf("该学生的下标为%d ",m); bubblesort(score,n); printscore(score,n); return 0; } void scan(int score[],int n) //输入函数 { int i; printf("请输入成绩 "); for(i=0;i<n;i++) { scanf("%d",&score[i]); } } int average(int score[],int n)//平均值 { int sum,i; sum=0; for(i=0;i<n;i++) { sum=sum+score[i]; } return(double)sum/n; } int maxscore(int score[],int n)//最大值 { int max,i; max=score[0]; for(i=0;i<n;i++) { if(max<score[i]) { max=score[i]; } } return max; } int maxindex(int score[],int n)//最大值下标 { int i,maxdex=0; for(i=1;i<n;i++) { if(score[i]>score[maxdex]) { maxdex=i; } } return maxdex; } int minscore(int score[],int n)//最小值 { int min,i; min=score[0]; for(i=0;i<n;i++) { if(min>score[i]) { min=score[i]; } } return min; } int minindex(int score[],int n)//最小值下标 { int i,mindex=0; for(i=1;i<n;i++) { if(score[i]<score[mindex]) { mindex=i; } } return mindex; } int search(int num[],int n,int x)//查询 { int i; for(i=0;i<n;n++) { if(num[i]==x) { return i; } } return -1; } void bubblesort(int score[],int n)//升序 { int i,j,t,flag; for(i=0;i<n;i++) { flag=0; for(j=0;j<n-1;j++) { if(score[j]>score[j+1]) { t=score[j]; score[j]=score[j+1]; score[j+1]=t; flag=1; } } if(flag==0) { break; } } } void printscore(int score[],int n)//输出函数 { int i; for(i=0;i<n;i++) { printf("%5d",score[i]); } printf(" "); }
2.定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
#include <stdio.h> #define N 100 int main() { int num[N],i,x=0,n=0; for(i=0;i<N;i++) { x++; num[i]=x; if(num[i]%3==0||num[i]%7==0) { num[i]=0; } } for(i=0;i<N;i++) { if(num[i]!=0) { printf("%5d",num[i]); n++; } } printf(" "); printf("一共有%d个数 ",n); return 0; }
二.实验总结
1.第一题应该写一个主函数 然后对应写子函数,最好加注释看着清晰,容易出错
2.注意平均数得强行转换为double
3.double类型输入的时候必须用%lf,输出可以用%lf或%f,不能用%d
三.实验分析
程序1
#include <stdio.h> void swap(int x[]); int main() { int a[2]={1,2}; swap(a); printf("a[0]=%d a[1]=%d ",a[0],a[1]); return 0; } void swap(int x[]) { int z; z=x[0]; x[0]=x[1]; x[1]=z; }
程序2
#include <stdio.h> void swap(int x,int y); int main() { int a[2]={1,2}; swap(a[0],a[1]); printf("a[0]=%d a[1]=%d ",a[0],a[1]); return 0; } void swap(int x,int y) { int z; z=x; x=y; y=z; }
分析:程序一 值传递,将实参的变量值传递给形参
程序二 地址传递,将实参的地址传递给形参