美文网首页
C语言——第一次笔记

C语言——第一次笔记

作者: 小石头呢 | 来源:发表于2019-11-16 10:36 被阅读0次

    学习内容

    • 注释的使用

    • #include的作用

    • main函数介绍

    • printf函数格式化输出

    • C语言基本数据类型

    • scanf函数格式化输入

    • 变量

    • 运算符

    • 循环:if

    • 工资实战

    • 年龄转换实战

    1. 注释的使用

    • // 注释内容单行注释:用于一行简短的注释,不需要换行的情况。

    • /* 注释内容 */多行注释:注释内容过多,需要换行的情况。

    • /** 注释内容 */文档注释(用于生成开发者文档):java语言特有的注释,其中的注释内容可以被JDK提供的工具 javadoc 所解析,生成一套能够以网页形式体现程序的说明文档

    2. #include的作用

    • include---宏 用来导入头文件。如果系统已经提供某些功能的实现,只需要使用include将这些功能所在的头文件导入进来就可以了。

    • < >用来导入系统提供的类库,如:stdio.h stdlib.h math.h string.h,
      " "用来导入自己定义的头文件,如:calculate.h

    • #include <stdio.h> 编译器首先从系统的类库里面去查找这个头文件,如果没有,再到自己的文件中查找,否则报错。

    • #include "stdio.h" 编译器首先从自己的文件中去查找这个头文件,如果没有,再到系统的类库里面查找,否则报错。

    3. main函数的使用

    • main函数 = 代码块 = 完成特定功能,所有的程序的入口点都是main函数。

    • int返回值,用来记录当前程序的运行状态,0:正常结束 资源自由分配,非0:1 异常结束 没收资源。

    • int argc:参数个数 argument count,char* argv[]:每个参数组成的字符串数组。

    int main(int argc, char *argv[]) {
      printf("%d\n",argc); 
      printf("%s\n",argv[0]);
      return 0;
    }
    
    输出:
          1
          G:\ThridStudy\C_Project\Project1.exe(.c文件编译生成的exe文件所在的位置)
    

    4. printf函数格式化输出

    • printf输出语句,用来让终端输出数据。

    • 打印常量字符串:printf("hello world");

    • 转义字符:\n 的意思是回车换行,将当前位置移到下一行的开头。\r 的意思是回车,将当前位置移到本行的开头。\t 的意思是水平制表符,将当前位置移到下一个tab位置。

    int main(int argc, char *argv[]) {
       printf("helloworld\t");
       printf("%d\n",argc); 
       printf("%s\r",argv[0]);
       getchar(); 
       return 0;
    }
    
    运行结果

    5. C语言基本数据类型

    ① 首先明确,C标准并没有具体给出规定哪个基本类型应该是多少个字节数,而且这个也与OS、编译器有关

    ② 虽然16位、32位或者64位的机子各种类型并不一样,但有几条规则(ANSI/ ISO制定):

    • short 至少占用2个字节

    • int 建议为一个机器字长,32位环境下为4字节,64位环境下为8字节

    • short 的长度不能大于int, long 的长度不能小于int

    ③ 基本数据类型参照表格:

    类型 描述 16位 32 位 64位 打印方式
    char 字符,如:'a','d' 1 1 1 %c
    short 短整型 2 2 2 %hd
    int 整型,如1,2341 2 4 4 %d
    long 长整型 4 4 8 %ld
    float 单精度浮点数,如1.5,82.0 4 4 4 %f
    double 双精度浮点数 8 8 8 %f

    在自己的平台上可以使用printf("%d\n",sizeof(int));测试具体的数据。

    注意:

    1. C语言中printf输出float和double都可以用%f,而double型数据还可以用%lf。

    2. scanf当中若是对双精度的变量赋值是必须是%后跟lf,而printf当中可以用%f也可以用%lf没有限制。

    3. printf() 只会看到双精度数,printf 的 %f 格式总是得到 double,所以在 printf() 中使用 %f 跟 %lf 的输出显示效果是一样的。

    4. 对于变量来说,double 类型比 float 类型的精度要高。double 精度更高,是指它存储的小数位数更多,但是输出默认都是 6 位小数。如果你想输出更多小数,可以自己控制,比如 %.10lf 就输出 10 位小数。

    ④ 控制输出格式:

    • %md:要求输出字段宽度为m,右对齐,不够左端补空格,大于m按实际输出,如%3d。

    • %0md:要求输出字段宽度为m,右对齐,不够左端补0,大于m按实际输出,如%02d。

    • %m.nd:要求输出字段宽度为m,右对齐,后面n个位置当做小数,没有的补0,最前面m-n个没有的补空格,如%3.2d。

    6. scanf函数格式化输入

    • scanf输入语句,用来向终端输入数据。
    int a = 0;
    scanf("%d",&a);
    printf("%d",a);
    
    • 当用户在终端输入数据时,数据会被存放到缓冲流,scanf用于在缓冲流中找到数据将其放入到给定的位置。

    • 放入到给定的位置就是保存输入的数据,保存数据需要用到变量,我们只需要把数据送到对应变量的地址,就存储好了该数据,就可以通过该变量使用该数据。所以使用&获得变量a的地址。

    int a = 0;
    scanf("jack%d",&a);
    printf("%d",a);
    
    • 此时输入数据必须按照jack+数据的格式,才可以将数据送入到变量中。所以,scanf函数中" "里面的内容用来控制输出格式。
    int a = 0;
    int b = 0;
    scanf("%d %d",&a,&b);
    printf("%d %d",a,b);
    
    • 利用上面的输出格式一次性输入两条数据。

    7. 变量

    • 变量是程序可操作的存储区的名称;变量的类型决定了变量存储的大小;变量的名称可以由下划线,字母,数字组成,它必须以字母或者下划线开头。简单的说变量就是用来记录数据的。

    • 变量的声明:没有分配内存空间,使用的时候才会分配,如int a;

    • 变量的定义:立刻为我们分配内存空间 赋初值,如int a = 0;

    • 变量的使用:

    int num1,num2;
    scanf("%d %d",&num1,&num2);
    printf("%d %d\n",num1,num2);
    
    • bool类型的变量(需要导入stdbool.h),其值非零即真(1),零为假(0)。
    bool status = -3;
    printf("%d\n",status);//结果是1   
    

    8. 运算符

    • 算术运算符:
    运算符 描述
    + 把两个操作数相加
    - 第一个操作数减去第二个操作数
    * 把两个操作数相乘
    / 两个数相除,取商
    % 两个数相除,取余
    ++ 自增运算符,整数值加1
    -- 自减运算符,整数值减1

    注意:a++是先赋值后运算,++a是先运算后赋值

    • 逻辑运算符
    运算符 描述
    && 逻辑与运算符,如果两个操作数都非零,则条件为真
    || 逻辑或运算符,如果两个操作数有任意一个非零,则条件为真
    * 逻辑非运算符,逆转操作数的逻辑状态
    • 关系运算符
    运算符 描述
    == 检查两个操作数的值是否相等,如果相等则条件为真
    != 检查两个操作数的值是否相等,如果不相等则条件为真
    > 判断左操作数的值是否大于右操作数的值,如果是则条件为真
    < 判断左操作数的值是否小于右操作数的值,如果是则条件为真
    >= 判断左操作数的值是否大于或等于右操作数的值,如果是则条件为真
    <= 判断左操作数的值是否小于或等于右操作数的值,如果是则条件为真
    • 赋值运算符
    运算符 实例
    = C=A+B,将A+B的值赋给C
    += C += A 相当于 C = A + C
    -= C -= A 相当于 C = A - C
    *= C *= A 相当于 C = A * C
    /= C /= A 相当于 C = A / C
    %= C %= A 相当于 C = A % C

    9. 循环:if

    • if语句的形式:C 语言把任何非0和非null的值假定为 true,把0或 null 假定为 false。
    if (条件) {
      条件成立要做的事
    }
    
    if (条件) {
      条件成立要做的事
    }else{
      条件不成立要做的事
    }
    
    if (条件1) {
       条件1成立要做的事
    }else if (条件2){
       条件2成立,条件1不成立要做的事
    }else if (条件3){
       条件3成立,条件1,2不成立要做的事
    }
    ...
    }else{
      以上条件都不成立要做的事
    }
    
    • 问号表达式:(也称之为三目运算符)

    (表达式1)?(表达式2):(表达式3),如果表达式1成立则执行表达式2,否则执行表达式3

    a>b ? s = a+b : s = a-b
    

    这里的例子,如果 a > b,那么 s 的值是a+b,否则 s 的值是a-b

    • 逗号表达式:

    将两个及其以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值

    (3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,最终结果是14

    int temp = 1;
    if(temp--,temp){
      printf("temp是1");
    }else{
      printf("temp是0");
    } 
    
    输出结果:
    temp是0
    

    10. 工资实战

    • 优化前:
    #include <stdio.h>
    
    int main(){
      int salary = 0;//记录工资 
      int pay = 0; //税后工资 
    
      //接收输入 
      printf("请输入工资:");
      scanf("%d",&salary); 
       
      //开始计算
      if(salary < 5000){
          pay = salary; 
      }else if(salary > 5000 && salary < 8000){
          int tax = (salary - 5000)*0.1;
          pay = salary - tax;
      }else if(salary > 8000 && salary < 10000){
          int tax = (salary-8000)*0.15 + 3000*0.1;
          pay = salary - tax;
      }else{
          int tax = (salary - 10000)*0.2 + 2000*0.15 + 3000*0.1; 
          pay = salary - tax;
      }
      
      printf("到手工资: %d",pay);
      return 0;
    }
    
    • 优化后:
    #include <stdio.h>
    
    int main(){
      int salary = 0;//记录工资 
      int tax = 0; //税 
    
      //接收输入 
      printf("请输入工资:");
      scanf("%d",&salary); 
       
      //开始计算
      if(salary < 5000){
          tax = 0; 
      }else if(salary > 5000 && salary < 8000){
          tax = (salary - 5000)*0.1;
      }else if(salary > 8000 && salary < 10000){
          tax = (salary-8000)*0.15 + 3000*0.1;
      }else{
          tax = (salary - 10000)*0.2 + 2000*0.15 
          + 3000*0.1; 
      }
      
      printf("到手工资: %d",salary - tax;);
      return 0;
    }
    

    11. 年龄转换实战

    #include <stdio.h>
    //输入年龄 20
    //your age is twenty; 
    
    int main(){
      int age = 0;
      
      //保存个位数 21%10 = 1 
      char* gewei[] = {"","one","two","three","four","five","six","seven","eight","nine"}; 
      //保存10-19
      char* temp[] = {"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};
      //保存十位 
      char* shiwei[] = {"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"}; 
      
      printf("请输入年龄:");
      scanf("%d", &age);
      
      char *name;//保存每次取出的字符串 
      if(age < 10){
          //直接访问各位数数组
          name = gewei[age];
      }else if(age >= 10 && age <= 19){
          //获取个位数  
          int index = age % 10;
          name = temp[index];
      } else{
          //获取个位数 
          int g = age % 10; 
          //获取十位数 
          int s = age / 10;
          //取出对应的单词
          int sString = shiwei[s-2];
          int gString = gewei[g];
          
          printf("your age is %s-%s\n"
          ,sString,gString); 
          
          //程序还未运行完毕就提前结束
          return 0; 
      } 
      
      printf("your age is %s\n",name);
       
      return 0;
    }
    

    相关文章

      网友评论

          本文标题:C语言——第一次笔记

          本文链接:https://www.haomeiwen.com/subject/coqsictx.html