当前位置: 首页 > news >正文

c语言基础08

直到型循环的实现

特点:先执行,后判断,不管条件是否满足,至少执行一次。

代表:do…while,goto(已淘汰)

do…while

语法:

do
{
    循环体;
}   while(循环条件);

说明:

​ ①循环条件的返回值必须是逻辑值

​ ②{}包起来的内容整体称为循环体

​ ③我们要在循环体中控制循环条件的变化,否则会产生死循环。

特点:先执行后判断,不管条件是否满足,至少执行一次。

案例:

  • 求1~100内的偶数和
  • 分析:
    • 创建一个变量,用来存储sum
    • 创建一个循环变量i = 2;
    • 创建一个do…while循环,在循环体中,校验偶数 i % 2 == 0,如果满足,就实现偶数和计算sum += i
    • 计算完之后,再循环体的末行,对循环条件进行更新,i++
    • 限制循环条件:i <= 100
    • 循环结束,打印输出 sum的值
  • 代码:
#include <stdio.h>

int main(int argc,char *argv[])
{
// 创建一个变量,用来存储偶数和
    int sum = 0;
// 创建一个循环变量
	int i = 2;
	do
	{
		if(i % 2 == 0)
	{
			sum += i;
	}
		i++;// 更新循环变量
	} while(i <= 100);
	printf("1~100以内的偶数和是%d\n",sum);
}
goto

语法:

goto 标签(label)

标签:标明目标的代码的位置,是一个不加双引号字符串。

案例:

  • 求1~100内的偶数和
  • 代码:-
#include <stdio.h>

	int main(int argc,char *argv[])
{
// 创建一个变量存放偶数和
	int sum = 0;
// 创建一个循环变量
	int i = 2;
// 定义一个标签(标签名自定义,这是一个不带引号的字符串)我们一般给需要重复执行的代码添加标签
	loop: // 这个标签需要通过goto触发
		if(i % 2 == 0)
	{
	sum += i;
	}
	i++;
		// 循环条件的校验
		if (i <= 100)
	{
		// 触发循环
		goto loop;
	}
		printf("1~100以内的偶数和是%d\n",sum);
	return 0;
	}

循环的嵌套

案例:

  • 求100~200之间的所有素数。
  • 分析:
    • 只能被1和自身整除的数叫做素数或者质数。(做这个题,思路要反着来,过滤合数,剩余的就是素数)
  • 代码:
#include <stdio.h>
int main(int argc,char *argv[])
{
// 创建一个变量,存放100~200之间的自然数
    int num = 100;
    // 循环变量,默认从2开始,因为自然数除以1没有意义,因为所有自然数都能被1整数,我们现在需要校2 ~ 自身 -1之间
int i;
// 定义一个标志位:用来记录1~自身之间能被当前自然数整除的次数,用来校验是否位素数
int is_flag; // 默认就是素数
// 第1层for循环:生成100~200之间的自然数
for(; num <= 200; num++)
{
// 每个自然数在判别之前,需要重置标志位
is_flag = 1;
// 第2层循环:校验每一个自然数,检测其是否是非素数 举例:num = 4, i= 2~3 9
// for (i = 2; i< num; i++)
// for (i = 2; i*1 <= num; i++)
for(i = 2;i < num / 2; i++) // 排除1和自身 9, 9 % 2==0,9 % 3==0...9%8==0 20 2 4
5 10
{
// 被校验数是否能被校验数整除,如果能,就是非素数
    if ( num % i == 0)
{
// 如果是和数,就跳出
is_flag = 0;
break;// break就是结束循环
}
}
// 根据标志位,判断该自然数是否是素数
if (is_flag) // 条件判断:is_flag == 1 缩写 is_flag(推荐),is_flag == 0 缩写
!is_flag(推荐)
{
printf("%-4d",num);
}
    
}
    printf("\n");
return 0;
}

基础算法模型

1.累和

  • 定义一个变量(sum),并赋初值为0;
  • 该变量累加(+=)每一个数据项(i);
  • 当访问完每一个数据项,此时该变量的取值就是累加和的结果。

2.累乘

  • 定义一个变量,并赋初值为1;
  • 用该变量累乘(*=)每一个数据项
  • 当访问完每一个数据项,此时该变量的取值就是累乘的结果。

3.极值

  • 定义一个变量,并赋初值为第一个数据项;
  • 从第二个数据项开始,依次于该变量进行比较,如果大于/小于该变量,则将当前数据项的数据赋值给该变量。
  • 当访问完每一个数据项,此时该变量的取值就是求极值的结果。

break与continue

break

功能:

​ ①用在switch中,用来跳出switch的case语句;如果case没有break,可能会产生case穿透。

​ ② 用在循环中(while、do…while、for),提前结束循环,也就是跳出整个循环。

说明:

​ ① break不能用于循环语句和switch语句之外的任何其他语句之中。

​ ② break只能终止并跳出最近一层的循环结构。

图示:

在这里插入图片描述

continue

功能:continue语句不会结束整个循环,而是跳过本次循环尚未执行的语句,进入下一次循环。

说明:

① 仅用于循环语句中。

② 在嵌套循环的情况下,continue语句只对包含它的最近一层的循环起作用。

图示:

在这里插入图片描述

综合案例:猜拳游戏

代码:

/*************************************************************************
  > File Name:    demo01.c
  > Author:       王创斌
  > Description:  基于流程控制实现“猜拳游戏”
  > Created Time: 2025年02月13日 星期四 14时10分28秒
 ************************************************************************/

#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>


int main(int argc,char *argv[])
{
    int is_stop = 1;

    int is_select_ct = 1;
    int computer_no;
    char computer_name[20];

    int is_select_own = 1;
    int own_no;
    char own_name[20];

    int ct_no;
    char ct_name[20];
  printf("***********************************\n");
  printf("*         猜拳游戏 v2.5版         *\n");
  printf("***********************************\n");

while(is_stop)
{
  while (is_select_ct)
  {
    printf("请选择您的对战玩家:\n[1] 哪吒 [2] 牢大 [3] 蔡徐坤\n");
    scanf("%d",&computer_no);

    switch (computer_no)
    {
        case 1:
            strcpy(computer_name,"哪吒");
            is_select_ct = 0;
            break;
        case 2:
            strcpy(computer_name,"牢大");
            is_select_ct = 0;
            break;
        case 3:
            strcpy(computer_name,"蔡徐坤");
            is_select_ct = 0;
            break;
        default:
            strcpy(computer_name,"无效玩家");
            is_select_ct = 1;
    }
    printf("您选择的对手是%s\n\n",computer_name);
  }


    while (is_select_own)
    {
        printf("请选择您要出拳的序号:\n[1] 石头 [2] 剪刀 [3]布\n");
        scanf("%d",&own_no);
        switch(own_no)
        {
            case 1:
                strcpy(own_name,"石头");
                is_select_own = 0;
                break;
            case 2:
                strcpy(own_name,"剪刀");
                is_select_own = 0;
                break;
            case 3:
                strcpy(own_name,"布");
                is_select_own = 0;
                break;
            default:
                strcpy(own_name,"无效的出拳");
                is_select_own = 1;
        }
        printf("您出的是%s\n\n",own_name);
    }

    srand((unsigned)time(NULL));


    ct_no = rand()%3+1;

        switch(ct_no)
        {
            case 1:
                strcpy(ct_name,"石头");
                break;
            case 2:
                strcpy(ct_name,"剪刀");
                break;
            case 3:
                strcpy(ct_name,"布");
                break;
        }
        printf("%s出的拳是%s\n\n",computer_name,ct_name);

    if((own_no == 1 && ct_no == 2)||(own_no == 2 && ct_no == 3)||(own_no == 3 && ct_no ==1))
    {
        printf("恭喜,您获胜\n\n");
    }
    else if(own_no == ct_no)
    {
        printf("平局\n");
    }
    else
    {
        printf("很遗憾,菜就多练吧!\n");
    }

    char stop;
    printf("是否退出游戏?[Y/N]\n");
    getchar();
    scanf("%c",&stop);

    if(stop == 'Y' || stop =='y')
    {
        is_select_ct=0;
        is_select_own=0;
        is_stop=0;
        printf("\n游戏结束!\n");
    }
    else
    {
        is_stop=1;
        is_select_own=1;
        is_select_ct=1;
    }
    }


    return 0;
}

相关文章:

  • 【Elasticsearch】监控与管理:集群健康检查
  • 【ENSP】华为设备console 认证配置
  • (学习总结22)Linux 基本指令1
  • 离散数学之谓词等值式与蕴涵式
  • 2.13寒假作业
  • 初阶c语言(练习题,猜随机数)
  • 手写一个Java Android Binder服务及源码分析
  • Day 38 卡玛笔记
  • web自动化笔记(二)
  • MySQL判空函数--IFNULL函数的使用
  • TikTok成功打破传统媒体壁垒,用户涌入平台创作
  • 在带有Intel NPU的Windows上安装IPEX-LLM
  • Python 闭包与装饰器
  • Softhsm储存安全数据性能整理
  • Swift 的 KeyPath 是什么?
  • NS6116-同步降压稳压器 3.1A输出电流 耐压30V
  • 测试方案整理
  • 【原理图PCB专题】自制汉字转码工具,适配Allgero 17版本 Skill
  • C++模板进阶
  • DeepSeek人工智能AI汽车营销销售培训讲师培训师唐兴通讲课汽车销售大数据存量客户数字化营销数字化销售大模型销售话术引流内容社群私域
  • 网站搜索条怎么做/网络seo外包
  • dw网站引导页怎么做/搜索引擎优化方法总结
  • 做网站用什么软件/上海高端seo公司
  • 珠海网站建设及优化/百度网页排名怎么提升
  • 汕头市营商环境建设监督局网站/企业网站怎么推广
  • 免费项目管理软件app/太原seo全网营销