C语言超详细讲解——分支与循环【知识讲解篇】

【C语言详解】分支与循环 2021-10-29- 作者:Nico 时间: 2021-10-25 网站地址:https://github.com/sxfinn 目录 文章目录2021-10-29-目录????什么是语句????分支语句(选择结构)????循环语句????goto语句 ????什么是语句 C语句可分为以下五类: 表达式语句 函数调用语句 控制语句 复合语句 空语句 这里介绍的是控制语句。 控制语句用于控制程序的执行流程,以实现特定的功能和结构,它们具有特定的语句定义符组成,C语言有九种控制语句。 分为三类: 分支 阅读详情

前言

学习了前面的基础内容后,我们就可以进入C语言的重要部分——分支与循环,从这一部分开始,就要勤于练习,才能有成效,本篇为知识讲解,下篇为实战演练,可根据目录跳转哦。

正文

C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,我们之后所有的代码都可以拆分为这三种结构。总的来说,可以使用if、switch实现分支结构,使用for、while、do while实现循环结构。

1 if语句

1.1 if

if语句的语法形式:

> if (表达式) 
> 		 语句

表达式成立(为真,非0),则语句执行;表达式不成立(为假,0),则语句不执行。
流程图
举例
判断一个数为奇数,我们知道奇数被除2余1,所以代码可以这样写

#include <stdio.h>
int main()
 {
    int num = 0;//初始化
    scanf("%d", &num);
    if(num % 2 == 1 )
        printf("%d是奇数\n", num);
    return 0;
}
1.2 else

else是与if搭配使用
if…else…语句语法形式:

if (表达式)
语句1
else
语句2

这样我们可以将判断奇偶的代码补充完整

#include<stdio.h>
int main() {
    int num=0;
    scanf("%d",&num);
    if(num%2 ==1)
        printf("%d是奇数\n",num);
    else
        printf("%d是偶数\n",num);
    return 0;
}

自己在VS中练习一下
练习:用年龄判断一个人成年了吗?

#include<stdio.h>
int main() 
{
    int age=0;
    scanf("%d",&age);
    if(age>=18)
        printf("成年了\n");
    else
        printf("未成年\n");
    return 0;
}
1.3 分支中包含多条语句

默认if和else语句只控制一条语句,若要控制多条语句,需使用{}将代码括起来(程序块或复合语句)。

#include <stdio.h>
int main() {
    int age = 0; 
    scanf("%d", &age);
    if(age >= 18) 
    { 
        printf("成年了\n");
        printf("可以谈恋爱了\n");
    }
    return 0;
}

如果不用{},if包含第一条语句,无论是否age >= 18,都会执行printf(“可以谈恋爱了\n”);

1.4 嵌套if

在if else语句中,else可与另一个if语句连用,构成多重判断。
例:判断输入整数是0,还是正数或者负数(自己思考一下)

#include<stdio.h>
int main() 
{
    int num=0;
    scanf("%d",&num);
    if(num==0)
        printf("输入的数字是0\n");
    else if(num>0)
        printf("输入的数字是正数\n");
    else
        printf("输入的数字是负数\n");
    return 0;
}

练习:根据年龄打印不同阶段。

// 方法1
#include <stdio.h>
int main() {
    int age=0;
    scanf("%d", &age);
    if(age<18)
        printf("少年\n");
    else if(age<=44)
        printf("青年\n");
    else if(age<=59)
        printf("中老年\n");
    else if(age<=89)
        printf("老年\n");
    else
        printf("老寿星\n");
    return 0;
}

这个问题中是不是if,else很多很麻烦,别急,等会有更简单的switch

1.5 悬空else问题

有时候遇到一些不注意代码缩进的同学,if嵌套写的乱七八糟,

#include <stdio.h>
int main() {
    int a = 0;
    int b = 3;
    if (a == 0)
        if (b == 2)
            printf("hehe\n");
        else
            printf("haha\n");
    return 0;
}

请问

else
printf(“haha\n”);

匹配的if是哪一个?

这时候记得:else总是跟最接近的if匹配。
最好这么写

#include <stdio.h>
int main() {
    int a = 0;
    int b = 3;
    if (a == 0)
    {
        if (b == 2)
            printf("hehe\n");
        else
            printf("haha\n");
    }
    return 0;
}
1.6 综合小练习:闰年的判断

闰年判断规则:能被4整除并且不能被100整除是闰年;能被400整除是闰年。

#include <stdio.h>
int main() {
    int year = 0;
    scanf("%d", &year);
    if(year%4==0 && year%100!=0)
        printf("是闰年\n");
    else if(year%400==0)
        printf("是闰年\n");
    else
        printf("不是闰年\n");
    return 0;
}

2. switch语句

switch语句是一种特殊形式的if…else结构,用于判断条件有多个结果的情况。

switch (expression) { 
    case value1: statement;
    case value2: statement;
    ...
    default: statement;
}

switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执⾏default ⼦句。

2.1 if语句和switch语句的对比
// 使用if语句计算除3之后的余数
#include <stdio.h>
int main() {
    int n = 0;
    scanf("%d", &n);
    if(n%3 == 0)
        printf("整除,余数为0\n");
    else if(n%3 == 1)
        printf("余数是1\n");
    else
        printf("余数是2\n");
    return 0;
}
//使用switch
#include <stdio.h>
int main()
{
 int n = 0;
 scanf("%d", &n);
 switch(n%3)
 {
 case 0:
 	printf("整除,余数为0\n"); 
 	break;
 case 1:
	 printf("余数是1\n"); 
 	break;
 case 2:
 	printf("余数是2\n"); 
 	break;

}
return 0;
}

上述的代码中,我们要注意的点有:

  1. case 和后边的数字之间必须有空格
  2. 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。
2.2 switch语句中的break

每个case语句中的代码执行完成后,需要加上break,才能跳出这个switch语句,否则代码会继续往下执行。

// 输入1~7的数字,打印对应的星期几
#include<stdio.h>
int main() {
    int day=0;
    scanf("%d", &day);
    switch(day) {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;
        case 4:
            printf("星期四\n");
            break;
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期天\n");
            break;
    }
    return 0;
}

switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果。当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。

2.3 switch语句中的default

当switch后的表达式的值无法匹配代码中的case语句时,可加入default子句进行处理。

#include <stdio.h>
int main() {
    int day=0;
    scanf("%d",&day);
    switch(day) {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("工作日\n");
            break;
        case 6:
        case 7:
            printf("休息日\n");
            break;
        default:
            printf("输入错误\n");
            break;
    }
    return 0;
}
2.4 switch语句中的case和default的顺序问题

switch语句中case语句和default语句没有顺序要求,通常把default子句放在最后处理。

3. while循环

C语⾔提供了3种循环语句, while 就是其中⼀种,接下来就介绍⼀下 while 语句。
while 语句的语法结构和 if 语句⾮常相似。

3.1 if和while的对比
if(表达式)
 语句;
 
 
while(表达式)
 语句;//如果循环体想包含更多的语句,可以加上⼤括号 

if语句条件满足时执行一次语句,while语句条件满足时可实现循环效果。

// if语句示例
#include <stdio.h>
int main() {
    if(1)
        printf("hehe\n");
    return 0;
}
//代码2 
#include <stdio.h>
int main()
{
 while(1)
 printf("hehe\n"); //while后边的条件满⾜,死循环的打印hehe 
 return 0;
}

这就是他们的区别,while语句是可以实现循环效果的。
(运行结果知道后记得关掉黑框(DOS)死循环占用内存)

3.2 while语句的执行流程

先判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断是否进行下一次循环。

3.3 while循环的实践
// 在屏幕上打印1~10的值
#include <stdio.h>
int main() {
    int i = 1;
    while(i<=10) {
        printf("%d ", i);
        i = i+1; //i++;
    }
    return 0;
}

题⽬解析

  1. 要想得到n的最低位,可以使⽤n%10的运算,得到的余数就是最低位,如:1234%10得到4
  2. 要想去掉n的最低位,找出倒数第⼆位,则使⽤ n=n/10 操作就可以去掉最低位的,如:
    n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第⼆位3。
  3. 循环1和2两个步骤,在n变成0之前,就能到所有的位。
3.4 练习

输入一个正的整数,逆序打印这个整数的每一位。

#include <stdio.h>
int main() {
    int n = 0; 
    scanf("%d",&n);
    while(n) { 
        printf("%d ", n%10);
        n /= 10;
    }
    return 0;
}

4. for循环

4.1 语法形式
for(表达式1; 表达式2; 表达式3) 
	 语句

表达式1用于循环变量的初始化,表达式2用于循环结束条件的判断,表达式3用于循环变量的调整。

4.2 for循环的执行流程

首先执行表达式1初始化循环变量,接着执行表达式2的判断部分,若表达式2的结果为0,则循环结束;若不为0则执行循环语句,循环语句执行完后,执行表达式3调整循环变量,然后再去判断表达式2,决定循环是否继续。

4.3 for循环的实践
// 在屏幕上打印1~10的值
#include <stdio.h>
int main() {
    int i = 0;
    for(i=1; i<=10; i++) {
        printf("%d ", i);
    }
    return 0;
}
4.4 while循环和for循环的对比

for和while在实现循环的过程中都有初始化、判断、调整这三个部分,但for循环的三个部分非常集中,便于代码的维护,while循环的三个部分在代码较多时比较分散,形式上for循环更优。

4.5 练习

计算1~100之间3的倍数的数字之和。

// 参考代码
#include<stdio.h>
int main() {
    int i=0;
    int sum=0;
    for(i=1;i<=100;i++) {
        if(i%3==0)
            sum+=i;
    }
    printf("%d\n",sum);
    return 0;
}

5. do-while循环

5.1 语法形式
 do 
	语句; 
	while(表达式);

while和for循环先判断条件再执行循环语句,do while循环先执行循环体,再执行while后的判断表达式。

5.2 do-while循环的执行流程

先执行循环体语句,再执行判断表达式,判断表达式的结果为真,则继续循环;结果为假,则循环结束。do while循环的循环体至少执行一次。

5.3 do-while循环的实例
// 在屏幕上打印1~10的值
#include <stdio.h>
int main() {
    int i = 1;
    do {
        printf("%d ", i);
        i = i + 1;
    }while(i<=10);
    return 0;
}
5.4 练习

输入一个正整数,计算这个整数是几位数。

#include <stdio.h>
int main() 
{
    int n=0;
    scanf("%d",&n);
    int cnt=0;
    do {
        cnt++;
        n=n/10;
    }while(n);
    printf("%d\n",cnt);
    return 0;
}

6. break和continue语句

break用于永久终止循环,continue用于跳过本次循环中continue后边的代码。

6.1 while循环中的break和continue
// break举例
#include <stdio.h>
int main() 
{
    int i=1;
    while(i<=10) {
        if(i==5)
            break;
        printf("%d",i);
        i =i+1;
    }
    return 0;
}

运行结果
continute举例

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			continue;
		//当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅ 
		//因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环 
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

到这⾥我们就能分析出来, continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成死循环。

6.2 for循环中的break和continue
// break举例
#include<stdio.h>
int main() 
{
    int i=1;
    for(i=1;i<=10;i++) {
        if(i==5)
            break;
        printf("%d",i);
    }
    return 0;
}

讲解

6.3 do-while循环中的break和continue

do.while语句中的break和continue的作用和while循环中几乎一模一样。

#include <stdio.h>
int main() 
{
    int i = 1;
    do {
        if(i==5)
            break;
        printf("%d",i);
        i=i+1;
    }while(i<=10);
    return 0;
}

7. 循环的嵌套

三种循环(while、do while、for)往往会嵌套在一起解决问题。
例 :找出100~200之间的素数,并打印在屏幕上
解析:

  1. 要从100-200之间找出素数,⾸先得有100~200之间的数,这⾥可以使⽤循环解决。
  2. 假设要判断i是否为素数,需要拿2—i-1之间的数字去试除i,需要产⽣2~i-1之间的数字,也可以使⽤
    循环解决。
  3. 如果2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。
#include <stdio.h>
int main() 
{
    int i=0;
    for(i=100;i<=200;i++) { 
        int j=0;
        int flag=1; 
        for(j=2;j<i;j++) { 
            if(i%j==0) { 
                flag=0;
                break;
            }
        }
        if(flag ==1)
            printf("%d ",i);
    }
    return 0;
}

8. goto语句

goto语句可以实现在同一个函数内跳转到设置好的标号处。

#include<stdio.h>
int main() {
    goto next;//next为标号
    printf("haha\n");
next:
    printf("跳过了haha的打印\n");
    return0;
}

注意:这儿只是介绍,新手暂时不要使用goto,等以后有更深的理解后,再酌情使用,不然有可能将系统搞死!!!

总结

分支与循环的讲解就这些,内容不多,但要勤于练习,勤于思考,如有谬误,欢迎评论区指正,下期是一个实战练习,敬请期待,希望点赞关注收藏支持一下,谢谢。

【C语言】分支与循环 基础 阅读详情

相关推荐

【LVGL】从HTML到LVGL:嵌入式UI的设计迁移与落地实践

嵌入式UI迁移实践:从HTML到LVGL 本文介绍了将HTML/CSS设计的UI原型迁移到嵌入式系统(LVGL)的完整流程,重点涉及"HTML→Figma→LVGL"的三步转换方法。具体内容包括: 设计迁移流程:通过Figma作为中间桥梁,将HTML原型转化为标准设计资产,再适配到LVGL库; 工具与参数准备:详细列出了设计迁移所需的工具链和需要提取的核心设计参数; Figma还原步骤:分组件讲解如何在Figma中1:1还原HTML设计,包括标题栏、压力显示区、图表区等核心组件; LVG

ymlmail的博客 1974

【思维导图】C语言—分支与循环

像for循环,while循环,do-while循环,以及各循环的之间使用的区别,在循环里面又涉及break语句,contiune语句,goto语句,最后以我们现有C语言的知识我们还学会了一个关机小程序,这个关机小程序我有详细的一篇博客介绍,同时还有这个思维导图的详细知识博客,都已经贴在下面啦~里面包括 if语句,if-else语句,switch-case语句,语句中同时涉及运算,所以我们又学习了各种操作符,像。上节我们回顾了C语言数据类型与变量,今天我们来回顾。,即分为两大点,分支,循环,

稻草人 2511

ptrade量化策略之ST股弱转强,回测年化115%

本策略的核心是精选ST股票,国九条过滤,防止直接暴雷退市,只做ST股票的弱转强

qq_29301281的博客 1788

2. C语言之分支与循环

C语言之分支与循环【附6个练习】

分享C/C++/Linux/网络/数据库/数据结构 2721

GoPro官方API实战:从蓝牙配对到Wi-Fi流媒体,构建跨平台控制应用

本文详细解析了GoPro官方API的开发实践,涵盖蓝牙配对、Wi-Fi流媒体控制等关键技术。通过实战案例,指导开发者如何构建跨平台控制应用,解决设备发现、指令解析、视频流传输等核心问题,并分享Android平台迁移经验与常见问题排查方法。

weixin_30727835的博客 397

从二极管到CMOS:手把手教你搭建数字电路中的基础门电路(附原理图)

本文详细介绍了数字电路中基础门电路的搭建方法,从二极管门电路到现代CMOS门电路的设计与实现。通过原理图解析和实战案例,帮助读者掌握数字电路设计的核心知识,包括电平实现、门电路工作原理及实际调试技巧,适合电子技术爱好者和初学者学习参考。

weixin_29252171的博客 321

C语言·分支和循环语句(超详细系列·全面总结)

C语言·分支循环语句·详细解释+全面总结

m0_74475605的博客 1918

(遇到问题)(已解决)word敲入的公式转化为mathtype

https://www.mathtype.cn/wenti/wordgongshi-zhuanhuan.html 现在越来越多的人在文档中编辑公式的时候会选择MathType来编辑,因为它包含有众多的数学符号和模板,编辑公式时非常方便。但是也有一些人在编辑公式时没有使用MathType公式编辑器,直接使用Word中自带的公式编辑器来编辑的。当我们需要要共享一份文件的时候,这种用自带公式编辑器编辑出来的文件,在我们安装有MathType公式编辑器的电脑里打开时,双击公式没有反应,是无法对它们进行修改的.

计算机视觉 1万+

C语言——分支与循环

本篇文章将讲解C语言中常用的分支与循环语句,并涉及到循环的嵌套、跳转语句等。

2401_88688442的博客 2124

Win10离线安装.net framework 3.5全攻略:镜像匹配与DISM命令实战(附错误0x8024402c解决方案)

本文详细解析了在Windows 10系统中离线安装.NET Framework 3.5的完整流程与核心难点。重点阐述了如何精准匹配系统版本与安装镜像,并提供了使用DISM命令进行离线安装的实战步骤。针对常见的错误代码0x8024402c,文章深入剖析了其根源,并给出了系统级的排查与解决方案,特别适合企业内网运维人员参考。

weixin_29299807的博客 661

视源CVTE嵌入式面试题及参考答案(200+面试题,17万字)

内核模块如何设置? 内核模块是可在运行时动态加载到内核或从内核卸载的代码块。以下是设置内核模块的步骤: 首先,编写内核模块代码。通常使用 C 语言编写,包含必要的头文件,如<linux/init.h>、<linux/module.h>等。在代码中,需要定义模块的初始化函数和清理函数。初始化函数在模块加载时被调用,用于进行模块的初始化工作,如注册设备、分配资源等。清理函数在模块卸载时被调用,用于释放资源、注销设备等。 例如: #include <li

大模型大数据攻城狮的专栏 2204

C语言的分支与循环

C语言中的分支和循环语句是控制程序流程的重要工具。通过ifelse ifelseswitchforwhile和do while语句,你可以编写出灵活且功能强大的程序。希望本文能帮助你更好地理解C语言中的分支和循环语句!

2502_90752254的博客 1775

[Dify实战] 品牌舆情速览:多渠道抓取、聚类情绪、生成日报-带绑定资源

摘要: 品牌舆情监测面临多渠道信息分散、手工处理效率低的痛点。Dify舆情速览助手通过自动化流程(数据抓取→情绪聚类→日报生成)帮助快速识别热点与风险。方案核心包括: 结构化处理:按情绪(正/中/负)聚类,分级标注风险事件; 日报输出:含热点摘要、趋势分析及处置建议(动作+团队+时间窗口); 质量控制:数据去噪、黑名单过滤,结合人工复核确保合规性。 落地需明确数据源分级(如权威媒体优先)、设置情绪阈值,并建立"发现-响应-复盘"闭环机制,提升舆情应对效率。 (字数:150)

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 299

分支与循环语句 之C语言

C语言语句可以分为以下的五种1 表达式语句2 函数调用语句3 控制语句4 复合语句5 空语句本章重点讲解 3控制语句,那么控制语句是什么呢?其实控制语句就是指,用于控制程序的执行过程,以实现程序的各种结构方式。(有顺序结构、选择结构、循环结构),它们由特定的语句定义符组成。其实C语言控制语句又可以分为9种3类1 条件判断语句也叫分支语句 如: if语句 switch 语句2 循环语句 如: for循环语句 while语句 do while语句。

z541838的博客 1493

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C语言分支与循环基础知识详解

C语言是结构化的程序设计语言,这里的结构指的是顺序结构选择结构循环结构,C语言是能够实现这三种结构的,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合。

fhvyxyci的博客 1625

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C语言分支与循环篇

本文将具体分析C语言中的分支和循环结构,以及进行相关重要题目的分析理解。在C语言中循环和分支是非常重要的,是C语言的基础,掌握好循环与分支是学好C语言的关键。欲穷千里目,更上一层楼。加油!!!

2401_89052916的博客 1369

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

c语言中分支和循环语句的讲解与应用

i = i+1;} return 0;//这里输出2 3 4 6 7 8 9 10for循环的执行过程:for(初始化;条件;增量){循环体语句;i<=9;i++){j<=i;j++){break和continue在for循环中:在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。注:避免在循环体内修改循环变量。

2401_89224042的博客 1490

(C语言篇)第二章--分支与循环

文章目录一、分支语句I.分支语句if1.第一种写法2.第二种写法3.第三种写法 一、分支语句 I.分支语句if if是分支语句也可以叫做条件语句,if分支语句有四种写法,这里我们一起研究一下 1.第一种写法 if的第一种写法为: 这里的一个大括号 {} 被称为一个分支,if可以翻译为如果,所以也可以称为条件语句,当表达式为真时则执行大括号里的语句,当表达式为假时就不执行这个分支语句,当然大括号里的语句数量可以是随机的。注意:在C语言中用0表示"假",一切非零的值都是"真"。 例: #include

Autonmy_的博客 2350

C语言分支与循环

分支:用if处理灵活条件,switch处理多常量匹配,结合关系 / 逻辑运算符构建复杂条件;循环for适合次数确定,while适合次数不确定,do-while适合至少执行一次;实战:通过 “猜数字游戏” 综合运用分支、循环和随机数生成,巩固所学知识。建议多写代码练习(如打印乘法表、计算斐波那契数列),逐步提升逻辑思维能力。

2501_92463563的博客 1206

C语言初阶——分支与循环

在C语言中,“语句”指的是构成程序的基本单位之一,它告诉计算机要执行的操作。语句可以是一条简单的命令,如变量赋值;也可以是一个复杂的操作,如条件判断、循环等。每个语句通常以分号(;)结束,表示一个完整的指令。

qq_55890817的博客 1547

C语言的分支与循环结构(二)

Hello 大家好 我是一名大一的菜鸟 通过这个平台分享自己的学习路程以及学习心得 今天我想和大家分享的是C语言的分支与循环结构。上一篇文章我提到了C语言中的分支语句,分别是和,我们来稍微回顾一下这两种分支语句的运一种以判断式子真假的方法来进行分支的语句,分别通过if,else if,else作为分支的起始。一种以判断式子真假的方法来进行分支的语句,分别通过if,else if,else作为分支的起始比如:输入10个数字,输出其中大于50的数字。就可以用到if语句来进行对大于50的数字的筛选。

爱是小小的癌的博客 1571

【c语言】分支和循环语句

C语言中的分支与循环语句的用法以及它们之间的区别。

2403_88429866的博客 1460

基于 C 语言视角:流程图中分支与循环结构的深度解析

本文系统阐述了C语言中控制结构与流程图的对应关系,通过"语法规则-流程图绘制-代码映射-实战案例"四层解析,详细讲解了分支结构(if/if-else/if-elseif)和循环结构(while/for/do-while)的实现逻辑。文章首先介绍了流程图的基本元素及其C语言映射,包括起止框、处理框、判断框等核心组件;然后深入分析了各类运算符在流程控制中的应用;重点剖析了分支与循环结构的语法特性、流程图绘制方法及典型应用场景;最后通过计算器案例展示了分支与循环的综合应用。全文强调流程图作为可

C++,Java,Python,C#编程选手,偶尔刷刷leetcode 2493
上一篇: C语言超详细讲解——scanf、printf一课通
下一篇: C语言超详细讲解——分支与循环【实战演练篇】(猜数字游戏)
鸣风voyager
博客等级 码龄2年 405粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值