标准C语言

复习:

    1、C代码变成可执行程序的过程

        预处理:查看宏函数的替换结果,检查宏函数

            gcc -E

        编译:理解C代码的底层原理,函数重载

            gcc -S

        汇编:生成代码库,静态库、共享库

            gcc -c

        链接:是多文件编程的基础

            gcc a.o b.o c.o ...

    2、gcc编译器常用参数:

        -E -S -c -std=gnu99 -o -I -l -Wall -Werror -D(命令行定义宏)

    

    3、C语言文件类型

        .h .h.gch .c .i .s .o .a .so

    

    4、数据类型

        signed char          1      %hhd    -128~127

        signed short         2      %hd     -32768~32767

        signed int           4      %d      正负20亿

        signed long          4/8    %ld     

        signed long long     8      %lld    正负9开头的19位整数

        unsigned char          1      %hhu    0~255

        unsigned short         2      %hu     0~65535

        unsigned int           4      %u      0~40亿

        unsigned long          4/8    %lu     

        unsigned long long     8      %llu    0~1开头的20位整数

        float                   4       %f

        double                  8       %lf

        long double             12/16   %LF

        小数点后6位有效

        问:有float x,如何判断x与零值是否相等

        if(x < 0.000001 && x > -0.000001)

    5、C变量名取名规则

        1、必须由字母、数字、下划线组成

        2、必须由字母或下划线开头

        3、不能与32个关键词重名

        4、见名知意

    6、变量输入输出

        printf  提示信息+占位符+变量名列表

        scanf   占位符+变量地址列表

        %nd %-nd %0nd %n.mf %g

    7、运算符

        / % 除数不能为0 报错:浮点数例外(核心已转储)

        == 变量尽量在右边

        ++/-- 尽量不要在一行内多次使用

        && || 具有短路特性

        注意:运算符也是有优先级

    

    8、类型转换

        自动类型转换:不同类型的数据之间需要先转换为相同的类型数据才能进行运算

            1、字节少的向字节多的转

            2、有符号的向无符号的转(字节数相同的情况下)

            3、整型向浮点型转

            注意:以不丢失数据为基础,适当地牺牲空间

        强制类型转换:

            (新类型)数据

            注意:有丢失数据的风险,谨慎使用

---------------------------------------

跳转语句

    goto    可以在函数内任意跳转

    它可能会破坏已经设计好的分支、循环语句,因此绝大多数公司禁止使用

    但是它在驱动编程时特别适合处理异常

    标签名: ...

        goto 标签名;

    

    练习1:要求不适用循环语句来计算N的阶乘

        //1

            int N,i = 1,sum = 1;

            printf("请输入N的值:");

            scanf("%d",&N);

        loop:

            if(i <= N)

            {

                sum = sum * i;

                i++;

                goto loop;

            }

            printf("%d",sum);

            return 0;

        //2

            int N = 0,sum = 1;

            printf("请输入N的值:");

            scanf("%d",&N);

        loop:

            num *= N;

            if(--N > 1) goto loop;

            printf("ret=%d\n",ret);

    break

        1、配合switch使用,关闭执行开关

        2、调出当前次循环,只能跳一层

    continue

        结束本次循环,直接进入下一次循环

    

    return

        1、返回一个数据给函数的调用者

        2、立即结束函数的执行

    

    练习2:不适用循环语句计算前N项斐波那契数列

数组:

    什么是数组:变量的组合,是一种批量定义变量的方式

    定义:类型 数组名[数量];

        int arr[5]

    

    使用:数组名[下标];

    下标:从零开始 范围:0~数量-1

    初始化:类型 数组名[数量] = (1,2,3,4 ...)

        1、数组与普通变量一样默认是随机的,为了安全对数组进行初始化

        2、这种初始化语法只能在定义数组时使用,并且只能逐个赋值,不能整体赋值

        3、初始化数据过多,编译器会产生警告并丢弃

        4、初始化数据不足,编译器会自动补0

        5、初始化的数据可以省略,只写大括号,相当于给所有成员赋0

        6、初始化数据时,长度可以省略,编译器会自动统计数据的个数然后告诉数组

        数组的长度 = sizeof(arr)/sizeof(arr arr())

    练习3:定义一个长度为10的数组并初始化,计算出该数组的最大值、最小值、平均值

        //  #include <stdio.h>

        int main(int argc,const char* argv[])

        {

            int arr[10] = {1,4,7,9,3,4,6,19,3,4};

            int max = arr[0],min = arr[0],sum = arr[0];

            float avg = 0;

            for(int i = 1; i<10; i++)

            {   

                if(arr[i] > max)

            {

                max = arr[i];

            }

                if(arr[i] < min)

            {

                min = arr[i];

            }

            sum += arr[i];

            avg = sum/10;

            }   

            printf("max=%d min=%d avg=%lf\n",max,min,avg);

        }

    练习4:定义一个长度为10的数组并初始化,进行升序排列

        //  #include <stdio.h>

        int main(int argc,const char* argv[])

        {

            int temp,arr[10] = {1,4,2,5,6,7,8,9,12,13};

            for(int i=0; i<9; i++)

            {

                for(int j = i+1; j<10; j++)

                {

                    if(arr[i] > arr[j])

                    {

                        int temp = arr[i];

                        arr[i] = arr[j];

                        arr[j] = temp;

                    }

                }

            }

            for(int i = 0; i<10; i++)

            {

                printf("%d",arr[i]);

            }

        }

    数组越界:为了程序的运行效率是不会检查数组的下标

        数组越界的后果:

            1、一切正常

            2、段错误

            3、脏数据

    练习5:定义一个长度为10的数组并初始化,找出数组中第二大的值(不允许排序)

        //  #include <stdio.h>

        int main(int argc,const char* argv[])

        {

            int arr[10] = {3,5,67,3,2,6,7,10,4,2};

            int max = arr[0] > arr[1]?arr[0]:arr[1];

            int max2 = arr[0] > arr[1]?arr[1]:arr[0];

            for(int i = 2; i<10; i++)

            {   

                if(arr[i] > max)

                {

                    max2 = max;

                    max = arr[i];

                }

                else if(arr[i] >= max2)

                {   

                    max2 = arr[i];

                }

            }   

            printf("%d %d\n",max,max2);

        }

作业:

1、打印9*9乘法表

2、编程解决百钱百鸡问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

3、计算出100~10000之间的所有素数

4、输入一个日期(yyyy-mm-dd),计算该日期距离公元1年1月1日多了多少天? time(NULL)

5、显示以下图形(printf一次只能输出一个字符)

             **********

            **********

           **********

          **********

         **********

        **********

       **********

      **********

     **********

    **********

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值