第九次作业
一.实验内容
1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)
1.1 代码:
#include <stdio.h>
#define N 100
int readscore(int score[],int n);
int printscore(int score[],int n);
double average(int score[],int n);
int findmin(int score[],int n);
void findminlndex(int score[],int n);
int findmax(int score[],int n);
void findmaxlndex(int score[],int n);
void findscore(int score[],int n);
void bubblesort(int score[],int n);
int main ()
{
int score[N]={0},n,max,min;
double average1;
printf("请输入学生数量");
scanf("%d",&n);
readscore(score,n);
bubblesort(score,n);
average1=average(score,n);
printf("这%d名学生的平均成绩为%.2lf\n",n,average1);
max=findmax(score,n);
min=findmin(score,n);
printf("这些学生成绩中的最高分是%d,最低分是%d\n",max,min);
findmaxlndex(score,n);
findminlndex(score,n);
findscore(score,n);
return 0;
}
int readscore(int score[],int n)
{
int i;
printf("请输入分数\n");
for(i=0;i<n;i++)
{
scanf("%d",&score[i]);
}
return i;
}
void bubblesort(int score[],int n)
{
int i,j,k,l;
for(i=0;i<n-1;i++)
{
l=0;
for(j=0;j<n-i-1;j++)
{
if(score[j]>score[j+1])
{
k=score[j];
score[j]=score[j+1];
score[j+1]=k;
l=1;
}
}
if(l==0)
{
break;
}
}
for(i=0;i<n;i++)
{
printf("%d号的学生成绩:%d\n",i+1,score[i]);
}
}
double average(int score[],int n)
{
int i,sum=0;
for(i=0;i<n;i++)
{
sum+=score[i];
}
return (double)sum/n;
}
int findmin(int score[],int n)
{
int i,min=score[0];
for(i=1;i<n;i++)
{
if(score[i]<min)
{
min=score[i];
}
}
return min;
}
void findminlndex(int score[],int n)
{
int i,min;
min=findmin(score,n);
printf("得最低分的同学有:\n");
for(i=0;i<n;i++)
{
if(score[i]==min)
{
printf("第%d名学生 ",i+1);
}
}
printf("\n");
}
int findmax(int score[],int n)
{
int i,max=score[0];
for(i=1;i<n;i++)
{
if(score[i]>max)
{
max=score[i];
}
}
return max;
}
void findmaxlndex(int score[],int n)
{
int i,max;
max=findmax(score,n);
printf("得最高分的同学有:\n");
for(i=0;i<n;i++)
{
if(score[i]==max)
{
printf("第%d名学生 ",i+1);
}
}
printf("\n");
}
void findscore(int score[],int n)
{
int i,score2,l=0;
printf("请输入你要查找的分数:\n");
scanf("%d",&score2);
for(i=0;i<n;i++)
{
if(score[i]==score2)
{
printf("得该分数的是:\n");
printf("第%d位学生\n",i+1);
}
}
}
1.2 程序运行结果:

2.定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
2.1 代码:
#include <stdio.h>
#define N 100
int main ( )
{
int i,score[N]={0},a=0;
for(i=0;i<N;i++)
{
score[i]=i+1;
}
for(i=0;i<N;i++)
{
if(score[i]%3==0||score[i]%7==0)
{
score[i]=0;
}
else
{
a++;
printf("%4d",score[i]);
if(a%10==0)
{
printf("\n");
}
}
}
printf("\n 共输出了%d个数",a);
return 0;
}
2.2 程序运行结果:

二、实验总结
1.注意逻辑混乱问题,不要写成两个最大值或最小值。
2.,定义的变量名是什么,在主程序里调用也得用什么,变量名要改一下,不能同名。
3.相似的代码粘也可以,不过不一样的地方要记得改。
4.要记得加大括号,把相应的内容放进去。
三、程序分析
形参的应用于实参有一定的区别,在写程序时不同的写法可以合理运用形参,也可以不用,因为不同的程序在写的时候,用形参和不用形参得出的结果可能会不一样。,比如在程序1和2中,看似相同的变量,却因形参的不同用法而导致结果不同。
浙公网安备 33010602011771号