【零基础C语言】分支和循环详解

目录

分支结构

if语句

if语句的语法形式

if  else 语句 

 题目

switch语句

switch语句的形式

switch语句中的default 

题目

循环结构 

while循环

 while循环的实践

 for循环

 for循环的实践

do-while循环 

do while循环的实践

 break语句和continue语句

break举例

continue举例 

goto语句

题目练习 


分支结构

        我们知道生活中常常面临这各种选择,比如今天是学习还是玩耍呢,在外面吃东西时我们是选择吃中式还是西式,而我们计算机就是为了人们生活而服务的,因此我们在c程序中也存在选择,我们c程序中将这种选择称之为分支结构,选择就像一个大树一样在各个方面都有着枝条,因此我们称为分支结构。

分支结构中包含if语句和switch语句,那么接下来就让我们来了解他们吧!

if语句

if语句的语法形式

if(/*表达式*/)
{
    //语句
}

注:表达式前 // 和/* */为注释

表达式为真,则执行语句,反之不执行。

列如下面的代码:

我们赋值i_a= 5,表达式i_a确实大于5,则执行语句printf,此时屏幕上会打印“你对了”,反之则无。

#include <stdio.h>
int main()
{
    int i_a = 5;
    if(i_a>3)
    {
    printf("你对了");
    }
    return 0;
}

还有一种就是非0为真,是0为假

#include <stdio.h>
int main()
{
	int i = 1;
	if (i)
	{
		printf("hello\n");
	}
	return 0;
}

但是如果i = 0,屏幕上是不会打印hello的。 

if语句的流程图:

if  else 语句 

 当然选择不是一成不变的,我们常常在生活中面临多个选择,C语言中就引用if  else 语句来解决这样的问题。

对于2个对象我们的形式:

#include <stdio.h>
int main()
{
    int i_b = 3;
    if(i_b>2)
    {
    printf("hehe");
    }
    else
    {
    printf("haha");
    }
    return 0;
}

对于3个及以上对象我们的形式是:

#include <stdio.h>
int main()
{
	int i_c = 0;
	scanf("%d", &i_c);
	if (i_c > 50)
	{
		printf("haha");
	}
	else if (i_c < 25&&i_c>10)
	{
		printf("hehe");
	}
	else
	{
		printf("heihei");
	}
	return 0;
}

 if else语句流程图:

else的悬空问题:

如:

#include <stdio.h>
int main()
{
 int a = 0;
 int b = 2;
 if(a == 1)
 if(b == 2)
 printf("hehe\n");
 else
 printf("haha\n");
 return 0;
}

 这边的else又和谁对齐呢,答案是就近原则,else和距离自己最近的if对齐!在VS编译器中我们也可以很清楚的看明白。

#include <stdio.h>
int main()
{
     int a = 0;
     int b = 2;
 if(a == 1)
     if(b == 2)
         printf("hehe\n");
     else
         printf("haha\n");
 return 0;
}

 题目

编写程序数一下 1到 100 的所有整数中出现多少个数字9

答案参考:

代码参考: 

#include <stdio.h>
int main()
{
	int i = 0;
	int count = 0;
	for (i = 1; i <= 100; i++)
	{
		if (i % 10 == 9)
			count++;
		if (i / 10 == 9)
			count++;
	}
	printf("%d\n", count);
	return 0;
}

switch语句

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。 switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重 的 else if 改成更易⽤、可读性更好的形式。

switch语句的形式

switch (expression//表达式) 
{
     case value1: statement//语句
     case value2: statement//语句
     default: statement//语句
}

注:

  • switch 后的 expression 必须是整型表达式
  • case 后的值,必须是整形常量表达式
//输⼊任意⼀个整数值,计算除3之后的余数
#include <stdio.h>
int main()
{
     int n = 0;
     scanf("%d", &n);
 switch(n%3)
 {
     case 0:
         printf("整除,余数为0\n"); 
         break;
 case 1:
         printf("余数是1\n"); 
         break;
 case 2:
         printf("余数是2\n"); 
         break;
 }
     return 0;
}

上述的代码中,我们要注意的点有:

  • case 和后边的数字之间必须有空格
  • 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句,不然会陷入死循环

switch语句中的default 

在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹 配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊ default ⼦句。

switch (expression) 
{
     case value1: 
            statement
     case value2: 
            statement
     default: 
            statement
}

 在 switch 语句中 case ⼦句和 default ⼦句有要求顺序吗? default 只能放在最后吗? 其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实 际需求的就可以。 不过我们通常是把 default ⼦句放在最后处理的。

题目

输⼊⼀个1~7的数字,打印对应的星期⼏ 例如: 输⼊:1 输出:星期⼀ 输⼊:2 输出:星期⼆ 输⼊:3 输出:星期三 输⼊:4 输出:星期四 输⼊:5 输出:星期五 输⼊:6 输出:星期六 输⼊:7 输出:星期天

错误示范:

#include <stdio.h>
int main()
{
	int days = 0;
	scanf_s("%d", &days);
	switch (days)
	{
	case 1:
		printf("星期一");
	case 2:
		printf("星期二");
	case 3:
		printf("星期三");
	case 4:
		printf("星期四");
	case 5:
		printf("星期五");
	case 6:
		printf("星期六");
	case 7:
		printf("星期日");
	}
	return 0;
}

这样看起来没啥问题,但是当我们输入2时,按道理来说应该输出“星期二”,但是实际如下,导致这样的情况是case是入口,你输入了2那么我就从case 2入口进入但是没有出口只能继续执行下面的语句,要解决这样情况我们需要加break;

​
​
#include <stdio.h>
int main()
{
	int days = 0;
	scanf_s("%d", &days);
	switch (days)
	{
	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;
}

循环结构 

我们往往生活中会做一些重复的是,如每天吃饭,每天上班,上学等等,在C语言中为了解决这样的问题我们就使用了循环结构,本次我们要讲的包括:while/for/do-while循环。

while循环

while 语句的语法结构和 if 语句⾮常相似。

if (/*表达式*/)
    {
	    /*语句*/;
    }



while(/*表达式*/)
	{
		/*语句*/;
	}

当表达式内的内容判断为真的时,执行循环程序,反之则不执行。

while循环语句的流程图:

 while循环的实践

练习:在屏幕上打印1~10的值

参考代码:

#include <stdio.h>
int main()
{
	int num = 0;
	while (num <= 10)
	{
		printf("%d ", num);
		num++;
	}
	return 0;
}

 练习

输⼊⼀个正的整数,逆序打印这个整数的每⼀位

例如:

  • 输⼊:1234,输出:4 3 2 1
  • 输⼊:521,输出:1 2 5

参考代码: 

#include <stdio.h>
int main()
{
	//输入数字
	int num = 0;
	int ret = 0;
	scanf_s("%d", &num);
	//循环处理
	while (num)
	{
		ret = num % 10;//求出末尾数字
		printf("%d ", ret);//输出数字
		num = num / 10;//将末尾数前进一位,如255->25
	}
	return 0;
}

 for循环

 for 循环的语法形式如下:

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

​
  • 表达式1 ⽤于循环变量的初始化
  • 表达式2 ⽤于循环结束条件的判断
  • 表达式3 ⽤于循环变量的调整 

for语句流程图:

 for循环的实践

练习1:在屏幕上打印1~10的值

参考代码:

#include <stdio.h>
int main()
{
	int num = 0;
	for (num = 1; num <= 10;num++)
	{
		printf("%d ", num);
	}
	return 0;
}

练习2: 计算1~100之间3的倍数的数字之和 

参考代码:

//1-100之间3倍数的和
#include <stdio.h>
int main()
{
	int ia = 0;
	int icount = 0;
	for (ia = 1; ia <= 100; ia++)
	{
		//判断是否是3的倍数
		if (ia % 3 ==0)
		{
			icount =icount + ia;
		}
	}
	printf("%d", icount);
	return 0;
}

练习3:打印1000年到2000年之间的闰年 

参考代码:

//打印1000年到2000年之间的闰年
#include <stdio.h>
int main()
{
	//使用循环打印出1000~2000的年份
	int years = 0;
	for (years = 1000; years <= 2000; years++)
	{
		//1. 能被4整除并且不能被100整除是闰年
		//2. 能被400整除是闰年
		//判断是否是闰年:
		if ((years % 4 == 0 && years % 100 != 0) || (years % 400 == 0))
		{
			printf("%d是闰年\n",years);
		}
	}
	return 0;
}

do-while循环 

 在循环语句中 do while 语句的使⽤最少,它的语法如下:

do
{
    语句;
}while();

简单来说do-while就是先做事在判断,如果判断通过则继续做事,它至少要运行一次,而for和while循环是先判断后做事,如果判断不通过,则一次都不会运行。

do while循环的实践

在屏幕上打印1~10的值

#include <stdio.h>
int main()
{
	int num = 1;
	do
	{
		printf("%d ", num);
		num++;
	} while (num <= 10);
	return 0;
}

练习 输⼊⼀个正整数,计算这个整数是⼏位数?

例如:

  • 输⼊:1234 输出:4
  • 输⼊:12 输出:2 

参考代码: 

 

 break语句和continue语句

break举例

 其实和 while 循环中的 break ⼀样, for 循环中的 break 也是⽤于终⽌循环的,不管循环还需 要循环多少次,只要执⾏到了 break ,循环就彻底终⽌。

#include <stdio.h>
int main()
{
   int i = 1;
     for(i=1; i<=10; i++)
 {
        if(i == 5)
        break;
        printf("%d ", i);
 }
     return 0;
}

continue举例 

上⾯的代码,如果把 break 换成 continue 会是什么结果呢?

#include <stdio.h>
int main()
{
     int i = 1;
         for(i=1; i<=10; i++)
         {
             if(i == 5)
             continue;//这⾥continue跳过了后边的打印,来到了i++的调整部分
             printf("%d ", i);
         }
     return 0;
}

 

循环中 continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调 整部分。未来当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤ continue 来实现。 

goto语句

#include <stdio.h>
int main()
{
	int i = 2;
	again:
	while (i>0)
	{
		printf("hehe ");
		i--;
	}
       i=0;
	goto again;
	return;
}

again 是自定义名称,当我们使用goto语句时,他会跳转到again:的地方继续往下执行代码。以上代码不停的跳转,最后形成死循环。 

题目练习 

题目1:在屏幕上输出9*9乘法口诀表

参考代码:

//输出9*9乘法口诀表
#include <stdio.h>
int main()
{
	int num1 = 1;
	int num2 = 1;
	int product = 1;
	for (num1=1;num1<=9;num1++)
	{
		for (num2 = 1; num2 <= 9; num2++)
		{
				product = num1 * num2;
				printf("%d*%d=%d\n",num1,num2, product);
		}
	}
	
	return 0;
}

  • 26
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值