C语言一维数组练习

Problem A:数组逆序

题目描述
输入10个整数存入一维数组,再按逆序重新存放后再输出。

输入

输入包括一行。10个以空格格开的整数。

输出

逆序的10个整数,整数以空格格开。

样例输入

1 3 5 9 7 6 8 2 4 0

样例输出

0 4 2 8 6 7 9 5 3 1

答案

#include 
int main(){
	int a[10],t;
	for(int i=0;i<10;i++){
		scanf("%d",&a[i]);
	}
		for(int i=0;i<5;i++){
		t=a[i];
		a[i]=a[10-i-1];
		a[10-i-1]=t;
	}
	for(int i=0;i<10;i++){
		printf("%d ",a[i]);
	}
}

Problem B:逆序输出数据

题目描述
输入一组数据(整数,不多于20个),逆序输出这组数据。

输入

正整数N(1≤N≤20),之后是N个整数。

输出

输入数据的逆序,2个数之间空一格。

样例输入

【样例1】
1 100
【样例2】
3 1 2 3
【样例3】
5 5 4 3 2 1

样例输出

【样例1】
100
【样例2】
3 2 1
【样例3】
1 2 3 4 5

答案

#include 
int main(){
	int N,a[20],t;
	scanf("%d",&N);
	for(int i=0;i<N;i++){
		scanf("%d",&a[i]);
		}
	for(int i=0;i<N/2;i++){
		t=a[i];
		a[i]=a[N-i-1];
		a[N-i-1]=t;		
	}
	for(int i=0;i<N;i++){
		printf("%d ",a[i]);
	}
	return 0;
}

Problem C:【数组】查找学号

题目描述
输入一组数据(整数,不多于20个),查找指定的数据项是否存在。

输入

第1个数据n,表示后面有n个数据,最后一个数据表示要查找的数据。

输出

如果找到要查的数据,则输出Yes
否则输出No

样例输入

3 2017010413 2017010414 2017010415 2017010415

样例输出

Yes

答案

#include 
int main(){
	int a[20],n,x;
	int flag=0;
	scanf("%d",&n);	
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
		}
	scanf("%d",&x);
	for(int i=0;i<n;i++){
		if(a[i]==x) flag=1;
	}
	if(flag==1) printf("Yes");	
	else printf("No"); 
	return 0;
}

Problem D:低于平均分的人数

题目描述
计算机2017级有n(n为整数,并且5≤n≤200)名学生,已知n名同学的考试成绩x(x为整数,并且0≤x≤100),求低于平均分的学生人数。

输入

输入有2行,第1行为学生人数n(n为整数,并且5≤n≤200)。
第2行为n名学生的成绩x(x为整数,并且0≤x≤100),2个成绩之间用空格隔开。

输出

输出低于平均分的学生人数。

样例输入

5
80 70 80 70 80

样例输出

2

答案

#include 
int main(){
	int n,i,a=0;
	float sum=0,average,str[200];
	scanf("%d",&n);
	while(i<n){
		scanf("%f",&str[i]);
		i++;
	}
	for(int i=0;i<n;i++)
	sum+=str[i];
	average=sum/n;
	i=0;
	while(i<n){
	if(str[i]<average)
	a = a + 1;
	i++;
	}
	printf("%d",a);
	return 0;
}

Problem E:恰好等于给定成绩的人数

题目描述
计算机2017级有n(n为整数,并且5≤n≤200)名学生,已知n名同学的考试成绩x(x为整数,并且0≤x≤100),求恰好等于给定成绩的学生人数。

输入

输入有3行,第1行为学生人数n(n为整数,并且5≤n≤200)。
第2行为这n名学生的成绩x(x为整数,并且0≤x≤100),2个成绩之间用空格隔开。
第3行包含一个整数,为指定的成绩m。

输出

输出恰好等于给定成绩的学生人数。

样例输入

5
80 70 80 70 80
80

样例输出

3

答案

#include 
int main(){
	int a[200],n,x,sum=0,flag=0;
	scanf("%d",&n);	
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);		
	}
	scanf("%d",&x);
	for(int i=0;i<n;i++){
		if(a[i]==x)		
		sum++;
	}
	printf("%d",sum);	
}

Problem F:天宝剪丝瓜

题目描述
天宝家的院子里种了几株丝瓜,8-9月份就会长出很多丝瓜。丝瓜成熟了,天宝就想把丝瓜剪下来。可是有的丝瓜比较高,她不能直接用手够到丝瓜。幸好天宝有个40厘米高的板凳,这样天宝就能踩到板凳上再试试。
现在已知丝瓜到地面的高度,以及天宝手伸直时能够到的最大高度,请帮她算一下能够剪到的丝瓜数目。假设她碰到丝瓜,丝瓜就会掉下来。

输入

输入包括两行数据。第一行为n(n<20),表示成熟的丝瓜数量。接下来一行包含n个100到200之间(包括100和200)的整数(以厘米为单位)分别表示n个丝瓜到地面的高度,两个相邻的整数之间用一个空格隔开。第3行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示天宝把手伸直的时候能够达到的最大高度。

输出

输出天宝能够剪到的丝瓜数目。

样例输入

10
100 200 150 140 129 134 167 198 200 111
110

样例输出

6

答案

#include 
int main(){
	int n,x;
	scanf("%d",&n);
	int a[n],sum=0;
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}	
	scanf("%d",&x);
	for(int i=0;i<n;i++){
		if(x+40>=a[i]) sum++;
	}
	printf("%d",sum);
}

Problem G:最有价值的书

题目描述
C语言一维数组练习_第1张图片

输入

输入一行,包含16个整数(大于等于0,小于等于100),分别表示购买的《计算机导论》、《网页程序设计》、《高等数学》、《程序设计基础》、《面向对象程序设计》、《电子技术基础》、《计算机网络》、《工程数学》、《离散数学》、《数据结构与算法》、《单片机原理与应用》、《数据库技术》、《软件工程》、《编译原理》、《操作系统》、《计算机组成原理》的数量(以本为单位)。每两个整数用一个空格分开。

输出

输出总价最高的书的单价和数量;要求单价精确到小数点后一位;2个数之间有一个空格。

样例输入

1 5 8 10 5 1 1 2 3 4 6 12 7 13 20 11

样例输出

72.7 20

答案

#include 
int main(){
	int d,s,a[16];
	float max=0.0,c[16];
	float b[16]={28.1,54.5,46.6,37.1,38.0,46.7,70.7,21.8,31.4,27.6,39.3,37.1,56.7,70.3,72.7,40.7,};
	for(int i=0;i<16;i++){
		scanf("%d",&a[i]);
	}
	for(int j=0;j<16;j++){
	    c[j]=a[j]*b[j];
	}
	for (int k=0;k<16;k++){
		if (max < c[k]){
			max = c[k];
			s=k;
		}
	}
	printf("%.1f %d",b[s],a[s]);
}

Problem H:书费有多少

题目描述
C语言一维数组练习_第2张图片

输入

输入一行,包含16个整数(大于等于0,小于等于100),分别表示购买的《计算机导论》、《网页程序设计》、《高等数学》、《程序设计基础》、《面向对象程序设计》、《电子技术基础》、《计算机网络》、《工程数学》、《离散数学》、《数据结构与算法》、《单片机原理与应用》、《数据库技术》、《软件工程》、《编译原理》、《操作系统》、《计算机组成原理》的数量(以本为单位)。每两个整数用一个空格分开。

输出

输出一行,包含一个浮点数f,表示应付的总费用。精确到小数点后一位。

样例输入

1 5 8 10 5 1 1 2 3 4 6 12 7 13 20 11

样例输出

5493.5

答案

#include 
int main(){
	int  a[16];
	float sum;
	for(int i=0;i<16;i++){
		scanf("%d",&a[i]);
	    sum=28.1*a[0]+54.5*a[1]+46.6*a[2]+37.1*a[3]+38*a[4]+46.7*a[5]+70.7*a[6]+21.8*a[7]+31.4*a[8]+27.6*a[9]+39.3*a[10]+37.1*a[11]+56.7*a[12]+70.3*a[13]+72.7*a[14]+40.7*a[15];
	}
	printf("%.1f",sum);
}

Problem I:【循环结构】C语言-求平方根

题目描述
用迭代法求 。求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的得差的绝对值少于0.00001。 输出保留3位小数。
算法:1.先自定一个初值x0,作为a的平方根值,一般先取a/2作为初值x0;利用迭代公式求出一个x1。此值与真正的a的平方根值相比,误差很大。
2.把新求得的x1代入迭代公式中,求出x2.。
3.比较前后两次求得的平方根值x0和x1,如果它们差的绝对值小于我们指定的值,即达到我们要求的精度,则认为x1就是a的平方根值,去输出结果;否则执行步骤2,即循环进行迭代。

样例输入

4

样例输出

2.000

答案

#include
#include
float Mysqrt(int n){
    return sqrt(n*1.0);
}
int main(){
	int a;
	scanf("%d",&a);
	printf("%.3f",Mysqrt(a));
	return 0;
}

Problem J:十进制转二进制

题目描述
输入一个十进制数N(32位整数),将它转换成二进制数输出.

输入

输入数据包含多个测试实例,每个测试实例包含1个整数N(32位整数)。

输出

输出转换后的数,每个输出占1行。

样例输入

55
-23
42
-2

样例输出

110111
-10111
101010
-10

答案

#include 
#include 
int main(){
    int i=0,j=0,a = 0,n[32]={0};
    while(scanf("%d",&a)!=EOF){
	    while (a){
	        n[i++] = a%2;
	        a/=2;
	}  
	printf("%d",n[i-1]);
	for (j=i-2;j>=0;j--){
	    printf("%d",abs(n[j]));
	}
    printf("\n");
	i=0;
	}
    return 0;
}

你可能感兴趣的