一、实验内容
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);//最小值 void findMaxIndex(int score[],int n,int max);//最大值下标 void findMinIndex(int score[],int n,int min);//最小值下标 void findgrade(int score[],int n);//成绩查找 void bubbleSort(int score[],int n);//降序 int main() { int score[N]={0},index[N]={0},n,max,min,i=0; double ave; printf("请输入学生人数 "); scanf("%d",&n); readScore(score,n); printScore(score,n); ave=average(score,n); printf("平均值为%.2f ",ave); max=findMax(score,n); min=findMin(score,n); printf("最高分为%d 最低分为%d ",max,min); findMaxIndex(score,n,max); findMinIndex(score,n,min); findgrade(score,n); printf("成绩从高到低排序为 "); bubbleSort(score,n); return 0; } void readScore(int score[],int n) { int i=0; printf("请输入成绩 "); for(i=0;i<n;i++) { scanf("%d",&score[i]); } } void printScore(int score[],int n) { int i; for(i=0;i<n;i++) { printf("%5d",score[i]); } printf(" "); } double average(int score[],int n) { int i,sum; sum=0; for(i=0;i<n;i++) { sum+=score[i]; } return (double)sum/n; } int findMax(int score[],int n) { int i,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,min; min=score[0]; for(i=0;i<n;i++) { if(score[i]<min) { min=score[i]; } } return min; } void findMaxIndex(int score[],int n,int max) { int i,count; count=0; for(i=0;i<n;i++) { if(score[i]==max) { count=i+1; printf("最高分是第%d个人 ",count); } } } void findMinIndex(int score[],int n,int min) { int i,count; count=0; for(i=0;i<n;i++) { if(score[i]==min) { count=i+1; printf("最低分是第%d个人 ",count); } } } void findgrade(int score[],int n) { int i=0,x,s; printf("请输入要查询的成绩"); scanf("%d",&x); s=0; for(i=0;i<n;i++) { if(score[i]==x) { s++; printf("第%d个人,共%d个 ",i+1,s); continue; } else { printf("无符合条件的人 "); break; } } } void bubbleSort(int score[],int n) { int i,j,temp;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(score[j]<score[j+1])
{
temp=score[j];
score[j]=score[j+1];
score[j+1]=temp;
}
} }
程序运行结果截图
2.实验要求
定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
代码
#include<stdio.h> #define N 100 int main() { int i,a[100],j,n=0; //int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70.71.72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100}; for(i=0;i<100;i++) { a[i]=i+1; } for(i=0;i<N;i++) { if(a[i]%3==0||a[i]%7==0) { a[i]=0; n++; } } printf("共剩余%d个 ",N-n); for(i=0;i<N;i++) { if(a[i]==0) { continue; } else { printf("%5d",a[i]); } } return 0; }
程序运行结果截图
附加题
1.实验要求
将数组a中的10个元素后移m位,移出的m位顺序存放在数组的 前m位。要求:(1)数组值在程序中初始化(2)m从键盘输入。
代码
#include<stdio.h> #define N 10 int main() { int i,m,j,t; int a[N]={0}; //数组初始化 for(i=0;i<N;i++) { a[i]=i+1; printf(" %d ",a[i]); } printf(" 请输入m得值 "); scanf("%d",&m); for(j=0;j<m;j++)//移动m次 { t=a[9]; for(i=N-1;i>0;i--)//移动1位 { a[i]=a[i-1]; } a[0]=t; } for(i=0;i<N;i++) { printf(" %d",a[i]); } return 0; }
程序运行结果截图
2. 实验要求
数字加密:输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。(使用数组)
代码
#include<stdio.h> int main() { int n,i,a,b,c,d,t; int num[4]={0}; printf("请输入一个四位整数 "); scanf("%d",&n); if(n>9999||n<1000) { printf("数据错误 "); } else { a=(n/1000+9)%10; b=(n%1000/100+9)%10; c=(n%100/10+9)%10; d=(n%10+9)%10; t=a; a=c; c=t; t=b; b=d; d=t; num[0]=a; num[1]=b; num[2]=c; num[3]=d; for(i=0;i<4;i++) { printf("%d",num[i]); } } return 0; }
程序运行结果截图
二、实验总结
1.实验2中数组的初始化为什么不能把所有元素写出来
2.double类型变量输出时用%lf不是%d
3.冒泡法排序时,n个数比较n-1趟,每趟比较n-i次。用外层函数表示趟,内层表示次
4.有数组必有循环,循环过程中要注意数组的越界问题
向函数传递数组:数组作为函数参数时,不能再【】中给出数组的大小,必须用另一个参数来传入数组的大小
三、程序分析
程序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; }
程序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; }
程序1和程序2中swap函数的实参不同,程序1中数组元素的地址做函数的参数,实参和形参数组元素实现互相传递
程序2 中的实参只是调用了数组元素,形参执行被调函数实参变量值不能变化。