c语言的分支和循环

1.if语句

if语句的语法结构如下:

if(表达式)

          语句;

if语句是否执行是判断表达式是否为真,在c语言中,0表示假,非零表示真;真则执行语句,假则不执行语句。

我们来看一个例子:

这里我们可以看到我们给a的赋值结果为0,表示假,则不执行下面的printf语句。 

相反,当if语句中表达式为非零表示真,则执行printf语句。

 当我们表达式中的值为假时我们也想执行语句时,我们可以搭配else使用,构成if else语句:

这时当我们表达式的结果为假的时候也可以去执行另外的语句。

 了解了if else语句接下来我们来看一个练习:

练习:输入一个数字,判断是否成年;

 这里我们输入一个数字,如果输入的数字大于或等于18,便会输出成年了;如果输入的数字不符合这个条件,就会输出未成年。

注意:在if和else中默认都只会控制一条语句

下面我们来看例子:

这里我们可以看到,当我们输入的值不符合条件时,程序依然打印了第二个printf语句; 如果我们要让if和else能够同时控制多条语句,我们只需要在if和else的程序块中加上{}。

在if else语句中,当我们的选择不单单只有2种时,我们就需要进行嵌套

我们来看一个例子:

输入一个数字,判断这个数字是0,正数还是负数

这里我们可以分开来看,输入一个数字,程序进入if函数进行判断,如果不符合则进入else,如何再去判断后面的if,如果也不符合则进入下一个else,再去判断后面的if,如果也不符合则什么都不打印;我们也可以通过代码来直观的感受一下逻辑顺序: 

int main()
{
    int num;
    scanf("%d", &num);
    if (num == 0)
        printf("0");
    else
    {
        if (num > 0)
            printf("正数");

        else
        {
            if (num < 0)
                printf("负数");
        }
    }
    return 0;
}

我们可以直观的看出来一层层的嵌套关系。

上面的代码可以帮我们很清楚的理清楚if和else的匹配关系,下面我们来看一组代码:

int main()
{
    int m = 0;
    int n = 3;
    if (m)
        if (n == 3)
            printf("hhh\n");
   else
          printf("111");
    return 0;

这里我们可能会认为最后输出的结果是“111”,因为else是对齐着第一个if,但是这里实际上是不会输出任何东西,因为这里涉及了一个else的悬空问题,else总是和离自己最近的if匹配,如果我们想让这个代码输出“111”的话,只需要用{}将第二个if的代码块括起来即可。

int main()
{
    int m = 1;
    int n = 3;
    if (m)

      {
        if (n == 3)
            printf("hhh\n");

       }
      else
           printf("111");
   return 0;
}

2.switch语句 

对于处理一个条件有多个的结果时,if语句用起来就会比较繁琐,而switch也在这种情况用起来方便;

switch (expression)

{
 case value1: statement
 case value2: statement
 default: statement
}

switch会根据expression的值去选择对应的case分支,如果没有找到与expression所匹配的值便会执行default语句。

注意:

switch后面的expression必须是整型;

case后面必须跟的是整型常量;

下面我们来看一个例子:

输入任意一个值,计算除三之后的余数;

 这里我们可以看到,通过a%3的值去匹配对应的case,然后从对应的case进去;这里我们要注意,如果我们在每一个case语句的后面没有加break的话,程序会一直从进来的case语句一直执行到程序结束,这样会把我们不需要的东西给打印出来,而这里break的意义就是输出我想要的结果后跳出switch语句,不再执行后面的程序,所以除了在一些特殊的情况下,switch尽量与break一起用。

举个例子:

输入一个数字,判断是工作日还是休息日

int main()
{
    int week;
    scanf("%d", &week);
    switch (week)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("工作日");
        break;
    case 6:
    case 7:
        printf("休息日");
        break;
    dafault:
        printf("输入错误");
        break;
    }
    return 0;
}

 像类似这种情况,break就没必要放在每一个case语句的后面;

3.while循环

if语句和while循环的结构非常的类似:

while(表达式)

           语句;

接下来我们来看一个例子:

例子:在屏幕上输出1~10的数字;

while循环的运行顺序就是,先判断while的表达式是否成立,成立则进入循环执行语句,然后每次进入循环num加一,当num不符合表达式的时候则跳出循环。(这里的++是属于单目操作符,用法是加一,具体用法后面的文章会写,这里只需了解是调整变量,使变量num加一)

我们来练习一个题目:

输⼊⼀个正的整数,逆序打印这个整数的每⼀位
例如:
输⼊:1234,输出:4 3 2 1
输⼊:521,输出:1 2 5

首先我们来分析一下这个题目,我们如果要得到这个数的最低位,就是求这个数的模;

得到这个模之后我们要得到这个数的第二位,就要将这个数/10之后再执行求模运算;

int main()
{
	int num;
	scanf("%d", &num);
	while (num)
	{
		printf("%d", num % 10);
		num = num / 10;
	}
	return 0;
}

4.for循环

for循环的结构:

for(表达式1;表达式2;表达式3)

      语句;

for循环的运行顺序是,初始化循环变量(表达式1),判断语句(表达式2),成立则执行语句,执行完语句后进行调整循环变量(表达式3);

例子:再屏幕上打印1~10的数字;

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

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

int main()
{
	int num;
	int count = 0;
	for (num = 1; num <= 100; num++)
	{
		if (num % 3 == 0)
	    {
             printf("%d ", num);
		     count = count + num;
        }
	}
	printf("\n%d", count);
	return 0;
}

首先,我们分析一下这道题,题目让我们计算1~100的3的倍数之和,第一步我们需要用循环去生成1~100的数字;其次,让我们计算3的倍数之和,我们得筛选出1~100里3的倍数,将它打印出来,然后再进行相加,最后打印出3的倍数之和。

5.do while循环

do while的循环结构:

do

 {

    语句;

}while(表达式)   //判断句;

do while循环是先执行语句再进行判断,所以do while的循环体至少会执行一次;

例子:在屏幕上打印1~10的数字;

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

一般do while循环用于这个循环体必须要执行一次时;

我们来做个练习:

输⼊⼀个正整数,计算这个整数是⼏位数?
例如:
输⼊:1234 输出:4
输⼊:12 输出:2

int main()
{
	int num;
	int count = 0;
	scanf("%d", &num);
	do
	{
		count++;
		num = num / 10;
	} while (num);
	printf("%d", count);
	return 0;
}

这里用do while的原因是因为如果我输入的是0的话,0也是一位整数;

我们再来分析一下代码;

这里我们用一个变量来代替输出整数个数,当数字进去的时候整数个数加一,再将数字除以10,我们便可以去掉这个数字的最低位,再去判断循环,当num除了4次过后,值变为了0,这是判断表达式为假,不再进行循环,此时输出数字的个数。

6.循环的嵌套

练习:

找出100~200之间的素数,并打印在屏幕上。
注:素数⼜称质数,只能被1和本⾝整除的数字。

我们来解析一下题目:

首先,我们要在得有100~200的数字,我们可以用循环来实现;

有了数字之后我们要在其中找出里面的质数,质数就是只能被1和数字本身整除的,这个时候我们就要生成2~i-1之间的数字;

最后再将质数打印在屏幕上。

int main()
{
	int m;
	for (m = 100; m <= 200; m++)
	{
		int i = 1;//设n为质数;
		int n;
		for (n = 2; n <= m - 1; n++)
		{
			if (m % n == 0)
			{
				i = 0;//不是质数;
				break;
			}
				
		}
		if (i == 1)
			printf("%d ", m);
	}
	return 0;
}

这里我们来主要来讲几个点,这里的接题要点是i这个数来代表m是否是质数,在m刚进循环体时,我们可以给他假设为质数,并给变量赋值,通过if判断m能否被除了被1还有本身以外的数字整除,如果被除了自身和1以外的数字整除则执行if语句,将i的值变为0,表示m不是质数,然后break跳出第一层循环体,最后整个循环结束后,如果i==1的话则打印数字m。

ps:第一次写博客,写的不好的地方可以提出来,有什么不好的地方也可以说,接受各位大佬的批评hh

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值