分支与循环—C语言

一: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;
}

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值