C(十三)while、for、do-while循环综合(一)

 本文目录:👉👉👉

一、数学问题(一)(难度:*)

二、图形的打印(难度:**)

三、密钥(难度:**)

四、数学问题(二)(难度:***)

五、实际场景(难度:***)--- 自选小炒

 

        【分解目标1】选择吃与不吃

 

        【分解目标2】选择如下(自选小炒配料):>(注:米、面、粉免费)

 

        【分解目标3】选择哪种肉,哪种菜

 

        【分解目标4】同学选完后,给下一个同学选择

前言:👉👉👉

三大循环结构、各种语句和几个关键字的综合运用。👉

 

while循环 --- 军训匕首操情景

https://blog.csdn.net/2401_87025655/article/details/142651077

for循环 --- 黑神话情景

https://blog.csdn.net/2401_87025655/article/details/142684637

do - while循环 --- 致敬革命烈士

https://blog.csdn.net/2401_87025655/article/details/142699352

goto语句 --- 关机程序(另一位作者的)

https://blog.csdn.net/m0_68865259/article/details/124537858?fromshare=blogdetail&sharetype=blogdetail&sharerId=124537858&sharerefer=PC&sharesource=2401_87025655&sharefrom=from_link

一、数学问题(一)(难度:*)

场景一:求12 与 18的最大公因数

法一:👉(正向思维)

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
int main()
{
	int a = 12;
	int b = 18;
	int max = 1; //1、两个正整数的公因数肯定有1,不妨先令最大公因数为1
	int i = 1;
	for (i = 1; i <= 12; i++)
	{
		if (a % i == 0 && b % i == 0)
		{
			max = i; //2、之后如果找到比1更大的,再赋值给max
		}
	}
	printf("%d", max);
	return 0;
}

法二:👉(逆向思维) 

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
int main()
{
	int a = 12;
	int b = 18;
	int max = 0;
	int i = 0;
	for (i = 12; i > 0; i--)
	{
		if (a % i == 0 && b % i == 0)
		{
			max = i;
			break; //从大到小 --- 找到那个最大的就打破循环
		}
	}
	printf("%d", max);
	return 0;
}

场景二:求十个整数的最大值

法一:do - while循环 

法二:for循环

👉https://blog.csdn.net/2401_87025655/article/details/142699137

场景三: 编写程序数一下 1到 100 的所有整数中出现多少个数字9

本题有一个初学者容易掉进的坑(反正我就掉了,哈哈😄)

话不多说,上分析链接👉

 https://blog.csdn.net/2401_87025655/article/details/142699192

场景四:一个正整数的逆序打印

输入示例:1234

输出示例:4321 

 分析详见👉C题(八)一个正整数的逆序打印(用循环结构实现)

https://blog.csdn.net/2401_87025655/article/details/142708516

二、图形的打印(难度:**)

 场景一:矩形、直角三角形

👉https://blog.csdn.net/2401_87025655/article/details/142651077

 场景二:正三角形

👉 https://blog.csdn.net/2401_87025655/article/details/142675413

三、密钥(难度:**)

场景一:“芝麻开门 ”是通往C语言的大门的暗号,现在你需要说对暗号,大门才会打开。

 👉分析的链接:

https://blog.csdn.net/2401_87025655/article/details/142693306

场景二:输入一串密码,如:“123   xxxx” ,然后读取并确认,是 --- Y;否 --- N。 

👉分析的链接: 

https://blog.csdn.net/2401_87025655/article/details/142694774

四、数学问题(二)(难度:***)

 场景一:水仙花数是指一个三位数,它的每个数位上的数字的立方和等于它本身。
例如,153就是一个水仙花数,因为1³ + 5³+ 3³ = 1 + 125 + 27 = 153。

👉分析的链接(难点剖析): 

https://blog.csdn.net/2401_87025655/article/details/142697771

场景二:打印1到100之间的素数。(素数也叫质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。例如2、3、5、7、11等都是素数。)

👉分析的链接 :(含对C语言中0与非0的认知、flag证伪理论)

https://blog.csdn.net/2401_87025655/article/details/142703599

五、实际场景(难度:***)--- 自选小炒

 场景一:

“要吃什么吗,靓仔?” 热情的食堂阿姨问你了,你要怎么回答?

 【分解目标1】选择吃与不吃

第一步:打印菜单(先执行 --- 用do - while循环) 

    do
    {
        //菜单栏
        printf("******* 1、炒面 *******\n");
        printf("******* 2、炒饭 *******\n");
        printf("******* 3、炒粉 *******\n");
        printf("**** 0、不了,谢谢 ****\n");
    }
    while();

 第二步:开始选择

        //选择栏
        int input = 1;
        printf("请选择:>");
        scanf("%d", &input);

第三步:循环实现 --- 如果不吃,阿姨就问下一位同学

基于:在C语言中,非0表示真,0表示假,所以👉

选择 1、2 、3(非0)时,加上取反操作符 !-----> 变为0,表示假,循环终止。

选择 0 时,加上 !------> 变为非0,表示真,循环继续。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int input = 1;
    printf("要吃什么吗,靓仔?\n");
    do
    {
        //菜单栏
        printf("******* 1、炒面 *******\n");
        printf("******* 2、炒饭 *******\n");
        printf("******* 3、炒粉 *******\n");
        printf("**** 0、不了,谢谢 ****\n");
        //选择栏
        printf("请选择:>");
        scanf("%d", &input);
        //如果不吃
        if (input == 0)
        {
            printf("\n你呢,同学?\n\n");
        }
        //如果吃
        else
        {
            printf("循环体1");
        }
    } 
    while (!input); //非0表示真,0表示假
    return 0;
}

【分解目标2】选择如下(自选小炒配料):>(注:米、面、粉免费)

————两肉两菜 :8元

————三肉两菜 :9元

————三肉三菜 :10元

接下来,编写循环体1

            printf("同学,有8、9、10元的配料,你要几元的配料呀?:>");
            int input1 = 0;
            scanf("%d",&input1);
            switch (input)
            {
            case 8:
                printf("语句1\n");
                break;
            case 9:
                printf("语句2\n");
                break;
            case 10:
                printf("语句3\n");
                break;
            }

tip:因为我这里说明在 8、9、10中选,所以我switch内部没有写default子句。(当然,有写更好)。  

【分解目标3】选择哪种肉,哪种菜

以8元的为例,选两肉两菜,共4个选择,所以语句1为 👉

printf("同学,选一下配料。\n");
int j = 0;
for (j = 4; j > 0; j--)
{
   printf("这个。\n");
}

同理,9元---5个选择 ; 10元 --- 6个选择。 

【分解目标4】同学选完后,给下一个同学选择

语句1、2、3执行完后都加上input = 0,使得do - while循环继续。 


最终代码 👉

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int input = 1;
    printf("要吃什么吗,靓仔?\n");
    do
    {
        //菜单栏
        printf("******* 1、炒面 *******\n");
        printf("******* 2、炒饭 *******\n");
        printf("******* 3、炒粉 *******\n");
        printf("**** 0、不了,谢谢 ****\n");
        //选择栏
        printf("请选择:>");
        scanf("%d", &input);
        //如果不吃
        if (input == 0)
        {
            printf("\n你呢,同学?\n\n");
        }
        //如果吃
        else
        {
            //选小炒配料
            printf("同学,有8、9、10元的配料,你要几元的配料呀?:>");
            int input1 = 0;
            scanf("%d",&input1);
            int j = 0;
            switch (input1)
            {
            case 8:
                printf("同学,选一下配料。\n");
                for (j = 4; j > 0; j--)
                {
                    printf("这个。\n");
                }
                input = 0;
                break;
            case 9:
                printf("同学,选一下配料。\n");
                for (j = 5; j > 0; j--)
                {
                    printf("这个。\n");
                }
                input = 0;
                break;
            case 10:
                printf("同学,选一下配料。\n");
                for (j = 6; j > 0; j--)
                {
                    printf("这个。\n");
                }
                input = 0;
                break;
            }
        }
    } 
    while (!input); //非0表示真,0表示假
    return 0;
}

运行结果:👉

要吃什么吗,靓仔?
******* 1、炒面 *******
******* 2、炒饭 *******
******* 3、炒粉 *******
**** 0、不了,谢谢 ****
请选择:>0

你呢,同学?

******* 1、炒面 *******
******* 2、炒饭 *******
******* 3、炒粉 *******
**** 0、不了,谢谢 ****
请选择:>1
同学,有8、9、10元的配料,你要几元的配料呀?:>8
同学,选一下配料。
这个。
这个。
这个。
这个。
******* 1、炒面 *******
******* 2、炒饭 *******
******* 3、炒粉 *******
**** 0、不了,谢谢 ****
请选择:>2
同学,有8、9、10元的配料,你要几元的配料呀?:>9
同学,选一下配料。
这个。
这个。
这个。
这个。
这个。
******* 1、炒面 *******
******* 2、炒饭 *******
******* 3、炒粉 *******
**** 0、不了,谢谢 ****
请选择:>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值