• C总结


    《1【】C程序设计(第三版) 谭浩强 209页超高清书签版》

    数据类型、运算符

        基本类型:

            整型

            字符型

            实型

                单精度

                双精度

            枚举类型

        构造类型

            数组类型

            结构体类型

            共用体类型

        指针类型

        空类型

     

    整型变量是以补码的形式表示的

        正数的补码与原码相同

        负数的补码:将该数的绝对值的二进制形式取反再加一

    Int类型:两个字节

    Short int短整型:两个字节

    Long 长整型:四个字节

    无符号类型:不能表示负数

    十六位的最大正数显然是65536(2的十六次方-1)

     

    实型变量

    有两种形式:

        十进制小数

        指数形式

    实型变量占四个字节

    实型变量按照指数形式存储

        单精度占四个字节(七位有效数字)

        双精度占八个字节(十六位有效数字)(实测可以达到十七位有效数字,输出为%.16f)

        长双精度十六个字节

    实型常数都按照双精度处理

     

    字符常量

     

        Int类型转化为char只用到低八位

     

    各种数值型数据之间的混合运算

     

     

     

    运算符

     

    算数运算符

    关系运算符

    逻辑运算符

    位操作运算符

    赋值运算符

    条件运算符

    逗号运算符

    指针运算符

    求字节数运算符

    特殊运算法:括号 下标 成员

     

     

    赋值运算符

    注意实型转化为整型 舍去小数部分。。

     

     

    顺序结构程序设计

     

     

     

     

    Printf函数

     

    可以控制输出精度,控制浮点型数据的输出小数位数

     

    #include<stdio.h>

    Pintf()

    Scanf()

    Printf函数输出时,参数会从右往左计算,在输出结果

     

     

     

     

    分支结构程序设计

    If()

    Else if()

    Else

    Else总是与上面最近的if配对

     

    条件运算符和条件表达式

    Int max = (a > b)?a:b;

    Max = a>b?a:b

     

    Switch语句

    Switch(a)

    {

        Case 1:printf("%d",1);break;

        Case 2:

        {

        }

        Break;

        Default:

    }

     

    Int a,b,c;

    Printf("input three numbers:");

    Scanf("%d %d %d",&a,&b,&c);

    Int max = (a>b?a:b);

    Max = c>max?c:max;

    Int min =a<b?a:b;

    Min = min<c?min:c;

    Printf("max = %d, min = %d",max,min);

     

    循环控制结构

    While 语句

    Void Main()

    {

    Int sum=0;

    Int I =0

    While(i<=100)

    {

    Sum+=I;

    I++;

    }

    Sum =0;i=0

    Do

    {

    Sum+=I;

    I++;

    }

    While(i<=100);

     

    }

     

    For语句

     

    For(int I =0; i<=100;i++)

    {

    sum = sum+i;

    }

     

    //循环结构

    // double ind=1;

    // double sum=0;

    // double s=1;

    // double t=0;

    // do

    // {

    // t =s/ind;

    // sum = sum + t;

    //// printf("%f %.10f ",ind,t);

    // ind = ind +2;

    // s =-s;

    // }

    // while(fabs(t) >1e-9);

    // printf("ind =%f pi=%10.12f ",ind,sum*4);

    // int s;

    // float n,t,pi;

    // t=1,pi=0;n=1.0;s=1;

    // while(fabs(t)>1e-6)

    // {pi=pi+t;

    // n=n+2;

    // s=-s;

    // t=s/n;

    // }

    // pi=pi*4;

    // printf("pi=%10.6f ",pi);

     

    //循环结构

    // int ind =100;

    // int k ;

    // int i =2;

    // for(;ind<=35521;ind++)

    // {

    // k= sqrt(ind);

     

    // for(i =2;i<=k;i++)

    // {

    // if(ind%i ==0)

    // {

    //// if(i)

    // break;

    // }

    // }

    // if(i>k)

    // {

    // printf("%d ",ind);

    // }

    // // if(i)

    // }

     

     

    数组

    数组如果不赋初值,则为随机数,

    如果只有部分赋初值,剩余都为零,例如下面的

    int i,a[10]={1};

     

    如果数组的全部元素都赋初值,就不需要给出数组元素的个数,例如下面的:

    //数组

    int b[]={1,2,3};

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

    {

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

    }

     

    数组排序

    //数组 求最大值

    // int i,max,a[10];

    // printf("input 10 numbers: ");

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

    // scanf("%d",&a[i]);

    // max=a[0];

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

    // if(a[i]>max) max=a[i];

    // printf("maxmum=%d ",max);

     

    //数组 排序

    // int i,j,p,q,s,a[10];

    // printf(" input 10 numbers: ");

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

    // scanf("%d",&a[i]);

    // for(i=0;i<10;i++){

    // p=i;q=a[i];

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

    // if(q<a[j]) { p=j;q=a[j]; }

    // if(i!=p)

    // {s=a[i];

    // a[i]=a[p];

    // a[p]=s; }

    // printf("%d ",a[i]);

    // }

     

    //自己实现一遍排序

    int i,j,maxind,a[10];

     

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

    scanf("%d",&a[i]);

    for(i =0;i<10-1;i++)

    {

    maxind =i;

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

    {

    if(a[j]>a[maxind])

    maxind =j;//找到最大值的序号

    }

    //swap ,冒泡排序

    if(maxind > i)

    {

    int temp = a[i];

    a[i] = a[maxind];

    a[maxind] = temp;

    }

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

     

    }

     

    多维数组赋初值,可以不给出第一维度的长度;

    如果只有部分赋初值,剩下的都赋值为零;

    int a[][3]={{2},{3,4,5},{}};

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

    {

    for(int j =0;j<3;j++)

    {

    printf("%d ",a[i][j]);

    }

    }

     

     

    多维字符数组(没有赋初值的自动赋值为a)

    int i,j;

    char a[][5]={{'B','A','S','I','C',},{'d','B'}};

    for(i=0;i<=1;i++)

    {

    for(j=0;j<=4;j++)

    printf("%c",a[i][j]);

    printf(" ");

    }

    printf("%c ",a[1][4]);

     

    字符串

     

     

    字符串可以修改

    char c[]="BASIC dBASE";

    c[1]='B';

    puts(c);

    /字符串

    // char c[]="C program";

    // printf("%s ",c);

    // printf("%d ",sizeof(c));

     

    // char st[6];

    // printf("input string: ");

    // scanf("%s",st);

    // printf("%s ",st);

     

    // char c[]="BASIC dBASE";

    // c[1]='B';

    // puts(c);

     

    // char st1[15],st2[]="C Language";

    // strcpy(st1,st2);

    // puts(st1);printf(" ");

     

    static char st[]="C language";

    int k=strlen(st);

    printf("The lenth of the string is %d ",k);

     

     

    08函数

     

    形参和实参

    数组为形参时,不会重新分配空间,传递的是数组的地址

    可以不给出数组元素个数

    void nzp(int a[],int n)
    {
    int i;
    printf(" values of array a are: ");
    for(i=0;i<n;i++)
    {
    if(a[i]<0) a[i]=0;
    printf("%d ",a[i]);
    }
    }

     

    静态变量和全局变量存储在静态存储区

    局部变量存储在动态存储区

     

    静态局部变量只赋初值一次;

    如果不赋初值,则编译时自动赋初值为零

    09预处理命令

    宏定义:直接做字符串替换

     

    #define PI 3.1415926

     

    带参数的宏

    #define MAX(a,b) (a>b)?a:b
    main(){
    int x,y,max;
    printf("input two numbers: ");
    scanf("%d%d",&x,&y);
    max=MAX(x,y);
    printf("max=%d ",max);
    }

     

    条件编译

    10 指针

    指针变量可出现在表达式中, 设
    int x,y,*px=&x;
    指针变量 px 指向整数 x,则*px 可出现在 x 能出现的任何地方。例如:
    y=*px+5; /*表示把 x 的内容加 5 并赋给 y*/
    y=++*px; /*px 的内容加上 1 之后赋给 y,++*px 相当于++(*px)*/
    y=*px++; /*相当于 y=*px; px++*/

     

     

    char *c;

    c="asdfasdf";

    c[1]='a';//这种方法是错的,要和字符数组定义的字符串区分

    puts(c);

     

     

    //指向数组的指针

    int a[10],i,*p;

    p=a;

    p=&a[0];//a就是数组的首地址

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

    *(p+i)=i;

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

    printf("a[%d]=%d ",i,*(p+i));

     

    很复杂的指针操作

     

     

     

    //指向数组的指针

    int a[10],i,*p;

    p=a;

    p=&a[0];//a就是数组的首地址

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

    *(p+i)=i;

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

    printf("a[%d]=%d ",i,*(p+i));

     

     

    int *p,i,a[10];

    p=a;

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

    *p++=i;

    p=a;

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

    printf("a[%d]=%d ",i,*p++);

     

    指向多维数组的指针变量

     

    //指针数组

    char * c[]={{"asdfas"},{"asddddd"}};

    char * p[2]={c[0],c[1]};

    puts(p[1]);

    int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};

    int(*p)[4];

    p =a;

    printf("%2d ",p[2][1]);

     

     

     

    字符串指针与字符数组的区别

     

    函数指针变量

     

    指针数组

     

    //指针数组

    char * c[]={{"asdfas"},{"asddddd"}};

    char * p[2]={c[0],c[1]};

    puts(p[1]);

     

    指针运算总结

     

    11结构体和共用体

    动态存储分配

     

    //动态内存分配

    int *p=calloc(2,sizeof(int));

    p[0]=9;

    p[1]=22;

    printf("%d %d ",p[0],p[1]);

     

    链表

     

    //链表

    struct mem

    {

    int num;

    int age;

    struct mem* next;

    };

     

    struct mem * create(int n)

    {

    struct mem* head =NULL;

    struct mem* now =NULL;

    int i;

    for(i=0;i<n;i++)

    {

    if(i ==0)

    {

    head = malloc(sizeof(struct mem));

    head->num =i;

    head->age =i;

    head->next =NULL;

    now = head;

    }

    else

    {

    now->next =malloc(sizeof(struct mem));

    now = now->next;

    now->num =i;

    now->age =i;

    now->next=0;

    }

    }

     

    return head;

    }

    struct mem* hh =create(3);

    struct mem* pp =hh;

    while(pp)

    {

    printf("%d",pp->age);

    pp=pp->next;

    }

     

    枚举类型

    //枚举类型

    // enum week{monday,tue,wed,thur,fri};

    // enum week a;

    // a=monday;

    // b = (enum week)1;//可以强制类型转换

     

    enum body

    { a,b,c,d } month[31],j;

    int i;

    j=a;

    for(i=1;i<=30;i++){

    month[i]=j;

    j++;

    if (j>d) j=a;

    }

    for(i=1;i<=30;i++){

    switch(month[i])

    {

    case a:printf(" %2d %c ",i,'a'); break;

    case b:printf(" %2d %c ",i,'b'); break;

    case c:printf(" %2d %c ",i,'c'); break;

    case d:printf(" %2d %c ",i,'d'); break;

    default:break;

    }

    }

    printf(" ");

     

  • 相关阅读:
    《转》 在C++中使用TinyXML2解析xml
    基于多种转换语义的图数据库查询
    tomcat内存、连接数优化
    JAVA基础针对自己薄弱环节总结01(循环之前的知识)
    CodeForces
    N年的经验在别人眼里是怎么看的?
    perl install-module.pl DateTime 执行无效问题的解决
    在Linux上使用iptables命令开启对外访问的网络端口
    Linux上安装Bugzilla4.4小记
    在Lotus Notes设置邮件转发
  • 原文地址:https://www.cnblogs.com/tangyuanjie/p/14028229.html
Copyright © 2020-2023  润新知