• C语言语法目录二


    1、char类型 

      char c;定义了一个char变量
      'a' ; char常量
      char的本质就是一个整数,一个只有一个字节大小的整数
      char c; 定义一个有符号的char
      unsigned char b; 定义一个无符号的char
      c = 4; //c等于一个整数 -->4
      c = '4';//c等于一个字符4,对应ASCII码的52
      %c 表示是输出一个字符,而不是一个整数
     大写字母转小写的方法:
      例如: char a = 'B';
      a = a + 32;
      printf("%c ",a);
     例二:
      char a = 127;
      a = a+5;
      printf("%d",a); // -124

      分析:a=127 --> 0111 1111 -->+5-->1000 0100(最高位为1,计算机便认为它是负数,则当做了补码,则转成原码输出)
      补码-->原码 1000 0100 --> 1111 1011 + 1-->1111 1100(最高位表示符号),则输出的二进制是0111 1100,十进制为-124。
      char 和 unsigned char
      char的取值范围 -128到127。
      unsigned char 为0-255

    2、不可打印char转义符

      a 警报 char a = 'a' ; printf("%c",a); 不显示,只有一声警报
       退格
       换行(回车+换行)
       回车(回到头部)
       制表符
      ’ 输出单引号
      ? 输出问号
      \ 输出

    3、浮点数float(4bytes)、double(8bytes)、long double类型-->效率低

      其字节数随系统而变化,常用32架构系统如上的所示。
      小数四舍五入的方法:
      float a = 3.6;
      a = a + 0.5;
      printf("%d",a);# 只保留整数部分

    4、volatile

       代表变量是一个可能被CPU指令之外的地方改变的,编译器就不会针对这个变量去优化目标代码。例如:volatile int i
      register 变量在CPU寄存器里面,而不是内存里面。但regist是建议型的指令,而不是命令型的指令。例如:register int a

    5、字符串格式化输出和输入  

      1、字符串在计算机内部的存储方式
        字符串是内存中一段连续的char空间,以''结尾。
      2、"" 是c语言表示字符串的格式。printf("%s",'hello world' );
      3、printf函数、putchar函数
        输出%,-->printf("%%");
        'l'附加在d,u,x,o前面,表示长整数。
        '-'左对齐-->printf("%-5d");去掉'-'默认右对齐。
        '0'位宽不够0来凑,但不能与'-'混用。
      4、putchar函数是显示一个字符的函数。
        putchar(97) -->输出‘a’

      5、scanf函数
        scanf("%d",&a) //用&取变量的地址。

       常用字符串输入输出函数如下:   

    #include<stdio.h> 
    #include<stdlib.h>
    
    // scanf 输入 
    int main1(void)
    {
        char a[100] = {0};  // 输入:hello world 
        scanf("%s",a); //%s 表示输入一个字符串 ,scanf是以回车作为输入完成标识的,但回车键本身并不会作为字符串的一部分 
        // 如果scanf参数中的数组长度小于用户在键盘输入的长度,那么scanf就会缓冲区溢出,导致程序崩溃 
        int i = 0;
        for(i=0;i<10;i++) 
        {
            printf("%d
    ",a[i]);
        }
        printf("---------
    "); //输出:hello  -->scanf将回车和空格都视为字符串结束标志 
        printf("%s",a);
        return 0;
    }
    
    // gets() 输入 ,不能用类似“%s”或者 "%d"之类的字符转义,只能接受字符串的输入。 
    int main2(void)
    {
        
        char s[100] = {0};
        gets(s); // 输入:hello world ,gets()函数同样是获取用户输入,它将获取的字符串放入s中,仅把回车键视为结束标志 ,但也有溢出问题 
        int i;
        for(i=0;i<10;i++)
        {
            printf("%d
    ",s[i]);
        }
        printf("-------
    ");
        printf("%d
    ",s); // 输出:hello world 
        return 0 ;
    }
    
    // gets()获取用户输入,atoi() 函数将字符串转为数字 
    int main3(void)
    {
        char a[100] = {0};
        char b[100] = {0};
        gets(a); // 获取第一次输入,a的对象只能是数组 ,不能转义(字符串转为数字),需要 使用专门的函数 
        gets(b);
        int i1 = atoi(a); // 将字符串转化为一个整数 
        int i2 = atoi(b);
        printf("%d
    ",i1+i2);
        
        return 0;
    }
    
    // fgets()函数用法
    int main4(void) 
    {
        char c[10] = {0};
        fgets(c,sizeof(c),stdin);//第一个参数是char的数组,第二个参数是数组的大小,单位字节,第三个参数代表标准输入。
        // 输入: hello world 
        printf("%s
    ",c);// 输出:hello wor --> 它把字符串尾的 0 也包括在内了,fgets()会自动截断,防止溢出,所以很安全
        // 调用fgets()的时候,只要能保证第二个参数小于数组的实际大小,就可以避免缓冲区溢出的问题。 
        return 0;
    }
    
    // puts() 函数自动会在输出完成后打印一个'
    '出来
    int main5(void) 
    {
        char d[100] = {0};
        gets(d);
        printf("------
    ");
        puts(d);  //自动输出,附带换行 
        return 0 ;
    }
    
    // fputs()函数,是puts的文件操作版
    int main(void) 
    {
        char e[100] = {0};
        fgets(e,sizeof(e),stdin); // hello world mylove
        printf("----------
    ");
        fputs(e,stdout);  // hello world mylove
        return 0;
    }
    View Code

      6、getchar函数
        char a ,b;
        a = getchar();//得到用户键盘的按键对应的ASCII码值
        getchar() //获取回车
        b = getchar();//得到用户键盘的按键对应的ASCII码值
        printf("a+b=%d",(a-'0')+(b-'0')); //得到对应的值
      7、左值:表示可以被更改的数据对象。
        右值:能赋给左值的量。

    6、运算符

      + - * / % += -= *= /= %=
      a+=1 <-> a++ //自加1 ++(后缀)从左到右;++(前缀)从右到左
      a-=1 <-> a-- //自减1
      例如:
        int a,i;
        i = 3;
        a = ++i; //a=4
        //a = i++; // a=3
      总结:i++先计算表达式的值;++i先自身++,再计算表达式的值。
      例如:
        int i = 6;
        int a = i++ + ++i;
        printf("%d %d",a,i); // 14   8
      分析:实际分以下三步
        i = i+1;
        int a = i+i;
        i = i+1;

    7、逗号表达式

      int a,b,c;
      a = 1;
      b = 2;
      c = (a=b,a+b) //先算括号内逗号左边的,再算逗号后边的,表达式取逗号右边的值
      printf("%d",c) //4

    8、空语句,只有一个 ; 号表示

      强制类型转换
      double f = 3/2; //c语言两个整数相除的结果自动转化为一个整数
      double d = (double)3/2; //(double)3将整数3强制转化为double型
      printf("%f %f",f,d); // 1.000000 1.500000

    9、关系运算(从左到右)

      > < >= <= 为一类,优先级相同
      == != 为一类,优先级相同,上一类的优先级高于这一类。

    10、逻辑运算符(从左到右) 

      与(&&) 一假则假
      或(||) 一真则真
      非(!) 真变假,假变真

    11、int main() 在c里面,代表这个函数可以有参数,也可以没有参数

      int main(void) 明确表示没有参数

    12、if..else(if、if...else 、 if...else if...else if...else..)

    13、switch 多重选择 

      int main()
      {
        int i = 1;
        switch(i)
        {
        case 0:
          printf("i = 0 ")
          break
        case 1:
          printf("i = 1 ")
          break
        case 2:
          printf("i = 2 ")
          break
        case 3:
          printf("i = 3 ")
          break
        default: # 以上情况都不满足时执行
          printf("error ")
        }
      }
      说明:不加break时,上述程序会执行case1、case2、case3,输出i=1,i=2,i=3
      加break后,只会执行case1,输出i=1(加reak才是正确用法)

    14、if 和 switch 的比较: 

      当条件很复杂,分支中包含&&、||、!等时,用if语句
      当条件很简单,但分支很多,适合用switch语句。

    15、条件运算符 ?  

      int c = (a>b) ? a:b
      先求?左边的表达式值,如果表达式成立,冒号左边的值为整个表达式的值,反之为冒号右边的值

    16、goto语句与标号  

      无条件跳转goto,不建议使用,使代码可读性变差。

    17、while  

      while(条件) 条件为真时执行循环,条件为假,退出循环。
      while(1) //死循环
      {
      printf('hello');
      }

    18、continue 和 break 

      continue会导致循环语句直接回到循环的开始(终止当前循环,继续下一次循环)。
      break 终止当前循环,退出循环。

    19、do...while循环  

      do{

      复合语句;

      }while(条件); //分号一定不能少
      do...while和while的区别:do...while中的复合语句至少执行一次,而while语句中复合语句可能一次都不执行。

    20、for循环 

      for(i = 0;i<10;i++)
      {
        语句;
      }
      //i=0只执行一次,就是第一次for循环,此时不执行i++.
      for(;;) // 死循环 for(;1;) 死循环 for(;0;) 不执行
      {
        printf('hello');
      }

      实例:打印三角形 

        #include<stdio.h>
        int main(void)
        {
            int i,j;
        
        for(i=1;i<7;i++) //行数 
        {
            for(j=1;j<7-i;j++) //空格 
            {
                printf(" ");
            }
            for(j=0;j<(2*i-1);j++) // * 
            {
                printf("*");
            }
            printf("
    ");
        }
        
        return 0;
        }

       扩展:打印倒三角形,打印钻石

  • 相关阅读:
    187A Permutations
    DFS 专题 哈密顿绕行世界问题
    DFS 专题 N皇后
    DFS专题 Prime Ring Problem
    USACO section1.1 Broken Necklace
    USACO section1.2 Dual Palindromes
    PHPUnitWriting Tests for PHPUnit
    PHP 定界符 使用技巧
    concat函数
    mysql_free_result
  • 原文地址:https://www.cnblogs.com/schut/p/8542933.html
Copyright © 2020-2023  润新知