一 实验内容
1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
#include <stdio.h> void readgrade(int grade[],int n); //读取人数 void ave(int grade[],int n); //求平均分 void maxgrade(int grade[],int n); //求最高分 void mingrade(int grade[],int n); //求最低分 void findgrade(int grade[],int find,int n); //查询成绩 void sort(int grade[],int n); //排序 void printgrade(int grade[],int n); //输出函数 #define N 100 int main() { int grade[N],sum=0,n,i,max,min,find,m; printf("请输入需要统计的学生个数:"); scanf("%d",&n); readgrade(grade,n); ave(grade,n); maxgrade(grade,n); mingrade(grade,n); printf("请输入你要查询的成绩:"); scanf("%d",&find); findgrade(grade,find,n); sort(grade,n); printgrade(grade,n); return 0; } void readgrade(int grade[],int n) //读取人数 { int i; for(i=0;i<n;i++) { printf("请输入第%d名同学的成绩:",i+1); scanf("%d",&grade[i]); } } void ave(int grade[],int n) //求平均分 { int sum=0,i; double average; for(i=0;i<n;i++) { sum=sum+grade[i]; } average=(double)sum/n; printf("平均分为%.3f分 ",average); } void maxgrade(int grade[],int n) //求最高分 { int max=grade[0],i; for(i=1;i<n;i++) { if(grade[i]>=max) { max=grade[i]; } } for(i=0;i<n;i++) { if(grade[i]==max) {printf("第%d名",i+1);} } printf("同学获得最高分,分数为%d分 ",max); } void mingrade(int grade[],int n) //求最低分 { int i,min; min=grade[0]; for(i=0;i<n;i++) { if(grade[i]<=min) { min=grade[i]; } } for(i=0;i<n;i++) { if(grade[i]==min) {printf("第%d名",i+1);} } printf("同学获得最低分,分数为%d分 ",min); } void findgrade(int grade[],int find,int n) //查询成绩 { int i; for(i=0;i<n;i++) { if(grade[i]==find) { printf("第%d名",i+1); n++; } } if(n==0) { printf("未找到符合条件的同学 "); } else { printf("同学获得了%d分 ",find); } } void sort(int grade[],int n) //排序 { int x,y,i; for(x=0;x<n-1;x++) { for(y=0;y<n-x-1;y++) { if(grade[y+1]>grade[y]) { i=grade[y]; grade[y]=grade[y+1]; grade[y+1]=i; } } } } void printgrade(int grade[],int n) //输出函数 { int i; for(i=0;i<n;i++) printf("%5d",grade[i]); }
2.定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
#include <stdio.h> int main() { int i,m,n,x,number[100]; for(i=0;i<100;i++) { number[i]=i+1; } for(i=0;i<100;i++) { if(number[i]%3==0||number[i]%7==0) { number[i]=0; } } x=0; for(i=0;i<100;i++) { if(number[i]==0) continue; printf("%5d",number[i]); x++; if(x%10==0) printf(" "); } printf("共有%d个数",x-1); return 0; }
附加题
1.将数组a中的10个元素后移m位,移出的m位顺序存放在数组的 前m位。要求:(1)数组值在程序中初始化(2)m从键盘输入。
#include <stdio.h> int main() { int i,m,n,x,number[10]={1,2,3,4,5,6,7,8,9,10}; printf("原数组为:1,2,3,4,5,6,7,8,9,10 "); printf("请输入要移动数组的位数:"); scanf("%d",&m); if(m<0) printf("输入数据有误"); for(i=0;i<m;i++) { n=number[9]; for(x=9;x>0;x--) { number[x]=number[x-1]; } number[0]=n; } printf("新的数组为:"); for(i=0;i<10;i++) { printf("% d",number[i]); } return 0; }
2. 数字加密:输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。
#include <stdio.h> int main() { int number[4],n,m,i; printf("请输入一个四位数:"); scanf("%d",&n); if(n<1000&&n>9999) { printf("未按要求输入数据,请重新输入"); scanf("%d",&n); } number[0]=n/1000; number[1]=n%1000/100; number[2]=n%100/10; number[3]=n%10; for(i=0;i<4;i++) { number[i]=(number[i]+9)%10; } m=number[2]; number[2]=number[0]; number[0]=m; m=number[3]; number[3]=number[1]; number[1]=m; for(i=0;i<4;i++) { printf("%d",number[i]); } return 0; }
二、实验总结(实验中遇到的问题及解决方法)
1数组的第一个数是 ...[0]而不是...[1]
2注意分清数据类型,有必要时要进行强制数据转换
3函数没有返回值时,用void定义函数
4编写程序时要尽可能考虑到可能出现的各种情况
5循环中用countinue代表结束本次循环,break代表跳出循环
三、程序分析
造成差异的原因在于简单变量作为函数变量时,形参的变化并不会影响到实参 而数组作为函数变量时,作为形参的数组的变化会影响到原来作为实参的数组