一:if语句
1:if...else if...型
值得一提的是,对于多个if条件表达,一旦其中有一个成功执行,那么剩下未判断的else...if...,else...就不会判断了,直接跳过。
示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int i = 0;
scanf("%d", &i);
if (i >= 6) {
printf("hehe\n");
}
else if (i >= 10) {
printf("haha\n");
}
else {
printf("hello");
}
return 0;
}
//当输入7时,结果只打印hehe,不会判断接下来的i >= 10
2:悬空else
示例:
#include <stdio.h>
int main(){
int i = 1;
if(0)
if(i == 1)
printf("%d",i);
else
printf("haha");
return 0;
}
结果是什么都不会打印。因为,当没使用大括号包裹时,else与靠的最近的if语句相对应。
总的来说,写一个if语句写一个大括号,是一个好习惯。
二:关系操作符
注意点:多个关系运算符不宜连用。如果出现,也不会报错。其判断规则如下:若a > b > c,
先判断a > b是否成立,正确则结果为1,错误则结果为0,于是再用这个结果去和c做判断。
三:条件操作符
其格式为:判断句 ?表达式1 :表达式2;
若判断句为真,则结果为表达式1;否则结果为表达式二。
#include<stdio.h>
int main() {
int a = 0, b = 0;
scanf("%d", &a);
a > 5 ? b = 3 : b = -3;//另一种方式为:b = a > 5 ? 3 : -3;
printf("%d", b);
return 0;
}//执行为,若a > 5,那么b = 3,反之b = -3
其适用于一个if...else...语句中。即如果事情发生,那么结果不是这个就是那个型。
#include <stdio.h>
int main() {
int a = 0, b = 0;
scanf("%d", &a);
a > 5 ? printf("haha") : printf("hehe");//这样写同样符合逻辑
return 0;
}
四:判断语句的返回值
所有判断语句都有返回值,不是1就是0。
如:3&&4的返回值为1;0||1的返回值为1
五:switch语句
switch语句格式为:
Switch(整数型表达式){
case 整数结果1://case后面要加上一个空格
content;
break;
case 整数结果2:
content;
break;
default: //如果没有匹配的结果则执行default
content;
break;
}
其中break表示跳出switch语句 。如果没有break,那么会继续执行后面的语句,直到遇到break,或者走完switch语句的全部内容才能跳出switch语句。因此,可以灵活运用break。
那什么时候用switch语句,什么时候用if语句呢。
当判断<=3 个时,使用if语句更好;当判断>3个时,使用switch语句更好。当然,使用switch时,一定要保证是整数型。
六:break与continue
一:break
break代表跳出循环(for,while,do while)。当一遇到break时,程序便会跳出其所在的循环。
二:continue
continue代表终止本次循环,即本次continue后的语句不会被执行,开启一次新的循环。其在for与while中产生不同的效果。
//在for中
#include <stdio.h>
int main(){
int i = 0;
for(i = 5;i <= 10;i++){
if(i == 5){
continue;
}
printf("%d",i);
return 0;
}//结果为6,7,8,9,10
//在while中
#include <stdio.h>
int main(){
int i = 5;
while(i <= 10){
if(i == 5){
continue;
}
printf("%d",i);
i++;
}
return 0;
}//结果为无限循环5
两种循环包含了continue的不同点在于,在for中,遇到continue,虽然会终止后面的语句,但是for()中的表达式2不会受其影响。
七:goto 语句
使用示例:
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next;
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}
很灵活,但是,如果一旦运用不当,会导致程序混乱。所以,goto语句要谨慎使用。
并且,goto 指定的语句后是“:”号。
八:随机数的产生
1:rand函数
rand()的库函数为<stdlib.h>
rand()能够产生伪随机数,随机数范围在0——RAND_MAX之间,RAND_MAX的大小依赖编译器,大部分情况下,RAND_MAX为32767。
为何说rand()产生的是伪随机数呢,因为每次重新执行程序,rand()产生的随机数是一样的。
rand()产生随机数是以种子(seed)为基础而产生的,如果单纯使用rand(),那么其默认的种子为1,因此每次重新执行程序,产生的随机数不会变化。
于是我们要借助srand函数。
2:srand函数
srand是用来初始化随机数种子的。
格式为:
void srand (unsigned int seed);//seed为非负整数
我们想要产生真正的随机数,那么seed也要变化,如果使用rand(),去使seed变化,那么就矛盾了。因为rand()的使用依靠srand,但是srand还没编译好,怎么能在srand()中使用rand()呢。
于是,我们要借助time函数。
3:time函数
time函数的库函数为<time.h>
时间戳:time(NULL) 。代表程序开始执行的时间到1970年1月1日0时0分0秒的差值,单位为秒。所以每次开始执行程序时间戳是在不断变化的,因此用time(NULL)作为seed再核实不过了。
4:随机数范围
要产生1-100的随机数,我们这样写:rand() % 100 + 1。因为rand()%100产生的范围是0-99,再加一便是1-100。
规律如下,要产生a-b的随机数,应该记作:rand()%(b - a + 1)+ a。
5:使用示例
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
srand ((unsigned int) time (NULL));//产生随机种子
rand() % 100 + 1;//产生1-100的随机数
return 0;
}