新手入门C语言之分支与循环(简单易懂)

一.if函数       

1.形式:

if(式子一)       

{式子二;

式子三;
············

}

        其中,如果式子一为真(非零),则会执行括号内的程序,如果式子二为假(零),则不会执行括号内的程序。我们可以写出一个例子(输入一个整数,判断是否为奇数)使用if函数:

int main(){
	int num = 0;
	scanf("%d", &num);
	if (num % 2 == 1) {
		printf("%d 是奇数", num);
	}
	//另一种写法
	if (num % 2) {
		printf("%d 是奇数", num);	//0为假,非0为真
	}
	return 0;
}

当我们输入5时,会输出5是奇数

2.if else

当然,有些时候并不只有两种情况,我们可以使用if(式子一) 式子二  else(式子三) 式子四的形式,也是判断括号内的式子是否成立,一般来说,if内的式子是不能与else内的式子同时成立的。我们可以使用if else写出一个代码,输入一个数字,来判断是否成年。

int main() {
	int age;
	scanf("%d", &age);
	if (age >= 18)
			printf("成年");


	else
		printf("未成年");
	return 0;
}

但是我们应该注意,如果我们在成年时,同时输出可以恋爱,未成年输出请好好学习,我们可能会这样写代码:

int main() {
	int age;
	scanf("%d", &age);
	if (age >= 18)
			printf("成年");
	printf("可以谈恋爱");

	else
		printf("未成年");
        printf("请好好学习");
	return 0;
}

我们在这个代码中,如果输入20,我们想让他输出成年,可以谈恋爱,但是我们会发现,结果是这样:

20
成年可以谈恋爱请好好学习

为什么会出现这样的情况呢?

事实上,if后如果跟多条语句时候,需要带大括号,应该这样写:

int main() {
	int age;
	scanf("%d", &age);
	if (age >= 18)
	{		printf("成年");
	printf("可以谈恋爱");
}
	else{
		printf("未成年");
    printf("请好好学习");        
}
	return 0;
}

这样就可以啦

3.if的嵌套

我们知道,if后面可以加个大括号,来表示if成立的情况下执行的操作,例如,让我们判断输入的一个数字的正负,代码如下:

int main() {
	int n = 0;
	scanf("%d", &n);
	if (n == 0)
		printf("输入的是0\n");
	else {
		if (n > 0)
			printf("输入的是正数\n");
		else
			printf("输入的是负数\n");
	}
	return 0;
}

可见,我们在else中,还可以使用if else来判断,这便是if的嵌套

但是多个if else的时候,else总与最近的if相连,例如,我们可以写出一个代码

int main() {
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hehe");
		else
			printf("haha");
	return 0;
}

我们不知道else所表示的是与a==1联系还是b==2联系,但是当我们输出时候,无法输出任何东西,因为else与最近的if项链,a==1不满足,因此不会执行下面的if else语句

二.三目操作符(条件操作符)

1.形式:

表达式1 ? 表达式2 : 表达式3

判断表达式1正误        正确执行表达式2        错误执行表达式3

真    计算    不算
假    不算    计算

2.实例:

int main() {
	int a = 0;
	int b = 0;
	scanf("%d", &a);
	b = (a > 5 ? 3 : -3);
	printf("%d", b);
	return 0;
}

如果我们输入6,6>5,执行b=3,输出3

如果我们输入2,2<5,执行b=-3,输出-3

3.逻辑操作符

&&逻辑与   ||逻辑或   !逻辑取反   非0 -> 0     0 -> 1

式子一&&式子二        如果式子一和式子二同时成立,该式子成立,如果任何不满足式子,此时这个式子不成立

式子一||式子二        如果式子一和式子二同时不成立,该式子不成立,当式子一或者式子二的任何一个式子成立时,这个式子就会成立

!式子一                如果式子一为真,!式子一为假, 如果式子一为假,!式子一为真

4.短路

短路,先对左求值,再对右求值,如果左边的满足,就不对右边的求值,叫短路
如果已知左操作数可知整个式子结果,短路求值

式子一&&式子二       对于该式子,式子一为假的情况下,这个式子必定不成立,此时不需要再判断式子二的情况了,短路

式子一||式子二         对于该式子,式子一为真的情况下,这个式子必定成立,此时不需要再判断式子二的情况了,短路

int main() {
	int i = 0, a = 1, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
	printf("%d\n%d\n%d\n%d\n%d\n", a, b, c, d, i);
	return 0;
}

对于    i = a++ && ++b && d++;执行顺序是:

a = 1为真 -> a++  -> b++ -> b=3为真 -> d=4为真 -> d++ 故i = 1

这样我们就知道对于这种式子的解决方式了

三.switch分支

1.形式:

switch(表达式一){
case 1:表达式二;

case 2 : 表达式三;

············

}

应该注意,表达式一,表达式二,表达式三都必须是整型表达式,case后必须是整型常量表达式

2.实例

写出一个代码,输入一个数字判断是否除以3后的余数

int main() {
	int i;
	scanf("%d", &i);
	switch (i % 3) {
	case 0:
		printf("余数是0");
	case 1:
		printf("余数1");

	case 2:
		printf("余数是2");
		break;

	}
	return 0;
}

我们会发现,如果我们输入0,应该是进入case0,但是输出结果是:

余数是0余数是1余数是2

实际上,case只决定入口,我们需要决定出口的代码break

int main() {
	int i;
	scanf("%d", &i);
	switch (i % 3) {
	case 0:
		printf("余数是0");
		break;
	case 1:
		printf("余数1");
		break;
	case 2:
		printf("余数是2");
		break;

	}
	return 0;
}

这样,当执行玩输出后,就会直接跳出switch。

如果我们想输入1-7,输出星期一-星期日,使用swtich代码:

int main(){
    int i = 0;
    scanf("%d",&i);
    swtich(i){
    case 1:
    printf("星期一");
    break;
    case 2:
    printf("星期二");
    break;
    case 3:
    printf("星期三");
    break;
    case 4:
    printf("星期四");
    break;
    case 5:
    printf("星期五");
    break;
    case 6:
    printf("星期六");
    break;
    case 7:
    printf("星期日");
    break;
}
    return 0;
}

但是我们可能输入其他数字,例如我输入8,会发现没有满足条件的,那我们需要加入default代码,来判断其他情况:

int main(){
    int i = 0;
    scanf("%d",&i);
    swtich(i){
    case 1:
    printf("星期一");
    break;
    case 2:
    printf("星期二");
    break;
    case 3:
    printf("星期三");
    break;
    case 4:
    printf("星期四");
    break;
    case 5:
    printf("星期五");
    break;
    case 6:
    printf("星期六");
    break;
    case 7:
    printf("星期日");
    break;
    default:
    break;
}
    return 0;
}

default可以处理case无法取到的内容

如果,我们想输入1-5,显示工作日,6-7输入休息日,我们可以运用简单的方法,我们可以写下如下的代码:

int main(){
    int i = 0;
    scanf("%d",&i);
    swtich(i){
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    printf("工作日");
    break;
    case 6:
    case 7:
    printf("休息日");
    break;
    defalut:
    break;
}
    return 0;
}

四.while循环

1.形式        

while()  +    语句        当括号内成立时,就会反复执行循环语句

每个while循环都需要使用的内容        初始化    判断    调整

例如,我们使用代码输出1-10这十个数字

int main() {
	int i = 1;        //初始化
	while (i <= 10) {        //判断
		printf("%d\n", i);    
		i++;        //调整
	}
	return 0;
}

2.实例

输入一个数字,进行逆序打印,例如输入571,输出175,我们可以利用取余的方法,使用while循环,来进行:

int main() {
	int i = 0;
	scanf("%d", &i);
	while (i != 0) {
		printf("%d\n", i % 10);		//获取最低位
		i /= 10;	//去掉最低位
	}
}

但我们发现,这样的形式使得初始化,判断,调整比较分散,所以我们应该使用下一个函数

四.for循环

1.形式:

for(表1;表2;表3){语句}

    初始化 判断 调整

for循环的三个部分是可以省略的,但如果表达式2省略,则判断恒成立,就会一直执行

2.实例:

输出1-10:

int main() {
	int i = 0;
	for (i = 1; i <= 10; i++) {
		printf("%d", i);
	}
	return 0;
}

输出1-100中3的倍数之和

int main() {
	int i = 0, sum = 0;
	for (i = 0; i <= 100; i++) {
		if (i % 3 == 0)
			sum += i;
	}
	/*for (i = 3; i <= 100; i += 3) {
		sum += i;
	}*/
	printf("%d", sum);
	return 0;
}

五.do while循环

do 语句 while(表达式);  至少执行一次

会先执行语句,再进行判断表达式是否成立,若成立,则会不断执行语句,因此至少会执行一次

我们如果想输出1-10:

int main() {
	int i = 1;
	do
	{
		printf("%d", i);
		i++;
	} while (i <= 10);
	return 0;
}

六.循环的嵌套

我们可以在循环中加入循环,例如我们判断100-200内的素数,并输出

int main() {
	int i = 0;
	int j = 0;
	for (i = 100; i <= 200 && i >= 100; i++) {
		for (j = 2; j < i; j++) {
			if (i % j == 0) 
				break;
		}
		if (i == j)
			printf("%d\n", i);
	}
	return 0;
}

七.goto语句

在同一个函数内跳转好设计好的标号处

int main() {
	printf("hehe");
	goto next;
	printf("haha");
next:
	printf("heihei");
	return 0;
}

这样,只会打印heheheihei,将haha跳过啦

使用方式:在多层循环中,可以使用goto快速跳出循环

感谢您的观看

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值