13.1 C程序设计基础
考点1 C程序结构特点
(1)一个C源程序有且仅有一个main函数,程序执行总是从main函数开始;
(2)函数体必须用花括号({})括起来;
(3)每个执行语句都必须以分号(;)结尾,预处理命令、函数头和花括号(})之后不加分号;
(4)区分大小写。
题型剖析:该知识常在改错题中考查,如句末缺少分号、括号不匹配、运算符或关键字书写错误等。做题前先运行程序,即很快找到语法错误。
考点2 常量与变量
1.整型数据
(1)整型常量:即整常数,包括十进制整数(如123、-456、0)、八进制整数(以0开头,如0123,即(123)8)、十六进制整数(以0x开头,如0x123,即(123)16)。
(2)整型变量:可分为有符号基本整型([signed] int)和无符号基本整型(unsigned [int])、有符号短整型([signed] short [int])、无符号短整型(unsigned short[int])、有符号长整型([signed] long[int])和无符号长整型(unsigned long[int])。
2.实型数据
(1)实型常量:也称浮点型,有两种表示形式,十进制小数形式(如.123、123.、123.0)和指数形式(如123.456e3表示123. 456 ×103)。
(2)实型变量:可分为单精度型(float)、双精度型(double)和长双精度型(longdouble)。
3.字符型数据
(1)字符常量:用单引号括起来的一个字符(如,‘a’、‘ +’、‘\0’)。
(2)字符变量:用来存储单个字符。
(3)字符串常量:由一对双引号括起来的字符序列(如“hello”、“123456”)。字符串常量占用的内存字节数等于字符串中字符数加1,最后一个字节存放字符‘\0’(ASCII码为0),即字符串结束标识。
4.变量的初始化
定义的变量在使用之前,需要赋给一个确定的初值,否则会出现冗余数据直接参与运算的情况。初始化有两种方法:(1)先定义然后初始化(如:inta;a=5;),(2)在定义时直接初始化(如:inta=5;)。在遇到循环时,循环变量需要先定义,然后才能在循环结构中应用。
题型剖析:字符串和字符串结束标识(‘\0’)是常考查的内容,在填空题和改错题中都时有出现,并且编程题中经常要对字符串进行操作,因此在编程题中出现的概率也很高。
常见的考查形式有两种。
(1)判断是否到达字符串的结尾,即判断当前字符是否为‘\0’。
例如,要遍历字符串s,使用整型变量n存放下标,那么判断当前字符是否为‘\0’,可表示为:while(s[n]!=‘\0’){…}。
注:也可以使用指针实现,若指针p指向某一个字符,则为:while(*p!=‘\0’){…}。
(2)对字符串操作结束后,添加‘\0’。
例如,下标n为字符串中最后一个字符的下标,要添加结束标识,可以表示为:s[n++] =‘\0’。
注:也可以用指针实现,若指针p指向最后一个字符,则为:*(p++)=‘\0’。
考点3 运算符及表达式
(1)算术运算符:圆括号()、求正 +、求负 -、乘 *、除/、求余 %、加 +、减 -。
(2)复合赋值运算符:+=、-=、*=、/=和%=。
(3)自加自减运算符:i++表示i参加运算后再加1,++i表示i加1后参加运算,i--和--i同理。
(4)逻辑运算符:&& 逻辑与
|| 逻辑或
! 逻辑非
优先级的大小是:!>&&>||
应用逻辑运算符可以组成复杂的逻辑关系表达式。判断一个量是否为真的依据是其值是否为0,为0,则为假,否则为真。
题型剖析:这一部分知识常在编程题中考查,表达式的应用是否正确直接决定了一个算法是否有效。填空题和改错中也经常要求根据上下文的算法来补全特定位置的一个表达式。
(1)应该强调的是部分运算符的优先级问题,如涉及逻辑关系表达式的语句,如果想表达两个或关系的与,应该严格地应用括号(exp1||exp2)&&(exp3||exp4),而exp1||exp2&&exp3||exp4表示的是3个表达式的多元或关系。
(2)整数除法的问题,一个整数去除另外一个整数,那么得到的结果是一个整数,这个整数是结果的整数部分,小数部分会被忽略掉,而且不是使用四舍五入的规则。比如3/2结果是1.5,但是如果返回一个整数的时候,结果是1。这类情况通常在比较长的综合计算表达式中会被忽视,造成整体运算的错误,所以在特定的时候,需要注意整数除法。相应的解决方法是设置数据类型为浮点数。
(3)除法运算符“/”和求余运算符“%”的区别。典型题目是求得一个多位整数各个位上的数值。
例如,要得到三位数456的个位、十位和百位数值。
个位数:456%10=6
十位数:456/10%10=45%10=5
百位数:456/100=4
(4)自加、自减运算符的特点及区别。
f(i++):表示i在参与f运算之后自加1。
f(++i):表示i在参与f运算之前自加1。
(5)赋值号“=”与等号“==”的区别,容易在语句中由于疏忽而混淆。例如,if(a=5)是错误的,因为在条件语句中不会出现赋值号。
考点4 强制类型转换
利用强制类型转换运算符,可以将一个表达式转换成所需类型,其一般形式如下:
(类型名)(表达式)
例如,(char)(x+y)表示将(x+y)的值强制转换为字符型。
题型剖析:该知识点常在填空题和改错题中出现,典型题目是求两个整数相除的值。
例如,inti;doublef;,需要将整数i的倒数赋值给f。这里直接使用f=1/i是错误的,因为我们知道两个整数相除的结果也是一个整数,f中存放的是1与i相除结果的整数部分。解决的方法有两种:
●强制类型转换,f=(double)1/i;
●在赋值运算中进行类型转换,将运算符左侧的整数变为浮点型数,f=1.0/i。