C语言学习第五节----分支和循环(2)

前言

整理总结自己所学知识,如有错误,欢迎指正。

一、while循环

while语句的语法和if语句的语法非常相似

(1)if和while的对比

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

(2)while语句的执行流程 

(3)while循环的实践 

练习:在屏幕上打印1~10的值

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

二、for循环 

(1)语法形式

for(表达式1;表达式2;表达式3)
   语句//如果循环体想要包含多条语句,可以加上大括号

表达式1用于循环变量的初始化

表达式2用于循环结束条件的判断

表达式3用于循环变量的调整 

(2)for循环的执行流程 

(3)for循环的实践

练习:在屏幕上打印1~10的值

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

(4)while循环和for循环的对比 

 

三、do-while循环 

(1)语法形式

do
   语句
while(表达式)

(2)do-while 循环的执行流程

while和for这两种都是先循环再判断,do-while正好相反。 

(3)do-while循环的实践 

练习:在屏幕上打印1~10的值

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

四、break和continue语句 

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

continue:跳过本次循环continue后面的代码,在for循环和while循环中有所差异。

(1)while循环中的break和continue

1.break举例

2.continue举例 

(2)for循环中的break和continue 

1.break举例

2.continue举例 

对比一下while循环和for循环中的continue区别

 

 

(3)do-while循环中的break和continue 

1.break举例

2.continue举例 

五、循环的嵌套 

前面学习了三种循环while,for,do-while,这三种循环往往会嵌套在一起才能更好的解决问题。

(1)练习

找出100~200之间的素数,并打印在屏幕上

注:素数又称为质数,只能被1和本身整除的数字

(2)题目解析

要从100~200之间找出素数,首先得有100~200之间的数,这里可以使用循环解决。

假设要判断i是否为素数,需要拿2~i-1之间的数字去试除i,需要产生2~i-1之间的数字,也可以使用循环解决。

如果2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。

例如:我们来判断一下数字7是否为素数,首先毋庸置疑的是,7能够被1和7整除,那能否被剩下的数字2,3,4,5,6给整除呢?我们就要一个一个来试除。所以判断7是否为素数,就要拿2~7-1之间的数字来试除7。

(3)参考代码

六、随机数生成 

(1)rand

rand函数可以生成随机数,函数原型如下:

int rand (void);

使用rand函数包含的头文件是:stdlib.h

接下来我们来测试一下rand函数

 

我们再来运行一次

 

从上面的例子我们可以得知,虽然第一次运行产生的数字是随机的,但是第二次运行的结果和第一次运行的结果是相同的,这里面就出现了问题。

rand函数生成的随机数是伪随机的,伪随机数不是真正的随机数,是通过某种算法生成的随机数。真正的随机数是无法预测下一个值是多少的。而rand函数生成随机数的默认种子是1。如果要生成不同的随机数,就要让种子发生变化。

(2)srand 

srand是用来初始化随机数的生成器的,原型如下:

void srand (unsigned int seed);

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

(3)time 

在程序中我们一般使用程序运行的时间作为种子的,因为时间时刻是在变化的。

C语言中的函数time就可以获得这个时间,原型如下:

time_t time (time_t* timer);

使用time函数包含的头文件是:time.h

如果让time返回时间戳,我们就可以这么写:

time(NULL);

生成随机数的代码就可以改写成如下:

 

 

通过上面两张图我们可以看到运行两次,生成的随机数是不一样的。

(4)设置随机数的范围 

生成0~99之间的随机数

rand () %100;

生成1~100之间的随机数

rand ()%100+1;

生成100~200之间的随机数

100 + rand()%(200-100+1)

生成a~b的随机数

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

七、猜数字游戏 

(1)游戏要求

电脑自动生成1~100的随机数

玩家猜数字,猜数字的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束

(2)代码生成

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void game()
{
	int r = rand() % 100 + 1;
	int guess = 0;
	while (1)
	{
		printf("猜猜数字>:");
		scanf("%d", &guess);
		if (guess < r)
		{
			printf("猜小了\n");
		}
		else if (guess > r)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}
void menu()
{
	printf("**************************\n");
	printf("******** 1. play *********\n");
	printf("******** 0. exit *********\n");
	printf("**************************\n");
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("游戏结束\n");
			break;
		default:
			printf("选择错误,重新选择\n");
			break;
		}
	} while (input);
	return 0;
}

 

 

 

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值