C语言编程练习--2021级山东理工大学ACM实验四题解

A - A+B for Input-Output Practice (II)

Description

Your task is to Calculate a + b.

Input

Your task is to Calculate a + b.

Output

For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.

Sample

Input 

2
1 5
10 20

Output 

6
30

Hint

​
法一-----while循环
#include
int main()
{
	int n;//定义组数
	scanf("%d", &n);
	int a, b;//输入的两个整数
	while (n--) {
		scanf("%d %d", &a, &b);
		printf("%d\n", a + b);
	}
	return 0;
}
法二---for循环
#includeint main(){
	int n,a,b,i;//定义组数
	scanf("%d", &n);//终端格式化输入组数
	for (i = 0; i < n;i++) {
		scanf("%d %d", &a, &b);
		printf("%d\n", a+b);
	}
	return 0;}

​

B - C语言实验——两个数比较

Description

求2个数中较大者。

Input

第一行为测试的数据组数N,接下来的N行分别是两个待比较的整数。

Output

输出N行,每一行的值为每组数中较大的整数。

Sample

Input 

2
1 2
15 10

Output 

2
15
#include
int main()
{
	int n;//定义组数
	scanf("%d", &n);
	int i;//定义次数
	int a = 0;int b=0;//输入的两个整数
	for (i = 0; i < n; i++) {
		scanf("%d %d", &a, &b);
		if (a > b)printf("%d\n", a);
		else printf("%d\n", b);
	}
	return 0;
}

C - C语言实验——计算1到n的和(循环结构)

Description

从键盘上输入任意一个整数n,计算1到n的和。

Input

从键盘输入任意整数n。

Output

输出1到n的和。

Sample

Input 

3

Output 

6
#include
int main() 
{
	int n;//输入整数
	scanf("%d", &n);
	int i =0;//定义次数为i
	int sum = 0;
	for (i = 0; i <= n; i++) {
		sum += i;
	}
		printf("%d\n", sum);
	return 0;
}

D - C语言实验——求阶乘(循环结构)

Description

从键盘输入任意一个大于等于0的整数n,然后计算n的阶乘,并把它输出。

提示: 0!是 1 。

Input

输入任意一个大于等于0的整数n。

Output

输出n!

Sample

Input 

3

Output 

6
法一-----直接写 
#include
int main()
{
	int n;//输入的整数
	scanf("%d", &n);
	int i ;//定义次数;
	int m=1;//定义阶乘
     if (n > 0) {
		for (i = 1; i <= n; i++) {
			m *= i;
		}
	}
		printf("%d\n", m);
	return 0;
}
思路:按照这个程序运行其实是简单化了的,因为只有一个if语句,当n=0时其实没有进入循环体系,因此也就会直接输出m的值也就是初始化时m的值,另外注意n的初始值在for应该是1,因为前提是n>0且n为整数;m的初始值也不可以为0,y因为m*=i,即m=m*i,如果是0初始化值,则m恒等于0了。
法二----分情况讨论 
#include
int main()
{
	int n;//输入的整数
	scanf("%d", &n);
	int i ;//定义次数;
	int m=1;//定义阶乘
	if (n == 0) { printf("1\n"); }
	else if (n > 0) {
		for (i = 1; i <= n; i++) {
			m *= i;
		}
		printf("%d\n", m);
	}
	return 0;
}
这个方法要注意第二个printf的位置

E - 做乘法

Description

请用C语言编写一个程序。此程序接收一个正整数N,然后打印输出“N次N*(1->N)格式”的数据。例如:此程序接收正整数5,那会输出以下格式的数据:
5*1=5
5*2=10
5*3=15
5*4=20
5*5=25
 

Input

只有一个正整数N(N<=100)。

Output


输出共N行数据,如上面的例子所示。

Sample

Input 

5

Output 

5*1=5
5*2=10
5*3=15
5*4=20
5*5=25
#include
int main()
{
	int n;//输入整数n
	scanf("%d", &n);
	int i;//定义次数;
	for (i = 1; i <= n; i++) {
		printf("%d*%d=%d\n",n,i,n*i);
	}
	return 0;
}

F - 数列求和

Description

数列求和是一类常见的问题,本题有一定的代表性:
求s=a+aa+aaa+aaaa+……+aa…aa(n位)
其中,a的值由键盘输入,位数n也由键盘输入。

Input

第一行输入a的值;
第二行输入位数n。

Output

输出对n个数完成求和运算后的结果。
比如a=3,n=6时,s=3+33+333+3333+33333+333333

Sample

Input 

3
6

Output 

370368

Hint

#include
int main(){
	int a, n,i;//a为值n为位数,i为次数
	scanf("%d\n%d", &a, &n);
	int sum = 0; int c = 0;
	for (i = 0; i 

G - 简单计算

Description

接受从键盘输入的N个整数,输出其中的最大值、最小值和平均值(平均值为整除的商)。
 

Input

第一行一个正整数N(N<=100);
第二行有N个用空格隔开的整数Ti (1 <= i <= N, 0 <= Ti <= 10000000)

Output

三个有空格隔开的整数分别为最大值、最小值和平均值,其中平均值为整除的商。

Sample

Input 

5
1 2 3 5 4

Output 

5 1 3

H - C/C++训练1---最大公约数与最小公倍数

Description

输入两个正整数,求它们的最大公约数与最小公倍数。

Input

输入两个正整数,两个整数之间用空格分开。

数据保证在 int 范围内。

Output

第一行输出最大公约数;
第二行输出最小公倍数。

答案保证在 int 范围内。

Sample

Input 

64 48

Output 

16
192

I - C语言实验——判断素数(循环结构)

Description

从键盘上输入任意一个正整数,然后判断该数是否为素数。
如果是素数则输出"This is a prime."
否则输出“This is not a prime.”

Input

输入任意一个正整数n(1 <= n <= 1000000)。

Output

判断n是否为素数,并输出判断结果:
如果n是素数则输出"This is a prime."
否则输出“This is not a prime.”

特别提醒:请注意对1的判定,1不是素数。

Sample

Input 

3

Output 

This is a prime.
法一--
#include  
int main() 
{ 
int n; 
scanf("%d", &n); 
int flag = 1; //flag = 1说明最开始他是一个素数 
for(int i = 2; i <= n - 1; i++) 
{ 
if(n % i == 0) //i是n的因子, 不满足素数的定义了→不是素数 
{ 
flag = 0; //不是素数 
break; 
} 
}
if(n == 1) flag = 0; //特判1 
if(flag == 0) printf("No\n"); 
else printf("Yes\n"); 
return 0; 
}
法二--
#include  
int main() 
{ 
int n; 
scanf("%d", &n); 
int cnt = 0; 
for(int i = 2; i <= n - 1; i ++) 
{ 
if(n % i == 0) 
{ 
break; 
}
cnt++; 
}
//从2到n-1 是 n - 2 个数 
if(cnt == n - 2) printf("This is a prime.\n"); 
else printf("This is not a prime.\n"); 
return 0; 
}

J - 求绝对值最大值

Description

求n个整数中的绝对值最大的数。

Input

输入数据有2行,第一行为n,第二行是n个整数。

Output

输出n个整数中绝对值最大的数。

Sample

Input 

5
-1 2 3 4 -5

Output 

-5
#include
int main(){
	int n, i, a = 0; int max = 0;int  amx;//输入的个数(其实是固定的),i为次数;
	scanf("%d\n", &n);//终端输入的个数;
	for (i = 0; i < n; i++) {
		scanf("%d", &a);//终端输入的数;
		if (a >= 0) {
			if (a >= max) {
				max = a; amx = a;
			}
		}
		else {
			a = -a;//将负数变成整数;
			if (a >= max) {
				max = a; amx = -a;
			}
		}
	}
		printf("%d\n", amx);
	return 0;
}

思路:遇见这种绝对值的题目就可以分情况讨论,即它是>=0还是<0,后面再比较一般就是和最大值比较了(计算机可以自动比较出已有数据的最大值max),因为输入的值会与初始化了的max比较,如果比max小,就会把这个值赋给max了。 

K - C语言实验——圆周率

Description

输入n值,并利用下列格里高里公式计算并输出圆周率: 

Input

输入公式中的n值。

Output

输出圆周率,保留5位小数。

Sample

Input 

1

Output 

2.66667
#include
int main()
{
	int n;//输入整数;
	int i; double a=0;//a代表最后的值
	scanf("%d", &n);
	for (i = 1; i <=n;i++) {
		a += 4 * ((1.0 / (4 * i - 3)) - (1.0 / (4 * i - 1)));
	}
	printf("%.5f\n", a);
	return 0;
}

思路:让输出的是圆周率,现在给的是4/圆周率,所以在等式右边乘4即可得到圆周率的计算公式,且=右边已给通式。

注意:(1)注意for循环的初始条件,i=0分母就是负的了,不符合实际情况

  1. i循环结束条件应该是i<=n;因为就是要计算到i=n时情况
  2. 小技巧:i=0一般就是i

 

L - 小鑫の日常系列故事(五)——卡片游戏

Description

小鑫和健健喜欢在课间的时候玩游戏,今天他手里有n张卡片,每张卡片有一个数字。于是他就想和健健比一比更幸运。

玩法是这样的:这n张卡片上的数字是没有规律的。他俩轮流取走最上面的一张卡片,最后谁取走卡片上的数字之和最大,谁就更幸运。(因为这个游戏是小鑫想出来的,总是小鑫拿第一张)

你能帮他们判断谁更幸运么?

Input

第一行为一个数字 n。100000>n>0

第二行为n个数,是n张卡片上的数字,第一个数为最上面的卡片上的数,依次向下。N个数是在整型范围内。

Output

如果小鑫更幸运输出“Greater than”,如果健健更幸运输出“Less than”,否则“Equal”。(输出均不含引号)

Sample

Input 

6
1 1 2 2 3 3

Output 

Equal

Hint

#include
int main()
{
	int n,i;//输入个数,次数
	int a;//输入的具体的整数
	int sum1 = 0;int sum2 = 0;//记作是两个人抽卡上数之和
	scanf("%d\n", &n);
	for (i = 1; i <= n; i++) {
		scanf("%d", &a);
		if (i % 2 == 0) //意思是i是偶数2,4,6等即抽到的都是第二张的
			sum2 += a;
		else sum1 += a;//这个代表次数都是抽第一次,即小鑫的数目总和
	}
	if (sum1 > sum2)printf("Greater than\n");
	else if (sum1 < sum2)printf("Less than\n");
	else printf("Equal\n");
	return 0;
}

N - C语言实验——分数序列

Description

有一个分数序列:2/1, 3/2, 5/3, 8/5, 13/8, …编写程序求出这个序列的前n项之和。

Input

输入只有一个正整数n,1≤n≤10。

Output

输出该序列前n项和,结果保留小数后6位。

Sample

Input 

3

Output 

5.166667
 #include
int main()
{
	int n ; int i;//输入整数;次数
    double a = 2;  double b = 1; double sum=0;//a是分子,b是分母,sum是和
	double c = 0;//交换;
	scanf("%d",& n);//输入整数
	for (i = 0; i

此题的思路是先观察所给式子的 特点,发现后一个的分子其实是前面一个数的分子和分母之和,分母就是前一个数的分子---因此就容易想到前面学到过的交换变量 

O - 期末考试之分等级

Description

期末考试结束了,老师想要根据学生们的成绩划分出等级。共有5个等级A,B,C,D和E。
划分方法如下,90分(含90)以上的为A,80~90(含80)间的为B,70~80(含70)间的为C,
60~70(含60)的为D,不及格的为E。
根据输入的成绩,编程输出各个级别段人数。
 

Input

输入第一行包含一个正整数N(N<= 100)代表学生的数目,接下来有N行数据每行一个整数(0~100)代表
一个学生的成绩。

Output

输出有五行格式如下:
A nA
B nB
C nC
D nD
E nE
其中A,B,C,D,E代表等级,nA,nB等代表个等级的人数,等级和人数之间有一个空格。

Sample

Input 

6 
66 
73
85
99
100
59

Output 

A 2
B 1
C 1
D 1
E 1
#include
int main()
{
	int n, i;//定义组数,循环次数
	scanf("%d", &n);//输入总的组数
	int a=0;//输入的成绩
	int c = 0; int d = 0; int e = 0; int f = 0; int g = 0;
	//int sum1 = 0; int sum2 = 0; int sum3 = 0; int sum4 = 0; int sum5 = 0;
	for (i = 1; i <=n; i++) {
		scanf("%d", &a);
		if (a >= 90) {
			c++;
		}
		else if (a >= 80 && a < 90) {
			d++;
		}
		else if (a >= 70 && a < 80) {
			e++; 
		}
		else if (a >= 60 && a < 70) {
			f++;
		}
		else {
			g++;
		}
	}
	printf("A %d\nB %d\nC %d\nD %d\nE %d\n", c, d, e, f, g);
	return 0;
}

注意:这个题用不到sum+=,因为这个代表求和,比如A等级有四个,那么用sum+=的话其实是计算从1到4的和了 

P - 平方数

Description

飞飞特别喜欢平方数,可是他数学并不好,你能帮他计算 n 与 m 之间所有平方数之和吗?
提示:若一个整数的开方还是整数,它就是平方数。例如:4、9、16、25是平方数。n 和 m 均可能为 0 至 100000000 内的任意整数,n、m不一定有序。

Input

 第一行 T 代表数据的组数。

接下来有 T 行,每行两个整数n,m (0 <= n, m <= 100000000)

Output

 输出一个整数,代表所求区间内平方数之和。

Sample

Input 

3
1 4
10 3
17 20

Output 

5
13
0
#include
#include
#include
int main()
{
	int n, i; n = 0;//输入整数的个数,循环次数
	int a, b,m,sum;//a,b代表输入的区间数据;m是用于储存变量
	sum = 0; int j;//j是区间内数据
	scanf("%d", &n);
	for (i = 1; i <= n; i++) {
		scanf("%d %d", &a, &b);//未知两个数的大小所以下面要比较确定区间
		if (a > b) {
			m = b; b = a; a = m;//到此实现a和b的互换即确定a小b大
		}//明确区间是(a,b)
		for (j = a; j <= b; j++) {//确定j在区间内
			m = sqrt(j);
			if (m * m == j) {
				sum += j;
			}
		}
		printf("%d\n", sum);
		sum = 0;
	}
	return 0;
}

你可能感兴趣的:(c语言)