2021-09-14 Day4控制语句

2021/9/14 23:34:55

本文主要是介绍2021-09-14 Day4控制语句,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Day4控制语句

分支结构:if()~else、switch
循环结构:for()、while()、do~while()、goto
辅助控制:contine、break、return
分支结构
1.if-else语句
1.1.一般形式:

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

1.2.常见形式
1.2.1. 简化形式:if(表达式) 语句块 ;
例:
if(x>y) printf(“%d”,x) ;
1.2.2. 阶梯形式:(命令行模式下输入gg=G美化代码)

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

例:

if (!(score >= 0 && score <= 100)) 
        printf("not in [0, 100]\n");
else if (score >= 90) 
        printf("A-excellent\n");
else if (score >= 70) 
        printf("B-good\n");
else if (score >= 60) 
        printf("C-OK\n");
else 
        printf("D-not pass\n");

注:
语句块:当有若干条语句时,必须用{……}括起来。
表达式:一般情况下为逻辑表达式或关系表达式(如:if(ab&&xy) printf(“a=b,x=y”);)也可以是任意类型(包括整型、实型、字符型、指针类型)(如:if(‘a’) printf(“%d”,’a’) ; )注意区分if(x=1)和if(x==1)是不同的。
1.2.3. 嵌套形式

if(表达式1)
	if(表达式2) 语句块1 ;
	else 语句块2 ;
else
	if(表达式3) 语句块3 ;
	else 语句块4 ;

注:
else总是与它上面的最近的if配对,与书写格式无关;要实行强行配对关系可以利用{……}。
1.3.示例
已知三角形三边a、b、c,海伦公式:p=(a+b+c)/2、S=√(p(p-a)(p-b)(p-c)),求S。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() 
{
        float a, b, c;
        float p;
        float area;
        printf("input a b c:");
        scanf("%f%f%f", &a, &b, &c);
        if ( a + b <= c || a + c <= b || b + c <= a) {
                printf("invalid input--1\n");
                return 0;
        }
        if (abs(a - b) >= c || abs(a - c) >= b || abs(b - c) >= a) {
                printf("invalid input--2\n");
                return 0;
        }
        p = (a + b + c) / 2;
        area = sqrt(p * (p - a) * (p - b) * (p - c));
        printf("%.2f, %.2f, %.2f--->%.2f\n", a, b, c, area);
        return 0;
}

2.switch语句
2.1.switch语句的基本形式

switch (表达式)
{
case 常量表达式1 : 语句块1 ;break ;
case 常量表达式2 : 语句块2 ;break ;
……
case 常量表达式n : 语句块n ;break ;
default : 语句块n+1 ;
}

2.2.switch语句的使用

  1. 每个常量表达式的值必须各不相同,否则将会出现矛盾
  2. 当表达式的值与case后面的常量表达式值相等时,就执行此case后面的语句
  3. switch中的表达式可以是整型、字符型表达式或枚举
  4. case常量只起语句标号作用
  5. break语句用于强行跳出switch体,一般每个case后面应有一个break语句,default分支后的break可以省略
  6. 多个case可以执行一组语句

2.3. 示例

enum weekday 
        {sun,mon,tue, wed} a;
        a = wed;
        switch (a) {
        case 1: 
                printf("1\n");
        case 2: 
                printf("2\n");
        case 3: 
                printf("3\n");
                break;
        default:
                printf("not 1 2 3\n");
        }
        return 0;

循环语句
1.goto语句
例:

int i = 1 ; int num = 0 ‘
_loop :
if(i <= 100){
	sum += i ;
	i ++;
	goto _loop ;
}
printf(“1+2+3+……+%d\n”,i.sum) ;

注:
goto语句集中于一处退出函数
当函数有很多个出口,使用goto语句把这些出口集中到一处是很方便的,特别是函数中有许多重复的清理工作的时候
优点:

  1. 无条件跳转易于理解;
  2. 可以减少嵌套;
  3. 可以避免那种忘记跟新某一个出口点的问题;
  4. 算是帮助编译器做了代码优化。

2.while语句
基本形式:

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

注意循环语句的使用:

  1. 循环变量初始化
  2. 循环终止条件
  3. 循环变量的变化

例:

int i = 1 ; int sum = 0 ;
while(i <= 100){
	sum += i ;
	i++ ;
}
printf(“1+2+3+ ……+%d\n”,i,sum) ;

先判断,后执行
3.do - while语句
基本形式:

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

先执行,后判断
4.程序举例
“水仙花数”是指一个三位数,其各个位数字立方之和等于它本身。

int n = 100;
int a, b, c;//bai  shi ge 123

while (n <= 999) {
        a = n / 100;
        b = n / 10 % 10;
        c = n % 10;

        //if (a*a*a + b*b*b + c*c*c == n) 
        if (pow(a, 3) + pow(b, 3) + pow(c, 3) == n)
                printf("%d\n", n);
        n++;
}

5.for语句
一般形式:

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

其中表达式1通常代表初始值,表达式2通常代表循环条件,表达式3通常代表结束语句。
执行过程:
① 先求解表达式1(设初值)
② 求解表达式2,若为真,则执行循环体(语句块),然后执行步骤3;若为假,则执行步骤5
③ 求解表达式3
④ 转回执行步骤2
⑤ 执行for下面的语句(跳出for循环)
例:

for( i = 1 ; i <= 100 ; i ++ ){
	sum = sum + i ;
}

注:
① 表达式1可以省略,但循环之前应给循环变量赋值
② 表达式2可以省略,但将陷入死循环
③ 表达式3可以省略,但在循环体中增加使循环变量改变的语句
④ for括号内的“ ; ”不可省略
案例一:打印乘法表

int i, j;
for (i = 1; i <= 9; i++) {
        for (j = 1; j <= i ;j++)
                printf("%d*%d=%d\t", j, i, i * j );
        puts("");
}

案例二:利用循环打印以下图案:
F
_FE
__FED
___FEDC
____FEDCB
_____FEDCBA

int i, j;
char ch = 'F';
printf("please input char:");
scanf("%c", &ch); 
for (i = 0; i <= ch - 'A' ; i++) {
        for(j = 0; j < i; j++)
                putchar('_');
        for(j = 0; j <= i; j++)
                putchar(ch-j);
        putchar('\n');
}

辅助控制语句
1.break语句
用于从循环体内跳出循环体,即提前结束本层循环;break语句只能用于循环语句和switch语句中。
例:

for( r = 1 ; r <= 10 ; r ++ ){
	area = pi * r *r ;
	if( area > 100 ) break ;
	printf(“%f”,area) ;
}

案例:判断素数
对于一个大于或等于3的正整数,判断它是不是一个素数
步骤:
① 输入整数n的值
② i = 2;
③ n被i除得余数r
④ 若r = 0,则打印“n不是素数”,算法结束;否则执行步骤5
⑤ i++
⑥ 若i <= √n ,返回步骤3;否则打印“n是素数”,算法结束。
int n, m;
int i;
printf(“input :”);
scanf("%d", &n);
i = 2;
m = sqrt(n);
while (i <= m) {
if (n % i == 0)
break;
i++;
}
if (i > m)
printf(“yes:%d\n”, n);

2.continue语句
结束本次循环,接着判定下一次是否执行循环;注意continue和break的区别:continue直接结束本次循环,而break终止本层循环。
例:

for( n = 100 ; n <= 200 ; n ++ ){
	if( n % 3 == 0 ) continue ;
	printf(“%d”,n) ;
}

案例:对判断素数的程序进行完善,若用户输入的不是整数重新输入。

int n, m;
int i;
int ch;
while (1) {
        printf("input num(# exit):");
        if (scanf("%d", &n) == 0) {
                if ((ch = getchar()) == '#')
                        return 0;//break;
                else {
                        printf("error:again!\n");
                        continue;
                }
        }
        i = 2;
        m = sqrt(n);
        while (i <= m) {
                if (n % i == 0) 
                        break;
                i++;
        }
        if (i > m)
                printf("yes:%d\n", n);
        else
                printf("not:%d\n", n);

3.return语句
一般形式:return(<表达式>)
主要用于终止包含该return的函数的执行,若终止的为主函数,则主程序结束。



这篇关于2021-09-14 Day4控制语句的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程