C语言经典习题100例(五)21-25

   日期:2020-06-04     浏览:95    评论:0    
核心提示:猴子第一天摘下桃后每天吃一半多一个,第十天还剩1个,应使用逆向思维,从第十天往第一天反推。两个乒乓球队进行比赛,各出三人,求出三队赛手,需要嵌套循环,有多少对就进行多少次嵌套,遍历所有情况,并进行判断,符合则为所求结果。打印菱形有2种方式:把图分成上下两部分分别打印,每个部分两层嵌套,外层控制行、内层控制列;看成一个整体,用一个变量从负到正控制,也是外层和内层分别控制行和列。求一个分数组成的数列的前20项之和,分子分母构成斐波拉契数列,并进行循环求和。求前20项阶乘的和,直接使用循环,但是要为浮点型。

文章目录

    • 习题21
    • 习题2
    • 习题23
    • 习题24
    • 习题25

你不得不学的职场高效表达训练https://www.bilibili.com/audio/am30872653,需要的朋友自取哟。

习题21

猴子吃桃问题:
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个;以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,见只剩下一个桃子了,求第一天共摘了多少。

实现思路:
采用逆向思维进行反推。

代码如下:

#include<stdio.h>

int main(){
    int sum = 1, i;
    for(i = 10; i > 1; i--){
    	sum += 1;
		sum *= 2;
	}
	printf("Sum = %d\n", sum);
    
    return 0;
}

打印:

Sum = 1534

习题2

两个乒乓球队进行比赛,各出三人,甲队为 a、b、c 三人,乙队为 x、y、z 三人。已抽签决定比赛名单,有人向队员打听比赛的名单,a 说他不和 x 比, c 说他不和 x、z 比,请编程序找出三对赛手的名单。

实现思路:
多层循环嵌套,遍历并判断。

代码如下:

#include<stdio.h>

int main(){
    char a, b, c;
    for(a = 'x'; a <= 'z'; a++){
    	for(b = 'x'; b <= 'z'; b++){
    		for(c = 'x'; c <= 'z'; c++){
    			if(a != b && b!= c && a != c){
    				if(a != 'x' && c != 'x' && c != 'z'){
    					printf("a-%c\nb-%c\nc-%c\n", a, b, c);
					}
				}
			}			 
		}
	}
    
    return 0;
}

打印:

a-z
b-x
c-y

习题23

打印出如下图案(菱形):

实现思路:
方式一——分成两部分:
先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。
代码如下:

#include<stdio.h>

int main(){
    int i, j;
    for(i = 0; i < 4; i++){
    	for(j = 0; j < 3 - i; j++){
    		printf(" ");
		}
		for(j = 0; j < 2 * i + 1; j++){
    		printf("*");
		}
		printf("\n");
	}
	for(i = 0; i < 3; i++){
		for(j = 0; j <= i; j++){
			printf(" ");
		}
		for(j = 0; j < 5 - 2 * i; j++){
			printf("*");
		}
		printf("\n");
	}
    
    return 0;
}

打印:

   *
  ***
 *****
*******
 *****
  ***
   *

方式二——看成一个整体:
用一个遍历来控制,使之成为一个整体,循环打印。

代码如下:

#include<stdio.h>
#include <math.h>

int main(){
    int i, j;
    for(i = -3; i < 4; i++){
    	for(j = 0; j < abs(i); j++){
    		printf(" ");
		}
		for(j = 0; j < 7- 2 * abs(i); j++){
    		printf("*");
		}
		printf("\n");
	}
    
    return 0;
}

效果与前面相同。

习题24

有一分数序列:2/1、3/2、5/3、8/5、13/8、21/13…
求出这个数列的前20项之和。

显然,这个数列每个元素的分子和分母构成了斐波拉契数列,可循环求和。

代码如下:

#include<stdio.h>

int main(){
    float sum = 0, f1 = 1, f2 = 1, i, temp;
    for(i = 0; i < 20; i++){
    	temp = f2;
    	f2 += f1;
    	f1 = temp;
    	sum += f2 / f1;
	}
	printf("Sum = %8.4f\n", sum);
    
    return 0;
}

打印:

Sum =  32.6603

习题25

求1+2!+3!+…+20!的和。

实现思路:
使用循环求和。

代码如下:

#include<stdio.h>

int main(){
	float i, t = 1, sum = 0;
	for(i = 1; i < 21; i++){
		t *= i;
		sum += t;
	}
	printf("Sum = %.2f\n", sum);
    
    return 0;
}

打印:

Sum = 2561327455189073900.00

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服