zoukankan      html  css  js  c++  java
  • C语言学习笔记之 程序流程结构

    程序流程结构

    • 顺序结构,程序按顺序执行,不发生跳转
    • 选择结构,依据条件是否满足,有选择的执行相应功能
    • 循环结构,依据条件是否成立,循环多次执行代码

    goto语句

    语法:goto 标签;

    例:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdlib.h>
    #include <stdio.h>
    
    int main() {
    	printf("开始
    ");
    	goto A;
    	printf("没有goto A 标签
    ");
    A:
    	printf("goto A标签
    ");
    
    	return 0;
    }
    

    运行结果:

    开始
    goto A标签
    

    此时程序的流程如下:

    也就是直接跳过goto下面的代码,直接执行标签A下面的代码

    一般不建议使用 goto语句,因为这会使程序的结构混乱

    选择结构

    if else

    语法:

    if (条件表达式1)
    {
        代码段1
    }
    else if (条件表达式2)
    {
        代码段2
    }
    else
    {
        代码段3
    }
    

    当条件表达式1非0,执行代码段1,如果条件表达式2非0,且条件表达式1为0,执行代码段2,否则执行代码段3

    else if可以省略,也可以有多个(不推荐)

    例:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdlib.h>
    #include <stdio.h>
    
    int main() {
    	unsigned int a;
    	printf("请输入一个正数:");
    	scanf("%u", &a);
    	getchar();
    
    	if ((a % 2) == 0) {
    		printf("%d为偶数
    ", a);
    	}
    	else {
    		printf("%d为奇数
    ", a);
    	}
    	
    
    	return 0;
    }
    

    运行结果:

    请输入一个正数:5
    5为奇数
    

    该程序的流程如下:

    多个else if和多个if的区别

    // 多个else if
    if (...) {
        ...
    }
    else if (...) {
        ...
    }
    else if (...) {
        ...
    }
    
    // 多个if
    if (...) {
        ...
    }
    if (...) {
        ...
    }
    if (...) {
        ...
    }
    

    流程图分别如下:
    多个if:

    多个else if:

    也就是说,当所有条件表达式都为真时,
    多个if全部会执行,而多个else if只会执行一个

    switch语句

    语法:

    switch (表达式)
    {
        case 值1:
            代码段1;
            break; // 跳出switch
        case 值2:
            代码段2;
            break;
        ...
        default:
            代码段n;
            break;
    }
    

    将整型表达式的值与case 后的值比较,如果与某个值相等,那么就跳到这个case后的代码段执行,如果都不相等,则执行default后的代码段

    注意!switch和case后的表达式(值)必须是整型或字符!

    例:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main() {
    	unsigned int a;
    	printf("请输入:");
    	scanf("%u", &a);
    	getchar();
    
    	switch (a)
    	{
    	case 1:
    		printf("你选择了1
    ");
    		break;
    	case 2:
    		printf("你选择了2
    ");
    		break;
    	default:
    		printf("。。。
    ");
    		break;
    	}
    
    
    	return 0;
    }
    

    运行结果:

    请输入:3
    。。。
    

    如果不加break,则会一直往下执行:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main() {
    	char a;
    	printf("请输入:");
    	scanf("%c", &a);
    	getchar();
    
    	switch (a)
    	{
    	case 'a':
    		printf("你选择了a
    ");
    	case 'b':
    		printf("你选择了b
    ");
    	default:
    		printf("。。。
    ");
    	}
    
    
    	return 0;
    }
    

    运行结果:

    请输入:a
    你选择了a
    你选择了b
    。。。
    

    循环结构

    break和continue

    break:跳出循环
    continue:跳到下一轮循环

    goto语句可以用来跳出多层循环

    while循环

    语法:

    while (条件表达式) {
        ...
    }
    

    当条件表达式非0,就一直循环,否则跳出

    例:

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

    运行结果:

    i = 0
    i = 1
    i = 2
    i = 3
    i = 4
    i = 5
    i = 6
    i = 7
    i = 8
    i = 9
    

    do while循环

    语法:

    do {
        ...
    } while (条件表达式);
    

    先执行一次循环体,再进行判断,如果条件表达式非0,那么继续循环,否则跳出循环

    do while至少会执行一次,而while最少执行0次

    for循环

    语法:

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

    语句1为变量初始化语句,比如int i = 0
    语句2为条件表达式,如果语句2非0,则继续循环,否则跳出循环
    语句3为每轮循环结束后要做的事情

    最常见的形式:

    for (int i = 0; i < 100; ++i) {
        ...
    }
    

    例:

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

    运行结果:

    i = 0
    i = 1
    i = 2
    i = 3
    i = 4
    i = 5
    i = 6
    i = 7
    i = 8
    i = 9
    

    再比如:

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    
    int main() {
    	for (int i = 0; i < 100; ++i) {
    		if (i == 4) {
    			continue;
    		}
    		else if (i == 23) {
    			break;
    		}
    		printf("i = %d
    ", i);
    	}
    
    	return 0;
    }
    

    运行结果:

    i = 0
    i = 1
    i = 2
    i = 3
    i = 5 # 注意,这里跳过了4
    i = 6
    i = 7
    i = 8
    i = 9
    i = 10
    i = 11
    i = 12
    i = 13
    i = 14
    i = 15
    i = 16
    i = 17
    i = 18
    i = 19
    i = 20
    i = 21
    i = 22
    
  • 相关阅读:
    linux权限补充:rwt rwT rws rwS 特殊权限
    关于Linux操作系统下文件特殊权限的解释
    Java学习笔记——Java程序运行超时后退出或进行其他操作的实现
    Java实现 蓝桥杯 算法提高 判断名次
    Java实现 蓝桥杯 算法提高 判断名次
    Java实现 蓝桥杯 算法提高 日期计算
    Java实现 蓝桥杯 算法提高 日期计算
    Java实现 蓝桥杯 算法提高 概率计算
    Java实现 蓝桥杯 算法提高 概率计算
    Java实现 蓝桥杯 算法提高 复数四则运算
  • 原文地址:https://www.cnblogs.com/zhujiangyu/p/13619987.html
Copyright © 2011-2022 走看看