C语言程序三种基本结构

前言


文章中介绍C语言程序执行过程中最基本的三种结构,包括有:顺序结构、分支结构、循环结构。理解和学习程序的执行过程,对于以后学习其他的编程语言,或者程序的调试,程序调Bug都有很好的帮助。

程序是什么?
所谓的程序,就是一系列遵循一定规则和思想并能够正确完成指定工作的代码(也成为指令序列)。
其中,程序的一个部分是描述问题的每一个对象及它们之间的关系,这部分被成为数据结构(我认为程序设计中非常重要的一门课程)。
另外的一个部分是对这些对象进行处理的规则,当然这个就是算法。牛X的人,都是数学好的人~~
因此有这么一种说法:程序=数据结构+算法
程序设计=数据结构+算法+程序设计方法+语言工具和环境

顺序结构


后面介绍的内容,基本上是基于C程序来介绍,通过实例和注释来解释知识点的重难点和用法。
顺序:顾名思义,从上到下、从左到右、从小到大……程序中的顺序结构便是从程序的main()函数入口,一条一条的指令执行,知道遇到程序结束的指令结束程序。

当然第一个程序必须是:“Hello world”

顺序结构程序代码:

//载入头文件 std 标准 io输入输出流 
#include<stdio.h>

/*
程序的入口函数 mian()函数 其中()中参数可以省略 
agrc参数表示是程序指令的个数 
agrv指针类型数组保存的是每一条指令在内存中的地址 
*/ 
int main(int agrc,char *agrv[]){

    //定义一个字符串数组 给s初始化的内容是 Hello world!
    char s[] = "Hello world!";
    //将需要输出的内容输出到console控制台 
    printf("%s",s);
    /*
    程序需要返回一个int类型的数据
    程序能正常终止 返回值为 0 异常终止 返回值 1 
    这里正常终止 设置为 0 
    */ 
    return 0;
} 

程序执行结果

C Hello world

整体看一下这个程序

输出结果可以看到“Hello world!”我们希望输出的内容输出到屏幕上了,可以看到程序执行了0.4415s,最后返回的结果是0,和我们的预期一样。

程序具体的每一句的代码的执行目的代码注释里面有详细解释。其中良好的程序编写人员都会有代码注释的习惯,方便别人阅读和自己回头的理解。这里注释的方式有两种,程序中均有体现。

程序运行流程:从main()入口函数进入程序,按照顺序的执行方式,一句一句的执行,定义char类型的字符串s,输出s,返回return,程序结束。很好理解。

分支结构


分支结构中需要知道if、else、elseif、switch case的用法

分支结构程序代码:

//载入头文件 std 标准 io输入输出流 
#include<stdio.h>

/*
程序的入口函数 mian()函数 其中()中参数可以省略 
agrc参数表示是程序指令的个数 
agrv指针类型数组保存的是每一条指令在内存中的地址 
*/ 
int main(int agrc,char *agrv[]){

    /*
    顺序结构
    */ 
    //定义一个字符串数组 给s初始化的内容是 Hello world!
    char s[] = "Hello world!";
    //将需要输出的内容输出到console控制台 
    printf("%s\n",s);

    /*
    分支结构 
    */
    int n;
    scanf("%d",&n);
    //if分支语句 括号内部判断是不是真 若为真 执行if内的语句
    //分支语句可以没有else 但有else 一定要有一个if与之对应
    //这里的括号内部判断的是一个数字 C语言中非0的数字均为真  
    if(3)
        printf("1:\t这是一个真语句!\n") ;

    //if -else -elseif 
    //判断输入的n与0的关系并输出 
    if(n>0)
        printf("2:\t%d大于0\n",n);
    else if(n == 0)
        printf("2:\t%d等于0\n",n);
    else
        printf("2:\t%d小于0\n",n);

    //分支嵌套 switch case
    if(n>0)
        printf("3:\t%d大于0\n",n);
    else
    {
        if(n == 0)
            printf("3:\t%d等于0\n",n); 
        else{
            switch(n){
                //若n的值是 -1的情况 
                case -1:
                    printf("3:\t%d小于0\n",n);
                    break;
                //若n的值是 -2的情况   
                case -2:
                    printf("3:\t%d小于0\n",n);
                    break;
                //其它情况 
                default:
                    printf("3:\t%d小于0\n",n);
                    break;
            }
        } 
    } 

    /*
    程序需要返回一个int类型的数据
    程序能正常终止 返回值为 0 异常终止 返回值 1 
    这里正常终止 设置为 0 
    */ 
    return 0;
} 

程序执行的结果:

分支结构执行结果

说明3点:

  1. 变量的定义位置,C语言会将一个域中用的变量定义到所有程序指令的最前面,这里分支结构这块定义了一个n,程序能正常执行,和编译有关。
    用C编译器的情况: gcc text.c;
    用C++编译器的情况: g++ test.c 或者 g++ test.cpp 或者 g++ test.c (也就是用g++命令或者源文件后缀是cpp,则默认是用C++编译器)。
    因为C++中没有这个说法,所以用g++编译不会出现问题。
  2. switch中的break,break的作用:break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则会从满足条件的地方(即与switch(表达式)括号中表达式匹配的case)开始执行,直到switch结构结束。
  3. 另外可以注意使用C语言中的唯一的三目运算符:
    max = ( x > y ) ? x : y ;
    代替了一下的代码,使用非常方便
    if(x > y)
    max = x;
    else
    max = y;

循环结构


循环结构一般会结合着分支结构一起使用,完成对问题的求解。

循环结构程序代码:

//载入头文件 std 标准 io输入输出流 
#include<stdio.h>

/*
程序的入口函数 mian()函数 其中()中参数可以省略 
agrc参数表示是程序指令的个数 
agrv指针类型数组保存的是每一条指令在内存中的地址 
*/ 
int main(int agrc,char *agrv[]){

    /*
    顺序结构
    */ 
    //定义一个字符串数组 给s初始化的内容是 Hello world!
    char s[] = "Hello world!";
    //将需要输出的内容输出到console控制台 
    printf("%s\n",s);

    /*
    分支结构 
    */
    int n;
    scanf("%d",&n);
    //if分支语句 括号内部判断是不是真 若为真 执行if内的语句
    //分支语句可以没有else 但有else 一定要有一个if与之对应
    //这里的括号内部判断的是一个数字 C语言中非0的数字均为真  
    if(3)
        printf("1:\t这是一个真语句!\n") ;

    //if -else -elseif 
    //判断输入的n与0的关系并输出 
    if(n>0)
        printf("2:\t%d大于0\n",n);
    else if(n == 0)
        printf("2:\t%d等于0\n",n);
    else
        printf("2:\t%d小于0\n",n);

    //分支嵌套 switch case
    if(n>0)
        printf("3:\t%d大于0\n",n);
    else
    {
        if(n == 0)
            printf("3:\t%d等于0\n",n); 
        else{
            switch(n){
                //若n的值是 -1的情况 
                case -1:
                    printf("3:\t%d小于0\n",n);
                    break;
                //若n的值是 -2的情况   
                case -2:
                    printf("3:\t%d小于0\n",n);
                    break;
                //其它情况 
                default:
                    printf("3:\t%d小于0\n",n);
                    break;
            }
        } 
    } 
    /*
    循环结构
    */ 
    int m;
    //只要输入的内容不是文件结尾符 可以一直输入
    //循环内部可以控制结束条件 
    while(scanf("%d",&m) != EOF){
        //break
        //如果m的值等于0 后面的语句也不执行 或者写为 m==0 
        //调出while循环 执行循环外部的程序指令 
        if(!m)
            break;
        int sum = 0;
        for(int i=0;i<m;i++){
            //计算 0~m-1的和 
            sum += i;
        }
        printf("0~%d的和是%d\n",m-1,sum);
        //continue
        //如果m的值不等于0 后面的语句不执行
        //while的头入口继续循环 
        if(m!=0)
            continue;
        //执行的结果中可以发现这里从未执行 思考一下 why? 
        printf("这里执行了吗?\n");
    } 

    /*
    程序需要返回一个int类型的数据
    程序能正常终止 返回值为 0 异常终止 返回值 1 
    这里正常终止 设置为 0 
    */ 
    return 0;
} 

程序执行结果:

循环执行结果图示

说明几点:

  1. for循环使用最多,一般情况可以表示任何循环,和while循环均是当型循环,先判断,后执行。do{}while属于直到型循环,先做循环再判断,程序用应用不多,程序中也没有体现。
  2. 自增,自减符,++a、–a、a++、a–;符号在前表示的是:先做自增或者自减运算后以运算后的数值进行接下来的程序执行,符号在后表示的是:以当前值进行程序执行,执行结束后做自增自减运算进行下次程序执行。(在程序中可以体现)
  3. for循环中循环语句可以是单个语句、空语句也可以是复合语句;三个表达式可以是任意类型,其中的分号”;”不能省略。

自增自减程序代码:

#include<stdio.h>

int main(){
    int sum = 0;
    printf("符号在后自增:%d\n",sum++);
    printf("符号在前自增:%d\n",++sum);
    return 0;
} 

程序运行结果:
程序运行结果

结语


有关C语言程序三种基本结构,顺序结构、分支结构、循环结构的主要内容和知识都已经在程序中有所体现。
文章内容是博主手写,难免出现错误和瑕疵,有错误请指出,有问题请积极留言一起交流。

  • 9
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值