C语言分支循环

目录

目录

一、分支

1.if语句

2.switch语句

二、循环结构

1.while语句

2.do...while语句

3.for语句

4.break与continue 

三、应用举例

 1.打印九九加法表

2.质数判断

3.百钱百鸡


一、分支

1.if语句

(1)if语句的语法为:

 if(表达式)
{
    语句块
}

其含义是:如果表达式为真,则执行语句块,否则不执行。

(2)if else语句的语法为:

if(表达式)
{
    语句块1
}
else
{
    语句块2
}

其含义是:如果表达式为真,则执行语句块1,否则执行语句块2。

说明:

  1. 表达式可以是任何合法的C语言表达式,如加减、赋值、条件运算、逗号运算、逻辑运算、关系运算等;
  2. 语句块要求是一条语句,如果有多条语句则应组成一条复合语句。当语句块是单条语句时,虽然语法上可以不适用大括号,但是为了程序代码的清晰性和层次性起见,推荐使用大括号。另外,大括号对于else子句的正确配对也具有较好的提示作用;
  3. if或if...else语句本身在语法上理解为一条语句。

(3)if嵌套

当需要对多种情况进行判别处理时,为结构清晰起见,可以采用如下的排版方式:

if(表达式1)
   语句块1
else if(表达式2)
   语句块2
else if(表达式3)
   ...
else
   语句块n

注意:C语言规定,else总是与它前面最近的且没有配对的if相匹配

2.switch语句

switch语句的语法为:

switch (表达式)
{
case 常量表达式1:语句系列1
case 常量表达式2:语句系列2
...
case 常量表达式n:语句系列n
[default:        语句系列n+1]
}

说明:

  1. switch后面的表达式可以为整型、字符型或者枚举型,但不允许是实型
  2. case后面必须为常量,且类型应与switch中表达式的类型相同;
  3. switch语句的执行过程是:首先计算switch后面表达式的值,然后与各case分支的常量进行匹配,与哪个常量相等,就从该分支的语句系列开始执行,直到遇到break或者switch语句块的后大括号
  4. default分支主要用于处理switch表达式与所有case常量都不匹配的情况。它在语法上可以省略,但推荐使用。

二、循环结构

1.while语句

while语句语法为:

while(表达式)
{
    语句块
}

如果表达式的值为真,则进入循环,执行语句块;如果表达式的值为假,则不进入循环,执行while语句的下一条语句。

例:

int a,i=0;
scanf("%d",&a);
while(i<a)
{
    printf("%d",i);
}

在这个程序中,while语句块执行a-i+1次,变量i承担了控制循环次数的作用,一般称之为循环控制变量。通过对循环控制变量的修改,控制循环结束的时机。

2.do...while语句

do...while语句的语法为:

do
{
    语句块
}while(表达式)

先执行语句,后判断表达式的真假,若为真,则继续执行语句块,否则执行do...while的下一条语句。语句块会被至少执行一次

3.for语句

for语句的语法为:

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

其中,表达式1,2,3分别对应初始化,条件,更新。具体执行过程为:计算表达式1的值,若满足表达式2,则开始执行语句块的内容,一次循环后执行表达式3,达到变量更新的效果。当表达式2为假时,退出循环,执行下一个语句块。

说明:

  • for语句中,表达式1、表达式2、表达式3均可省略。当表达式2省略时,默认其计算结果为真,for中的语句块会被一直执行。

4.break与continue 

break与continue是两个流程控制关键字,主要用于循环的中断控制。

两者的区别为:break是结束本层循环体的运行,退出本层循环;continue只是提前结束本层循环体的运行,忽略循环体内其后面的语句,然后重新判断循环条件,并未退出循环体

例:

​
​
#include <stdio.h>
int main()
{
    int i,n;
    for(i=1;i<=5;i++)
    {
        printf("Enter in:");
        scanf("%d",&n);
        if(n<0)
            break;
        printf("n=%d\n",n);
    }
    printf("The end.\n")
    return 0;
}

​

​
​
​
#include <stdio.h>
int main()
{
    int i,n;
    for(i=1;i<=5;i++)
    {
        printf("Enter in:");
        scanf("%d",&n);
        if(n<0)
            continue;
        printf("n=%d\n",n);
    }
    printf("The end.\n")
    return 0;
}

​

​

二者运行的结果分别为:

Enter n: 3
n = 3
Enter n: 4
n = 4
Enter n: -5
The end.
Enter n: 3
n = 3
Enter n: 4
n = 4
Enter n: -5
Enter n: -6
Enter n: 7
n = 7
The end.

两段程序的区别在于,第一个使用了break语句,第二个使用了continue语句。当输入-5时,第一个程序中for循环中断,剩余的两次循环不再执行;当输入-5,-6时,第二个程序中只是忽略了当前循环剩余的语句“printf("n = %d\n",n);”,for语句循环体的执行次数并没有减少,仍然为5次。

三、应用举例

 1.打印九九加法表

#include <stdio.h>
int main()
{
	int i, j;
	for (i = 1; i <= 9; i++)    //外层循环:控制行数
	{
		for (j = 1; j <= i; j++)    //内层循环:控制输出的等式数
		{
			printf("%d+%d=%2d ", i, j, i + j);    //输出具体内容
		}
		printf("\n");    //每行最后应有一个回车换行
	}
	return 0;
}

2.质数判断

#include <stdio.h>
#include <math.h>
int main() 
{
	int n, i, k;
	do
	{
		printf("Enter a positive integer:");
		scanf("%d", &n);
	} while (n <= 0);    //确保n为正数
	if (n == 1)
	{
		printf("%d is not a prime.\n", n);
	}
	else    
	{
		k = (int)sqrt(n);
		for (i = 2; i <= k; i++)
			if (n % i == 0)
				break;
	}
	if (i > k)
	{
		printf("%d is a prime.\n", n);
	}
	else
	{
		printf("%d is not a prime.\n", n);
	}
	return 0;
}

3.百钱百鸡

//公鸡5钱1只,母鸡3钱1只,小鸡1钱3只。100钱买100只鸡,问公鸡、母鸡、小鸡各几只?
#include <stdio.h>
int main()
{
	int a, b, c;
	for (a = 0; a <= 20; a++)
	{
		for (b = 0; b <= 33; b++)
		{
			c = 100 - a - b;
			if (15 * a + 9 * b + c == 300)
			{
				printf("%d, %d, %d\n", a, b, c);
			}
		}
	}
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值