此处因为我很早就接触过,这里不过多赘述。
基础语法 :
if(表达式)
{
}
else if (表达式)
{
}
else
{
}
同上理由,不过多赘述。
基础语法 :
switch (整形常量表达式) {
case 1(这是例子):
(整形常量表达式);
break;
case 2(这是例子):
(整形常量表达式);
break;
default:
(整形常量表达式);
break;
}
上述的代码中,我们要注意的点有:
1. case 和后边的数字之间必须有空格
2. 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。
3. 在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实 际需求的就可以。 不过我们通常是把 default 句放在最后处理的。
基本语法:
while(表达式)
{
};
练习题:输⼊⼀个正的整数,逆序打印这个整数的每⼀位 例如: 输⼊:1234,输出:4 3 2 1 输⼊:521,输出:1 2 5
解析:①小规律:得到最低位 → n %10(如1234中得到4)
去掉最低位 → n / 10 (如1234中得到123)
②最后一位,我们打印n%10 ;取倒数第二位,先使数本身去掉了最低位(变成三位数),再取现在变身后的最低位。
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
while(n)
{
printf("%d ", n%10);
n /= 10;
}
return 0;
}
for 循环是三种循环中使⽤最多的
基本语法:
for(表达式1; 表达式2; 表达式3)
{
};
表达式1 ⽤于循环变量的初始化
表达式2 ⽤于循环结束条件的判断
表达式3 ⽤于循环变量的调整 (在该循环完成后的变量调整)
练习题: 计算1~100之间3的倍数的数字之和
#include <stdio.h>
int main()
{
int i = 0;
int sum = 0;
for(i=1; i<=100; i++)
//这里 初始数i=1 ;条件i是 <=100 的所有数 ; 每次循环结束,变量i顺次加1
{
if(i % 3 == 0) //除以3无余数
sum += i; // sum=sum+1
}
printf("%d\n", sum);
return 0;
}
基本语法:
do
{
};
while(表达式);
while 和 for 这两种循环都是先判断: 条件满足 → 进⼊循环,执⾏循环语句 条件不满足 → 跳出循环;
而 do while 循环则是直接先进⼊循环体(执行循环语句),然后再判断 while括号里的判断表达式( 执行while (表达式)) 表达式为真(即 while(n) 的n结果为1)→ 进行下⼀次循环 表达式为假(即 while(n) 的n结果为0) → 不再继续循环
可以实现在同⼀个函数内跳转到设置好的标号处。
基本用法:
#include <stdio.h>
int main()
{
printf("这句话会被正常打印,当代码运行到下一行出现了跳转语句,提示跳到here处\n");
goto here;
printf("这句话就不会被打印出来\n");
here:
printf("直接跳过上面的那个,打印现在这句话\n");
return 0;
}
注意:
goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建议是能不用尽量不用;
但是 goto 语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳出使⽤ goto 就⾮常的⽅便了。
rand和srand → <stdlib.h> time → <time.h>
有人会说,为什么打一个随机而已,要三个语法结构,好麻烦~
呐,我们慢慢推一遍为什么————
首先,我们直接运行rand的结果
这个看似随机的值多运行几次,会发现结果都一样
——有点问题啊小兄弟
如果再深⼊了解⼀下,我们就不难发现,其实rand函数生成的随机数是伪随机的 (伪随机数不是真正的随机数,是通过某种算法生成的随机数) 真正的随机数的是⽆法预测下⼀个值是多少的。 我搜索的专业网站解释咳咳咳:rand函数是对⼀个叫“种子”的基准值进行运算生成的随机数。 之所以前面每次运行程序产生的随机数序列是⼀样的,那是因为rand函数生成随机数的默认种子是1。
如果要生成不同的随机数,就要让种⼦是变化的。
斯,真讨厌
该死的
于是c语言又提供了⼀个函数叫 srand,用来初始化随机数的生成器的
srand的原型如下:
void srand (unsigned int time);
//哇哦这里提前出现了time
程序中在调⽤ rand 函数之前先调⽤ srand 函数,通过 srand 函数的参数seed来设置rand函数⽣成随机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。
那也就是说给srand的种子是如果是随机的,rand就能生成随机数; 在生成随机数的时候⼜需要⼀个随机数,这就⽭盾了。 在程序中我们⼀般是使用程序运行的时间作为种子的,因为时间时刻在发生变化的。 嘿嘿,我这个过渡句不错吧(不是
专业用词ing: time 函数会返回当前的日历时间,其实返回的是1970年1⽉1日0时0分0秒到现在程序运行时间之间的差值,单位是秒。返回的类型是time_t类型的,time_t 类型本质上其实就是32位或者64位的整型类型。
time函数的参数 timer 如果是⾮NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存 中带回去。
如果 timer 是NULL,就只返回这个时间的差值。
time函数返回的这个时间差也被叫做:时间戳。
如果只是让time函数返回时间戳,我们就可以这样写:
time(NULL);
//调⽤time函数返回时间戳,这⾥没有接收返回值
使用time函数的返回值设置种⼦ 因为srand的参数是unsigned int类型,我们将time函数的返回值强制类型转换
随机数范围设置
a + rand ( ) % ( b - a + 1 ) ————(范围 a 到 b) srand((unsigned int)time(NULL))
有了上面的基础,
那我们就可以让生成随机数的代码改写成如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand((unsigned int)time(NULL));
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
return 0;
}
多运行几次看看,每次的运行就有差异了。
注意:srand函数是不需要频繁调用的,一次运行的程序中调用一次就够了。
见我的作品“【c语言】一些刷题遇到的小知识点—1 ”