无法预知的数字叫随机数
rand标准函数可以用来获得伪随机数
为了使用这个标准函数需要包含stdlib.h头文件
/*
随机数演示
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(0));
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
return 0;
}
无法预知的数字叫随机数
rand标准函数可以用来获得伪随机数
为了使用这个标准函数需要包含stdlib.h头文件
/*
猜数游戏
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int num = 0, guess = 0;
srand(time(0));
num = rand() % 100;
for (;;) {
printf("请猜一个数字:");
scanf("%d", &guess);
if (num > guess) {
printf("猜小了\n");
}
else if (num < guess) {
printf("猜大了\n");
}
else {
printf("猜对了\n");
break;
}
}
return 0;
}
srand标准函数用来设置随机数种子
这个函数需要一个整数作为种子使用
不同种子产生的随机数不同
任何程序只需要设置一次随机数种子
为了使用这个标准函数需要包含stdlib.h头文件
time标准函数可以用来获得当前时间
这个函数用一个整数表示获得的时间
一秒之内用这个函数获得的代表时间的
整数不会变化
为了使用这个标准函数需要包含time.h头文件
分支和循环都可以让程序中的语句不再从上到下
执行,具有这种特征的语句叫流程控制语句
goto语句也是流程控制语句
它可以把任何一条语句指定成下一条语句
一般不应该使用goto语句
循环里面还可以包含其他循环,这种结构叫多重循环
/*
多重循环演示
*/
#include <stdio.h>
int main() {
int num = 0, num1 = 0;
for (num = 1;num <= 5;num++) {
for (num1 = 5;num1 >= num;num1--) {
printf("%d", num1);
}
printf("\n");
}
return 0;
}
如果一个问题可以分解成几个小问题,每个小问题可以采用类似的循环解决。这种问题就可以采用多重循环编写。
/*
多重循环练习
*/
#include <stdio.h>
int main() {
int num = 0, num1 = 0;
for (num = 0;num <= 2;num++) {
for (num1 = 0;num1 <= 5;num1++) {
if (5 * num + 2 * num1 <= 10) {
printf("5元钱有%d张,2元钱有%d张,1元钱有%d张\n", num, num1, 10 - 5 * num - 2 * num1);
}
}
}
return 0;
}
while关键字也可以用来编写循环,这种
循环通常用来解决事先不知道次数
的循环
while循环格式如下
while (逻辑表达式) {
反复执行的语句
}
程序反复执行大括号里面的语句,直到逻辑表达式结果为假
/*
while循环演示
*/
#include <stdio.h>
int main() {
int num = 1;
while (num <= 5) {
printf("%d ", num);
num++;
}
printf("\n");
return 0;
}
while循环也可以实现死循环,这个时候要提供
一个永远为真的逻辑表达式
while循环里也可以使用break;和continue;语句
while循环会交替执行逻辑表达式和大括号里面
的语句,第一步是计算逻辑表达式的结果
while循环有可能不执行大括号里面的语句
/*
while循环练习
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int num = 0, guess = 0;
srand(time(0));
//num = rand() % 100;
do {
printf("请猜一个数字:");
scanf("%d", &guess);
if (num > guess) {
printf("猜小了\n");
}
else if (num < guess) {
printf("猜大了\n");
}
else {
printf("猜对了\n");
}
} while (num != guess);
/*while (num != guess) {
printf("请猜一个数字:");
scanf("%d", &guess);
if (num > guess) {
printf("猜小了\n");
}
else if (num < guess) {
printf("猜大了\n");
}
else {
printf("猜对了\n");
}
}*/
return 0;
}
==================================
/*
最大公约数练习
*/
#include <stdio.h>
int main() {
int num = 0, num1 = 0, tmp = 0;
printf("请输入两个数字:");
scanf("%d%d", &num, &num1);
while (num1 % num) {
tmp = num1 % num;
num1 = num;
num = tmp;
}
printf("最大公约数是%d\n", num);
return 0;
}
do…while格式也可以用来编写循环
do…while循环必须在小括号后面用分号结束
do…while循环也是交替执行逻辑表达式
的计算和大括号里面的语句,第一步是
执行大括号里面的语句
do…while循环大括号里面的语句至少会
执行一次
scanf标准函数工作的时候需要使用输入缓冲区
用户在键盘上输入的内容首先进入输入缓冲区,然后才能进入存储区
先进入输入缓冲区的数字必须首先被处理
如果用户输入数据的格式和计算机要求的格式不一样则后面输入的数字就没有机会处理了
/*
输入缓冲区演示
*/
#include <stdio.h>
int main() {
int num = 0, num1 = 0;
printf("请输入一个数字:");
scanf("%d", &num);
scanf("%*[^\n]");
scanf("%*c");
printf("数字是%d\n", num);
printf("请再输入一个数字:");
scanf("%d", &num1);
printf("数字是%d\n", num1);
return 0;
}
以下两条语句可以把输入缓冲区里第一个’\n’之前的内容和这个’\n’字符一起删除
scanf(“%*[^\n]”);
scanf(“%*c”);
printf标准函数工作的时候需要使用输出缓冲区
在下面四种情况下输出缓冲区里的内容才会
出现在屏幕上
1.如果输出缓冲区里包含’\n’字符则前面的
内容会出现在屏幕上
2.程序结束后它放在输出缓冲区里的内容会显示
在屏幕上
3.如果输出缓冲区被充满了则里面的内容也会
显示在屏幕上
4.在程序中使用fflush(stdout)语句可以把输出
缓冲区里的内容显示在屏幕上
/*
printf标准函数演示
*/
#include <stdio.h>
int main() {
printf("1");
fflush(stdout);
while (1) {
}
return 0;
}
数组可以代表内存中一组连续的同类型存储区
数组也需要先声明然后才能使用
声明数组时需要提供类型名称,数组名称和一个整数代表数组里的存储区个数
数组一旦创建成功它里面包含的存储区个数就不可以改变
数组通常不作为整体使用,一次只能使用其中的某个存储区
数组里每个存储区有一个编号,这个编号叫做存储区的下标
第一个存储区的下标是0,向后依次递增
有效下标范围从0开始到存储区个数减一为止,超过范围的下标不能使用
数组名称结合下标就可以表示数组里的存储区
/*
数组演示
*/
#include <stdio.h>
int main() {
int arr[] = {0, 1, 2, 3, 4}; //数组声明
int num = 0;
//arr[2] = 10;
/*for (num = 0;num <= 4;num++) {
arr[num] = num;
}*/
for (num = 4;num >= 0;num--) {
printf("%d ", arr[num]);
}
printf("\n");
return 0;
}
可以编写for循环依次处理数组里的每个存储区
在这个for循环里让循环变量依次代表数组中每个存储区的下标
/*
数组练习
*/
#include <stdio.h>
int main() {
int arr[5] = {0};
int qty = 0, num = 0, sum = 0;
printf("请输入数字个数:");
scanf("%d", &qty);
for (num = 0;num <= qty - 1;num++) {
printf("请输入一个数字:");
scanf("%d", &arr[num]);
}
for (num = qty - 1;num >= 0;num--) {
printf("%d ", arr[num]);
}
printf("\n");
for (num = 0;num <= qty - 1;num++) {
sum += arr[num];
}
printf("求和结果是%d\n", sum);
return 0;
}
数组也应该初始化
数组初始化的时候需要提供多个初始化数据,每个初始化数据用来初始化一个存储区。
所有初始化数据写在一对大括号里面,相邻数据之间用逗号分隔
如果初始化数据比存储区个数多就把多余的数据丢掉
如果初始化数据比存储区个数少就把后面多余的存储区初始化成0
如果初始化数据个数和存储区个数一样就可以省略数组声明里的存储区个数