[编程笔记]第二章 C语言预备知识

  /*第二讲 C语言预备专业知识
 1.CPU 内存条 硬盘 显卡 主板 显示器之间的关系
     CPU不能直接处理硬盘上的数据
     文件存储在硬盘,当运行时,操作系统把硬盘上的数据调用到内存条上。
     图像以数据的形式通过显卡在显示器上输出
     声音以数据的形式发送给声卡输出
     这些硬件在主板的插槽上通过主板电路组合在一起
 
 2.Hello World程序是如何运行起来的
     源代码,通过编译(Compile) 链接(Build),生成.exe可执行文件。
     软件请求操作系统来执行.exe执行文件
     操作系统调用CPU来运行程序

3.什么是数据类型?
     基本类型数据(不可再分割)*/
         【整数】 
             整型 —— int 4个字节
             短整型 —— short int  ——2个字节
             长整型 —— long int  ——8个字节
         /int i = 10 表示i是整型变量,所谓整型变量即指i只能存放整数
         【浮点数(实数)】
             单精度浮点数 —— float   —— 4个字节
             双精度浮点数 —— double  —— 8个字节 
         【字符】
             单个字符 —— char
             字符串 —— 一系列字符的组合
 
 /*    复合类型数据
         结构体
         枚举
         共用体
 
 4.什么是变量?
      变量的本质就是内存中的一段存储空间。
      int i = 3 ;//
      数据3最终是存放在内存中,程序终止之后3所占的空间被释放。
      定义变量时,程序请求操作系统,
      在内存中找到一个空闲的单元,分配给变量i并存储它的内容。
     
 5.CPU 内存条 VC++6.0 和 操作系统之间的关系
      VC++6.0软件请求操作系统,在内存条中分配一段空闲的空间,
     将这段空闲的空间与变量i产生关联,以后使用变量i即是在使用
      变量i对应的存储空间,最终在CPU中运行程序。
  
 6.变量为什么必须要进行初始化? **
      所谓初始化就是给变量赋初值。
      如果不进行初始化,系统会将内存释放前的填充值输出。
      
  7.如何去定义变量? ** 
      数据类型 变量名 = 要赋的值 ;
      等价于=> 数据类型 变量名
              变量名 = 要赋的值
 */
      举例:
         int i = 3 => int i; i = 3 ;
         int i,j => int i;int j ;
          int i,j = 3 => int i,int j;i = 3;
         int i = 3;int j = 5; => int i;int j;i = 3;j = 5;
          int i,j;i = j = 5; => int i,j;i = 5;j = 5 ;
 /*
 8.什么是进制? **
      十进制就是逢十进一,计算机之识别二进制
      十进制:基数 0 1 2 3 4 5 6 7 8 9
      二进制:基数 0 1
  
      printf用法
          %d 表示以十进制输出
          %x或%X 表示以十六进制输出
          %o 表示以八进制输出
  
      进制转换:
          把r进制 转成 十进制
          把十进制 转成 r进制
          不同进制所代表的数值之间的关系
             十进制的 3981 转化为十六进制 是 F8D
              十进制的3981和十六进制的F8D所代表的本质上都是同一个数字
      
      二进制全部为零的的含义 —— 00000000 的含义
      1. 数值为零
     2. 字符串结束标记符 '0'
      3. 空指针NULL
          NULL 本质上也是零,但这个零不代表数字零
          而表示的是内存单元的编号零
      我们规定:以零为编号的存储单元的内容 不可读,不可写
 */
  9.常量在C语言中是如何表示的?
     整数:
          十进制:    传统写法
          十六进制:  前面加0x或0X
          八进制:    前面加0()  注意是数字零,不是字母o
     浮点数:
          传统写法:  float x = 3.2 ;
          科学计数法:float x = 3.2e3 ;//x的值是3200
                     float x = 1.23.45e-2 ; //x的值是1.2345
          #include<stdio.h>
          int main(void){
              float x = 123.45e-2F ;
              printf("%f\n",x)
              return 0 ;
         }
     字符:
         单个字符用单引号''括起来 ;'A'表示字符A  'AB'错误
         字符串用双引号""括起来 ; "A"正确
         因为"A"代表'A'和'\0'的组合
 
 10.常量是以什么样的二进制代码存储在计算机中?
     编码
     int i = 86 ; 
     整数是以补码的形式转化为二进制代码存储在计算机中的 ;
     实数是以IEEE754标准转化为二进制代码存储在计算机中的 ;
     字符的本质实际上也是与整数的存储方式相同 ;
     字符'A'先转换为对应的ASCII码 -> 再转换为对应的补码形式 ;
 
 11.代码规范化
     优点:
         1.使得代码的可读性更强,让自己和别人更清楚的看懂程序
         2.使得代码的健壮性更高,这样程序更不容易出错
 
         参考书籍:《高质量C/C++编程》
         #include<stdio.h>
         int main(void)
         {   
             if (xxxxx(xxxx(xx)))
             {
                 while (xxxx(xxx))
                 {
                     for (xxxx(xxx))
                 }
             }
             if (xxxxx(xx)xx)
             {
                 printf("Say Hello") ;
             }
             return 0 ;
         }
         1.{}()成对出现
         2.缩进 区分内部外部的关系
         3.换行 区分上行下行的功能
 
 12.什么是字节?
     字节就是存储数据的单位,并且是硬件所能访问的最小单位。
     1字节 (B)= 8 位 ;   1KB = 1024B ;
     1M = 1024KB ;   1G = 1024MB ;
     //1.5GB = 1.5*2^30*8b
 
 13.不同类型数据之间相互赋值的问题 **
     //在理解补码的基础上学习,暂不考虑
     int i = 45 ;    //-45的二进制码为 
     long j = 102345 ;
     i = j ;
     printf("%d %d\n",i,j) ;
     float x = 6.6 ;
     double y = 8.8 ;
     printf("%f %f\n",x,y) ;
 
     int i = ;
     
 14.什么是ASCII?
     ASCII码不是一个值,而是一种规定。
     ASCII规定了不同的字符使用那个整数值去表示。
     它规定了:
             'A' = 65 ;  'B' = 66 ;
             'a' = 97 ;  'b' = 98 ;
             '0' = 48 ; 
 
     #include<stdil.h>
     int main(void)
     {
         char ch = 'A' ;//OK
         char ch = 'AB' ;//error是因为不能把字符串赋值给单个字符
         char ch = "A" ;//error
         char ch = 'B' ;//error 变量不能二次定义
         ch = 'C' ;
         printf("%c\n",ch) ;
         return 0 ;
     }
/*
15.字符的存储[字符本质上与整数的存储方式相同]
 
16.对初学编程者的一些建议
     对于编程基础有了一定了解,再深入或入门其他语言就会相对简单。
     一定要基础阶段打好基础,学完流程控制之后就可以做一些小项目了。
*/
 17.基本的输入输出函数用法
     printf() —— 将变量的内容输出到显示器上
         四种用法:
         1.printf("字符串\n") ;
         2.printf("输出控制符",输出参数) ;
         3.printf("输出控制符1 输出控制符2",输出参数1,输出参数2) ;
             输出控制符和输出参数的个数必须一一对应。
         4.printf("输出控制符 非输出控制符",输出参数) ;
             输出控制符包含如下:
                 %d   ——     int
                 %ld   ——     long int
                 %c   ——      char
                 %f   ——      float
                 %lf   ——     double
                  %x   ——     int
                  %o   ——     同上
                  %s   ——     字符串
             非输出控制符以它本身,原样输出。
 /*
         为什么需要输出控制符?
             1. 01组成的代码可以表示数据也可以表示指令。
             2. 如果01组成的代码是数据的话,同样地,
                01代码组合以不同的输出格式输出就会有不同输出结果。
                因此需要有不同的输出控制符。
 */
         printf中%x的相关用法:          
             #include<stdio.h>
             int main(void)
             {
                 //printf("Hello!\n") ;
                 int i = 10 ;
                 printf("%d\n",i) ;  //d是十进制
                 printf("%x\n",x) ;  //输出结果是:2f
                 printf("%X\n",x) ;  //输出结果是: 2F
                 printf("%#X\n",x) ; //输出结果是:0X2F 推荐使用
                 printf("%#x\n",x) ; //输出结果是:0X2F
                 return 0 ;
             }
 
     scanf() —— 通过键盘将数据输入到变量中
         两种用法:
             用法1: scanf("输入控制符",输入参数) ;
             功能:  将从键盘输入的字符转化为输入控制符所规定格式
                     的数据,然后存入以输入参数的值为地址的变量。
 
             #include<stdio.h>
             int main(void)
             {
                 int i ;
                 scanf("%d",&i) ; //&i表示取地址符,表示i的地址
                 printf("i = %d\n",i) ;
             }
 
             用法2: scanf("非输入控制符 输入控制符",输入参数) ;
             功能:将从键盘输入的字符转化为输入控制符所规定格式
                  的数据,然后存入以输入参数的值为地址的变量中。
                  非输入控制符必须原样输入。
             #include<stdio.h>
             int main(void)
             {
                 int i ;
                 scanf("m%d",&i) ; //m123为正确输入 123非法输入
                 printf("i = %d\n",i) ;
 
                 return 0 ;
             }
             用法3:一次给多个变量键盘赋值
             #include<stdio.h>
             int main(void)
             {
                 int i,j,k ;
                 printf("请输入三个值,中间以逗号分隔:\n") ;
                 scanf("%d %d %d".&i,&j,&k) ;
                 printf("i = %d,j = %d,k = %d\n",i,j,k) ;

                 return 0 ;
             }
             如何使用scanf()编写出高质量代码
             1. 使用scanf之前最好先使用printf()作为输入的提示信息。
             2. scanf中尽量不要使用非输入控制符,尤其是不要用\n 。
             3. 应该编写代码对用户的非法输入做适当的处理
                 while ((ch = getchar()) != '\n') 
                     continue ;
             
18.如何编写出更有保存价值和更具有学习价值的程序
/*-----------------------------------
     时间:2018-12-28 00:31:42
     功能:()
     目的:()
         测试%x,%X,%#x,%#X的用法
     程序代码段:*/
         #include<stdio.h>
        int main(void)
         { 
             return 0 ;
         }
 /*
     在Vc++6.0中的输出结果是:
     ----------------------
     2f
     2F
     0X2F
     0X2F
 -----------------------
     总结:
 ---------------------------------------
 */ /*
 19.如何看懂一个程序 如何掌握一个程序
 判断一个数字是否是素数
 判断一个数字是否是回文数
 编程实现求一个十进制数字的二进制形式
 把一个数字的每位是奇数的数字取出来组合形成的新数字
 求一个数字倒过来的数字

 【如何掌握一个程序】
 1. 尝试自己去编程解决它
     但要意识到大部分人都是无法自己解决的,这时不要气馁,也不要放弃。
     如果十五分钟内还想不出来,此时建议直接看答案。
 2. 如果解决不了,就看答案
     关键是把答案看懂,这个要花很大的精力,也是我们学习的重点。
     看懂一个程序要分三步:流程、每个语句的功能、试数
 3. 看懂之后尝试自己去修改程序,并且知道修改之后,程序的输出结果。
     不建议看懂程序之后就立即自己敲程序
 4. 照着答案去敲
 5. 调试错误
 6. 不看答案,自己独立把答案敲出来
 7. 如果程序实在无法彻底理解,就把它背会,没有无法理解的程序。    
 
 算法: 解题的方法和步骤
 看懂一个程序,分三步:
     1. 流程
     2. 每个语句功能
     3. 试数 调试
 看流程 —> 看功能语句  —> 改代码  —> 调试
*/
     【试数】
     1. 把自己当成计算机,按照流程流程执行
     2. 不要遗漏省略某一步
     3. 注意格式清楚,逻辑清晰

 //试数详细步骤举例
 {
  #include<stdio.h>
     int main(void)
     {
         int i ;
         float sum ;
 
         for (i=1; i<=100; ++i)
         {
             sum = sum + 1/i ; //error
             sum = sum + 1 / (float)(i)  //ture
             //sum = sum + (float)(1/i) ;是错的
             //更简单的写法是 sum = sum + 1.0/i ;
             }
             printf("sum = %d\n",sum) ;
 
             return 0 ;
         }
 ------------------
//试数
1-> i = 1 1<=100 成立
     sum = 0+1/1.0=1  ++i i = 2
2-> i = 2 2<=100 成立
     sum = 1+1/2.0   ++i i = 3 
3-> i = 3 3<=100 成立
     sum = 1+1/2.0+1/3.0 ++i i = 4
4-> i = 4 4<=100 成立
     sum = 1+1/2.0+1/3.0+1/4.0 ++i i = 5
}
 
posted @ 2019-01-03 18:44  Xu_Lin  阅读(441)  评论(0编辑  收藏  举报