重读《C语言程序设计》(王曙燕/主编),自我整理(上)

     首先来说明下我是菜鸟,因为我学数据结构与算法是要用c学的,感觉c语言不是很熟练,所以决定把这这本书再看一遍,本来认为晚上自习可以看五章,结果大大出乎我意料,里面一些小知识点,还有一些基础的,或者是知道概念但是不熟悉的,三个小时自习两章没看完,我决定把那些知识点整理下。

float average(float x,float y,float z)    


         因为average后跟着一对括号,说明average是一个函数名(这个我知道,但概念不是很清楚),average前有一个类型关键字float,说明该函数的返回值类型为单精度实型(以前对返回值这个概念总是模模糊糊,特别是调用函数的时候),average后面圆括号中是“形参表“。
        针对上面函数再说下,函数由函数说明和函数体两部分组成。函数说明部分包括对函数名,函数类型,形式参数等的定义和说明;函数体包括局部变量说明和执行语句组两部分,由一系列语句和注释组成。
        c语言只可有一个main函数,主函数可在程序中任何位置,但程序执行时总从主函数开始,并且在主函数内结束。//读程序也应从主函数开始。
        c语言本身没有输入/输出语句,其功能需通过调用标准函数来实现。使用系统提供的标准库函数或其他文件提供的现成函数时,必须使用”文件包含"(除printf和scanf语句,因为c语言默认包含,但建议每次用到时,都写上头文件)。
         tip,程序中适当地使用空行,分隔程序中语句块,增强程序的可读性。

eg:
{

	int a,b;

}


       凡是以"#"开头的代码行都要由预处理程序处理。

          数据修饰符,用来扩展基本类型的意义,以便更准确的适应各种情况的需要:long(长型),short(短型),signed(有符号)“可省略”,unsigned(无符号)
         c语言中整数可用十,八,十六进制三种形式表示。①十进制,由0~9组成,但不可以以0开头;②八进制,以0为前缀其后由0~7组成,eg:0456表示八进制456;③十六进制,以0x或0X(0为数字)为开头,其后由0~9和a~f(A~F)组成,eg:-0x7A,即-(7A)=(7*16^1+A*16^o).其中a~f表示10到15,以前在“微型计算机原理里面学过”,呵呵。所以,c程序是根据前缀来区分各种进制的。
        整型常量的后缀,在16位字长机器上,基本整型长度为16位,如果使用超过了范围,就必须用长整型数来表示(长整型用后缀“L”或“l”表示)。十进制长整型常数123L(十进制为123),358000L(十进制为358000)。长整数123L和长整数123无区别,但123L为长整型量,c语言编译系统将给它4个字符存储空间,而123,因为是基本整型,只占2个字节的存储空间,因此在运算和输出格式予以注意。
        实数(浮点数),123.4e^3=123.4*10^3。注意,15e2.3,e3,.e3为错误的,因为e或E前必须有数字。
       (下面这个知识点很重要,华为有类似的面试题)字符串常量,字符串中每个字符一起ASCII码值的二进制形式存放在内存中,并且系统自动在该字符串末尾添加一个“字符结束标志”('\0',它不引起任何控制动作,也是一个不可显示字符),以便系统据此判断字符串是否结束。 eg:system,在实际内存中是占七个字节




       所以“a”占两个字节,‘a’占一个自己,所以:

char c;
c="a";

是错的,字符变量c只能容纳一个字符。
        c语言中没有专门的字符串变。如果想要把一个字符串保存起来,必须使用字符数组,以后会讲到。c#好像直接用string就行。
       -5%3=-2;   5%-3=2;
       i++,++i;前缀:先对变量变化,再参加其他计算,后缀:先及其他计算,再对变量变化
      eg:i=3;n=i++; →→→ i=4,n=4
      -5%3=-2;    5%-3=2;
      i=3;n=i++;
     printf..... →→i=4,n=4(前缀:先对变量变化,再参加其他计算   后缀:先其他计算,在对变量变化)
     类型转换:在最赋值表达式求解过程中,如果赋值运算符两边的数据类型不一致,赋值是要进行类型变换。其过程由c编译系统自动实现,原则以"="左边的类型为准。eg:
     
int i=5;float a=242.15,b;
double c=123456789.456123;
char d="B";
unsigned char e;
printf("i=%d,a=%f,c=%f,d=%c,d=%d\n",i,a,c,d,d)
b=i;//整型赋给实型
i=a;//实型赋给整型
a=c;//双精度赋给实型
d=i;
e=d;//整型赋给字符变量
printf("i=%d,a=%f,b=%f,d=%c,d=%d,e=%c,e=%d\n",i,a,b,d,d,e,e);
   运行结果为 i=5    a=242.149994   c=123456789.456123   d=B   d=66 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
   
                      i=242    a=123456789.000000  b=5.000000  d=>=   d=-4    e=>=    e=242
       ①double型变量赋给float型变量时,先截取double型实数的前7位有效数字,然后再赋值给float型变量,对于此时float变量输出第8位以后的数字就是不可信数据了。②int型数据赋给char型变量时,由于int型数据用2个字节表示,而char型数据用1个字节表示,所以截取int数据的低8位,然后赋值给char型变量,所以char类型只能接受小于256的int变量。  
       逗号运算符和逗号表达式
       a=3*5,a*4;  //变量的值为15,逗号表达式的值为60
       a=1,b=2,c=3;   //逗号表达式为3
      总之,逗号表达式的结果为最后的,但变量的值为等号 后的。
  
     错误之处还请大神指出!!



    
        


你可能感兴趣的:(C)