第九次作业
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(" 输入人数:\n");
scanf("%d",&n);
printf(" 输入成绩:\n");
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\n",ave);
printf("最大值是%d\n",max1);
for(i=0;i<=maxindex1;i++)
{
if(a[i]>0)
{
printf("第%d个\n",a[i]);
}
}
printf("最小值是%d\n",min1);
for(i=0;i<=minindex1;i++)
{
if(c[i]>0)
{
printf("第%d个\n",c[i]);
}
}
printf("\n");
search(score,n);
printf("\n");
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("输入要查找的数据:\n");
scanf("%d",&a);
for(i=0;i<n;i++)
{
if(a==score[i])
{
printf("第%d个 ",i+1);
flag=1;
}
}
if(flag==0)
{
printf("查询的成绩不存在\n") ;
}
}
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("\n");
}
}
printf("\n一共%d个",a);
return 0;
}

二.知识点总结 1.数组作为函数的参数,不能在[]中给出数组的大小,必须用另一个参数来传入数组的大小 2.不要求数据表是已排好序的,从线性数据表中的第一个或最后一个记录开始寻找 3.依次记录的关键字与查找关键字进行比较
三.程序分析
1.二者结果相反
2,原因:简单变量做参数,实现的是值的单向传递,即只能把实参的值传给形参,由于实参和形参占用不同的内存单元,形参的改变不会影响实参。数组做函数参数,是将实参数组的地址传给形参数组,实参和形参占用的是相同的内存空间。
浙公网安备 33010602011771号