C语言易错的选择题

1.若有定义:int a,b.c;以下选项中的赋值语句正确的是(A)

A)a=(b=c)+1;

B(a=b)=c=1:

C)a=(b==c)=1;

D)a+b=c;

解析:赋值运算结合性为由右向左结合,赋值运算符左值为变量,右值为变量或常量,且左右两边数据类型相同才能实现赋值。A选项中,将c赋值给b,然后将b加1赋值给a,正确的赋值语句,A选项正确。B选项中,将1赋值给c,赋值运算(a=b)=c中左值为表达式,不是变量不能被赋值,B选项错误。C选项中赋值运算(b==c)=1左值为逻辑表达式,不是变量不能被赋值,C选项错误。D选项左值(a+b)为表达式,不是变量不能被赋值,D选项错误。

2.以下选项中,合法的C语言实数是(B)

A)3.1e0.4
B).2e0
C)E13
D)7.12E

解析:实型常量:用带小数点的数字表示,其值有两种表达形式,分别为十进制小数形式和指数形式。十进制小数形式由数字和小数组成,必须有小数点,且小数点的位置不受限制指数形式由十进制数加阶码标志“e"或”E”以及阶码(只能为整数,可以带符号)组成。2e0为指数形式实数,B选项正确。3.1e0.4,阶数不是整数,A选项错误。E13阶码标志前缺少十进制数,C选项错误。7.12E缺少阶码,D选项错误。

3.有如下程序
#include <stdio.h>
main{

intx=0x13;

if(x=0x18)printf("T);

printf("F");

printf("n);

}

程序运行后的输出结果是(A)
A)TF
B)T
C)F
D)TFT

【解析】x=0x18为赋值表达式,十六进制数0x18非0,即x非0,条件成立输出T,之后再输出F与回车符。程序运行后的输出结果是TF,A选项正确。

4.有一下程序段

FILE*fp;

if((fp=fopen("test.txt","w))==NULL)
{

printf (不能打开文件!);

exit(0);

}
else printf(“成功打开文件!”);

若指定文件test.txt不存在,且无其他异常,则以下叙述错误的是(A)

A.输出“不能打开文件

B.输出”成功打开文件!

C.系统将按指定文件名新建文件

D.系统将为写操作建立文本文件

解析 :fopen函数以一定方式打开指定文件,返回一个指向文件的文件指针,如果不能实现打开指定文件的操作,则返回一个空指针NULL。如果指定文牛不存在则创建一个文件名为指定文件名的新文件,然后打开它。在指定文件有错误或者指定文件不存在却不能创建新文件的情况下,打开文件操作错误,返回指针。本题程序中,文件test.txt不存在,但无其他异常,表示可以建立新文件,命名为test.tst,C选项叙述正确,并以只写方式打开它,D选项叙述正确,返回指文件的指针,条件不成立,输出“成功打开文件!”,B选项叙述正确,A选项叙述错误。

5.有以下程序
#inchude<stdio.h>
#define N 2
#define M N+1
#define MUN(M+1)*M/2
main(){

printf("%dn",MUN);

程序运行后的输出结果是(A)

A)8  B)9  C)5 D)6

解析:【我错误的解法】将M=N+1=3带入(M+1)*M/2=(3+1)*3/2=6

【正确解法】(M+1)*M/2换成(N+1+1)*N+1/2,将N=2代入得到MUN=8,程序的运行结果是8,A选项正确。

6.有以下程序
#include <stdio.h>
struct link{
int data;

struct link*next;

}

main(){

struct link*h,a,b;

h=&a,a.data=10;a.next=&b;b.data=20;

}

程序运行时不能输出10.20的语句是(A)

A) printf("%d,%d \n",h->data,a. next. data);

B) printf("%d.%d n",a data,(*a next). data);

C) printf("%d,%d n",h->data,(*a. next). data):

D) printf("%d,%d n",a. data,a. next->data);

解析:可用以下3种形式来引用结构体变量中的成员:结构体变量名.成员名;指针变量名->成员名;(*指针变量名).成员名。主函数定义了两个结构体变量a,b其成员data分别为10和20,且a成员指针指向b。A选项中a.next为指针,其引用格式为a.next->data与(*a.next).data,A选项错误。B选项a.data=10,(*a.next).data=20,正确输出10.20;C选项h->data=10,(*a.next).data=20,能正确输出10,20;D选项a.data=10,a.next->data=20,能正确输出10,20。

7.若有说明语句:char c='\72';则变量c中存放的是(B)

A)2个字符  B)1个字符  C)3个字符    D)说明语句不合法

解析:用一对单引号括起来的单个字符为字符常量,以"\"开头的转义字符也是字符常量。"\"后可以为某些单个字符也可以为八进制或十六进制数字,故c中存放的是一个字符。B选项正确。

发布了196 篇原创文章 · 获赞 581 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/wyf2017/article/details/105156775