计算二级C语言易错知识点
指针是用来存放地址的变量,用(类型名 *指针变量名)的形式定义。赋值时应将某个变量地址即&x 赋给指针变量
设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp) 的返回值为 A) 0
B) '\0'
C) 非0值
D) NULL
【解析】本题考查文件的定位,feof函数的用法是从输入流读取数据,如果到达文件末尾(遇文件结束符),eof函数值为非零值,否则为0,所以选项C正确。
有以下程序#include main(){ int a=5,b=1,t; t=(a<<2)|b; printf("%d\n",t);}程序运行后的输出结果是 A) 1
B) 11
C) 6
D) 21
【解析】本题考查位运算,以及按位或操作,将a左移一位相当于是将a乘以了4,所以a<<2等于20,二进制表示与b按位或得即21,所以选项D正确。
有以下程序 #include #define N 5 #define M N+1 #define f(x) (x*M) main() { int i1,i2; i1=f(2) ; i2=f(1+1) ; printf("%d %d\n",i1,i2); }程序的运行结果是
A) 12 7
B) 12 12
C) 11 11
D) 11 7
【解析】本题考查宏定义的用法,宏定义只是做个简单的替换,所以本题中执行f(2)=(2*N+1)=11,执行f(1+1)=(1+1*N+1)=7。选项D正确。
有以下程序#include #include struct A{ int a; char b[10]; double c;};void f(struct A t);main(){ struct A a={1001,"ZhangDa",1098.0}; f(a); printf("%d,%s,%6.1f\n", a.a,a.b,a.c);}void f(struct A t){ t.a=1002; strcpy(t.b,"ChangRong"); t.c=1202.0;}程序运行后的输出结果是
A) 1002, ZhangDa,1202.0
B) 1002,ChangRong,1202.0
C) 1001, ChangRong,1098.0
D) 1001,ZhangDa,1098.0
【解析】本题考查结构体的相关操作以及传值、传址的区别,该题中调用f函数后,会生成参数a的一个副本,而不会改变a的值,所以a值维持原值,选项D正确。
假定已建立以下链表结构,且指针p和q已指向如图所示的结点:则以下选项中可将q所指结点从链表中删除并释放该结点的语句组是
A) p->next=q->next;free(q);
B) p=q->next;free(q);
C) p=q;free(q);
D) (*p).next=(*q).next;free(p);
【解析】本题考查删除链表中的节点操作,其方法是将要删除节点的上个节点的下个节点指向要删除节点的下个节点,然后释放该要删除节点,所以选项A正确。
以下结构体类型说明和变量定义中正确的是 A) struct REC;{ int n;char c;};REC t1,t2;
B) typedef struct{ int n;char c;} REC;REC t1,t2;
C) typedef struct REC;{ int n=0; char c='A';} t1,t2;
D) struct{ int n;char c;} REC;REC t1,t2;
【解析】本题考查结构体的相关知识,选项A中struct REC后面不能有分号,C选项中typedef struct REC的后面也不能有分号,选项D中REC已经是结构体变量,不能当做结构体类型来使用。
下列函数的功能是void fun(char *a,char *b){ while((*b=*a)!='\0') { a++;b++;} }
A) 将a所指字符串赋给b所指空间
B) 使指针b指向a所指字符串
C) 将a所指字符串和b所指字符串进行比较
D) 检查a