C语言基础整理2(运算符、数据类型、控制语句、循环语句、数组)

来源:互联网 发布:基尔霍夫定律实验数据 编辑:程序博客网 时间:2024/05/23 02:13


运算符、数据类型、控制语句、循环语句、数组

#include<stdio.h>

int main()

{

        chara=18;

        printf("%d",sizeof(a));

 

}

结果:1

      int ->4

      float ->4

      double->8

   

#include<stdio.h>

int main()

{

        unsigned int  a=-4;

        printf("%u",a);

 

}

结果:4294967292232-4)二进制补码

定义变量确定了1.变量在内存中的首地址2.数的表示范围

 

#include<stdio.h>

int main()

{

        unsigned int a=-4;

        int b=6;

        printf("%u",a+b);

 

}

结果:2

   

#include<stdio.h>

int main()

{

        int a=-2;

        unsigned int b=1;

        if((a+b)>=0)            无符号运算(232-2+1

                printf("1");

        else

                printf("0");

 

}

结果:1

无符号和有符号数的运算:转换成表达数据精度更高的数据类型 int->unsigned int

 

#include<stdio.h>

int main()

{

        int a=-2;

        unsigned int b=1;

        printf("%d",a+b);有符号运算

        printf("%u",a+b);无符号运算

}

结果:-1 4294967295

  

 #include<stdio.h>

#include<string.h>

int main()

{

        char a[1000];

        int i;

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

        {

            a[i]=-1-i;

        }

        printf("%d\n",strlen(a));

        return 0;

}

结果:255

   char表示范围:0~255

a[i]数值(0~255

 

#include<stdio.h>

#include<string.h>

int main()

{

        char a[1000];

        int i;

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

        {

            a[i]=-10-i;

        }

        printf("%d\n",strlen(a));

        return 0;

}

结果:246

 

 \n

\

\

%s 字符串占位符

字符串常量->字符序列

字符串结束标志\0

 

 

|  &  位运算符

|| && 逻辑运算符

3/5=0取整

3%5=3取余

 

 

#include<stdio.h>

int main()

{

        float a=3.5;

        int b=5;

        printf("%f",a/b);  ->%.2f

        return 0;

 

}

结果:0.700000       ->   0.70

 

#include<stdio.h>

int main()

{

        int a,b;

        scanf("%d%d",&a,&b);取变量的地址

        printf("%d",a+b);找到地址中的值

        return 0;

 

}

输入:9 9

结果:18

 

%d按十进制有符号

%0x按十六进制

 

 

 

 

<stdbool.h>

布尔变量bool a=01;

1.控制语句

If-else语句:

if(a==0) <=>if(0==a)正确

            if(0=a)错误

  if-else匹配问题

  注意判断语句格式

#include<stdio.h>

int main()

{

        int a=0;

        if(a==1)           ->  if(a=1)

            printf("=0\n");

        else

            printf("idiot");

        return 0;

 

}

 

结果:idiot               ->   =0

2switch语句

 

  1. 循环语句

  1. for

         int i,j,k;

         for( i=0;i<10;i++)        i+2错误

         {

         

    }

     

    #include<stdio.h>

    int main()

    {

            int a[100];

            a[0]=1;a[1]=2;

            int i=2;

    printf(%d\n,a[0]);

            for(i;a[i-1]<100;i++)

            {

                    a[i]=a[i-1]+a[i-2];

                    printf("%d\n",a[i-1]);

    }

            return 0;

    }

    结果:

    1

    2

    3

    5

    8

    13

    21

    34

    55

    89

     

  2. While

     

    #include<stdio.h>

    int main()

    {

            int a[100];

            a[0]=1;a[1]=2;

            int i=2;

    printf(%d\n,a[0]);

    while(a[i-1]<100)

            {

                    a[i]=a[i-1]+a[i-2];

                    printf("%d\n",a[i-1]);

                    i++;

      }

            return 0;

     

    }

     

    结果:

    1

    2

    3

    5

    8

    13

    21

    34

    55

    89

     

     

  3. do -while

    #include<stdio.h>

    int main()

    {

            int a[100];

            a[0]=1;a[1]=2;

            int i=2;

    printf(%d\n,a[0]);

            do

            {

              a[i]=a[i-1]+a[i-2];

             printf("%d\n",a[i-1]);

                    i++;

            }

            while(a[i-1]<100);

            return 0;

     

    }

    结果:

    1

    2

    3

    5

    8

    13

    21

    34

    55

    89

     

    break:跳出当前(本层)循环

    continue:跳出当前这一步的循环,继续执行本层循环

    判断是否是素数(是素数:返回1,否则返回0

    #include<stdio.h>

    int main()

    {

            int i,m;

            scanf("%d",&m);

            for(i=2;i<m;i++)

            {

                    if(m%i==0)

                    break;

            }

            if(i==m||m==2)

            printf("%d\n",1);

            else

            printf("%d",0);

     

    }

     

    数组

    1. 一维数组

    定义:如 int a[10]不能用变量说明数组大小,即数组大小不能动态定义

    数组名是地址 a=&a[0]

  1. 二维数组

    定义:如 int a[i][j]  i:j:

    二维数组的初始化:

  1. 分行赋值int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

  2. 对部分元素赋值如:int a[3][4]={{1},{5},{9}};

  3. 对全部元素赋值行数可省,列数不可省

    char c=a;

    c=c-32; 字符可进行运算(ASCll码)

    %c 输入或输出一个字符

    %s 输入或输出一个字符串

    #include<stdio.h>

    #include<string.h>

    int main()

    {

            char a[10]={'s','t','r','i','n','g'};

            printf("%s",a);

    }

    结果:string

     

    如果数组长度大于字符串实际长度,也只输出到遇到\0结束。

    输出字符不包括结束符\0

    如果一个字符数组中包含一个以上\0,则遇到第一个\0时输出就结束。

     

  1. puts函数

    char str[]={China\nBeijing};

    puts(str);

    输出结果:

    China

    Beijing

     

    2.gets(字符数组)

     

    3.strcat连接字符数组

    函数调用时传输的是数组名(地址)

    如:

    #include<string.h>

    #include<stdio.h>

    int main()

    {

            char a[100]={"banzhang"};

            char b[]={"zuishuai"};

            strcat(a,b);

            printf("%s",a);

    }

     

    结果:banzhangzuishuai

     

    include<stdio.h>

    int main()

    {

            int i,j,k;

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

            {                                    1      3        0

                    for(j=0;j<3-i;j++)                3      2       1

                    printf(" ");                     5      1       2

                    for(k=0;k<2*i+1;k++)

                    printf("*");

                    printf("\n");

     

            }

    }

    结果:

     

       *

      ***

     *****

     

  1. strcpy函数 复制字符串

    #include<stdio.h>

    #include<string.h>

    int main()

    {

            char str1[10]={"abcdefg"};

            char str2[10]={"CHINA"};               CHINA\0\0\0\0\0

            printf("%s",strcpy(str1,"CHINA"));

    }

    结果:CHINA

     

  1. 字符数组1必须定义得足够大

  2. 字符数组1必须写成数组名形式(如str1,字符串2可以是字符数组名,也可以是一个字符串常量。如:strcpy(str1,CHINA);

  3. 复制时连同\0一起复制(只复制1\0)

  4. 可以把字符串2中前面几个字符复制到字符数组1中。如strncpy(str1,str2,2);

    #include<stdio.h>

    #include<string.h>

    int main()

    {

            char str1[10]={"baii2"};

            char str2[10]={"CHINA"};

            printf("%s",strncpy(str1,str2,2));

    }

    结果:CHii2

     

  1. 不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。

    如:str1=china ;不合法

    str1=str2;不合法

    用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。

     

  1. strcmp按位比较字符ASCII

      不能直接比较

      if(strcmp(str1,str2)>0)

      printf(yes)

     

    #include<stdio.h>

    #include<string.h>

    int main()

    {

            char str1[100]={"khina"};  ->   china

            char str2[10]={"corean"};  ->  korean

            if(strcmp(str1,str2)<0)

            printf("%s\n",strncpy(str1,str2,5));

            else if(strcmp(str1,str2)>0)

            printf("%s\n",strcpy(str1,str2));

            else

            printf("hello");

     

    }

    结果:corean                 ->      korea

     

    sizeof:字节数(包括\0

    strlen:测试字符串长度(不包括\0

    #include<stdio.h>

    #include<string.h>

    int main()

    {

            char a[]={"china"};

            printf("%d\n",sizeof(a));

            printf("%d\n",strlen(a));

     

    }

     

    结果:

    6

    5

     

  1. strlwr:大写字母换成小写字母

  2. strupr:小写        大写

     

    8个函数共同点:只能传地址(数组名)

     

    函数

    形参:定义函数时函数名后面括号中的变量名  int max(x,y)

    实参:调用                                c=max(a,b)

    参数传递

    1)值传递方式:函数调用时,为形参分配单元,将实参的值复制到形参中

    单向传递:实参->形参

       存储单元不同

  1. 地址传递方式:函数调用时,传递地址给形参

    双向传递

    形参和实参共用存储单元

     

    #include<stdio.h>

    int main()

    {

            int a=3,b=5;

            int c;

            c=max(&a,&b);

            printf("%d",c);

    }

    int max(int *x,int *y)

    {

            int z;

            z=*x>*y?*x:*y;

            return z;

    }

    结果:5

    #include<stdio.h>

    int main()

    {

            int a=3,b=5;

            max(&a,&b);地址

            printf("%d%d",a,b);

    }

    int max(int *x,int *y)地址

    {

            *x=*x+2;  x:地址 *x:取值

            *y=*y+2;

            return 0;

     

    }

    结果:57

     

    变量的存储类型:

    register寄存器变量(CPU中)

    static静态局部变量

    区别

    const

    static

    volatile

     

     

    #include<stdio.h>

    int main()

    {

            int a[5][5]={0};

            change(a,25);

     

    }

    int change(int a[5][5],int n)

    {

            int i,j,m=0;

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

            {

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

                    {

                            a[i][j]=++m;

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

                    }

                    printf("\n");

            }

     

    }

    结果:

    12345

    678910

    1112131415

    1617181920

    2122232425

     

阅读全文
0 0