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
    
  • 相关阅读:
    oracle 常用SQL
    ActiveMQ持久化方式
    集中队列的模式
    EDA: Event-Driven Architecture事件驱动架构
    ActiveMQ消息队列介绍
    Nginx 用log_format设置日志格式
    log4j的ConversionPattern参数的格式含义
    真正的轻量级WebService框架——使用JAX-WS(JWS)发布WebService
    Java的注解机制——Spring自动装配的实现原理
    java interface 默认值
  • 原文地址:https://www.cnblogs.com/zhujiangyu/p/13619987.html
Copyright © 2011-2022 走看看