码迷,mamicode.com
首页 > 编程语言 > 详细

zerglurker的C语言教程008——循环语句详解

时间:2015-06-13 09:59:54      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:c++   c语言   编程   语言   

上节课我们提到了程序语句的三大执行顺序:顺序执行、条件执行和循环执行

今天我们详细讲讲循环执行,不废话,先上代码和运行效果

首先来一段示例代码,老规矩,新建一个空项目(参考006课)

新建一个空的main.cpp和public.h

public.h里面定义代码如下:

void LargeDistributionSequence(unsigned int nLength);

main.cpp代码如下:

#include <stdio.h>
#include "public.h"

int main(int nArgc, char* Argv[], char* Env[])
{
	LargeDistributionSequence(15);
	return 0;
}

void LargeDistributionSequence(unsigned int nLength)
{
	unsigned i;
	for (i = 0; i < nLength;i++)
	{
		if (i != 0 && ((i % 10) == 0)){
			printf("\n");
		}
		printf("% 4d ", ((i + 1)*(i + 1)&(~1)) / 2);
	}
	printf("\n");
}

Ctrl+F5后的效果如下:

技术分享

for语句的使用格式是这样的:

for(初始化语句;条件语句;每次循环的变化条件处理) 需要循环的单条语句;

for(初始化语句;条件语句;每次循环的变化条件处理){

     需要循环的多条语句;

}

for循环几个需要注意的地方:

1 初始化语句可以不写,也可以写多个

比如

for(;i<nLength;)
或者

for(i=0,j=0;i<nLength;i++,j++)
注意,多条初始化语句写在一起的时候,必须是能用逗号连接的表达式

表达式而非语句

2  每次循环的变化条件处理同样可以不写或者写多个,写入规则同上面

示例见1

3 条件语句必须要写,并且在每次循环开始就会进行判断

对于第一次循环,初始化语句执行完成后,就会立刻进行条件判断

如果判断失败,则后面的语句不会被执行

4 建议各位哪怕 需要循环的语句只有一条,也可以按照多条的方式,使用大括号括起来

这样不会因为你对语句进行删减而导致整个逻辑变化极大

比如:

for(i=0;i<nLength;i++)
    printf("ok\n");
if(i==nLength)printf("no\n");
如果需求发生变更,不仔细,将第二行语句注释掉了,那整个逻辑就会变成重复判断i是否等于nLength,然后什么也不会输出

// 注释一行,从该符号开始,后面的字符全部被注释,编译器不会理会

/* 注释内容 */ 注释一个块 从/*后面,到*/前面,这之间所有的内容都会被认为是注释,编译器不会理会

我们往往用注释暂时去掉一些不用功能,或者添加一些代码说明

除了for可以实现循环外,我们还可以用while实现循环

在public.h添加代码后如下:

void LargeDistributionSequence(unsigned int nLength);
void LargeDistributionSequenceWhile(unsigned int nLength);
void LargeDistributionSequenceDoWhile(unsigned int nLength);
在main.cpp添加代码如下:

#include <stdio.h>
#include "public.h"

int main(int nArgc, char* Argv[], char* Env[])
{
	LargeDistributionSequence(15);
	LargeDistributionSequenceWhile(15);
	LargeDistributionSequenceDoWhile(15);
	return 0;
}

void LargeDistributionSequence(unsigned int nLength)
{
	unsigned i;
	for (i = 0; i < nLength;i++)
	{
		if (i != 0 && ((i % 10) == 0)){
			printf("\n");
		}
		printf("% 4d ", ((i + 1)*(i + 1)&(~1)) / 2);
	}
	printf("\n");
}

void LargeDistributionSequenceWhile(unsigned int nLength)
{
	unsigned i=0;
	while (i<nLength)
	{
		if (i != 0 && ((i % 10) == 0)){
			printf("\n");
		}
		printf("% 4d ", ((i + 1)*(i + 1)&(~1)) / 2);
		i++;
	}
	printf("\n");
}

void LargeDistributionSequenceDoWhile(unsigned int nLength)
{
	unsigned i = 0;
	do
	{
		if (i != 0 && ((i % 10) == 0)){
			printf("\n");
		}
		printf("% 4d ", ((i + 1)*(i + 1)&(~1)) / 2);
		i++;
	} while (i < nLength);
	printf("\n");
}
运行后结果如下:

技术分享

可以看到,三个方式结果完全一样

while的使用方式如下:

while(条件) 单个语句;

while(条件){

多条语句;

}

do 单个语句;while(条件);

do{

多条语句;

}while(条件);

类似for的注意3,while我也同样建议各位尽可能使用大括号将代码括起来

大括号的另外一个好处是,即使扩内一条语句也没有,也不会导致循环逻辑影响循环外的逻辑,这种防范在成百上千行的代码中,可以挽救你的小命

否则那些莫名其妙的程序错误,甚至让你无从下手,感觉世界崩溃。

for当初设计用来进行条件明确的循环,即初始条件明确、循环终止条件明确,以及变量明确的循环

而while则用来进行模糊循环。比如我不知道初始条件或只知道部分初始条件。变量也不明确,它可能会变,也可能下次循环才会变,或者因为用户的特定输入才会变化

但是实际使用的时候,两者可以相互替换。

比如初始条件不明朗的时候,for中的初始化语句我可以空出来不写,只写条件语句。如果变量变化也不明确,我可以不写每次循环的变化条件处理

同样,对于while 我可以在while外部将初始化语句写好,在while内部进行变量变化处理

不过对于while 和do…while还是有一个明确不一样的地方:

即do…while一定会先执行一次循环体,不管条件是否成立。而while当条件不成立的时候,可能一次都不执行

所以上面的测试代码,将main中的所有15改为0,则输出就会变成下面的样子:

技术分享

第三次的时候,输出了一个0

printf可以进行格式输出,比如上面看到的一句:printf("% 4d ", ((i + 1)*(i + 1)&(~1)) / 2);

%表示后面的是格式信息,空格表示填充符号是空格,4表示对齐长度,d表示输出的是整数

整个含义是以4字符对齐输出整数,不足的地方填充空格

这样输出的数字就美观多了

不过数字一旦超过4字符长度,就会原样输出,破坏格式

关于输出格式,后面我还会详细介绍的

另外,在c语言中,for初始化语句是不能声明变量的

即变量一定要先声明,后使用

而在c++中,for初始化语句则可以声明变量,但不同编译器的版本处理又不同

vc6中for初始化语句声明的变量,作用范围和for一样大。即for初始化声明的变量,可以在for同级的代码中使用

而支持c99以及更高版本的编译器,则不允许这种情况,for里面声明的变量只能在for里面用,外面则看不到

zerglurker的C语言教程008——循环语句详解

标签:c++   c语言   编程   语言   

原文地址:http://blog.csdn.net/zerglurker/article/details/46475499

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!