【分支和循环(四)】

一、do-while 循环

1、语法形式:

do 
{
  语句;
 }while(表达式);

2、 do-while 循环与for\while循环的不同

whilefor是先判断条件,条件允许的话,才会进入循环,执行循环语句;而do-while是先直接进⼊循环体,执行循环语句,然后再执行while 后的判断表达式,表达式为真,就进行下一次,表达式为假,就不再继续循环。

流程图:
【分支和循环(四)】_第1张图片
do-while 语句中循环体是至少执行⼀次的,这是 do-while 循环比较特殊的地⽅。

3(1)、示例:打印整数1~10

#include
int main()
{
	int a = 1;
	do
	{
		printf("%d ", a);
		a++;
	} while (a <=10);
	return 0;
}

在这里插入图片描述

3(2)、输入一个正整数,计算这个整数是几位

# include
int main()
{
	int a = 0;
	int count = 0;
	scanf("%d", &a);
	do
	{
		count++;  //即使a=0,也会统计一位
		a = a / 10;
	} while (a);
	printf("%d", count);
	return 0;
}

在这里插入图片描述

二、 breakcontinue语句

break 的作用是用于永久的终止循环,只要 break 被执行,直接就会跳出循环,继续往后执行。

continue 的作用是跳过本次循环 continue 后边的代码。

1、while循环中breakcontinue

(1)、break的例子:

#include
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 4)
			break;
		printf("%d ",i);
	    i++;
	}
	return 0;
}

【分支和循环(四)】_第2张图片

打印完1、2、3之后,当i=4时,循环在break停止,后面的不再执行,循环终止。

(2)、continue的例子:

#include
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 4)
			continue;
		printf("%d ", i);
		i++;
	}
	return 0;
}

【分支和循环(四)】_第3张图片
这里当i==4的时候,执行continue跳出循环,进入下次循环,这个时候i一直等于4,程序不停的跳出循环进入下次循环,程序没有结束,一直在循环。(陷入死循环)

2 、 for循环中的breakcontinue

(1)、break

道理跟while循环中的break一样

#include
int main()
{
	int i = 1;
	for(i=1; i <= 10;i++)
	{
		if (i == 4)
			break;
		printf("%d ", i);
	}
	return 0;
}

【分支和循环(四)】_第4张图片

这里要特别注意for循环的流程图:
【分支和循环(四)】_第5张图片

【分支和循环(四)】_第6张图片

(2)、continue

#include
int main()
{
	int i = 1;
	for(i=1; i <= 10;i++)
	{
		if (i == 4)
			continue;
		printf("%d ", i);
	}
	return 0;
}

【分支和循环(四)】_第7张图片

当i == 4,时,执行continue跳出本次循环,执行下一次循环,所以i==4后printf语句不执行,continue跳过后面的打印,来到了i++的部分,所以最后的输出没有4。

3、 do-while循环中的breakcontinue

作用于在while循环中的基本一致。

可以自己比对一下:

#include
int main()
{
	int i = 1;
	do
	{
		if (i == 4)
			continue;
		printf("%d ", i);
		i++;
	} while (i <= 10);
	return 0;
}
#include
int main()
{
	int i = 1;
	do
	{
		if (i == 4)
			break;
		printf("%d ", i);
		i++;
	} while (i <= 10);
	return 0;
}

结果也是一样的。

三、goto语句

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

例如:

#include
int main()
{
	printf("lalala\n");
	goto next;
	printf("wawawa\n");
next:
	printf("跳过了wawawa的打印\n");
	return 0;
}

四、生成随机数

(1)、rand函数返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX(32767)之间。

rand函数的时候需要包含头文件:stdlib.h

int rand (void)

例子:

#include
#include
int main()
{
	printf("%d\n", rand());
	printf("%d\n", rand());
	return 0;
}

【分支和循环(四)】_第8张图片

不管我们试多少次,这个随机数都是一样的,我们可以发现这是一个伪随机数,伪随机数不是真正的随机数rand函数是对⼀个叫“种子”的基准值进行运算生成的随机数。

(2)、srand函数,用来初始化随机数的生成器的。

void srand (unsigned int seed);

程序中在调用rand函数之前先调用srand函数,通过srand函数的参数seed来设置rand函数⽣成随机数的时候的种子,只要种子在变化,每次生成的随机数序列也就变化起来了。

(3)、time
使用程序运行的时间作为种子的,time函数可以获得这个时间

time函数的原型:

time_t time (time_t* timer); 

time函数返回的这个时间差也被叫做:时间戳。

time(NULL);    //调⽤time函数返回时间戳,这⾥没有接收返回值

time函数的时候需要包含头文件:time.h

上面的生成随机数我们就可以这样写:

#include
#include
#include
int main()
{
	srand((unsigned int)time(NULL));
	printf("%d\n", rand());
	printf("%d\n", rand());
	return 0;
}

【分支和循环(四)】_第9张图片
【分支和循环(四)】_第10张图片
这里多调试几次,就可以看见随机数生成的是不同的。

五、设置随机数的范围

0~99的随机数:

rand() % 100

余数是0~99

1~100的随机数

rand() % 100 + 1

a~b的随机数

a+rand () %(b-a+1); 

等等,可以以此类推。

随机数这里有点不好理解,可以慢慢来,不要着急。
【分支和循环(四)】_第11张图片

你可能感兴趣的:(c语言)