第九次作业
1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
#include<stdio.h> #define N 1000 void grade(int score[],int n); //输入函数 int average(int score[],int n); //平均值 int max(int score[],int n); //最大值 int maxindex(int score[],int n); //最大下标 int min(int score[],int n); //最小值 int minindex(int score[],int n); //最小下标 int find(int score[],int x,int n); //查询 void paixu(int score[],int n); //排序 void printscore(int score[],int n); //输出函数 int main() { int score[N],n,max1,maxdex,min1,mindex,m,x; double ave; printf("请输入一共多少人\n"); scanf("%d",&n); grade(score,n); ave=average(score,n); max1=max(score,n); maxdex=maxindex(score,n); min1=min(score,n); mindex=minindex(score,n); printf("平均数是%.2f\n最大值为%d\n最大下标为%d\n最小值为%d\n最小下标为%d\n",ave,max1,maxdex,min1,mindex); printf("请输入你要查找的学生的成绩\n"); scanf("%d",&x); m=find(score,x,n); printf("该学生下标为%d\n",m); paixu(score,n); printscore(score,n); return 0; } void grade(int score[],int n) //输入函数 { int i; printf("请输入成绩\n"); for(i=0;i<n;i++) { scanf("%d",&score[i]); } } int average(int score[],int n) //平均值 { int i; double sum; sum=0; for(i=0;i<n;i++) { sum=sum+score[i]; } return (double)sum/n; } int max(int score[],int n) //最大值 { int i,max1; max1=score[0]; for(i=0;i<n;i++) { if(score[i]>max1) { max1=score[i]; } } return max1; } int maxindex(int score[],int n) //最大下标 { int i,maxdex; maxdex=0; for(i=1;i<n;i++) { if(score[i]>score[maxdex]) { maxdex=i; } } return maxdex; } int min(int score[],int n) //最小值 { int i,min1; min1=score[0]; for(i=0;i<n;i++) { if(score[i]<min1) { min1=score[i]; } } return min1; } int minindex(int score[],int n) //最小下标 { int i,mindex; mindex=0; for(i=1;i<n;i++) { if(score[i]<score[mindex]) { mindex=i; } } return mindex; } int find(int score[],int x,int n) //查询 { int i; for(i=0;i<n;i++) { if(score[i]==x) { return i; } } return -1; } void paixu(int score[],int n) //排序 { int i,temp,w,flag; for(i=0;i<n;i++) { flag=0; for(w=0;w<n-1;w++) { if(score[w]>score[w+1]) { temp=score[w]; score[w]=score[w+1]; score[w+1]=temp; } } if(flag==0) { break; } } } void printscore(int score[],int n) //输出函数 { int i; for(i=0;i<n;i++) { printf("%5d",score[i]); } printf("\n"); }
2.定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
#include<stdio.h> #define N 100 int main() { int num[N],i,n=0; for(i=0;i<100;i++) { num[i]=i+1; } for(i=0;i<100;i++) { if(num[i]%3==0||num[i]%7==0) { num[i]=0; } } for(i=0;i<100;i++) { if(num[i]!=0) { n=n+1; printf("%d ",num[i]); } } printf("还有%d个",n); return 0; }
实验分析:
程序一两个数就交换了,程序二没有
简单变量做参数,实现的是值的单向传递,不会影响实参的值,数组做函数参数,是将实参数组的地址传给形参数组。
实验总结:
1.不能越界
2.你想输出啥,就返回啥,返回用int,不返回用void
3.下表从0开始
4.好好学c语言