实验七 数组应用 实验目的
- 掌握一维数组、二维数组的定义、初始化方法。
- 掌握一维数组作为函数参数用法。
- 掌握基本的排序、查找、统计分析等常用方法。
- 掌握一维数组作为函数参数用法。
- 掌握一维数组程序的调试方法
实验条件: PC 计算机,Windows7 或 Windows10 操作系统,Office2010 及以 上版本,Dev-C++5.11 及以上版本或 Code Blocks16.01 及以上版本。 实验内容 1.程序调试 简化的插入排序:输入一个正整数(0<n<9)和一组(n 个)有 序的整数,再输入一个整数 x,把 x 插入到这组数据中,使该数组仍 然有序。 源程序(有错误) 编程提示:先找到插入点,从插入点开始,所有数据顺序后移,然后插入数据。如果插入点在最后,直接插入即可。 源程序(有错误)
#include<stdio.h>
int main()
{
int i,j,n,x,a[10];
printf("输入数据的个数 n: ");
scanf("%d", &n);
printf("输入%d 个整数", n);
for (i=0;i<n;i++){
scanf("%d", &a[i]);
}
printf("输入要插入的整数 x: ");
scanf("%d", &x);
for (i=0;i<n;i++){
if(x>a[i]){
continue;
}
j=n-1;
while(j>=i){
a[j]=a[j+1];}
j++;
a[i]=x;
break;
}
if(i==n){
a[n]=x;
}
for(i=0;i<n+1;i++){
printf("%d",a[i]);
}
putchar('\n');
return 0;
}
程序清单如下:
#include<stdio.h>
int main()
{
int i,j,n,x,a[10];
printf("输入数据的个数 n: ");
scanf("%d", &n);printf("输入%d 个整数", n);
for (i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("输入要插入的整数 x:");
scanf("%d", &x);
for (i=0;i<n;i++)
{
if(x>a[i])
{
continue;
}
j=n-1;
while(j>=i)
{
a[j+1]=a[j];
j--;
}
a[i]=x;break;
}
if(i==n)
{
a[n]=x;
}
for(i=0;i<n+1;i++)
{
printf("%d",a[i]);
}
putchar('\n');
return 0;
}
该程序的运行结果如图一所示: 图一 2.基础编程 (1)某班学生不超过 40 人,输入某门课程的成绩,具体人数 由用户通过键盘输入,用函数编程统计不及格的人数。 程序清单如下:
#include<stdio.h>
int findfail(int score[],int n);
void reasdscore(int score[],int n);
int main()
{
int score[40];
int n;
printf("please input the number of class\n");
scanf("%d",&n);
reasdscore(score,n);
printf("不及格的人数有%d 人",findfail(score,n));
return 0;
}
int findfail(int score[],int n)
{
int i,counter=0;
for(i=0;i<=n-1;i++){
if(score[i]<60)
{
counter++;
continue;
}
}
return counter;
}
void reasdscore(int score[],int n)
{
int i;
for(i=0;i<=n-1;i++)
{
printf("please intput score\n");
scanf("%d",&score[i]);
}
}
改程序的运行结果如图二所示: 图二 (2)假设有 40 个学生被邀请给餐厅的饮食和服务质量打分, 分数划分为 1~10 这 10 个等级(1 表示最低分,10 表示最高分),编 程统计并按如下格式输出餐饮服务质量调查结果。
…… 程序清单如下:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
int main(){
int a[41],count[11],i,j;
memset(count,0,sizeof(count));
srand(time(NULL));
for(i=1;i<=40;i++)
{
a[i]=rand()%10+1;
count[a[i]]++;
}
printf("Grade\tCount\tHistogram\n");
for(i=1;i<=10;i++)
{
printf("%d\t",i);
printf("%d\t",count[i]);
for(j=1;j<=count[i];j++)
{
printf("*");
}
printf("\n");
}
return 0;}
程序清单如图三所示:
图三 (3)模拟掷骰子 6000 次,编程统计并输出骰子的 6 个面各自出现 的几率。 程序清单如下:
#include<stdio.h>
int main()
{
int a[6],i,x;
srand(time(NULL));
for(i=1;i<=6000;i++)
{x=rand()%6+1;
switch(x)
{
case 1:a[0]++;
break;
case 2:a[1]++;
break;
case 3:a[2]++;
break;
case 4:a[3]++;
break;
case 5:a[4]++;
break;
case 6:a[5]++;
break;
}
}
for(i=0;i<=5;i++)
{
printf("%.4f%%\n",a[i]/60.0);
}
}
该程序的运行结果如图四所示:
图四 (4)学生成绩管理系统 V1.0 某班有最多不超过 30 人(具体人数由键盘输入)参加某门课程 的考试,用一维数组作函数参数编程实现如下学生成绩管理: 1)录入每个学生的学号和考试成绩; 2)计算课程的总分和平均分; 3)按成绩由高到低排出名次表; 4)按学号由小到大排出成绩表; 5)按学号查询学生排名及其考试成绩; 6)按优秀(90100)、良好(8089)、中等(70~79)、及格 (6069)、不及格(059)5 个类别,统计每个类别的人数以及所 占的百分比; 7)输出每个学生的学号、考试成绩。程序清单如下:
#include<stdio.h>
#include<stdlib.h>
#define N 30
void readscore(float score[],long id[],int n);
void average_score(float score[],long id[],int n);
void height_to_lowscore(float score[],long id[],int n);
void low_to_heightid(float score[],long id[],int n);
void search(float score[],long id[],int n);
void Grade_classification(float score[],long id[],int n);
void put_id_score(float score[],long id[],int n);
int main()
{
int x,n;
long id[N];
float score[N];
printf("Input student number(n<30):\n");
scanf("%d",&n);
while(n>=0)
{printf("Management for Students' scores\n");
printf("1.Input record\n");
printf("2.Caculate total and average score of course\n");
printf("3.Sort in descending order by score\n");
printf("4.Sort in ascending order by number\n");
printf("5.Search by number\n");
printf("6.Statistic analysis\n");
printf("7.List record\n");
printf("0.Exit\n");
printf("Please Input your choice:\n");
scanf("%d",&x);
switch(x)
{
case 1:readscore(score,id,n);
break;
case 2:average_score(score,id,n);
break;
case 3:height_to_lowscore(score,id,n);
break;
case 4:low_to_heightid(score,id,n);
break;
case 5:search(score,id,n);break;
case 6:Grade_classification(score,id,n);
break;
case 7:put_id_score(score,id,n);
break;
case 0:exit(0);
break;
default:printf("Input error!\n");
break;
}
}
return 0;
}
void readscore(float score[],long id[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("Input student's ID,and score:\n");
scanf("%ld%f",&id[i],&score[i]);
}
}
void average_score(float score[],long id[],int n)
{
int sum,i,aver;
for(i=0;i<n-1;i++)
{
sum+=score[i];
}
aver=sum/n;
printf("sum=%d,aver=%d\n",sum,aver);
}
void height_to_lowscore(float score[],long id[],int n)
{
int j,i,k;
float temp1;
long temp2;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(score[j]>score[i])
{k=j;
}
}
if(k!=i)
{
temp1=score[k];
score[k]=score[i];
score[i]=temp1;
temp2=id[k];
id[k]=id[i];
id[i]=temp2;
}
}
printf("Sort in descending order by score:\n");
for(i=0;i<n;i++)
{
printf("%ld\t%f\n",id[i],score[i]);
}
}
void low_to_heightid(float score[],long id[],int n){
int j,i,k;
float temp1;
long temp2;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(id[j]<id[i])
{
k=j;
}
}
if(k!=i)
{
temp1=score[k];
score[k]=score[i];
score[i]=temp1;
temp2=id[k];
id[k]=id[i];
id[i]=temp2;}
}
printf("Sort in ascending order by number:\n");
for(i=0;i<n;i++)
{
printf("%ld\t%f\n",id[i],score[i]);
}
}
void search(float score[],long id[],int n)
{
long x;
printf("input id\n");
scanf("%ld",&x);
int low=0,height=n-1,mid;
while(low<=height)
{
mid=(low+height)/2;
if(x<id[mid])
{
height=mid-1;}
else if(x>id[mid])
{
low=mid+1;
}
else if(x=id[mid])
{
printf("%d\t%f\n",mid+1,score[mid]);
break;
}
else
{
printf("Not found!\n");
}
}
}
void Grade_classification(float score[],long id[],int n)
{
int i;
float a=0,b=0,c=0,d=0,e=0,f=0;
for(i=0;i<n;i++){
if(score[i]<60)
{
a++;
}
if(score[i]>=60&&score[i]<=69)
{
b++;
}
if(score[i]>=70&&score[i]<=79)
{
c++;
}
if(score[i]>=80&&score[i]<=89)
{
d++;
}
if(score[i]>=90&&score[i]<=99)
{
e++;
}
if(score[i]==100){
f++;
}
}
printf("<60\t%f\t%.2f%%\n",a,a/n);
printf("%d-%d\t%f\t%.2f%%\n",60,69,b,b/n);
printf("%d-%d\t%f\t%.2f%%\n",70,79,c,c/n);
printf("%d-%d\t%f\t%.2f%%\n",80,89,d,d/n);
printf("%d-%d\t%f\t%.2f%%\n",90,99,e,e/n);
printf("%d\t%f\t%.2f%%\n",100,f,f/n);
}
void put_id_score(float score[],long id[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%ld\t%f\n",id[i],score[i]);
}
}
该程序的运行结果如图五、六、七所示:
|