C语言实验 数组应用

实验七 数组应用
实验目的

  1. 掌握一维数组、二维数组的定义、初始化方法。
  2. 掌握一维数组作为函数参数用法。
  3. 掌握基本的排序、查找、统计分析等常用方法。
  4. 掌握一维数组作为函数参数用法。
  5. 掌握一维数组程序的调试方法
    实验条件:
    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];//这个位置写反了应该为 a[j+1]=a[j] 
			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]); 
	} 
}

该程序的运行结果如图五、六、七所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xlorb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值