fun(s);
printf(\}
3. 函数strcmpstr()的功能是对两个字符串进行比较,从左到右判断并返回相同字符的个数,如“abc”和“ebc”,相同字符个数为0(注意:若第一个都不相等,则以后就无需判断),“deg”和“defgh”,相同字符个数为2,请填空。
int strcmpstr(char *s,char *t) { int i=0;
while(*s&&*t&&*s== (1) ) { (2) ;
s++; t++; }
return i; }
五、程序改错题
1.下面程序的功能是将指定数组中的最大数和最小数进行位置互换。如将下面8个数:5,9,1,4,2,8,0,6变成5,0,1,4,2,8,9,6。程序中,最大数与最小数的互换操作通过函数jh()来实现。
#include
{ int t,max,min,end,q; end=n; max=min=0;
for(q=1;q /********found*******/ { if(a[q]>a[max]) max=q; if(a[q] /*******found*********/ t=max;max=min;min=t; } main() { int i; static int a[8]={5,9,1,4,2,8,0,6}; printf(\ for (i=0;i<8;i++) printf(\ printf(\ jh(a,8); printf(\ for (i=0;i<8;i++) printf(\ printf(\} 2.以下程序中,fun函数的功能是把数组中所有元素都向前移动一个位置,最前一个元 31 素移到最后面(假设数组长度为10,整数类型)。 #include /********found*******/ x=b[1]; for(i=0;i /*******found*********/ b[i+1]=b[i]; b[n-1] =x; } main() { int a[10],i; for (i=0;i<10;i++) scanf(\for (i=0;i<10;i++) printf(\ fun(a,10); printf(\ for (i=0;i<10;i++) printf(\} 第8章 结构体、共用体和枚举类型 一、选择题 1.在访问一个结构体元素前,必须( )。 A.定义结构体类型 B.定义结构体变量 C.定义结构体指针 D.a和b 2.给出语句xxx.yyy.zzz=5;下面( )是正确的。 A.结构体zzz嵌套在结构体yyy中 B.结构体yyy嵌套在结构体xxx中 C.结构体xxx嵌套在结构体yyy中 D.结构体xxx嵌套在结构体zzz中 3.如果temp是结构体变量weather的成员,而且已经执行了语句addweath =&weather;那么( )能代表temp。 A.weather*temp B.(*weather).temp C.addweath.temp D.addweath->temp 4.共用体是由( )的成员组成。 A.必须有相同类型 B.必须包含有指针成员 C.允许在内存占有不同大小的空间 D.必须在内存中占有相同大小的空间 5.定义结构体类型时,下列叙述正确的是( )。 A.系统会按成员大小分配每个空间 B.系统会按最大成员大小分配空间 C.系统不会分配空间 D.以上说法均不正确 6.若有定义 union {long i; 32 char m[3]; } r; 请问执行r.i=0x12345678;后r.m[0]= ( )。 A.0x12 B.0x34 C.0x56 D.0x78 7.若有定义 struct s1 {int x; }; struct s2 {int x; float y; struct s1 *p2; } r,*p1=&r; 下面正确的是( )。 A.*p1.p2.x=3 B.p1.p2.x=3 C.p1->(*p2).x D.p1->x=3; 8.已知结构体类型变量x的初始化值为{\,合适的结构体定义是( )。 A.struct s {int no; int x,y,z;}; B.struct s {char no[2]; int x,y,z;}; C.struct s {int no; float x,y,z;}; D.struct s {char no[2]; float x,y,z;}; 9.若程序中有定义 struct abc {int x; char y; }; abc s1,s2; 则会发生的情况是( )。 A.编译时会有错误 B.链接时会有错误 C.运行时会有错误 D.程序没有错误 10.关于结构体类型的成员类型,下列说法正确的是( )。 A.成员类型必须是基本数据类型 B.每个成员类型必须为同一种 C.成员不可以定义为自身类型的指针 D.以上说法均不正确 11.若有定义 union s {int w,x,y,z; char c[6]; }; 请问执行sizeof(union s)=( )? A.2 B.6 C.8 D.14 12.若有定义 typedef struct { int x; } A[10]; 33 A a; 下面正确的是( )。 A.a.x=30; B.a[0].x=30; C.a.A[0].x=30; D.A[0].x=20; 13.若有定义 struct s { int x; char y[6]; } s1; 请问正确的赋值是( )。 A.s1.y=\ B.s1->y=\C.strcpy(s1.y, \); D.s1.strcpy(y, \); 14.以下枚举类型名的定义中正确的是( )。 A.emum a={one,two,three}; B.enum a={one=1,two,three}; C.enum a={one=1;two;three}; D.enum a={one;two;three;}; 15.若有结构体变量定义如下: struct student {int num; char name[20]; char sex; }; struct student stu; struct student *p; p=&stu; 则下面关于结构体成员引用不正确的是( )。 A.stu.num B.p->num C.(*p).num D.*p.num 二、填空题 1.结构体类型是一种自定义的组合类型,其每个元素称为 。 2.定义结构体类型的变量必须先 ,并且在类型名前加保留字。 3.使用结构体中成员变量必须先写上结构体变量名,中间以 分隔。 4.结构体指针是结构体变量的内存地址,保存该指针的变量称为 。 5.链表是以结构体类型表示链中元素,以 表示链的一种线性数据结构。 6.动态链表是通过动态分配函数分配堆空间建立的,使用完后需要 。 7.共用体类型以union保留字开始,其每个成员分配的空间为 方式。 8.位域类型以 开始,其每个成员定义后要指出分配的位数。 9.结构体类型的定义需要以保留字开始,其保留字为 。 10.定义结构体类型的成员允许嵌套,但不允许递归定义,即 。 11.结构体变量可以作为函数的参数和返回值类型,以 方式传递参数。 12.结构体数组是以 为基类型的数组,下标运算可以访问每个结构体元素。 13.链表的第一元由称为链头的指针指向,最后元则指向 。 14.链表与数组相比,比较适合的操作包括 和 。 15.枚举类型以enum开始,它是一种简单类型,其变量取值于后面的 列表。 16.枚举类型可以像整数一样比较大小和加减运算,其第一个列表元素的值默认 34 为 。 三、程序分析题 1.以下程序运行后,y和z的值是多少。 #include {unsigned int x; struct {unsigned char y; unsigned char z; } a2; } a1; main() {a1.x=0x5678; printf(\} 四、程序改错题 1.下列定义无法正确使用,请指出定义中的错误并改正。 struct husband {char name[10]; int age; struct wife spouse; } x; struct wife {char name[10]; int age; struct husband spouse; } y; 第9章 文件 一、选择题 1.下列有关C语言文件的叙述,正确的是( )。 A.文件由ASCII码字符系列组成,C语言只能读/写文本文件 B.文件由二进制数据序列组成,C语言只能读/写二进制文件 C.文件由记录序列组成,可按数据的存储形式分为二进制文件和文本文件 D.文件由数据流形式组成,按数据的存储形式分为二进制文件和文本文件2.下列有关C语言中文件的叙述,错误的是( )。 A.C语言中的文本文件以ASCII码形式存储数据 B.C语言中对二进制位的访问速度比文本文件快 C.C语言中随机读/写方式不适用于文本文件 D.C语言中随机读/写方式不适用于二进制文件 3.C语言中标准输入文件是指( )。 A.键盘 B.显示器 C.打印机 D.硬盘 4.C语言中用于关闭文件的库函数是( )。 35