二级C语言重点难点.docx
- 文档编号:25556699
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:27
- 大小:21.41KB
二级C语言重点难点.docx
《二级C语言重点难点.docx》由会员分享,可在线阅读,更多相关《二级C语言重点难点.docx(27页珍藏版)》请在冰豆网上搜索。
二级C语言重点难点
1.若定义如下结构,则能打印出字母M的语句是()。
structperson{
charname[9];
intage;
};
structpersonclass[10]={"Wujun",20,
"Liudan",23,
"Maling",21,
"zhangming",22};
A.printf("%c\n",class[3].name);
B.printf("%c\n",class[2].name[0]);
C.printf("%c\n",class[2].name[1]);
D.printf("%c\n",class[3].name[1]);
2.以下程序段的运行结果是()。
union
{intn;
charstr[2];
}t;
t.n=80;
t.str[0]='a';
t.str[1]=0;
printf("%d\n",t.n);
A.80
B.a
C.0
D.97
3.一个结构体变量占用的内存大小是()。
A.占内存容量最大的成员所需容量
B.各成员所需内存容量之和
C.第一个成员所需内存容量
D.最后一个成员所需内存容量
4.以下程序段的运行结果是()。
union
{intx;
floaty;
charc;
}m,n;
m.x=5;
m.y=7.5;
m.c='A';
n.x=8;
printf("%d\n",m.x);
A.5
B.7.5
C.65
D.8
5.若有定义:
structstudent
{intnum;
charname[8];
charsex;
floatscore;
}stu1;
则变量stu1所占用的内存字节数是()。
A.15
B.16
C.8
D.19
6.定义结构体类型变量teach1,不正确的是()。
A.structteacher
{intnum;
intage;
};
structteacherteach1;
B.structteacher
{intnum;
intage;
}teach1;
C.struct
{intnum;
intage;
}teach1;
D.struct
{intnum;
intage;
}teacher;
structteacherteach1;
7.若有定义:
structstuent
{intnum;
charsex;
intage;
}stu1;
下列叙述不正确的是()。
A.student是结构体类型名
B.structstudent是结构体类型名
C.stu1是用户定义的结构体类型变量名
D.num,sex,age都是结构体变量stu1的成员
8.下面程序的运行结果是()。
#include
uniondata
{inti;
charc;
doubled;
}a[2];
voidmain()
{printf("%d\n",sizeof(a));
}
A.16
B.8
C.4
D.2
9.下面程序的运行结果是()。
#include
uniondata
{inti;
charc;
};
struct
{chara[2];
inti;
uniondatad;
}p;
voidmain()
{printf("%d\n",sizeof(p));
}
A.5
B.6
C.7
D.8
10.以下C语言共用体类型数据的描述中,正确的是()。
A.共用体变量占的内存大小等于所有成员所占的内存大小之和
B.共用体类型不可以出现在结构体类型定义中
C.在定义共用体变量的同时允许对第一个成员的值进行初始化
D.同一共用体中各成员的首地址不相同
11.设有如下语句:
structstu
{intnum;
intage;
};
structstus[3]={{101,18},{102,21},{103,19}};
structstu*p=s;
则下面表达式的值为102的是()。
A.(p++)->num
B.(*++p).num
C.(*p++).num
D.*(++p)->num
12.若有下面定义,能打印出字母'L'的语句是()。
structclass
{charname[8];
intage;
};
structclasss[12]={"Zheng",16,"Lin",18,"Yang",19,"Guo",20};
A.printf("%c\n",s[1].name[0]);
B.printf("%c\n",s[2].name[0]);
C.printf("%c\n",s[1].name);
D.printf("%c\n",s[2].name);
13.若有下面定义,对结构体变量成员不正确引用的语句是()。
structpup
{charname[20];
intage;
intsex;
}p[3],*q;
q=p;
A.scanf("%s",p[0].name);
B.scanf("%d",q->age);
C.scanf("%d",&(q->sex));
D.scanf("%d",&p[0].age);
14.以下程序的输出结果是()。
main()
{printf("%d\n",fac(5));
}
fac(intn)
{ints;
if(n==1)return1;
elsereturnn*fac(n-1);
}
A.120
B.60
C.6
D.1
15.若有以下定义:
structnode
{intdata;
structnode*next;
};
structnode*p;
已建立如下图所示的链表:
┌──┬──┐┌──┬──┐┌──┬──┐
p→│data│next┼→│data│next┼→...─→│data│NULL│
└──┴──┘└──┴──┘└──┴──┘
指针p指向第一个结点,能输出链表所有结点的数据成员data的循环语句是()。
A.while(p!
=NULL)
{printf("%d,",p->data);
p++;
}
B.while(p)
{printf("%d,",p.data);
p=p->next;
}
C.for(;p!
=NULL;p++)
printf("%d,",p->data);
D.for(;p;p=p->next)
printf("%d,",(*p).data);
16.若有以下定义:
structnode
{intdata;
structnode*next;
}
structnodem,n,k,*head,*p;
已建立如下图所示的链表:
mnk
┌──┬──┐┌──┬──┐┌──┬──┐
head→│data│next┼→│data│NULL│p→│data│next│
└──┴──┘└──┴──┘└──┴──┘
指针head指向变量m,m.next指向变量n,p指向变量k,不能把结点k插到m和n之间形成新链表的程序段是()。
A.m.next=p;p->next=head->next;
B.(*head).next=p;(*p).next=&n;
C.head->next=&k;p->next=head->next;
D.m.next=&k;k.next=&n;
17.若有以下定义:
structnode
{intdata;
structnode*next;
}
structnode*head,*p;
已建立如下图所示的链表:
p
↓
┌──┬──┐┌──┬──┐┌──┬──┐
head→│data│next┼→│data│next┼→...─→│data│NULL│
└──┴──┘└──┴──┘└──┴──┘
能删除指针p所指向结点的程序段是()。
A.p=p->next;head->next=p->next;free(p);
B.free(p);p=p->next;head->next=p->next;
C.head->next=p->next;free(p);
D.free(p);head->next=p->next;
18.若有以下定义:
structnode
{intdata;
structnode*next;
}*p,*q;
已建立如下图所示的链表:
┌──┬──┐┌──┬──┐
...p→│data│next┼→│data│NULL│
└──┴──┘└──┴──┘
┌──┬──┐
q→│data│next│
└──┴──┘
不能将指针q所指结点连到上图所示链表末尾的语句是()。
A.q->next=NULL;p=p->next;p->next=q;
B.p=p->next;p->next=q;q->next=NULL;
C.p=p->next;q->next=p->next;p->next=q;
D.q->next=p->next;p=p->next;p->next=q;
19.若有定义:
structnode
{intdata;
structnode*next;
};
已建立如下图所示的链表:
┌─┬─┐┌─┬─┐┌─┬─┐
head→│1│┼→│3│┼→…→│25│┼→NULL
└─┴─┘└─┴─┘└─┴─┘
指针head指向链表首结点,以下函数的功能是()。
voidfun(structnode*head)
{structnode*p=head;
while(p)
{
printf("%d",(*p).data);
p=(*p).next;
break;
}
}
A.显示并删除单向链表
B.显示单向链表中的第一个结点的数据
C.显示单向链表中的所有数据
D.显示单向链表中除第一个结点外的所有数据
20.若有定义:
structnode
{intdata;
structnode*next;
};
已建立如下图所示的链表:
┌─┬─┐┌─┬─┐┌─┬─┐
head→│2│┼→│4│┼→…→│28│┼→NULL
└─┴─┘└─┴─┘└─┴─┘
指针head指向链表首结点,以下函数的功能是()。
voidfun(structnode*head)
{structnode*p=head;
while
(1)
{p=p->next;
printf("%d",p->data);
if(p)break;
}
}
A.显示单向链表中第一个结点的数据
B.显示单向链表中最后一个结点的数据
C.显示单向链表中的所有数据
D.显示单向链表中除第一个结点外的所有数据
21.若按如下定义,则函数link的功能是()。
其中head指向链表首结点,整个链表结构如下图:
┌──┬─┐┌──┬─┐┌──┬──┐
head→│data│┼→│data│┼→…→│data│NULL│
└──┴─┘└──┴─┘└──┴──┘
structnode
{intdata;
structnode*next;
};
intlink(structnode*head)
{intk=1;
structnode*p=head;
while(p!
=NULL)
{p=p->next;
k++;
}
returnk-1;
}
A.删除链表head中的一个结点
B.插入一个新元素到链表head中
C.统计链表head中结点的个数
D.创建新链表head
22.若按如下定义,函数link的功能是()。
其中head指向链表首结点,整个链表结构如下图:
┌──┬─┐┌──┬─┐┌──┬──┐
head→│data│┼→│data│┼→…→│data│NULL│
└──┴─┘└──┴─┘└──┴──┘
structnode
{intdata;
structnode*next;
};
voidlink(structnode*head)
{structnode*p=head;
while(p!
=NULL)
{if(p->data%2==1)
printf("%d",p->data);
p=p->next;
}
}
A.计算链表head中结点的个数
B.遍历链表head,输出表中值为奇数的元素
C.删除链表head中的所有结点
D.插入一个新元素到链表head中
23.以下程序的输出结果是()。
#include
#include
typedefstructnode
{intdata;
structnode*next;
}Node;
Nodelist[4]={{4,&list[1]},{3,&list[2]},{2,&list[3]},{1,0}};
voidoutput(Node*head)
{Node*p=head;
while(p!
=NULL)
{printf("%d",p->data);
p=p->next;
}
}
voidmain()
{output(list);
}
A.1234
B.4321
C.3214
D.2134
24.若按以下定义:
structnode
{intdata;
structnode*next;
}*head,*p;
并已建立如下图所示的链表结构,指针p和q分别指向图中所示结点:
pq
↓↓
┌──┬──┐┌──┬──┐┌──┬──┐
...→│data│next┼→│data│NULL││data││
└──┴──┘└──┴──┘└──┴──┘
则可以将指针q所指的结点连接到链表末尾的程序段是()。
A.q->next=NULL;p=p->next;p->next=q;
B.q->next=p->next;p=p->next;p->next=q;
C.p=p->next;q->next=p;p->next=q;
D.(*q).next=(*p).next;p=(*p).next;(*p).next=q;
25.若有定义:
structnode
{intdata;
structnode*next;
};
floatlink(structnode*head)
{intm=0,n=0;
structnode*p=head;
while(p!
=NULL)
{m+=p->data;
n++;
p=p->next;
}
if(n>0)
return1.0*m/n;
else
return0
}
调用link函数时head是指向链表首结点的指针,整个链表结构如下图:
┌──┬──┐┌──┬──┐┌──┬──┐
head→│data│next┼→│data│next┼→...─→│data│NULL│
└──┴──┘└──┴──┘└──┴──┘
则函数link()的功能是()。
A.统计链表head中结点的个数
B.遍历链表head,计算表中各结点成员data的平均值
C.遍历链表head,计算表中各结点成员data的总和
D.创建一个新链表head
26.若有以下定义:
structnode
{intdata;
structnode*next;
}*p,*q,*t;
指针p、t和q分别指向图中所示结点:
ptq
↓↓↓
┌──┬──┐┌──┬──┐┌──┬──┐
│data│next┼→│data│next┼→│data│next┼→...
└──┴──┘└──┴──┘└──┴──┘
现要将t和q所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是()
A.t->next=q->next;p->next=q;q->next=t;
B.p->next=q;t->next=q->next;q->next=t;
C.q->next=t;t->next=q->next;p->next=q;
D.t->next=q->next;q->next=t;p->next=q;
九、枚举、自定义类型和位运算
27.以下程序中的循环执行了()次。
#defineN2
#defineMN+1
#defineNUM(M+1)*M/2
main()
{inti,n=0;
for(i=0;i printf("%d\n",n); } A.5 B.6 C.8 D.9 28.错误的枚举类型定义语句是()。 A.enumcar{A,B,C}; B.enumcar{1,2,3}; C.enumcar{X=0,Y=5,Z=9}; D.enumcar{D=3,E,F}; 29.假定已有如下定义: intk; enumcolors{red,green,blue,pink}; inta[3]; ()是对以下语句是否符合语法规则的正确判断。 a[red]=pink;/*语句1*/ red=1;/*语句2*/ k=green+blue;/*语句3*/ A.语句1和语句2正确,语句3错误 B.语句1和语句3正确,语句2错误 C.语句2和语句3正确,语句1错误 D.语句1正确,语句2和语句3错误 30.设有如下定义: typedefint*INTEGER; INTEGERp,*q; 下列叙述正确的是()。 A.程序中可用INTEGER代替int类型名 B.不能用INTEGER来定义变量 C.p是int型变量,q是基类型为int的指针变量 D.p是基类型为int的指针变量 31.在对无符号数的位运算中,操作数左移三位相当于()。 A.操作数除以6 B.操作数乘以6 C.操作数除以8 D.操作数乘以8 32.以下程序段运行后变量k的值为()。 intm=7,n=2,k; k=(m^n)<<1; A.0 B.98 C.20 D.10 33.若有定义: intm=7,n=10,k;则执行语句k=m&n;后k的值为()。 A.2 B.1 C.17 D.15 34.以下程序的输出结果为()。 #include voidmain() {enumWeekday{sun=7,mon=1,tue,wed,thu,fri,sat}; enumWeekdayday=wed; printf("%d\n",day); } A.2 B.3 C.4 D.5 35.若按如下类型说明,则()是错误的叙述。 typedefstruct {intno; char*name; intcj; }S,*p; A.S是一个结构体类型名 B.p是一个结构体类型名 C.p是指向结构体类型S的指针类型名 D.no是结构体类型S的成员 36.下面程序段的运行结果是()。 intp=7,q=4; printf("%d",p&q); A.4 B.5 C.6 D.7 37.若有以下类型说明,则叙述错误的是()。 typedefunion {charname[10]; intage; }ustu,*umy; A.umy是指向共用体类型ustu的指针类型名 B.ustu是一个共用体类型名 C.umy是一个共用体类型名 D.age是共用体类型ustu的成员 38.定义枚举类型的关键字是()。 A.typedef B.include C.enum D.fnum 39.下面程序段的运行结果是()。 main() {inta=5,b=3; printf("%d",a&b); } A.0 B.1 C.2 D.3 十、文件 40.以下程序的功能是()。 #include main() {FILE*fp; longintn; fp=fopen("wj.txt","rb"); fseek(fp,0,SEEK_END); n=ftell(fp); fclose(fp); printf("%ld",n); } A.计算文件wj.txt的起始地址 B.计算文件wj.txt的终止地址 C.计算文件wj.txt的长度 D.将文件指针定位到文件末尾 41.以下程序的功能是()。 #include main() {FILE*fp; longintn; fp=fopen("exam.txt","rb"); fseek(fp,0,SEEK_END); n=ftell(fp); fclose(fp); printf("%ld",n); } A.将文件指针从地址为0处移动到文件末尾 B.计算文件指针的当前地址 C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 语言 重点难点
![提示](https://static.bdocx.com/images/bang_tan.gif)