【C语言】拆分详解 - 分支与循环

如何把for循环拆分为多线程 在开发过程,我们经常遇到,处理一个大任务需要for循环上百万千万次,任务简单还好,一下子跑完,任务稍微复杂一点,跑一一天几天才能有结果,这时候程序就没啥用处了。 举个简单例子,包工头拉来一车的砖,一个人一只一只的搬,需要一天,若我叫上一百个人,时间就减少一百倍了,叫上两百号人,时间就减少两百倍了。转到代码实现,我把请一个人比作创建一个线程,请十个人就创建十个线程,比如砖上面还有编号(0-9999),一共有10000块砖,请了10个人,那么每人就是1000块,那我创建线程的时候就可以传递参数下... 阅读详情


前言

文章细分了各个知识点,可在目录中快速跳转。
手机端用户在查看代码块时建议点击代码右上角放大查看,每一段代码均有完整注释。

C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构这三种结构。其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合。其中顺序结构很简单,就是一条道,一路走到黑,因此我们下面主要来介绍C语言中对应选择结构和循环结构的语句。


一、分支语句(选择结构)

  1. if语句

   1.1 if

if(表达式)
  语句

表达式成立(为真),则语句执行;
表达式不成立(为假),则语句不执行。
在C语言中,0为假,非0表示真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行。


在这里插入图片描述


   1.2 else

如果我们在 if 语句后追加 else 语句,则构成了一个if else语句。
逻辑是当 if 表达式为真执行if语句后,则不执行else对应的语句;当if表达式为假不执行时,则执行else对应语句。

在这里插入图片描述
我们通过一个实例来体会一下。
输入一个年龄,>= 18岁就输出:成年,否则就输出:未成年

#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;
}

在这里插入图片描述
在这里插入图片描述
我们发现不管输入的age是否大于或等于18,对于 printf("可以谈恋爱了\n"); 是独⽴存在的,不管if语句的条件的真假,都会被执行。那如果我们要if语句同时控制多条语句,怎么办呢?那就要使用 {} 将语句都括起来,这样就构成了一个复合语句,将被试作一条语句进行处理。如下:

#include <stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
	{
		printf("成年了\n");
		printf("可以交⼥朋友了\n");
	}
	else //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
	{
		printf("未成年\n");
		printf("不可以早恋哦\n");
	}
	return 0;
}

   1.4 嵌套if

     形式1

在 if else 语句中, else 可以与另⼀个 if 语句连用,构成多重判断。如下:

#include <stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num > 0)       //该if语句大括号内就是嵌套的另一个if
	{
		if (num % 2 == 0)
			printf("偶数\n");
		else
			printf("奇数\n");
	}
	else
	{
		printf("输⼊的值是负数\n");
	}
	return 0;
}

在这里插入图片描述

代码逻辑是:在原先if else的基础上,若进入if语句,则再进行一个或多个if else 的条件判断。
实现:即在if的复合语句(大括号)内再写一个if else语句,若还想再嵌套,就在新加的if后加一个大括号,在里面继续写if else语句,可以一直嵌套下去。

     形式2
#include <stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num == 0)
		printf("输⼊的数字是0\n");
	else if (num > 0) //这⾥的if 相当于嵌套在else语句中,形成了嵌套结构
		printf("输⼊的数字是正数\n");
	else
		printf("输⼊的数字是负数\n");
	return 0;
}

在这里插入图片描述

实现:在if else语句的else语句处,置一个if语句,即当第一个if else语句执行的是else语句时,执行嵌套的if语句,只不过这个if语句写在了else语句处。

   1.5 悬空else问题

如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
分析如下代码:

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)             //else跟这个if匹配
			printf("hehe\n");
	else
			printf("haha\n");
	return 0;
}

我们可以看到,else和最接近自己的if匹配,我们要注意不要被对齐和不对齐所迷惑。当然这里我们最好要养成良好的代码书写习惯,将else与对应的if对齐,这样可以增加代码的可读性,不容易造成误解。


  2. switch语句

   2.1 定义

除了 if 语句外,C语⾔还提供了 switch 语句来实现分支结构。
switch 语句是一种特殊形式的 if…else 结构,用于判断条件有多个结果的情况。它把多重
的 else if 改成更易用、可读性更好的形式。

switch(表达式) 
{
   case 1: statement
   case 2: statement
   default: statement
}

我们要注意的点有:

  1. 当表达式的值与某case分支语句后的值匹配时则跳转到该条分支语句执行,都不匹配时跳转到 default语句执行
  2. case和后面的值之间必须有空格
  3. case后的值,必须是数字或整形常量表达式

   2.2 switch示例,和与if的对比

示例:输入任意⼀个整数值,计算除3之后的余数

if实现:

#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;
}

   2.2 switch语句中的break

示例:输入任意⼀个整数值,计算除3之后的余数

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n % 3)
	{
	case 0:
		printf("整除,余数为0\n");
	case 1:
		printf("余数是1\n");
	case 2:
		printf("余数是2\n");
	}
	return 0;
}

在这里插入图片描述
我们随便测试了一组发现打印的结果有两个,这是为什么呢?在switch语句中,只有遇到break才会跳出switch语句,如果某一个 case 语句的后边没有 break 语句,代码会继续向下执行,有可能执行其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。就比如上面的代码就执行了 case 2 中的语句。

   2.3 switch语句中的case与default顺序问题

在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满足实
际需求的就可以。
不过我们通常是把 default 子句放在最后处理的。



二、关系操作符与逻辑操作符

在c语言的表达式中我们常需要进行比较和逻辑判断,因此下面我们来介绍一下常用的用于比较的关系运算符和用于逻辑判断的逻辑操作符

  1.关系操作符

   1.1 定义

C语言用于比较的表达式,称为 “关系表达式”(relational expression),里面使用的运算符就称为“关系运算符”(relational operator),主要有下面6个。

  • > 大于运算符
  • < 小于运算符
  • >= 大于等于运算符
  • <= 小于等于运算符
  • == 相等运算符
  • != 不想等运算符

我们注意一下相等和不相等运算符即可,其他的与数学中的思想及形式相一致。下面来看一下关系表达式的例子。

   1.2 关系表达式

a == b;
a != b;
a < b;
a > b;
a <= b;
a >= b;

我们要注意关系表达式作为一个表达式不仅仅是用来表示关系的,通常我们需要利用这个关系,所以表达式会返回一个值作为表达式的计算结果给机器进行操作,关系表达式通常返回 0 或 1 ,表示真假比如,20 > 12 返回 1 , 12 > 20 返回 0。

   1.3  多个关系操作符连用

i < j < k

这种书写形式通常不会达到我们想要的效果即表示 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执行的是下方式子。

( i < j ) < k

上面式子中, i < j 返回 0 或 1 ,所以最终是 0 或 1 与变量 k 进行比较。如果想要判断变量 j的值是否在 i 和 k 之间,应该使用下面的写法。其中&&为逻辑操作符,后面我们马上就会进行讲解。

i < j && j < k



  2.逻辑操作符

   2.1 定义

逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符。

  • ! 逻辑取反运算符(改变单个表达式的真假)
  • && 与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)
  • || 或运算符,就是或者的意思(两侧至少有⼀个表达式为真,则为真,否则为假)。

   2.2 短路

C语言逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。如果左边的表达式满足逻辑运算符的条件,就不再对右边的表式求值。这种情况称为“短路”。如下方代码:

if(month >= 3 && month <= 5)  //1.
if(month == 12 || month==1 || month == 2)  //2.

1.
当&&左操作数(表达式最终结果也是个数)month>=3 结果为0时,根据&&操作符的定义知道,即使不判断右操作数,整个表达式结果也为0。
2.
同理,如果month == 12,则不用再判断month是否等于1或者2,整个表达式的结果也是1

像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进行计算的运算称为短路求值。



三、循环语句(循环结构)

  1.while循环

   1.1 定义

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

   1.2 while循环的执行流程

在这里插入图片描述

   1.3 while循环示例

示例:在屏幕上打印1~10的值

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

在这里插入图片描述




  2.for循环

   2.1 定义

for(表达式1; 表达式2; 表达式3)
   语句;//如果循环体想包含更多的语句,可以加上大括号
  • 表达式1 用于循环变量的初始化
  • 表达式2 用于循环结束条件的判断
  • 表达式3 用于循环变量的调整
  • 值得注意的是,这三个表达式均可省略不写,编译可以正常运行,但要注意表达式2也就是用于判断循环结束条件的,如果省略不写,那么代码将会无限循环下去,最终崩溃。

   2.2 for循环的执行流程

在这里插入图片描述

   2.3 for循环示例

示例:在屏幕上打印1~10的值

#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}

	return 0;
}

在这里插入图片描述

   2.4 for循环与while循环的对比

在这里插入图片描述
在这里插入图片描述

我们注意到for循环的初始化,判断,调整语句放在了一起,而while循环的三个语句位置是不一定的,当代码量增大的时候,如果我们想修改这三个语句,在while中查找是很麻烦的,而在for中很容易就找到了。因此使用for有利于代码的维护。




  3. do-while循环

   3.1 定义

do
 循环体语句; //多条语句可使用大括号
while(表达式); //判断部分
  • do-while 就是将while的循环体语句写在do后 ,按代码基本行逻辑我们也可以看出,先执行do后的循环体语句,再执行while判断部分。其中循环体语句不受while约束,即while执行0次时do也会执行。

   3.2 do-while执行流程

在这里插入图片描述

   3.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;
}

在这里插入图片描述




  4. 循环嵌套

示例:找出100~200之间的素数,并打印在屏幕上。
注:素数又称质数,只能被1和本身整除的数字。

#include <stdio.h>
int main()
{
	int i = 0;
	//循环1 产⽣100~200的数字 
	for (i = 100; i <= 200; i++)
	{
		int j = 0;
		int flag = 1;//设置一个标志,初始为1时表示是素数
		//循环2 产⽣2~i-1之间的数字
		for (j = 2; j < i; j++)
		{
			if (i % j == 0)  //判断i是否为素数,即余数为0,能整除就不是素数
			{
				flag = 0;    //改变flag值为0,标志为假
				break;
			}
		}
		if (flag == 1)       //循环2结束后如果flag未被改变,即2~i-1的数都不能整除
			printf("%d ", i);   //说明为素数,打印
	}
	return 0;
}

在这里插入图片描述




  5. goto语句

   5.1 定义

C语言提供了一种非常特别的语法,就是 goto 语句和 跳转标号。goto 语句可以实现在同⼀个函数内跳转到任意设置好的标号处。

  • goto语句只能在当前函数中使用,无法跳转到其他函数
  • goto使用过多会给阅读代码造成麻烦,即使是代码的编写者在一段时间后也容易弄混跳转的位置,可读性差,即使没有goto语句,我们也能正常编写出所需的代码,因此goto语句非必要情况不要使用,不建议使用

   5.2 示例:快速脱离多层循环

上面我们说goto语句不建议使用是针对大部分情况,但俗话说存在即合理。下面我们就来介绍一种使用goto的情景。

for (...)
{
	for (...)
	{
		for (...)
		{
			if (disaster)
				goto next;
		}
	}
}
next:
//...

我们可以看到在多层嵌套循环中,如果使用break只能跳出所在的一层循环,要想全部跳出必须每一层循环都加上break,十分麻烦,而使用goto语句则可以直接跳出,到达next标志处。

此处也可见goto语句的强大,不管三七二十一,只要在一个函数内,想跳哪就跳哪,但也正是这种随意性我们必须谨慎使用它,以免出现意外情况。下面是一些注意点:

  • next为自定义名字的跳转符号
  • next:独占一行,后接其他代码。(注意不要漏掉冒号)



四、break与continue关键字

在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中
提供了 break 和 continue 两个关键字,用于终止循环。

  1.定义

  • break 的作用是用于永久的终止循环,只要 break 被执行,直接就会跳出循环,继续往后执行。但break本身的作用是跳出当前的语句(复合语句),当处于嵌套循环时,我们可能需要多次使用break。我们在switch中也使用过这个关键字。

  • continue的作用是跳过循环体中continue后的代码,返回循环语句的判断表达式处进行下一次判断,如果循环的调整部分位于continue后,那么代码可能会进入死循环。

  2.示例

   2.1 break示例

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;//当i等于5后,就执⾏break,循环就终⽌了
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

在这里插入图片描述

   2.2 continue示例

#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;
}

在这里插入图片描述
在这里插入图片描述




总结

本文主要介绍了C语言中的分支结构丶循环结构对应的几种语句,常用的关系操作符和逻辑操作符,文章中有什么不对的丶可改正的丶可优化的地方,欢迎各位来评论区指点,博主看到后会一一回复

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

相关推荐

C语言分支循环语句(上)

C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实 现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种 结构的组合。只要带上适当的⼤括号,代码的逻辑就会更加的清晰,所以⼤家以后在写代码的时候要注意括号的使 ⽤,让代码的可读性更⾼。语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建 议是能不⽤尽量不去使⽤;以上就是关于操作符,我们需要掌握的,剩下的只要按照字⾯意思理解使⽤就⾏,没有特别注意的。

Shiye_Shiye_的博客 1580

重构心得分享----拆分循环

最近自己再看《重构-改善既有代码的设计》,这是一本关于如何让大家去发现需要重构的代码和如何去进行重构。 先分享一个今天刚刚看的,标题叫拆分循环,作者认为一个循环里面尽可能的只做一件事情。 举一个粒子,比如一个循环里面有两件事,一个是计算收入总值(数据累加),一个是找出最小收入 let total = 0 let data = [15, 25, 3, 65, 15] let min = da...

WWW_share8的博客 3243

产品必备技能(十):如何绘制原型图?先要绘制页面流程图+页面原型图!附实操原型图、流程图实例(抖音)

文章目录目标题目实操步骤模板实操【抖音】APP的视频发布功能页面流程绘制页面流程图合格标准绘制页面原型图合格标准 目标 新入行的产品经理都对原型抱有向往的心境,但是有经验的产品经理不会一上来就画原型,而是先画页面流程再来画原型。通过学习,你将学会如何用页面流程图规划用户行为路径、如何借助原型识别问题、减少风险、有效沟通。 题目 任意选择一款你喜欢的产品,体验某个功能,下载并梳理此功能至少5个以上的页面流程跳转点(后面会解释),还原2 - 3个主要界面的低保真原型图。 实操步骤 可使用手绘以及Process

汪雯琦的博客 4841

PTA 7-156 循环-拆分成和

PTA 7-156 循环-拆分成和

higgins_li的博客 812

如何使用C#自带的GDI+双缓冲类BufferedGraphics实现双缓冲功能

小白摸索着编写一个上位机界面,将遇到的问题及解决方法记录下,以供后来的小白使用哈。这篇文章解决的问题是在绘图时候的闪烁问题。其中网上有些介绍的设置控制方式controlstyle的方法,这个方法我的理解是比较适合于在一个完整的窗口当中绘图。如果要在一个窗口当中的内部容器或者控件内画图的话就不太适合,通常按照前述的方法设置后没有任何效果。对于在窗口内部的绘图的来说,比较有效的方法是在内存当中开辟一块

z20110411的博客 4794

Cloudflare 5秒盾逆向实战:13次请求背后的Python补环境框架搭建指南

本文深入解析了如何通过Python构建浏览器环境模拟框架,以应对Cloudflare 5秒盾等现代Web防护机制。文章详细拆解了其背后复杂的13次请求链,涵盖了JavaScript执行引擎集成、DOM事件模拟、网络请求控制及Canvas指纹等环境检测的完整实现方案,为自动化数据采集和逆向工程提供了实战指南。

gold的博客 347

c语言中可以拆分字符串的函数,C语言实现字符串分割(类似vb中split函数)

头文件:#include 定义函数:char * strtok(char *s,const char *delim);函数说明:strtok()用来将字符串分割成一个个片段。参数s 指向欲分割的字符串,参数delim 则为分割字符串,当strtok()在参数s 的字符串中发现到参数delim 的分割字符时则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s 字符串,往后的调用...

weixin_35990136的博客 1137

HPC软件使用之ANSYS Fluent

本文介绍了如何在超级计算机上使用ANSYS Fluent进行科学计算和工程仿真。文章首先对Fluent软件进行了简要介绍,强调了其在计算流体力学领域的广泛应用和强大功能。接着,详细说明了如何编写jou脚本文件和slurm脚本文件,以控制Fluent的计算流程和作业提交。文章还提供了作业提交和查看的具体命令,并通过一个鼓风机仿真的案例演示了从网格模型准备、脚本编写、作业提交到结果查看的完整流程。最后,展示了使用Fluent进行结果可视化的方法。

欢迎各位大佬光临“寒舍”!请多多指点,共同进步! 2208

重构改善既有代码的设计-学习(二):搬移特性

搬移函数这一章节总结起来就是:在不同的上下文之间搬移元素。

m0_49499183的博客 1219

2006NOIP普及组真题 4. 数列

从上述推理中,我们发现要输出的幂次和中的第 N 项(也就是幂次和中的序号N),对应的二进制位数和幂次和对应的二进制位数相同。当 k=3 时,k的幂次为1, 3, 9, 27, 81…,即第0位,第2位均为1,转成 k 进制(k=3)时。,即第2位,第3位均为1,转成 k 进制(k=3)时。转成 k 进制(k=3)时的幂次和为。,即第0位,第1位,第2位均为1,(即第0位,第1位,第2位均为1)N=12时,12的二进制是。(即第0位,第2位均为1)(即第2位,第3位均为1)结论:这道题就变成了。

weixin_40252159的博客 1514

PoE 的三大国际标准:PoE、PoE+、PoE++

很多人知道 PoE 能“一根网线,既供电又传数据”,但鲜少有人能说清楚:PoE 供电到底分几种标准?差别有多大?哪些设备要用 PoE,哪些必须上 PoE+ 或 PoE++?今天,我们就来一次彻底的“拆解”,把 PoE 的三大国际标准——讲得明明白白,顺便也帮你厘清网络工程中的常见“供电疑惑”。

网络技术联盟站 1548

C语言:分支与循环

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

weixin_51142926的博客 8209

强化学习(Reinforcement Learning)与动态系统控制方法

一个具体的 RBC 的例子是自动驾驶汽车中的交通规则。在训练过程中,代理通过与环境交互获取奖励信号,并学习如何在某个状态下采取最佳的行动,以最大化长期的累积奖励。在化工过程中,通过对生产过程中的温度、压力、流量等参数的控制来实现产品的质量和产量的提高。需要注意的是,以上代码只是一个简单的示例,实际的 MPC 系统可能会更加复杂,并包含更多的模型预测和控制算法来实现更复杂的控制任务。需要注意的是,以上代码只是一个简单的示例,实际的自动驾驶汽车系统可能会更加复杂,并包含更多的规则和条件来确保安全行驶。

AI天才研究院 4062

2. C语言之分支与循环

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

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

【python科研数据处理】将Endnote自动搜索的所有pdf文件,全都移动指定文件夹中

将Endnote自动搜索到的全部pdf文件,全都移动指定文件夹中1 背景2 问题解决 手动反爬虫,禁止转载:原博地址 https://blog.youkuaiyun.com/lys_828/article/details/122370892(优快云博主:Be_melting) 知识梳理不易,请尊重劳动成果,文章仅发布在优快云网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息 1 背景 在进行期末考试周后,面对最后一门功课,需要提交至少80篇SCI参考文献,因此最快下载文献的方式就是通过Web of S

lys_828的博客 1826

深度学习工具包 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语言分支与循环基础知识详解

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

fhvyxyci的博客 1625

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C语言——分支与循环

学习记录#C语言是一个结构化的程序设计语言,这里的结构指的就是顺序结构分支结构循环结构,这三种结构C语言都可以实现。细想一下,我们生活中的很多事都可以拆分为这三个结构,这三种又可以互相嵌套.今天来介绍怎么使用if和switch来实现分支结构,使用while和for来实现循环结构。

weixin_74882234的博客 1268

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C语言分支与循环

C语言分支与循环

小码农的博客 1467

【C语言】分支和循环详解(上)

C语⾔是结构化的程序设计语⾔,这⾥的结构指的是,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。我们可以使⽤实现分⽀结构,使⽤实现循环结构。

2401_88325505的博客 1952

C语言分支循环语句简介

目录1.分支语句和循环语句的基本语法2.分支语句基本用法3.循环语句基本用法4.分支循环语句的嵌套 C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。有了这三种结构我们就可以用C语言来解决许多问题。分支语句一共有两种分别是 if esle 语句和 switch 语句。循环语句有三种分别是 for 循环、while 循环和 do while 循环。 if语句的

YxxxL_striving的博客 1968

【C语言复习】分支和循环

对C语言分支(if 、switch)和循环(for 、while、 do while)进行详细讲解介绍

ChiaWei_Lee的博客 1338

C语言 -- 分支和循环(上)

C语言分支和循环(上)

m0_64364831的博客 1608

C语言分支与循环详解

C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,C语言是能够实现这三种结构的,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合。 我们可以使用 if 、 switch 实现分支结构,使用 for 、 while 、 do while 实现循环结构,还可以使用go to语句实现快速跳转。

0xFFFFFFFF 1064

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

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

C++,Java,Python,C#编程选手,偶尔刷刷leetcode 2488

与C语言的旅程之分支与循环(上)

我们都知道C语⾔是一种结构化的程序设计语⾔,C语言可以实现,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。我们可以使用C语言中的 if 、 switch 实现分⽀结构,使⽤ for 、 while 、 do while 实现循环结构。接下来让我们进入与C语言的旅程之分支与循环吧。

do_yo的博客 2311
上一篇: 【数据结构】拆分详解 - 顺序表
下一篇: 【逐句拆解】猜数字游戏
如泡似影
博客等级 码龄3年 812粉丝 27原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值