头歌C语言实验 辅助练习5:循环结构 I

第1关:计算阶乘

问题描述
自然数n的阶乘被定义为:n! = 1×2×3×……×n,而0! = 1。请编写一段程序,对于用户输入的不超过20的非负整数n,计算并输出n的阶乘。
注意:17的阶乘结果就会因为超过int所能表示的范围而产生溢出,因此必须使用能表示更大范围的数据类型。

输入
一个不超过20的非负整数n。

输出
按照“x!=xxxx”的格式输出n的阶乘结果。

输入示例
5

输出示例
5!=120

提示
17的阶乘结果就会因为超过int所能表示的范围而产生溢出,因此必须使用能表示更大范围的数据类型。请参照教材附录B选取合适的数据类型。

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main(){
int n,i;
long int x=1;
scanf("%d",&n);
if(n>=0){
for(i=1;i<=n;i++){
x=x*i;
}
}
printf("%d!=%ld",n,x);
}

第2关:九九乘法表

问题描述
请使用循环嵌套编写程序输出一个九九乘法表。

输入
无。

输出
如下所示的九九乘法表。
同一行中每两个等式之间用一个空格分开,为了保证等式对齐,每个等式中的积需要指定占用两个字符的宽度。
注意每一行的末尾不要有多余的空格。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
int main(){
int i,j;
int n=9;
for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
printf("%d*%d=%2d",j,i,i*j);
if(j<i){
printf(" ");
}
else
printf("\n");
}
}
return 0;
}

第3关:与7相关的数

问题描述
贝贝正在和她的朋友们玩一个游戏:小朋友们围坐成一圈,依次按照自然数从小到大的顺序报数,但遇到跟7相关的数就不能报出来,而是用拍手来替代,如果谁报出了与7相关的数就算是那个小朋友输了。为了不会轻易地输给其他小朋友,贝贝很想提前知道在100以内哪些数是不能报出来的。
与7相关的数包括7的倍数和数位上有7的整数,例如7,14,37,70都是与7相关的数。
聪明的你能帮一下可爱的贝贝吗?

输入
无。

输出
分多行输出所有100以内的与7相关的数,每行输出6个整数,每个整数占3个字符宽度,不要输出多余的空格。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
#define N 100
int main(){
int i,j=0;
for(i=1;i<N;i++){
if(i%7==0||i%10==7||i/10==7){
printf("%3d",i);
j++;
}
if(j%6==0&&j!=0){
printf("\n");
j=0;
}
}
return 0;
}

第4关:自由落体运动

问题描述
一个小球从高空中自由落下,在和地面碰撞后向上弹起,到达最高点后再次落下,……。现在假定小球每次碰撞地面时回弹的高度都是之前下落高度的一半,聪明的你是否能够编写一段程序,计算小球在第n次碰撞地面时已经总共在空中行进的距离,以及这一次碰撞后即将回弹的高度吗?

输入
用空格分开的一个浮点数h和一个正整数n,浮点数h表示小球的初始高度,n表示小球第n次碰撞地面。

输出
用空格分开的两个浮点数,保留2位小数。
第一个浮点数表示小球第n次碰撞地面时在空中行进的总距离;第二个浮点数表示小球第n次碰撞地面后即将回弹的高度。

输入示例
100 3

输出示例
250.00 12.50

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>

int main() {
double h,all;
int n,i;
scanf("%lf %d", &h, &n);
all = h;
for (i = 2; i <= n; i++) {
all += h;
h /= 2;
}
printf("%.2lf %.2lf\n", all, h/2);
return 0;
}

第5关:素数判定 I

问题描述
素数(Prime Number),又称为质数,它是不能被1和它本身以外的其它整数整除的正整数,按照这个定义,负数、0和1都不是素数。
请编写一段程序,对用户输入的非负整数n进行判定,若是素数则输出Yes,否则输出No。

输入
一个大于等于2的正整数n。

输出
若n为素数输出Yes,否则输出No。

输入示例
37

输出示例
Yes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

int main() {
int n,i,flag=0;
scanf("%d", &n);
for(i=2; i<n; i++){
if(n%i==0){
flag=1;
break;
}
}
if(flag==0){
printf("Yes");
}else
printf("No");
return 0;
}