• 12天学好C语言——记录我的C语言学习之路(Day 1)


    12天学好C语言——记录我的C语言学习之路

    Day 1:

    刚刚入门C语言,那么肯定要先把什么是C语言和大家讲清楚,那么大家看下面一段程序(program  1.1):

    /*//program 1.1
    #include<stdio.h>  //编译预处理指令,编译系统要求提供程序中有关函数的信息,而stdio是”standard input&output”的缩写(标准输入输出)
    //后缀.h的意思是header file(头文件)
    int main()    //定义主函数(main函数是int类型,也就是整数类型,执行主函数会得到一个值,其值应该为int类型)
    {    //函数开始的标志
        printf("this is a C program. ");    //  输出信息
        return 1;   //函数执行完毕返回函数值1,因为必须返回一个int类型的值。
    }    //函数结束的标志
    */

    各位上机敲一下 program1.1 中的代码,感受一下C语言的魅力所在,C语言是最基础的语言了,他是面向过程的语言,怎么理解呢?比方说你做一道数学题,那么C语言就是解题步骤了。如果你不会概率,你不会圆锥曲线方程,你不会函数,那么你也看不懂这道数学题的解体思路。所以说,C语言是给计算机读的,是给程序员看的,一般人看不懂,所以说是面向过程的。

    下面看 program 1.2 ,在这个程序里我们认识到了变量,也对变量进行了一系列的操作。

    /*//program 1.2
    #include<stdio.h>
    int main()
    {
        int a=1,b=2,sum;   //这里的a,b,sum都是变量名,int为变量的类型
        sum=a+b;
        printf("sum is %d ",sum);   //在输出时,变量sum取代了格式符%d,sum的计算结果是3,所以输出的结果也是3。
        return 1;
    }*/

    简单的处理了一个变量的程序之后我们不妨再来看看C语言中更富有魅力的东西。为什么要编程?因为我们用人脑无法处理大量的计算,那些人脑遥不可及的运算必须用计算机程序来实现,这就是计算机的优势所在了。下面我们就来初步感受一下。 program 1.3 为大家展示的是一个函数max。大家可能多少了解C语言,如果学过那就再好不过了,老师肯定会让大家先去写一个max函数来比较两个数字的大小并输出最大值,在这里我要为大家列举一个新手经常犯的错误。错误代码如下:

    /*//program 1.3
    #include<stdio.h>
    #include<math.h>
    int main()
    {
        int a=1,b=3,c;
        c=max(a,b);    //我在这里直接调用了max函数,但是程序是错误的,我已经写了math.h的头文件了,为什么还是无法正确调用这个函数呢?      显然问题的答案就是math.h里面并没有max这个函数,我们需要自己去写一个比较两个数大小的max函数。
         printf("max is d% ",c);
        return 0;
    }*/
    正确代码如下:
    /*//program 1.4
    #include<stdio.h>
    int main()
    {
        int a,b,c;
        scanf(“%d,%d”,&a,&b);   //这里格式上两个%d之间有“,”,所以说在输入的时候一定要加上逗号。如果格式中什么都不加,那么也可以,只是要在输入的时候加上空格或回车。scanf函数中包含两部分,一个是你输入的数据要按照什么格式,后一部分就是输入的两个数存入到两个地址中,&a就是变量a的地址,而&b就是变量b的地址,你定义的变量a,b,所以后面也要跟&a,&b,不能前面定义的a,b,而后面&e,&f
        int max(int a,int b);   //一定要在main函数中声明,因为程序自上而下的进行,执行到下一句c=max(a,b)的时候使用到了max函数,如果不去声明max函数,那么程序是不认识max这个函数的,就会报错。但是如果把下面max的定义部分代码提前到main函数的前面,那么执行的时候就不用加这一句话了(如下面 program 1.5)。(但是为了程序的可读性,还是要规范一点加上函数声明)
        c=max(a,b);
        printf("c= %d ",c);
        return 0;
    }
    int max(int x,int y)    //被调用的函数,函数名后面必须跟圆括号
    {
        int z;
        if(x<=y)
            z=y;
        else
            z=x;
        return (z);    //根据需要选择返回值,而不是每一个函数后面都要return 0;
    }
    */

    在上面的函数中,函数声明的地方我们看到声明了两个变量a,b,下面函数定义部分,我们也看到了,这里的a,b是函数的形参变量,而在调用函数的时候(  c=max(a,b); ),这里的a,b有具体的值,是定义好的或者是手动输入的,属于实参。那么形参和实参又有怎样的区别呢?

    我们可以这样考虑:形参的本质是一个名字,不占用内存空间。实参的本质是一个变量,已经占用内存空间。

    函数的形参和实参具有以下特点:  
     1. 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。  
     2. 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。
     3. 实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。  
     4. 函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

    读者一定要仔细把握上面的这几句话,并深入理解,这很重要。走好一小步,夯实基础,对以后的程序会有莫大的帮助。

    /*//program 1.5
    #include<stdio.h>

    int max(int a,int b)
    {
        int z;
        if(a<=b)
            z=b;
        else
            z=a;
        return(z);
    }

    int main(void)   //函数名后面必须跟小括号,括号内写参数名和参数类型,如果函数没有参数,小括号中写void或者是不写
    //一个程序总是从主函数(main函数)开始执行的,所以main函数的位置可以靠前也可以靠后
    {
        int a,b,c;
        scanf("%d%d",&a,&b); //记住,scanf和printf都是库函数,输入输出在C中实现函数化,C本身不提供输入输出的语句!!!!!
        c=max(a,b);
        printf("max is %d ",c);
        return 0;
    }

    void abc()  //这是一个空函数,类型为void,这样写一个空函数在程序里,是合法的
    {
    }
    */

    像 program 1.5 ,在主函数中并没有声明max函数,但是由于在main函数前我们定义了一个max函数,所以程序“认识”这个函数了,所以程序依旧正常执行。

    上面我们又提到了一个新的知识点,就是空函数,空函数只是没有什么作用,但是却是合法的。比如下面程序 program 1.6,也是合法的。

    /*//program 1.6
    #include<stdio.h>
    int main()
    {

    }
    */  //这也是没有错误的

    下面,我们要探讨当遇到大量的循环数据的时候应该怎么操作呢?比方说求1+3+5+…+99的结果。显然这个式子我们不能把所有项都写下来,这时候我们就要考虑循环了。(如:program 1.7)

    /*//program 1.7
    #include<stdio.h>
    int main()
    {
        long p=0;
        for (int n=1; n<=99; n=n+2) {
            p=p+n;
        }
        printf("%ld",p);
        return 0;
    }
    */

    上面的循环仅供读者参考,具体的for循环如何实现,在后面的章节中有介绍。
    在for循环中我们将处理好的变量p输出,这里我们必须要提一个事情,那就是在for循环中的什么变量可以输出,什么变量无法输出。这牵扯到一个变量释放的问题,再看下面 program 1.8 。

    /*//program 1.8
    #include<stdio.h>
    int main()
    {
        for(int i=1;i<=10;i++)
        {
            int j=4;
        }
        printf("%d",i);    //这里可以输出i,因为i并没有被释放,而如果输出j,j是被释放的,换句话说输出的时候j已经不存在了。因为大括号内声明的变量随大括号内的程序块消失而释放,而上面的i属于main函数下的大括号,所以只有main函数结束时,i才被释放,故在输出语句中,i是存在的,可以输出。这一点大家一定要小心注意!
        return 0;
    }
    */

    不管是哪个版本的C语言书籍,肯定会在前几章中就像大家介绍一个判断是否是闰年的C程序。下面我们就来写一下这个程序。(program 1.9)

    /*//program 1.9
    #include<stdio.h>
    int main()
    {
        int year;
        scanf("%d",&year);  //输入一个年份,判断是不是闰年。这个地方我们需要注意一点,那就是scanf(“%d ",&year);  这样写是错误的,因为 不能加在scanf中
        if((year%4==0&&year%100!=0)||(year%400==0))  //这一句就是整个程序的关键了,用了if语句,里面分好几个层次,用来分别判断条件是否满足。这里的数学运算判断符号过于简单,请读者自行查阅相关书籍进行学习,这里不做解释
            printf("是闰年");
        else
            printf("不是闰年");
        return 0;
    }
    */

    第一天我们粗略的认识了C语言最基本的变量,循环,判定语句,输入输出语句。并且对里面经常犯的错误和模糊的定义做了解释,上面的程序都很基础,比较适合初学者去读。之后的学习会逐渐深入,代码行数也会逐渐增加,变得越来越复杂。记住,编程和做数学题一样,多写多练就能成功。不要只是看书,看学习视频,看别人的总结。这些都是辅助工具。最重要的还是去自己敲一敲代码,去多练习。在调试程序的同时获得收获。15天学好C语言这篇连载的文章是我切身实践并总结的,我的的确确只用了15天的时间并将每天的收获记录下来,这个过程所需时间不长,半个月而已,但是速成也不是那么容易的,我建议读者每天至少写500行代码,15天之后你会感觉你对编程已经有初步了解了。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    [atARC123F]Insert Addition
    3.1 概述
    2.5 信道的极限容量
    2.4 编码与调制
    2.3 传输方式
    tp6_004路由配置
    tp6_003多应用配置
    tp6_002规范和配置
    tp6_001安装和运行
    问题解决:tp6多应用无法获取controller 和 action怎么办
  • 原文地址:https://www.cnblogs.com/wzy294250051/p/4787914.html
Copyright © 2020-2023  润新知