1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
# include <stdio.h> # define N 100 void scan(int score[],int n);//输入数据 int average(int score[],int n);//平均数 int maxindex(int score[],int n,int a[]);//最大值下标 int minindex(int score[],int n,int a[]);//最小值下标 void search(int score[],int n);//查找 void sort(int score[],int n);//排序 void print(int score[],int n);//输出 int main() { int i,a[N]={0},c[N]={0},d,score[N],n,max1,min1,maxindex1,minindex1; double ave; printf(" 输入人数: "); scanf("%d",&n); printf(" 输入成绩: "); scan(score,n); ave=average(score,n); maxindex1=maxindex(score,n,a); max1=score[a[0]-1]; minindex1=minindex(score,n,c); min1=score[c[0]-1]; printf("平均数%.2f ",ave); printf("最大值是%d ",max1); for(i=0;i<=maxindex1;i++) { if(a[i]>0) { printf("第%d个 ",a[i]); } } printf("最小值是%d ",min1); for(i=0;i<=minindex1;i++) { if(c[i]>0) { printf("第%d个 ",c[i]); } } printf(" "); search(score,n); printf(" "); sort(score,n); print(score,n); return 0; } void scan(int score[],int n) { int i; for(i=0;i<n;i++) { scanf("%d",&score[i]); } } int average(int score[],int n) { int sum,i; sum=0; for(i=0;i<n;i++) { sum+=score[i]; } return (double)sum/n; } int maxindex(int score[],int n,int a[]) { int i,j,b; b=score[0]; j=0; for(i=1;i<n;i++) { if(b<score[i]) { b=score[i]; } } for(i=0;i<n;i++) { if(b==score[i]) { a[j]=i+1; j++; } } return j-1; } int minindex(int score[],int n,int a[]) { int i,j,b; b=score[0]; j=0; for(i=1;i<n;i++) { if(b>score[i]) { b=score[i]; } } for(i=0;i<n;i++) { if(b==score[i]) { a[j]=i+1; j++; } } return j-1; } void search(int score[],int n) { int i,a,flag; flag=0; printf("输入要查找的数据: "); scanf("%d",&a); for(i=0;i<n;i++) { if(a==score[i]) { printf("第%d个 ",i+1); flag=1; } } if(flag==0) { printf("查询的成绩不存在 ") ; } } void sort(int score[],int n) { int a,i,j,x,flag; for(i=0;i<n;i++) { flag=0; for(j=0;j<n-1;j++) { if(score[j]<score[j+1]) { a=score[j]; score[j]=score[j+1]; score[j+1]=a; } else { flag=1; } } if(flag==0) { break; } } } void print(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> int main() { int i,a=0; for(i=1;i<=100;i++) { if((i%3!=0)&&(i%7!=0)) { printf(" %3d",i); a++; } if(a%10==0) { printf(" "); } } printf(" 一共%d个",a); return 0; }
二.知识点总结 1.数组作为函数的参数,不能在[]中给出数组的大小,必须用另一个参数来传入数组的大小 2.不要求数据表是已排好序的,从线性数据表中的第一个或最后一个记录开始寻找 3.依次记录的关键字与查找关键字进行比较
三.程序分析 1.二者结果相反 2,原因:简单变量做参数,实现的是值的单向传递,即只能把实参的值传给形参,由于实参和形参占用不同的内存单元,形参的改变不会影响实参。数组做函数参数,是将实参数组的地址传给形参数组,实参和形参占用的是相同的内存空间。