一:实验内容
1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
#include <stdio.h> #define N 100 void readscore(int score[],int n);//输入 double average(int score[],int n);//平均值 int findmaxindex(int score[],int n,int index[]);//最大值下标 int findminindex(int score[],int n,int index[]);//最小值下标 int findstudent(int score[],int n,int m);//查找函数 void order(int score[],int n);//排序 void printfscore(int score[],int n);//输出 int main() { int score[N]={0},n,m,i,sum,count1,count2,index[N]={0}; double ave; printf("input the number:\n"); scanf("%d",&n); readscore(score,n); ave=average(score,n); printf("平均分为%.2f\n",ave); count1=findmaxindex(score,n,index); for(i=0;i<count1;i++) { printf("最高分=%d,是第%d个同学",score[index[i]],index[i]+1); } count2=findminindex(score,n,index); for(i=0;i<count2;i++) { printf("最低分=%d,是第%d个同学",score[index[i]],index[i]+1); } printf("输入你想查询的学生的成绩\n"); scanf("%d",&m); findstudent(score,n,m); printf("排序后的数为:\n"); order(score,n); printfscore(score,n); return 0; } void readscore(int score[],int n)//输入函数 { int i; printf("请输入考试成绩:\n"); for(i=0;i<n;i++) { scanf("%d",&score[i]); } } double average(int score[],int n)//求平均值 { int i,sum=0; for(i=0;i<n;i++) { sum=sum+score[i]; } return (double)sum/n; } int findmaxindex(int score[],int n,int index[])//最大值下标 { int i,max,count1; max=score[0]; count1=0; for(i=0;i<n;i++) { if(score[i]==max) { index[count1++]=i; } else if(score[i]>max) { max=score[i]; count1=0; index[count1++]=i; } } return count1; } int findminindex(int score[],int n,int index[])//最小值下标 { int i,min,count2; min=score[0]; count2=0; for(i=0;i<n;i++) { if(score[i]==min) { index[count2++]=i; } else if(score[i]<min) { min=score[i]; count2=0; index[count2++]=i; } } return count2; } int findstudent(int score[],int n,int m)//查找 { int i,y=0; for(i=0;i<n;i++) { if(score[i]==m) { y=i+1; printf("您所查询学生的是第%d名输入的成绩。\n",y); } } if(y==0) { printf("您所查询学生的考试成绩不存在。\n"); } } void order(int score[],int n)//排序 { int i,j,temp; for(i=0;i<n-1;i++) { for(j=0;j<n-1-i;j++) { if (score[j]>score[j+1]) { temp=score[j]; score[j]=score[j+1]; score[j+1]=temp; } } } } void printfscore(int score[],int n)//输出 { int i; for(i=0;i<n;i++) { printf("%5d",score[i]); } }
2.定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
#include <stdio.h> #define N 100 int main() { int a[100]={0},i,n=0; for(i=0;i<100;i++) { a[i]=i+1; if(a[i]%3==0||a[i]%7==0) { a[i]=0; continue; } else { printf("%5d",a[i]); n++; if(n%10==0) { printf("\n"); } } } printf("一共剩下%d个数字",n); return 0; }
二:实验总结
1:不要忘记函数的输出
2:注意函数的赋初值问题
3:注意先声明变量在使用变量
4:注意int 和void的区别
三:程序分析
程序1
#include <stdio.h> void swap(int x[]); int main() { int a[2]={1,2}; swap(a); printf("a[0]=%d\na[1]=%d\n",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\na[1]=%d\n",a[0],a[1]); return 0; } void swap(int x,int y) { int z; z=x; x=y; y=z; }
程序一运行结果
程序二运行结果
分析:程序一交换的是数组,程序二交换的是元素导致两程序运行结果不同,从程序一看出输入但是数组,后面的数组x[1]和x[0]可以直接进行交换,而程序二输入的依然是数组,实参的值给了形参,由于实参和形参占用不同的内存单元,形参的改变不会影响实参。
时间: 2024-11-01 21:49:18