您当前的位置:主页 > 技术探讨 >

c语言(一)

发布时间:2017-02-28 19:49编辑:admin阅读(

    今天开始更新C语言的知识点,一直感觉这个编译器编译出来的内容页不好看,最近一直在研究如何能在不使用代码的情况下来丰富页面色彩。大家要是想看更多的c语言的内容可以到我的简书中查看最新更新。

    先获取数据
     
    1.常量 2.数据类型 3.定义变量取名规则 9.数组 10.指针
    11.结构体 12.链表 13.文件 14.函数 15.字符串(用双引号括起来的) 16.冒泡排序,选择排序,插入排序,快速排序
    4.scanf()可以获得键盘上的数据
     
    对数据进行各种各样的操作
     
    6.运算符 7.条件判断 8.循环
     
    输出要得到的数据
     
    5.printf()数据输出
    常量:
     
    1.不变的量
    2.可以直接使用的量
    分类:
    1.直接常量:
    1,整型:2
    2,浮点型:1.2
    3,字符型:a.'b' b.'\n' c."sdasfd"
    2.标识符常量:SUM
     
        #define SUM 50 宏定义
    整型常量的表示:(这是我感觉最难的地方)
    1,二进制:满二进一 每一位上只有0或1
    2,八进制:以0开头 每一位满八进一
    例:010
    18^1+08^0
    3,十进制:满十进一 0 表示负数的时候在前面加符号
    4,十六进制:满十六进一 以0x或0X开头 a\A(10)b\B(11)c\C(12)d\D(13)e\E(14)f\F(15)
    例:0x1b
    116^1+b16^0=27
    0x12
    116^1+216^0=18
     
    2.基本数据类型
     
    整型变量:
    基本整型:int 例:int a; 4字节
    长整型:long[int] 8字节
    短整型:
    浮点型变量:实数
    单精度型:float 例:float a;4个字节
    双精度型:double 8个字节
     
    字符型常量:用来接收一个字符型常量
    char 例:char a='a'; 1个字节
     
    定义变量:
    格式:datatype name;
    例:int a;
    1.定义变量的时候给他赋值(初始化):
    float b=1.2;
    2.先定义再赋值;
    char c;
    c='a';
    3.同一个数据类型可以定义多个变量
    int a,b=15,c;
     
    变量名:
     
    1,只能是由数字、字母、下划线组合而成
    2,数字不能打头
    3,在C语言中区分大小写,所以变量名a和A不是同一个变量
    4,变量名不能含有除下划线之外的任何一个特殊字符
    5,int float double等成为C语言中的保留字,不能用来作为变量名
     
    第一个C程序:"hello world"
    1.新建源文件(.c为后缀的文件名)
    vim 1.c
    2.一个c项目只能有一个主函数main();主函数的第一个"("是程序开始执行的入口,")"是程序结束的出口
    3.编译生成可执行文件
    gcc 1.c生成可执行的二进制文件 a.out
    4.编译并运行可执行的二进制文件
    ./a.out
    编译的几个步骤
     
    1.预处理:在编译程序前的准备工作,包含头文件的内容等
    gcc -E 1.c -o 1.i
    2.编译:进行类型检查,生成汇编代码
    gcc -S 1.i -o 1.s
    3.汇编:生成目标文件(二进制文件)
    gcc -c 1.s -o 1.o
    4.链接:链接库是生成可执行文件
    gcc 1.o -o 1
    同时编译运行多个文件
    gcc 1.c 2.c 3.c 生成可执行文件a.out
     
    标准输出函数printf():向显示屏输出数据
    整型
    十进制:
    1,%d: int a=5;printf("a=%d\n",a);
    2,%5d:输出的数据占5个字宽,从右边开始排
    3,%ld:输出长整型数据
    八进制
    %o
    十六进制
    %x
     
    例:
    int a=-1;
    printf("%d %o %x\n",a,a,a);
    原码:
    10000000000000000000000000000001
    补码:
    11111111111111111111111111111111
    37777777777
    ffffffff
    数据在存储的时候是补码,显示的时候显示的是补码
    原码:
    二进制数,最高位是符号位,正数-0,负数-1
    补码:
    正数的补码=原码
    负数的补码:原码的符号位不变,其余位取反,然后再加1
     
    实型(浮点型)
    1.%f 例:float a=1.2 说明整数部分原样输出,小数部分默认输出六位,第七位四舍五入
    2.%m.nf:输出的数据占m个字宽,包括小数点,小数部分占n个字宽
    3.$.nf:限制小数部分输出n位
    4.%lf:double型数据输出
     
    字符型
    1.%c
    例:char c='a';printf("%c\n",c);
    2.%5c:输出的数据占5个字宽
     
    字符串
    %s
    例:printf("%s\n","fsdfreg");
     
    scanf():从键盘获取数据的输入:
     
    例:int a;
           scanf("%d",&a)     
           scanf("%d"(不要加-n),&(有一个&符号)a)
    练习:定义int a float b char c 3个变量 一次性从键盘给他们赋值,并输出
     
    1.scanf函数的格式控制符同printf,在" "中除了格式控制符之外,有什么字符,在输入数据的时候都要原样输入。如果只有格式控制符,且紧紧相邻,那么输入的时候各数据默认以空白键(空格,tab,回车)间隔,在此要特别注意字符型变量,它会取空白键
    通常为了防止意外,通过各格式控制符间有空格。
     
    2.残留回车
     
    #include <stdio.h>
    void main()
    {
        char a;
        char c;
        scanf("%c%*c",&a);
        printf("a=%c\n",a);
        scanf("%c%*c",&c);
        printf("c=%c\n",c);
    }
    ASCii码:在存储字符的时候,每个字符有一个对应的数字,存储该数字几存储该字符,该数字即为字符的ASCII。
    'a':97
    '0':48
    1.每一个字母后一个比前一个码值大1,数字也一样
    2。对应字符的小写字符的码值比大写字符的码值大32.
     
    练习:输入一个大写字母,输出他对应的小写字母
     
    #include <stdio.h>
    void main()
    {
        char c='A';
        printf("%c\n",c+32);
    }
    注意:字母<=>ASCII
     
    sizeof(类型/变量名):计算该类型或者变量在内存中占的字节数
     
    #include<stdio.h>
    void main()
    {
       int a;
       printf("%ld,%ld\n",sizeof(int),sizeof(a));
    }
    转义字符:以反斜线开头,后面接一个或多个普通字符,能够实现特点功能的字符
    \n: 换行
    \r: 回车
    \b: 退格
    \: \
    \t: 制表符tab
    \': '
    \": "
    算术运算符:
     
    加(+)减(-)乘(*)除()求模/求余(%)
    1.两个整数相除 5/2 值为整数,小数部分直接舍掉
    2.求余的两个操作数都必须是整数
     
    自动类型转换
    1.把实型的数据赋给整型的数据,小数部分舍掉
    2.把整型赋给实型,多6个0
     
    强制类型转换:
    强制类型转换运算符:()
     
    #include<stdio.h>
    void main()
    {
      float a=5.2
      printf("%f\n",(float)((int)a%3));
    }
    练习:有4个水渠abcd往一个池子里注水,单开a,3天注满;单开b,1天注满;单开c,4天注满,单开d,5天注满,abcd同时开,几天注满?
     
    #include<stdio.h>
    void main()
    {
      float a=1/(1.0/3+1.0/1+1.0/4+1.0/5);
      printf("%f\n",a);
    }
    getchar():
    功能:
    获取一个字符,返回获取到的那个字符,
     
    例:
    #include <stdio.h>
    void main()
    {
        char c;
        c=getchar();
        printf("%c\n",c);
    }
    1.吸收残留残留回车
    2.用来暂停一段程序
     
    例:
    #include <stdio.h>
    #include <stdlib.h>
    void main()
    {
        while(1)
        {
    //        system("clear");
            printf("xxx\n");
            getchar();
        }
    }
    putchar(字符常量/字符变量):用来向终端输出一个字符
     
    #include<stdio.h>
    #include<stdlib.h>
    void main()
    {
      char a='a';
      putchar(a);
      putchar('a');
      putchar('\n');
    }
    练习:输入boy,输出boy
     
    #include <stdio.h>
    #include <stdlib.h>
    void main()
    {
    putchar(98);
    putchar(111);
    putchar(121);
    putchar('\n');
    }
    #include <stdio.h>
    #include <stdlib.h>
    void main()
    {
    putchar(getchar());
    putchar(getchar());
    putchar(getchar());
    putchar('\n');
    }
    自增运算符:使自身的值加1
    前++:++i<=>i=1;i=i+1先加后用
    后++:i++<=>i=1;i=i+1先用后加
     
    自减运算符:使自身的值减1
    前--:同上
    后--:同上
     
    条件结构:
     
    1.简单if语句
    格式:
    if(条件)
    {
    语句
    }
     
    如果条件成立,就执行对应的语句,如果条件不成立,就去执行后面的指令(如果有的话)
     
    2.两路分支结构:
    格式:
    if(条件)
    {
    语句1
    }
    else
    {
    语句2
    }
    如果条件成立,就执行语句1,否则就执行语句2
     
    3.多路分支结构
    if(条件1)
    {
    语句1
    }
    else if(条件2)
    {
    语句2
    }
    else if(条件3)
    {
    语句3
    }
    ……
    else
    {
    语句n
    }
     
    如果条件1成立,则执行语句1,否则继续判断条件2是否成立,如果成立则执行语句2,否则继续判断条件3是否成立,继续一次执行,如果都不成立,执行else对应的语句n。
     
    练习:输入一个数,判断是奇数还是偶数
     
    #include <stdio.h>
    void main()
    {
        int a;
        printf("请输入一个数:");
        scanf("%d",&a);
        if(a%2 == 0)
        {
            printf("是偶数!\n");
            printf("xxx\n");
        }
        else
            printf("是奇数!\n");
        printf("ccc\n");
    }
    //1.一个等号表赋值,2个等号表判断
     
    注释:1.//表示注释一行
               2./* …… */表多行注释
               3.注释不会参与编译,只是为了方便程序员阅读。注释不是文档,不要太多,要适当
    写代码的时候要注意书写规范
    1.通常是一条指令占一行,如果程序过短,也可以多条指令占一行
    2.每条语句以分号结尾
    3.程序结构要层次分明,要有锯齿状。同一层次的代码左对齐,不同层次的一个tab键进去
     
    逻辑运算符:
    与(&&):
    条件1 && 条件2
    条件1和条件2同时成立,整个表达式才成立,结果是1,否则,结果为0
     
    条件的真假:假(0)->真(非0)
     
    或(||):
    条件1 || 条件2
    条件1和条件2只要一个有成立,整个表达式就成立,结果是1,否则,结果为0
     
    非(!):
    !条件
    条件为假,则表达式为真,1
    条件为真,则表达式为假,0
     
    判断某一年是否为闰年
    条件:能够被4整除但不能够被100整除或者是能够被400整除
     
    #include <stdio.h>
    void main()
    {
        int year;
        printf("请输入一个年份:");
        scanf("%d",&year);
        if((year%4==0 && year%100!=0) || year%400==0)
        {
            printf("是闰年!\n");
        }
        else
        {
            printf("不是闰年!\n");
        }
    }
    a+=b <=> a=a+b;
     
    #include <stdio.h>
    void main()
    {
        int a=2,b=50;
        if(a+=b || b)
        {
            printf("%d %d\n",a,b);
        }
    }
    练习:根据输入期末考试成绩给出相应的判断,成绩大于等于90为“优”,大于等于80小于90为“良”,大于等于60小于80为“中”,其余为“差”。

    #include <stdio.h>
    void main()
    {
        float score;
        printf("请输入分数:");
        scanf("%f",&score);
        if(score>=90)
        {
            printf("优!\n");
        }
        else if(score>=80)
        {
            printf("良!\n");
        }
        else if(score>=60)
        {
            printf("中!\n");
        }
        else
        {
            printf("差!\n");
        }
    }