关于简单的流程结构的一些基础题练习分享

分享的是一些比较基础的题,比较适合初学者练习,水平高看不上的勿喷谢谢,有不同解法可以多多交流。

1.打印星星塔

输出以下形式的星星塔

进行简单的分析:用 i 代表第几行,用 j 代表该行输出" * "之前输出的空格数,用 k 代表该行的" * "的数量,那么可以得到以下数量关系:

由此可见 i j k之间的关系满足:j = 5 - i     k = 2 * i - 1  代码如下:

#include <stdio.h>

int main()
{

	for (int i = 1; i <= 5; i++)
	{
		for (int j = 1; j <= 5-i; j++)
		{
			printf(" ");
		}

		for (int k = 1; k <= 2 * i - 1; k++)
		{
			printf("*");
		}

		printf("\n");
	}

	return 0;
}

2.打印九九乘法表

通过观察发现,每一行都是从1开始乘,乘的数就是该行对应的数,乘到该行对应的数。以第三行为例,从1开始乘,到3结束,同时每个数都是乘3,1*3   2*3   3*3,第一个数从1开始,用 i 表示第几行,同时 i 也是该行代表的数,用 j 进行循环,i 和 j 的关系就是 j <= i,代码如下:

#include <stdio.h>

int main()
{

	for (int i = 1; i <= 9; i++)
	{
		for (int j = 1; j <= i; j++)
		{
			printf("%d * %d = %d\t", j, i, j * i);
		}

		printf("\n");
	}

	return 0;
}

注:使用" \t "的目的是为了方便输出的时候比较整齐

3.年龄的二倍

题目:今年爸爸的年龄是36岁,儿子的年龄是13岁,问:经过多少年父亲的年龄是儿子的二倍。

用 f 代表父亲的年龄,s 代表儿子的年龄,y 代表需要经过多少年,那么只需要在循环里使 f 和 s 递增直至满足 f = 2*s 的表达式即可,代码如下:

#include <stdio.h>

int main()
{

	int f = 36;
	int s = 13;
	int y = 0;
	
	while (f > 0)//随便写一个条件能使循环一直进行就行
	{
		if (f == 2 * s)
		{
			printf("%d\n", y);
			break;
		}
		f++;
		s++;
		y++;
	}

	return 0;
}

4.水仙花数

水仙花数:一个各位数字的立方和等于该数本身的三位数

题目的重点就是把各位数字表示出来,若用 i 表示任意一个三位数,那么百位数字可以用 i / 100 表示,十位数字可以用 i % 100 / 10 表示,个位数字可以用 i % 100 % 10 表示,代码如下:

#include <stdio.h>

int main()
{

	for (int i = 100; i <= 999; i++)
	{
		int a = i / 100;           //百位数字
		int b = i % 100 / 10;      //十位数字
		int c = i % 100 % 10;      //个位数字
		if (a * a * a + b * b * b + c * c * c == i)
		{
			printf("%d\n", i);
		}
	}

	return 0;
}

5.猴子吃桃

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

题目可以从最后一天入手,反推到第一天,根据已知条件利用循环将第一天的摘的桃子数求出,代码如下:

#include <stdio.h>

int main()
{
	int tao = 1;

	for (int i = 1; i <= 9; i++)
	{
		tao = (tao + 1) * 2;
	}

	printf("%d\n", tao);

	return 0;
}

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值