文栏 - 信息技术 - C语言相关 - 浏览文章 - C语言笔试易错考点
C语言笔试易错考点
发布时间: 2007/7/5 20:29:55 作者: 素素 出处: 本站发布
 
本文由素还真原创,转载请注明作者。
 
作者按:虽然了解以下的知识对于你的编程能力基本不会有什么提高,但我们希望体现的是研究一门学问时的细心和专注。作为程序设计的入门语言C,如果你在学习时能很留意这些细节的知识点,那么可以预测你在将来漫长的计算机学习过程中也会很顺利的。
 
 
1. 关于条件表达式。形如:逻辑表达式? 表达式1 : 表达式2
逻辑表达式的值若为非零(真),则条件表达式的值等于表达式1,若逻辑表达值的值为零(假),则条件表达式的值等于表达式2的值。特别要注意的是条件表达式的结合方向是从右向左结合的。
例:与 y=(x>0?1:x<0?-1:0);的功能相同的if语句是:
    if(x>0) y=1;
    else if(x<0)y=-1;
         else y=0;
解:y=(x>0?1:x<0?-1:0)与y=(x>0?1:(x<0?-1:0))等价。
 
2. 关于赋值表达式,将赋值号"="右侧表达式的值赋给赋值号左边的变量。赋值表达式的值为执行赋值后被赋值的变量的值。形如a=b ,b会被转换为符合a的类型,如果不能转换,要么报警告,要么报错。赋值表达式也是从右向左结合的。
例:下列选项中,不正确的赋值语句是__C__
A) ++t                 B) n1=(n2=(n3=0))
C)k=1=j             D) a=b=1
解:C选项里先执行的是右结合的1=j显然错误,注意B选项是以赋值表达式赋值,是正确的,其整个表达式最终的值是0。
 
3. 关于逗号表达式,顺序求(表达式1,表达式2……表达式n)的值,则整个表达式的类型和值都为表达式n的值。
例:设有以下定义:
main()
{
    int x=10,y=3,z;
    printf("%d\n",z=(x%y,x/y));
}
输出结果是__3__
 
4. 关于实型表达式,只要表达式中有一个运算量是实型(float或double),运算过程中所有的运算量都要转换为double型,表达式的结果也为实型。其余类似,即往宽的地方转换。如果两个整形值相除,其结果被截尾取整,如果该操作数是负数,则截断的方向并无规定。
例:若已定义X和Y为double型,则表达式:x=1,y=x+3/2的值是__C__
A) 1                          B) 2
C) 2.0                       D)2.5
解:
'/'的优先级较高,所以先算3/2,这是两个整形相除,结果是1,而不是1.5。然后算x+1,因为x是double型,所以整形的运算量1要转换为double型,最终结果为double型。
 
5. 形如a+=x的表达式的等价于a=a+x
例:设int a=12,则执行完语句a+=a-=a*a后,a的值是__-264___
解:赋值表达式的结合顺序是从右向左结合的。
先执行 a-=a*a ,即 a=a-a*a,在这一步时 a=12-12*12,即a=-132
再执行 a+= , 即 a=a+a,在这一步时 a=-132+(-132),所以a=-264
 
6. 常用字符ASCII码:'0'——48, '9'——57, 'A'——65, 'a'——97, '\0'或'\000'——0(代表空操作字符,同时也是字符串的结束标记),小写字母比大写字母的ASCII码大,两者相差32
例:若有以下定义和语句:
    char c1='b',c2='e';
printf("%d,%c\n",c2-c1,c2-'a'+'A');
则输出结果是___B___
A) 2,M      B) 3,E
C) 2,e       D) 输出结果不确定
 
7. a++就是将a的值先用作表达式的值,然后a的值再加1,++a是先将a的值加1,然后再将a的值作为表达式的值。
例1:main()
{
    int a=10;
    int i;
    i=a++ + ++a + a++ + ++a;
printf("i=%d,a=%d\n",i,a);
}
问i=多少,a=多少?
解:这题的答案是不确定的,a=14,但i根据编译器的不同或者等于45,或者等于48。
 
例2:
两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是__7 和5__
main()
{
    int x;
    scanf("%d",&x);
    if(x++>5)
        printf("%d",x);
    else
        printf("%d\n",x--);
}
 
8. 各类运算符的优先级别:详细请看谭老的《C程序设计(第二版)》的P375页。
初等运算符(括号加结构体运算符)>
单目运算符(注意逻辑非运算符! 它是除初等运算符外具有最高优先级别的)>
算术运算符(先乘除模,后加减,再移位)>
关系运算符>
逻辑运算符(&& ,|| ,不包括 ! )>
条件运算符(唯一一个三目运算符,即 ? : )>
赋值运算符>
逗号运算符>(即顺序求值运算符)
例:以下十个运算符+ ! << != , ?: && = || %中优先级别最高和最低的分别是____!____和____,____。
 
9. static的作用。
l         一是其声明的局部变量为静态局部变量,静态局部变量的值在程序整个运行期间不释放,即下次调用该函数时其值仍保留;其如果在编译时赋初值的,只赋值一次;不赋初值的,编译器自动赋值为0(数字型)或空字符(字符型);虽然静态局部变量在函数调用结束后仍存放,但外部的程序仍然不能引用。
l         二是其声明的外部变量为静态外部变量,只能用于本文件,即使其他文件用了extern仍不能引用。
 
10. 十进制(一般的数字序列),八进制(以0开头的数字序列,字符用'\ddd'赋值),十六进制(以0x开头的数字序列,字符用'\xhh'赋值)。另外1.5e-2表示1.5*10-2或者0.015
例:设有以下语句:
    char c;
c='\x1C';
则C的二进制的值是__C__
A) 00011011   B) 00010100
C) 00011100   D) 00011000
解:
c='\x1C';是指以十六进制的形式给字符c赋值,其相当于c='28';所以转换为二进制即11100。
 
11. 定义结构体与typedef的代码:
struct people        // people是结构体名
{
    char name[10];             // 成员列表
    int age;
    float height;
    double weight;
};                                       // 分号千万不能漏
 
typedef struct people SP;             // 用typedef方式定义新的类型名SP,方便些
 
1/2页次 第1页 第2页 下一页 最后一页
所属分类: 信息技术 - C语言相关   所属专题: 原创
共有 13582 人次浏览

icon icon
素素2007/7/6 23:13:18 认为:
其实这个是专门写给07届的师弟师妹的。
评论作者:
电子邮件:
评论内容:
投票评价:
验 证 码:
图片包含4个随机字符,点击刷新
请输入上面图片中的随机字符