1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
#include<stdio.h>
#define N 100
void readScore(int score[],int n);//输入函数
double average(int score[],int n);//求平均值
int findMax(int score[],int n);// 最大值
void findMaxIndex1(int score[],int n);//最大值是第几个
int findMin(int score[],int n);//最小值
void findMinIndex2(int score[],int n); //最小值是第几个
void findScoreIndex(int score[],int n);//输入一个成绩 ,是第几个人
void bubbleSort(int score[],int n);//排序
void printfScore(int score[],int n);//输出
int main()
{
max=findMax(score,n);
printf("max=%d
",max);
findMaxIndex1(score,n);
printf("是最高分
");
min=findMin(score,n);
printf("min=%d
",min);
findMinIndex2(score,n);
printf("是最低分
");
findScoreIndex(score,n);
bubbleSort(score,n);
printfScore(score,n);
return 0;
}
void readScore(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;
sum=0;
for(i=0;i<n;i++)
{
sum=sum+score[i];
}
return (double)sum/n;
}
int findMax(int score[],int n)
{
int max,i;
max=score[0];
for(i=0;i<n;i++)
{
if(score[i]>=max)
{
max=score[i];
}
}
return max;
}
void findMaxIndex1(int score[],int n)
{
int i,max;
max=findMax(score,n);
for(i=0;i<n;i++)
{
if(score[i]==max)
{
printf("第%d个
",i+1);
}
}
}
int findMin(int score[],int n)
{
int min,i;
min=score[0];
for(i=0;i<n;i++)
{
if(score[i]<=min)
{
min=score[i];
}
}
return min;
}
void findMinIndex2(int score[],int n)
{
int i,min;
min=findMin(score,n);
for(i=0;i<n;i++)
{
if(score[i]==min)
{
printf("第%d个
",i+1);
}
}
}
void findScoreIndex(int score[],int n)
{
int i,grade;
printf("输入要找的成绩");
scanf("%d",&grade);
for(i=0;i<n;i++)
{
if(grade==score[i])
{
printf("index=%d
",i+1);
}
}
}
void bubbleSort(int score[],int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(score[j]>score[j+1])
{
t=score[j];
score[j]=score[j+1];
score[j+1]=t;
}
}
}
}
void printfScore(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> #define N 100 int main() { int num[N]={0},i,a=0; for(i=0;i<N;i++) { num[i]=i+1; } for(i=0;i<N;i++) { if(num[i]%3==0||num[i]%7==0) { num[i]=0; } } for(i=0;i<N;i++) { if(num[i]!=0) { printf("%3d ",num[i]); a++; if(a%10==0) { printf(" "); } } } printf("输出%d个数",a); return 0; }
二、实验总结
1、第一题应该写一个主函数紧接着写子函数,别一下子把主函数写完。
2、返回值应该放在循环外面。
3、for语句中表达式要用;分开。
4double类型输出应该用%lf而不能用%d。
三、
程序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中只是把实参的值传给了形参