第一周:函数(一)

1.1 函数定义随堂测验

1、C语言是由( )构成。
    A、主程序和子程序
    B、主函数和子函数
    C、一个主函数和若干功能函数
    D、主函数和子程序

2、以下对C语言函数的有关描述中,正确的是( )。
    A、调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
    B、C函数既可以嵌套定义又可以递归调用
    C、函数必须有返回值,否则不能使用函数
    D、C程序中有调用关系的所有函数必须放在同一个源程序文件中

3、以下说法中正确的是( )。
    A、C语言程序总是从第一个的函数开始执行
    B、在C语言程序中,要调用的函数必须在main()函数中定义
    C、C语言程序总是从main()函数开始执行
    D、C语言程序中的main()函数必须放在程序的开始部分

1.1 函数定义随堂测验

1、C语言程序中,如果变量做函数参数,则当函数调用时( )。
    A、实参和形参各占一个独立的存储单元
    B、实参和形参共用一个存储单元
    C、可以由用户指定是否共用存储单元
    D、计算机系统自动确定是否共用存储单元

2、一个函数返回值的类型是由( )决定的。
    A、return语句中表达式的类型
    B、在调用函数时临时指定
    C、定义函数时指定的函数类型
    D、调用该函数的主调函数的类型

3、在C语言的函数中,下列正确的说法是( )。
    A、必须有形参
    B、形参必须是变量名
    C、可以有也可以没有形参
    D、数组名不能作形参

1.4 函数间参数传递随堂测验

1、若函数的形参为一维数组,则下列说法中正确的是( )。
    A、调用函数时的对应实参必为数组名
    B、形参数组可以不指定大小
    C、形参数组的元素个数必须等于实参数组的元素个数
    D、形参数组的元素个数必须多于实参数组的元素个数

2、若调用一个函数,且此函数中没有return语句,则正确的说法是( )。
    A、该函数没有返回值
    B、该函数返回若干个系统默认值
    C、该函数能返回一个用户所希望的函数值
    D、该函数返回一个不确定的值

3、在函数的说明和定义时若没有指出函数的类型,则( )。
    A、系统自动地认为函数的类型为整型
    B、系统自动地认为函数的类型为字符型
    C、系统自动地认为函数的类型为实型
    D、编译时会出错

4、下面叙述中正确的是( )。
    A、对于用户自己定义的函数,在使用前必须加以说明
    B、说明函数时只需要说明返回类型
    C、函数必须返回一个值
    D、空函数不完成任何操作,所以在程序设计中没有用处

5、C语言允许函数返回值类型缺省定义,此时该函数隐含的返回值类型是( )。
    A、float型
    B、int 型
    C、long 型
    D、double型

第一周编程作业

1、求最大公约数和最小公倍数

2、排序并插入

第二周:函数(二)

2.1 函数递归调用随堂测验

1、在下列结论中,有一个是错误的,它是 ( )
    A、C语言允许函数的递归调用
    B、有些递归程序是不能用非递归算法实现的
    C、C语言不允许在函数定义中再定义函数
    D、递归函数就是函数中可以定义其他函数

2、如果有个递归函数是求 2*4*6*……*(2n) 的积,则递归的公式和条件可以表达为( )
    A、f(n)=2*n*f(n-1) 边界条件 当 n==1 f(n)=2
    B、f(n)=2*f(2*n-1) 边界条件 当 n==0 f(n)=1
    C、f(n)=2*nf(2*n-1) 边界条件 当 n==1 f(n)=1
    D、f(n)=2*f(2*n-1) 边界条件 当 n==0 f(n)=2

2.1 函数递归调用随堂测验

1、一段楼梯有N阶,可以一次上1阶,也可以一次上2阶,用递归函数调用实现,计算多少种走法。则递归公式和边界条件是( )
    A、f[n]=f[n-1]+f[n-2] 边界条件 当n=1 f[1]=0, 当n =2 f[2]=1
    B、f[n]=f[n-1]+f[n-2] 边界条件 当n=1 f[1]=1, 当n =2 f[2]=2
    C、f[n]=f[n-1] 边界条件 当n=1 f[1]=1
    D、f[n]= f[n-2] 边界条件 当n=2 f[2]=1

2、一只小猴子,摘了一堆水果,第一天吃了水果的一半,又多吃了一个;第二天吃了剩下水果的一半,又多吃了一个;依次类推….到第十天,发现只剩下了10个水果,请问这只猴子到底摘了多少个水果? 写成递归函数。
    A、
    B、
    C、
    D、

第二周编程作业

1、最大公约数

2、奇数求和

第三周:函数(三)

3.1 变量存储属性随堂测验

1、在一个C源程序文件中,若要定义一个只允许在该源文件中所有函数使用的变量,则该变量需要使用的存储类别是( )
    A、extern
    B、register
    C、auto
    D、static

2、如果一个变量在整个程序运行期间都存在,但是仅在说明它的函数内是可见的,这个变量的存储类型应该被说明为( )
    A、静态变量
    B、动态变量
    C、外部变量
    D、内部变量

3.1 变量存储属性随堂测验

1、以下程序的输出结果是: int f(int a) { auto int b=0; static int c=3; b++;c++; return a+b+c; } main( ) {int c,a=1; for(c=1;c<3;c++) printf(“%3d ”,f(a));}
    A、5 5
    B、5 6
    C、6 6
    D、6 7

2、以下程序的输出结果是: void fun(int *s) { static int j=0; do s[j]+=s[j+1]; while(++j<2); } main( ) { int k,a[10]={1,2,3,4,5}; for (k=1; k<3; k++) fun(a); for (k=0; k<5; k++) printf(“%d”,a[k] ); }
    A、34756
    B、23445
    C、35745
    D、12345

3.2 编译预处理随堂测验

1、以下程序的输出结果是: #define ADD(x) x+x main( ) { int m=1,n=2,k=3,sum; sum=ADD(m+n)*k; printf(“sum=%d\n”,sum); }
    A、sum=9
    B、sum=10
    C、sum=12
    D、sum=18

2、以下程序的输出结果是: #define N 1 #define M N+2 #define NUM 2*M+1 main( ) { int i; for (i=1; i<=NUM; i++) printf(“%3d ”, i ); }
    A、1 2 3 4 5
    B、1 2 3 4 5 6 7
    C、1 2 3 4 5 6
    D、程序出错

3、已知宏定义 #define N 3 #define Y(n) ((N+1)*n) 执行语句z=2*(N+Y(5+1));后,z的值是( )。
    A、42
    B、48
    C、52
    D、出错

第三周编程作业

1、巧算自然数

2、卖鸭子

3、输出各位数字之和

第四周:指针(一)

4.1 指针的定义、初始化和引用随堂测验

1、若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是 。
    A、p1=&m; p2=&p1;
    B、p1=&m; *p2=*p1
    C、p1=&m; p2=p1;
    D、p1=&m; *p1=*p2;

2、以下叙述中正确的是 。
    A、指针定义后,可以指向同类型的任何变量。
    B、指针定义后,可以指向任何类型变量。
    C、指针定义后,可以用整型数据为指针初始化。
    D、指针定义后,只能指向一个变量。

3、变量的指针,其含义是指该变量的 。
    A、值
    B、地址
    C、名
    D、一个标志

4.2 指针与数组随堂测验

1、如果有定义int a[30], *p=a; 则数组a中下标为i的元素的地址为 。
    A、p+i*2
    B、p+(i-1)*2
    C、p+(i-1)
    D、p+i

2、若有如下定义,则________是对数组元素的正确的引用。 int a[10] , *p=a;
    A、*&a[10]
    B、*&a[0]
    C、*(p-11)
    D、*(a+11)

3、若有定义:int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;则数值不为3的表达式是 。
    A、x[3]
    B、p1=x+3,*p1++
    C、p1=x+2,*(p1++)
    D、p1=x+2,*++p1

4.2 指针与数组随堂测验

1、下面函数的功能是 。 strlen1(char *s ) { char *p=s; while(*p!=‘\0’) p++; return p-s; }
    A、字符串反向
    B、字符串比较
    C、字符串连接
    D、字符串求长度

2、已知int a[ ]={1,3,5,7},y,*p=a;为了使变量y的值为3,下列语句正确的是 。
    A、y=++*p++;
    B、y=++(*p++);
    C、y=(++*p)++;
    D、y=(*++p)++;

3、下面函数的功能是 。 void ( char *s1, char *s2) { while(*s2++=*s1++); }
    A、字符串反向
    B、字符串比较
    C、字符串连接
    D、字符串复制

第四周编程作业

1、对称字符串

2、排序

3、查找数

第五周:指针(二)

5.1 指针与字符串随堂测验

1、运行以下程序时输入HELLO WORLD ( 代表Enter 键),则输出的结果是( ) #include "stdio.h" char fun ( char *c ) { if ( *c < = 'Z' & & *c > = 'A') *c - ='A'-'a'; return *c; } int main( ) { char s[81] , *p=s; gets(s); while(*p) { *p=fun(p); putchar(*p); p++; } putchar ( “ \n “ ); return 0; }
    A、heLLO wORld
    B、hello world
    C、HELLO WORLD
    D、Hello World



2、以下程序输出的结果是( ) #include " stdio.h" #include "string.h" void fun ( char *w, int m ) { char s, *p1 , *p2 ; p1=w; p2=w+m-1; while(p1     A、7654321
    B、1711717
    C、1711771
    D、7177171



3、库函数strcpy用以复制字符串。若有以下定义和语句: char str1[ ]="GREETING",str2[8],*str3,*str4="GREETING"; 则对库函数strcpy的不正确调用是 ( )
    A、strcpy(str2,"HELLO2");
    B、strcpy(str3,"HELLO3");
    C、strcpy(str4,"HELLO4");
    D、都不正确



5.2 多维数组指针随堂测验

1、下面程序的运行结果是( ) int main( ) { int aa[3][3]={{2},{4},{6}},i,*p=&aa[0][0]; for(i=0;i<2;i++) { if(i==0) aa[i][i+1]=*p+1; else ++p; printf("%d",*p); } printf("\n"); return 0; }
    A、23
    B、26
    C、33
    D、36



2、若有定义语句int (*p)[M]; 其中的标识符是( )
    A、M个指向整型变量的指针
    B、指向M个整型变量的函数指针
    C、一个指向具有M个整型元素的一维数组指针
    D、具有M个指针元素的一维指针数组,每个元素都只能指向整型量



3、下面程序的运行结果是( ) int main( ) { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4]=a,i,j,k=0; for(i=0;i<3;i++) for(j=0;j<2;j++) k+=*(*(p+i)+j); printf("%d\n",k); return 0; }
    A、60
    B、68
    C、99
    D、108



第五周编程作业

1、输出指定学生成绩



2、成绩排序



第六周:指针(三)

6.1指针与函数随堂测验

1、以下程序的输出结果是(): #include int funa(int a, int b) { return a+b;} int funb(int a, int b) { return a-b;} int sub (int(*t)(int ,int ), int x, int y) { return (*t)(x,y);} int main( ) { int x,(*p)(int,int); p=&funa; x=sub(p,9,3); x+=sub(&funb,8,3); printf("%d\n",x); }
    A、12
    B、15
    C、17
    D、19



2、若有以下说明和定义,则对fun函数的正确调用语句是( ) int main( ) { int (*a)(int*),*b( ),w[10],c; : : return 0; } int fun(int *c) {...}
    A、a=fun; a(w);
    B、a=fun; (*a)(&c);
    C、b=fun; *b(w);
    D、fun(b);



3、以下程序的输出结果是( ):void fun (int n,int *s) { int f1,f2; if (n==1||n==2) *s=1; else { fun(n-1,&f1); fun(n-2,&f2); *s=f1+f2; } } int main( ) { int x; fun(6,&x); pirntf("%d\n",x); return 0; }
    A、4
    B、6
    C、8
    D、12



6.2指针与指针随堂测验

1、下面程序运行结果( ): int main( ) { char ch[2][5 ] = {"6937","8254"} , *p[2]; int i , j , s = 0 ; for ( i=0 ; i <2 ; i++ ) p[i]=ch[i]; for ( i=0 ; i<2 ; i++ ) for( j=0 ; p[i][j]>'\0' &&p[i][j]<='9';j+=2) s=10*s+p[i][j]-'0'; printf("%d\n",s); return 0; }
    A、6385
    B、69825
    C、63825
    D、693825



2、以下程序的输出结果是( ): int main( ) { char *p[ ]={"PROGRAM","BASIC","C","JAVA"}; int i; for (i=3;i>=0;i--,i--) printf("%c",*p[i]); printf("\n"); return 0; }
    A、JVCBSPO
    B、JAVA
    C、JB
    D、JAVABASIC



3、以下程序运行结果是( ): int main( ) { char *alpha[6]= {"ABCD","EFGH","IJKL","MNOP","QRST","UVWX"}; char **p; int i; p=alpha; for( i=0; i<6; i=i+2 ) printf("%s",*(p+i)); printf("\n"); return 0; }
    A、ACEGIKMNQSUW
    B、AIQ
    C、ABCDIJKLQRST
    D、AEIMQU



第六周编程作业

1、统计字符串出现次数



2、成绩统计



第七周:链表(一)

7.1 结构的概念随堂测验

1、以下定义错误的是( )。
    A、struct c { int x; int y; }s;
    B、struct { int x; int y; }s;
    C、struct c s { int x; int y; };
    D、struct c { int x; int y; }; Struct c s;



2、当定义一个结构体变量时,系统为它分配的内存空间是( )。
    A、结构中一个成员所需的内存容量
    B、结构中第一个成员所需的内存容量
    C、结构中占内存最大的成员所需的内存容量
    D、结构中各成员所需内存容量之和



7.2 结构数组随堂测验

1、定义以下结构体类型 struct c { int x; float y; }a[3] sizeof(a)的结果是 ( )。
    A、4
    B、12
    C、18
    D、6



2、定义以下结构体数组 struct c { int x; int y; }s[2]={1,3,2,7} 语句printf(“%d”,s[0].x*s[1].x)的输出结果为( )。
    A、14
    B、6
    C、2
    D、21



7.3 结构指针随堂测验

1、有以下程序段 struct st { int x; int *y;}*pt; int a[] = {1,2}; int b[] = {3,4}; struct st c[2]={10,a,20,b}; pt=c; 以下选项中表达式为11的是( )。
    A、*pt->y
    B、pt->x
    C、++pt->x
    D、(pt++)->x



2、运行下列程序段,输出结果是()。 struct country { int num; char name[10]; }x[5] = {1,”China”,2,”USA”,3,”France”,4,”England”,5,”Spanish”}; struct country *p; p= x+2; printf(“%d,%c”,p->num,(*p).name[2]);
    A、3,a
    B、4,g
    C、2,U
    D、5,S



7.4 结构与函数随堂测验

1、以下哪种方式进行结构体数据的传递是错误的( )?
    A、通过结构体变量成员的引用
    B、通过结构体变量的引用
    C、通过结构体类型的引用
    D、通过结构体变量的指针



7.5 联合随堂测验

1、以下说法错误的是( )。
    A、联合与结构的引用方法是一样的
    B、联合与结构的定义除了关键字以外都是一样的
    C、联合与结构的初始化方法是一样的
    D、联合与结构的内存占用与成员内存占用间的关系是不一样的



第七周编程作业

1、字母加密对照表



2、学生成绩



第八周:链表(二)

8.1 typedef自定义类型随堂测验

1、设有如下说明 typedef struct DATA { int a; long b;} OLD; 则下列叙述中正确的是( )
    A、以上说明形式非法
    B、OLD是一个结构体类型
    C、OLD是一个结构体变量
    D、DATA是一个结构体变量



2、有如下说明typedef int(*p)[9],p的含义是( )
    A、一个指针
    B、一个数组
    C、一个指向数组的指针
    D、一个指针数组



8.2 枚举类型随堂测验

1、定义以下枚举类型 enum name {zhang = 2,wang = 4,li = 6,chen}; 则枚举量chen的值为( )
    A、0
    B、1
    C、7
    D、8



2、下面程序输出结果是( ) #include main() { enum name{ a, b = 2, c, d = c+10}; printf(“%d %d %d %d”, a,b,c,d);}
    A、1 2 3 4
    B、0 1 2 3
    C、0 2 3 13
    D、编译出错



8.3 链表的概念随堂测验

1、下述哪一条是顺序存储结构的优点?( )
    A、存储密度大
    B、插入运算方便
    C、删除运算方便
    D、可方便地用于各种逻辑结构的存储表示



2、链表不具有的特点是( )
    A、插入、删除不需要移动元素
    B、可随机访问任一元素
    C、不必事先估计存储空间
    D、链表空间可以减小



8.4 链表的基本操作随堂测验

1、在一个以 h 为头的单循环链中,p 指针指向链尾的判断条件是( )
    A、p^.next=NIL
    B、p^.next.^next=h
    C、p^.next=h
    D、p^.data=-1



2、非空的循环单链表head的尾结点p↑满足( )。
    A、p↑.link=NULL
    B、p↑.link=head
    C、p=NULL
    D、p= head;



3、在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:( )。
    A、p->next=s; s->next=p->next;
    B、s->next=p->next; p->next=s;
    C、p->next=s; p->next=s->next;
    D、p->next=s->next; p->next=s;



第八周编程作业

1、字母存储



2、链表合并



第九周 文件

9.1 文件概述随堂测验

1、关于文件理解不正确的为( )
    A、C语言把文件看作是字节的序列,即由一个个字节的数据顺序组成;
    B、每个打开文件都和文件结构体变量相关联,程序通过该变量中访问该文件;
    C、所谓文件一般指存储在外部介质上数据的集合;
    D、系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区;



2、关于二进制文件和文本文件描述正确的为( )
    A、文本文件把每一个字节放成一个ASCII代码的形式,只能存放字符或字符串数据;
    B、二进制文件把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放;
    C、二进制文件可以节省外存空间和转换时间,不能存放字符形式的数据;
    D、一般中间结果数据需要暂时保存在外存上,以后又需要输入内存的,常用文本文件保存;



9.2 文件型指针随堂测验

1、系统的标准输入文件操作的数据流向为
    A、从键盘到内存
    B、从显示器到磁盘文件
    C、从硬盘到内存
    D、从内存到硬盘



2、文件指针指向的概念正确的是
    A、文件数据在硬盘的首地址
    B、文件数据在内存的首地址
    C、文件缓冲区结构的首地址
    D、文件路径名的首地址



9.3 文件的打开与关闭随堂测验

1、若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应是
    A、"ab+"
    B、"wb+"
    C、"rb+"
    D、"ab"



2、利用fopen (fname, mode)函数实现的操作不正确的为
    A、正常返回被打开文件的文件指针, 若执行fopen函数时发生错误则函数的返回NULL;
    B、以缓冲区方式打开一个文件;
    C、若找不到由fname指定的相应文件,则按指定的名字建立一个新文件;
    D、调用操作系统提供的打开或建立新文件功能;



9.4 文件的顺序读写随堂测验

1、函数fgets (char s[], int size, FILE* fp)的说法正确的是
    A、该函数最多可以一次读取size个字符组成的字符串
    B、读取正确则返回字符数组的首地址
    C、读取过程中遇到’\n’结束
    D、读取过程中遇到EOF结束



2、利用fwrite (buffer, sizeof(Student),3, fp)函数描述不正确的
    A、将3个学生的数据块按二进制形式写入文件
    B、将由buffer指定的数据缓冲区内的3* sizeof(Student)个字节的数据写入指定文件
    C、返回实际输出数据块的个数, 若返回0值表示输出结束或发生了错误;
    D、若由fp指定的文件不存在,则返回0值



9.5 文件的随机读写随堂测验

1、若fp为文件指针,且文件已正确打开,i为long型变量,以下程序段的输出结果是。 fseek(fp, 0, 2); i=ftell(fp); printf("i=%ld\n", i);
    A、–1
    B、fp所指文件的长度,以字节为单位
    C、0
    D、2



2、以下操作正确的情况下,指针不能确保指在首地址的是
    A、rewind(fp)
    B、fopen(fname,fp,"r+")
    C、fseek(fp,0,0)
    D、ftell(fp)



9.6 文件检测随堂测验

1、检查由fp指定的文件在读写时是否出错的函数是
    A、feof(fp)
    B、EOF==getc(fp)
    C、clearerr(fp)
    D、ferror(fp)



第九周编程作业

1、解析字符串



2、字符串的输入与反向显示



第十周 总结与练习

10.1 C语言知识总结随堂测验

1、下列不属于C语言中关键字的是( )
    A、long
    B、print
    C、default
    D、typedef



2、若int i=10; 执行下列程序后,变量i的正确结果是( ) switch ( i ) { case 9: i+=1; case 10: i+=1; case 11: i+=1; default : i+=1; }
    A、13
    B、12
    C、11
    D、10



3、以下选项中合法的字符常量是( )
    A、“B”
    B、‘\n’
    C、‘68’
    D、E



4、若int类型数据占2个字节,则unsigned int类型数据的取值范围是 ( )
    A、0~255
    B、0~65535
    C、-32768~32767
    D、-256~255



5、能正确表示逻辑关系:“a≥=10或a≤0”的C语言表达式是( )
    A、a>=10 or a<=0
    B、a>=0|a<=10
    C、a>=10 &&a<=0
    D、a>=10‖a<=0



6、若有以下数组说明,则i=10;a[a[i]]元素数值是( )
    A、10
    B、9
    C、6
    D、5



7、语句while(!y);中的表达式!y等价于( )
    A、y==0
    B、y!=1
    C、y=!0
    D、y==1



8、以下对一维数组a的正确说明是( )
    A、char a(10);
    B、int a[];
    C、int k=5,a[k];
    D、char a[3]={‘a’,’b’,’c’};



9、以下对结构变量stul中成员age的非法引用是( ) struct student { int age; int num; 16 }stu1,*p; p=&stu1;
    A、stu1.age
    B、student.age
    C、p->age
    D、(*p).age



10、对于同类型的指针变量,不可能进行的运算是( )
    A、-
    B、=
    C、+
    D、==



第十周编程作业

1、基本四则运算表达式



2、递归的方法计算含多个运算符的四则运算表达式字符串的值



期末考试

1、以下正确的说法是
    A、定义函数时的类型与说明时的类型可以不同
    B、return语句可以返回多个值
    C、如果函数值的类型与返回值类型不一致,以返回值类型为准
    D、如果指针做函数参数,可以调用函数实现两个数值的交换。



2、若有定义char s1[ ]= “HELLO”, s2[8] = “HELLO1”,s3[80],*s4=s2; 则错误的是
    A、strcpy(“s1”, “HELLO”);
    B、strcat(s2, “hello2”);
    C、strcpy(s3, “hello3”);
    D、strcpy(s4, “hello4”);



3、下列程序运行后的输出结果是( )。 int c=1; main() { static int a=3;int b=4; printf("a=%d,b=%d,c=%d\n",a++,b++,c++); func(); printf("a=%d,b=%d,c=%d\n",a,b,c); func(); } func() { static int a=2;int b=8; a+=2;c+=10;b+=c; printf("a=%d,b=%d,c=%d\n",a,b,c); }
    A、a=3,b=4,c=1 a=4,b=20,c=12 a=4,b=5,c=12 a=6,b=30,c=22
    B、a=4,b=5,c=11 a=4,b=20,c=11 a=4,b=5,c=21 a=6,b=30,c=21
    C、a=4,b=5,c=1 a=4,b=20,c=11 a=4,b=5,c=12 a=7,b=31,c=21
    D、a=3,b=4,c=11 a=4,b=20,c=11 a=4,b=5,c=11 a=5,b=31,c=21



4、若有以下调用语句,则正确的f函数首部是( ) main() { ….. int a; float x[20]; ….. f (x,a); ….. }
    A、void f(int m,float x[])
    B、void f(float a,int x)
    C、void f(float x[],int m)
    D、void f(int x,float a)



5、若有如下宏定义: #define N 5 #define y(n) N*n+1 则执行下列语句:z=4*(N+y(3+2));后的结果是( )。
    A、语句有错误
    B、z值为124
    C、z值为92
    D、z值为125



6、已有变量定义和函数调用语句:int a=10; print_value(&a); 下面函数的正确输出结果是( )。 void print_value(int *x) {   printf(“%dn”,++*x);}
    A、10 
    B、11 
    C、9
    D、12



7、已有变量定义:char s1[80]=”hello”,s2[80]=”world”,s3[80]; 函数调用:strcat(strcpy(s3,s2+1),s1+2);puts(s3);结果是( )。
    A、worldhello
    B、helloworld
    C、orldllo
    D、lloorld



8、若主调用函数类型为double,被调用函数定义中没有进行函数类型说明,而return语句中的表达式类型为float型,则被调函数返回值的类型是( )。
    A、int 型
    B、float 型
    C、double 型
    D、编译出错



9、若有语句int *p , a=4; p=&a; 下面均代表地址的一组选项是( )
    A、a, p, *&a
    B、&*a, &a, *p
    C、*&p, *p, &a
    D、&a, &*p , p



10、设有如下程序段: int i,j,a[3][4],*p[3]={a[0],a[1],a[2]},**q=a;下列表达式中能正确表达数组元素a[i][j]的是 (  )
    A、*(a+i)+j
    B、*q
    C、*p[i]+j
    D、*(a[i]+j)



11、当定义一个结构体变量时,系统为它分配的内存空间是
    A、结构中当前使用成员所需的内存容量
    B、结构中第一个成员所需的内存容量
    C、结构体中占内存容量最大者所需的容量
    D、结构中各成员所需内存容量之和



12、设有如下定义: struct jan { int a; float b; }c2,*p; 若有p=&c2;则对c2中的成员a的正确引用是:
    A、(*p).c2.a
    B、(*p).a
    C、p->c2.a
    D、jan.a



13、若有以下说明和语句,则值为6的表达式是 struct st { int n; struct st *next; }; struct st a[3],*p; a[0].n=5; a[0].next=&a[1]; a[1].n=7; a[1].next=&a[2]; a[2].n=9; a[0].next='\0'; p=&a[0];
    A、p++->n
    B、p->n++
    C、(*p).n++
    D、++p->n



14、以下关于联合类型数据的正确叙述是
    A、定义了联合体变量后,即可引用该变量的任何成员
    B、一个联合变量可以同时存放其所有成员
    C、联合中的各个成员使用共同的存储区
    D、向联合中的一个成员赋值不会改变其他成员的值。



15、已知变量结构定义 struct sl { int a ; double b; }x; 使用alloc函数为变量x分配内存,对alloc函数返回地址进行类型转换的格式是:
    A、(struct sl)
    B、(struct sl *)
    C、(int)
    D、(int *)



16、要打开一个已存在的非空文件“file”用于修改,选择正确的语句是
    A、fp=fopen("file","r");
    B、fp=fopen("file","a+");
    C、fp=fopen("file","w");
    D、fp=fopen("file","r+");



17、文本文件file.txt中的内容是字符串“Today is Monday”,若定义FILE * fp; char str[80];指向如下语句fp=fopen(“file.txt”,”r”); fscanf(fp,”%s”, str); 之后, 数组str中的内容是
    A、Today is Monday
    B、Today
    C、T
    D、Today is



18、C语言中系统的标准输出文件是指
    A、键盘
    B、显示器
    C、内存
    D、硬盘



19、若需要将文件指针在一个打开的文件file.txt移动到文件首,则正确的函数是
    A、ftell
    B、fseek
    C、rewind
    D、feof



20、若文本文件中的内容是 \\\22abcdefg , 调用库函数fgets(s,8,f)后的结果是
    A、从文件f中读处\\\22ab字符串存入指针s所指的内存
    B、从文件f中读取\\\22abcde字符串存入指针s 所指的内存
    C、从文件f中读取\\\22abcdef字符串存入指针s 所指的内存
    D、从文件f中读取\\\22abc字符串存入指针s所指的内存



21、下面函数的功能是统计子串substr在母串str中出现的次数,请填空使程序完整。 int count(char *str, char *substr) { int i,j,k,num=0; for(i=0; 【1】 ;i++) for( 【2 】 ,k=0;substr[k]==str[j];k++,j++) if(substr [ 【3】 ]==’\0’) { num++ ; break ; } return (num); } 【1】应该填写:
    A、str[i+1]
    B、str[i]
    C、i<=strlen(str)
    D、i!=strlen(str)



22、下面函数的功能是统计子串substr在母串str中出现的次数,请填空使程序完整。 int count(char *str, char *substr) { int i,j,k,num=0; for(i=0; 【1】 ;i++) for( 【2 】 ,k=0;substr[k]==str[j];k++,j++) if(substr [ 【3】 ]==’\0’) { num++ ; break ; } return (num); } 【2 】应该填写:
    A、i=j
    B、i=0
    C、j=i
    D、j=0



23、下面函数的功能是统计子串substr在母串str中出现的次数,请填空使程序完整。 int count(char *str, char *substr) { int i,j,k,num=0; for(i=0; 【1】 ;i++) for( 【2 】 ,k=0;substr[k]==str[j];k++,j++) if(substr [ 【3】 ]==’\0’) { num++ ; break ; } return (num); } 【3】应该填写:
    A、k+1
    B、k
    C、k-1
    D、i+j



24、以下程序是用选择法对10个整数按升序排序。 【4】 main() { int i,j,k,t,a[N]; for(i=0;i<=N-1;i++) scanf("%d",&a[i]); for(i=0;i     A、#define N = 10
    B、#define N 10
    C、#int N = 10
    D、#typedef N 10



25、以下程序是用选择法对10个整数按升序排序。 【4】 main() { int i,j,k,t,a[N]; for(i=0;i<=N-1;i++) scanf("%d",&a[i]); for(i=0;i     A、j<=N
    B、j < N
    C、j
    D、j<= k



26、以下程序是用选择法对10个整数按升序排序。 【4】 main() { int i,j,k,t,a[N]; for(i=0;i<=N-1;i++) scanf("%d",&a[i]); for(i=0;i     A、k!=i
    B、k!=j
    C、k==i
    D、k==j



27、从文件中读出文本数据,将其中的小写字母转换成大写字母后在屏幕上输出。 #include "stdio.h" main() { FILE *fp; char c; fp=fopen("text",_____【7】___________); while(【8】) { if(c>='a'&&c<='z') c-=32; putchar(c); } printf("\n"); fclose(fp); } 【7】应该填写:
    A、“W”
    B、“W+”
    C、“r”
    D、”rb”



28、从文件中读出文本数据,将其中的小写字母转换成大写字母后在屏幕上输出。 #include "stdio.h" main() { FILE *fp; char c; fp=fopen("text",_____【7】___________); while(【8】) { if(c>='a'&&c<='z') c-=32; putchar(c); } printf("\n"); fclose(fp); } 【8】应该填写:
    A、c=fgetc(fp)
    B、(c=fgetc(fp))!=’\0’
    C、(c=fgetc(fp))!=EOF
    D、(c=fgetc(fp))!=0



29、下面函数的功能是用递归法将一个整数存放到一个字符数组中,存放时按逆序存放,如483存放成“384”,请填空使程序完整。 void convert(char *a, int n) { int i; if((i=n/10)!=0) convert( 【9】 ,i); else *(a+1)=0; *a= 【10】 ; 【9】应该填写:
    A、*a+1
    B、*a
    C、a
    D、a +1



30、下面函数的功能是用递归法将一个整数存放到一个字符数组中,存放时按逆序存放,如483存放成“384”,请填空使程序完整。 void convert(char *a, int n) { int i; if((i=n/10)!=0) convert( 【9】 ,i); else *(a+1)=0; *a= 【10】 ; 【10】 应该填写:
    A、n/10+’0’
    B、n%10
    C、n%10+‘0’
    D、n/10



***.?