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 findmaxlndex(int score[],int n,int Max);//求最高分的下标
void findminlndex(int score[],int n,int Min);//求最低分的下标
void search(int score[],int n,int x);//查询成绩
void bubblesort(int score[],int n);//排序
int main()
{
int score[N]={0},n,Max,Min,x;
double ave;
printf("输入学生人数(n<100)");
scanf("%d",&n);
readScore(score,n);
printScore(score,n);
ave=average(score,n);
printf("平均分为%.2f\n",ave);
Max=findMax(score,n);
printf("最高分为%d\n",Max);
Min=findMin(score,n);
printf("最低分为%d\n",Min);
findMaxlndex(score,n,Max);
findMinlndex(score,n,Min);
printf("输入查询的成绩");
scanf("%d",&x);
search(score,n,x);
bubbleSort(score,n);
printf("\n排序后为");
printScore(score,n);
return 0;
}
void readScore(int score[],int n)
{
int i;
printf("输入成绩\n");
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("\n");
}
double average(int score[],int n)
{
int i,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=1;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=1;i<n;i++)
{
if(score[i]<min)
{
min=score[i];
}
}
return min;
}
void findmaxlndex(int score[],int n,int Max)
{
int i,maxlndex=0;
printf("最高分有:");
for(i=0;i<n;i++)
{
if(score[i]==Max)
{
printf("第%2d个",i+1);
}
}
printf("\n");
}
void findminlndex(int score[],int n,int Min)
{
int i,minlndex=0;
printf("最低分有:");
for(i=0;i<n;i++)
{
if(score[i]==Min)
{
printf("第%2d个",i+1);
}
}
printf("\n");
}
void search(int score[],int n,int x)
{
int i;
for(i=0;i<n;i++)
{
if(score[i]==x)
printf("是第%d个",i+1);
}
}
void bubblesort(int score[],int n)
{
int i,j,t,flag;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
flag=0;
if(score[j]>score[j+1])
{
t=score[j];
score[j]=score[j+1];
score[j+1]=t;
flag=1;
}
}
}
}
运行结果:
2.题目:
定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。
代码:
#include<stdio.h>
#define N 100
int main()
{
int a[N],i,j=0;
for(i=0;i<N;i++)
{
a[i]=i+1;
if(a[i]%3!=0&&a[i]%7!=0)
{
printf("%4d",a[i]);
j++;
}
}
printf("\n共有%d个",j);
return 0;
}
运行结果:
附加题:
将数组a中的10个元素后移m位,移出的m位顺序存放在数组的 前m位。要求:(1)数组值在程序中初始化(2)m从键盘输入
代码:
#include <stdio.h>
#define N 10
int main()
{
int m[N],a,b,c,d;
for(a=1;a<=N;a++)
{
m[a]=a;
}
printf("请输入你想后移位数:\n");
scanf("%d",&b);
m[1]=N;
for(a=1;a<b;a++)
{
c=m[N-1];
for(d=N-2;d>=1;d--)
{
m[d+1]=m[d];
}
m[1]=c;
}
for(a=1;a<N;a++)
{
printf("%d\t",m[a]);
}
return 0;
}
运行结果:
程序分析:
三、程序分析
程序1
#include <stdio.h> void swap(int x[]); int main() { int a[2]={1,2}; swap(a); printf("a[0]=%d\na[1]=%d\n",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\na[1]=%d\n",a[0],a[1]); return 0; } void swap(int x,int y) { int z; z=x; x=y; y=z; }
分析:
第一个用的是数组做函数,第二个是用简单变量做函数。程序一的a[0和a[1]的值交换了,程序二没有改变。
数组在调用函数中作为参数被传递是双向传递,单纯的简单变量作为参数被传递则是单向传递。
实验总结:
1。在调用函数时注意函数的一一对应。
2。冒泡法的思路是:将相邻两个数比较,将小的调到前头。
3.定义数组和在数组中移动变量时要注意数组的越界问题
4.注意函数名一致!!