前言
整理总结自己所学知识,如有错误,欢迎指正。
一、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;
}