C语言程序设计-现代方法(笔记2)

第七章 基本类型

1、整数类型(7.1)

  有符号整数如果为正数或零,那么最左边的位(符号位)为0;如果是负数,则符号位为1.

  默认情况下,C语言中的整型变量都是有符号的。

  十进制常量包含0-9的数字,但不能以零开头;八进制常量只包含0-7,必须要以零开头;十六进制常量包含0-9数字和a-f字母,并且总以0x开头。

  为了强制编译器把常量作为长整数来处理,需在后面加字母L(或l),例如:15L,0x7fffL.

  为了指明是无符号常量,可以在常量后面加字母U(或u),例如:15U,0x7fffU.

  有符号整数溢出,程序行为是未定义的;无符号整数溢出,结果是有定义的:一般是0。

2、浮点类型(7.2)

  C语言提供三种浮点类型:float(单精度浮点数),double(双精度浮点数),long double(扩展精度浮点数)。float和double对于大部分程序都够用。

  float精度为6个数字,double精度为15个数字。浮点常量必须包含小数点或指数,例如:57.0,5.7e+1。

3、字符类型(7.3)

  在C中,字符和整数之间的关联非常强,字符常量事实上是int类型而不是char类型。

  有符号(signed)字符取值范围:-128-127;无符号(unsigned)字符取值范围:0-255。

  可移植性技巧:不要假设char类型默认为signed或unsigned。如果有区别,用signed char 或unsigned char代替char.。

  转义序列共有两种:字符转义序列和数字转义序列。字符转义序列,例如:\a,\n,\t等。数字转义序列,例如:\x1b,\033等。

  字符处理函数:小写字符转换成大写字母,ch = toupper(ch),需要包含#include <ctype.h>

  用scanf和printf函数也能读/写字符:

do {
  scanf("%c",&ch);
} while (ch != '\n')

  getchar()返回的是一个int类型值,而不是char类型值。getchar()的惯用法。第一个用于检测是不是换行符,第二个用于检测空格。

while (getchar() != '\n')
    ;

while ((ch = getchar()) == ' ')
    ;

4、类型转换(7.4)

  当算术表达式或逻辑表达式中操作数的类型不相同时;当赋值运算符右侧表达式的类型和左侧变量的类型不匹配时;当函数调用中的实参类型与其对应的形参类型不匹配时;当return语句中表达式的类型和函数返回值的类型不匹配时。

  任一操作数的类型是浮点类型,需要将float提升为double;两个操作数类型都不是浮点类型,需要将int提升为unsigned int或long int。

  C语言会把赋值运算右边的表达式转换成左边变量的类型。

  强制类型转换:(float)dividend / divisior;将变量dividend强制转换为float,编译器也会将divisior转换为float类型。

5、类型定义(7.5)

  使用typedef对类型进行定义,例如,typedef int Bool;

  类型定义更加易于理解,类型定义可以更好的编写可移植的程序。

  可以移植性的技巧:为了更大可移植性,可以考虑使用typedef定义新的整数类型名。

6、sizeof运算符(7.6)

  sizeof (类型名),返回的值是一个无符号整数,代表存储类型名的值所需的字节数。

  sizeof也可以用于常量,变量和表达式,比如sizeof(i+j)

第八章 数组  

1、一维数组(8.1)

  数组是含有多个数据值的数据结构,并且每个数据值具有相同的数据类型。

  数组常见操作 

for (i = 0; i < N; i++)
    a[i] = 0;                    //初始化数组

for (i = 0; i < N; i++)
    scanf("%d", &a[i]);        //将数据读入数组

for (i = 0; i < N; i++)
    sum += a[i];                 //对数组中元素求和

  数组初始化:int a[10] ={0};初始化完全为空是非法的,所以要在大括号内放一个0,其他值会默认初始化为0。

  C99中指定初始化:int a[15] = { [2] = 29, [9] = 7, [14] =48}

  可以用sizeof计算数组元素的大小,比如数组是a[10],用数组的大小除以数组元素的大小:sizeof(a) / sizeof(a[0])

  数组赋值除了用下面的方法,也可以用memcpy函数进行赋值,需要将头文件string.h包含,一般memcpy比较高效。

for (i = 0; i < N; i++)
  a[i] = b[i];

2、多维数组(8.2)

  C语言中的数组是按照行主序存储的,也就是从第0行开始,接着第1行,以此类推。

  多维数组不建议省略掉内层的花括号。

  常量数组(声明前加const)好处:首先,表明程序不会改变数组(方便别人阅读程序),然后,有助于编译器发现错误(告诉编译器不会修改)。

  变长数组优点:程序员不必再构造数组时给定一个长度,程序可以在执行时计算所需元素个数。

  变长数组限制:没有静态存储限制,没有初始化。

第九章 函数

猜你喜欢

转载自www.cnblogs.com/chengabc/p/12076814.html