一、实验内容
1、实验要求:定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
代码:
#include<stdio.h> #define N 100 void readscore(int score[],int n); void printscore(int score[],int n); double average(int score[],int n); int findmax(int score[],int n); int findmin(int score[],int n); int findmaxindex(int score[],int n); int findminindex(int score[],int n); int find(int score[],int n); int main() { int score[N]={0},n=0,i=0,n1,n2,n3; printf("输入人数: "); scanf("%d",&n); readscore(score,n); printscore(score,n); average(score,n); printf("平均数是:%.2f ",average(score,n)); findmax(score,n); printf("最高分是%d ",findmax(score,n)); n1=findmaxindex(score,n); printf("最高分数的学生为%d号 ",n1+1); findmin(score,n); printf("最低分是%d ",findmin(score,n)); n2=findminindex(score,n); printf("最低分数的学生为%d号 ",n2+1); n3=find(score,n); if(n3!=-1) { printf("%d号得到这个分数 ",n3); } else { printf("不存在这个成绩 "); } return 0; } void printscore(int score[],int n) { int i; printf("学生成绩是:"); for(i=0;i<n;i++) { printf("%5d",score[i]); } printf(" "); } void readscore(int score[],int n) { int i; for(i=0;i<n;i++) { printf("输入成绩: "); scanf("%d",&score[i]); } } double average(int score[],int n) { int sum=0,i; double average; for(i=0;i<n;i++) { sum=sum+score[i]; } average=(double)sum/n; return average; } int findmax(int score[],int n) { int i=0,max; max=score[0]; for(i=0;i<n;i++) { if(score[i]>max) { max=score[i]; } } return max; } int findmin(int score[],int n) { int i=0,min; min=score[0]; for(i=0;i<n;i++) { if(score[i]<min) { min=score[i]; } } return min; } int findmaxindex(int score[],int n) { int i=0,max,n1; max=score[0]; for(i=0;i<n;i++) { if(score[i]>max) { max=score[i]; n1=i; } } return n1; } int findminindex(int score[],int n) { int i=0,min,n2; min=score[0]; for(i=0;i<n;i++) { if(score[i]<min) { min=score[i]; n2=i; } } return n2; } int find(int score[],int n) { int i=0,n3=0,n4=0; printf("输入一个分数: "); scanf("%d",&n4); for(i=0;i<n;i++) { if(score[i]==n4) { n3=i+1; } } return n3; }
程序运行结果:
2、实验要求:定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
代码:
#include<stdio.h> int main() { int a[100],n=0,i; for(i=0;i<100;i++) { a[i]=i+1; } for(i=0;i<100;i++) { if(a[i]%3!=0&&a[i]%7!=0) { printf("%4d",a[i]); n++; if(n%10==0) { printf(" "); } } } printf("有%d个",n); return 0; }
程序运行结果:
附加题
2. 数字加密:输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。(使用数组)
代码:
#include<stdio.h> int main() { int shu[2],n,a,b,c,d; printf("请输入一个四位数: "); scanf("%d",&n); a=(n/1000+9)%10; b=(n%1000/100+9)%10; c=(n%100/10+9)%10; d=(n%10+9)%10; shu[0]=a*1000+b*100+c*10+d; shu[1]=a*10+c*1000+b+d*100; printf("%4d经过加9取余后得到新数字%04d,再经过两次换位后得到%04d",n,shu[0],shu[1]); return 0; }
程序运行结果:
二、实验总结:
1、注意换行时是在循环里面还是外面;
2、一般情况下,函数中不能有输入输出的语句;
3、主函数中注意后面函数的书写。
三、程序分析
程序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; }
最后a[0]与a[1]的值互换,void里完成交换,因为不需要输出,所以有awap(a),int[]可以由里面的数的变化表示相应的值。
程序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; }
x与y的值得交换代表a[0]于a[1]的交换,这里将a[]赋给了一个字母。