0
点赞
收藏
分享

微信扫一扫

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

王远洋 2024-10-08 阅读 20
c语言

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

法一:👉(正向思维)

#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

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

话不多说,上分析链接👉

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

 分析详见👉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

三、密钥(难度:**)

 👉分析的链接:

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

👉分析的链接: 

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

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

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

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

👉分析的链接 :(含对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、不了,谢谢 ****
请选择:>

六、后记 

这个do - while循环常用于菜单栏的弹出,之后如果有写设计游戏库的博文的话,会用到。 

举报

相关推荐

0 条评论