1.
实验要求:定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
实验代码:
#include<stdio.h> #define N 100 void student(int score[],int n); double average(int score[],int n); int findmax(int score[],int n); int findmin(int score[],int n); int findmaxinder(int score[],int n,int max); int findmininder(int score[],int n,int min); int findstudent(int score[],int n,int x); void order(int score[],int n); void grade(int score[],int n); int main() { int score[N]={0},n,x,i,max,min; double ave; printf("请输入学生的数量。 "); scanf("%d",&n); student(score,n); ave=average(score,n); printf("考试成绩的平均分为%.2f。 ",ave); printf("请输入您所查询学生的考试成绩: "); scanf("%d",&x); findstudent(score,n,x); max=findmax(score,n); min=findmin(score,n); findmaxinder(score,n,max); findmininder(score,n,min); printf("成绩从小到大排序是:"); order(score,n); grade(score,n); return 0; } void student(int score[],int n) { int i; printf("请输入考试成绩: "); 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 findmax(int score[],int n) { int i,a; a=score[0]; for(i=1;i<n;i++) { if(score[i]>a) { a=score[i]; } } return a; } int findmin(int score[],int n) { int i,a; a=score[0]; for(i=1;i<n;i++) { if(score[i]<a) { a=score[i]; } } return a; } int findmaxinder(int score[],int n,int max) { int i,a; for(i=0;i<n;i++) { if(score[i]==max) { a=i+1; printf("成绩最高是%d分,是第%d名同学。 ",max,a); } } } int findmininder(int score[],int n,int min) { int i,a; for(i=0;i<n;i++) { if(score[i]==min) { a=i+1; printf("成绩最低是%d分,是第%d名同学。 ",min,a); } } } int findstudent(int score[],int n,int x) { int i,y=0; for(i=0;i<n;i++) { if(score[i]==x) { y=i+1; printf("您所查询学生的是第%d名输入的成绩。 ",y); } } if(y==0) { printf("您所查询学生的考试成绩不存在。 "); } } 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 grade(int score[],int n) { int i; for(i=0;i<n;i++) { printf("%d ",score[i]); } }
实验截图:
2.
实验要求:定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
实验代码:
#include<stdio.h> #define N 100int main() { int sum[100]={0},i,j=1,n=0,m=0,x=0,y; for(i=0;i<100;i++) { sum[i]=j; j++; } for(i=0;i<100;i++) { m=sum[i]%3; n=sum[i]%7; if(m==0||n==0) { sum[i]=0; } } for(i=0;i<100;i++) { if(sum[i]==0) { continue; } else { printf(" %03d",sum[i]); x++; y++; } if(y%10==0) { printf(" "); } } printf(" 一共有%d个数字。 ",x); return 0; }
实验截图:
附加题
1.
实验要求:将数组a中的10个元素后移m位,移出的m位顺序存放在数组的 前m位。要求:(1)数组值在程序中初始化(2)m从键盘输入。
实验代码:
#include<stdio.h> #include<stdlib.h> #define N 100 int main() { int m,n,sum[N]={0},i,j=1,temp; printf("请输入数组元素的个数。 "); scanf("%d",&n); printf("请输入你所要移动的位数。 "); scanf("%d",&m); if(m>n) { printf("输入错误。 "); exit(0); } for(i=0;i<n;i++) { sum[i]=j; j++; } for(j=1;j<=m;j++) { temp=sum[n-1]; for(i=n-1;i>0;i--) { sum[i]=sum[i-1]; } sum[0]=temp; } for(i=0;i<n;i++) { printf(" %02d",sum[i]); } return 0; }
实验截图:
2.
实验要求:数字加密:输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。
实验代码:
#include<stdio.h> #include<stdlib.h> #define N 4 int main() { int x,y=0,sum[4],a,b,i,c,temp; printf("请输入一个四位数,进行加密。 "); scanf("%d",&x); if(x>9999||x<1000) { printf("您输入有错,请重新输入。"); exit(0); } for(i=0;i<4;i++) { b=x; a=(b%10+9)%10; sum[i]=a; x=b/10; } for(i=3;i>=2;i--) { temp=sum[i]; sum[i]=sum[i-2]; sum[i-2]=temp; } for(i=3;i>=0;i--) { c=sum[i]; y=c+10*y; } printf("经过加密后为:%d ",y); return 0; }
实验截图:
实验结论:
1.注意返回值用int,不用返回值用void。
2.注意不要出现数组的越界。
3.注意随机变量的改变,函数不要只能运行一次。
4.注意函数输入时要注意带入的是数组,而不是元素。
5.注意函数的赋初值问题。
6.注意程序的优化以及验证函数的合法性,符号是否注意全角半角。
程序分析:
第一个程序
a[0]=2
a[1]=1
第一个程序的换数是数组内元素的代换,也就是函数里是数组代换,因为输入的也是数组,所以数组x[0]与x[1]可以进行交换。
第二个程序
a[0]=1
a[1]=2
第二个程序的换数是元素与元素的代换,也就是实参的代换,而输入的是数组,所以x,y并没有赋予数值。所以直接进行的是输出。
因为程序的实参和形参的定义不同,所以两个程序的运行结果不同。