C语言试题及答案13_第1页
C语言试题及答案13_第2页
C语言试题及答案13_第3页
C语言试题及答案13_第4页
C语言试题及答案13_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1页、问答题1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用:局部变量可以与全局变量同名, 在函数内引用这个变量时, 会用到同名的局 部变量,而不会用到全局变量。 对于有些编译器而言, 在同一个函数内可以定义 多个同名的局部变量, 比如在两个循环体内都定义一个同名的局部变量, 而那个 局部变量的作用域就在那个循环体内。2、如何引用一个已经定义过的全局变量?答:extern可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方 式来引用某个在头文件中声明的全局变理, 假定你将那个变写错了, 那么在编译 期间会报错,如果你用extern方式引用时,

2、假定你犯了同样的错误,那么在编 译期间不会报错,而在连接期间报错。3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量, 前提是其中只能有一个C文件 中对此变量赋初值,此时连接不会出错4、语句for(;1;)有什么问题?它是什么意思?答:和while(1)相同。5、do.while和while .do有什么区别?答:前一个循环一遍再判断,后一个判断以后再循环6、请写出下列代码的输出内容#include main()inta,b,c,d;a=10; b=a+; c=+a; d=

3、10*a+;printf( b,c,d:%d,%d,%d ,b,c,d)return0;答:10,12,1207、static全局变量与普通的全局变量有什么区别?static局部变量和普通局 部变量有什么区别?static函数与普通函数有什么区别?全局变量(外部变量)的说明之前再冠以static就构成了静态的全20第2页局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态 存储方式。 这两者在存储方式上并无不同。 这两者的区别虽在于非静态 全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时, 非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制 了其作用域,

4、 即只在定义该变量的源文件内有效, 在同一源程序 的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内, 只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的 存储方式即改变了它的生存期。 把全局变量改变为静态变量后是改变了它的作用 域, 限制了它的使用范围。static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用 的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定 义。对于可在当前源文件以外使用的函数, 应该在一个头文件中说明, 要使用这 些函数的源文件要包含这个

5、头文件static全局变量与普通的全局变量有什么区别:static全局变量只初使化 一次,防止在其他文件单元中被引用;static局部变量和普通局部变量有什么区别:static局部变量只被初始化 一次,下一次依据上一次结果值;static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数 在每个被调用中维持一份拷贝char c; DATE;struct data int cat;DATEcow;doubledog; too;DATEmax;则语句printf( %d ,sizeof(structdate)+sizeof(max);的执行结果是:_52_答:DATE是一个uni

6、on,变量公用空间.里面最大的变量类型是int5,占用20个字节.所以它的大小是20data是一个struct,每个变量分开占用空间.依次为当然.在某些16位编辑器下,是int2 + DATE108、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区)中,动态申请数据存在于( 堆)中。9、设有以下说明和定义:typedef unionlongi;int k5;int4+ DATE20 +double832.所以结果是20 + 3252.int可能是2字节,那么结果+double820第3页10、队列和栈有什么区别? 队列先进先出,栈后进先出第4页11、写出下列代码的输出内容#include

7、 int inc(int a)return(+a);int multi(int*a,int*b,int*c)return(*c=*a*b);typedefint(FUNC1)(inttypedefint(FUNC2)in);(int*,int*,int*);void show(FUNC2 fun,intINCp=&inc;int temp =p(arg1); fun(&temp,&arg1,arg2); printf( %dn ,*arg2);arg1,int*arg2)main()int a;show(multi,10,&a); return 0;答:110二

8、、 C 语言部分 一、选择题(每小题 2 分,共 10 分)1 若定义:int a23 0, 2, 4, 6, 8, 10;以下描述正确的有(A、 * ( a+ 1)为元素 6 的地址这里 a+1=a1的地址;*(a+1)的值是 6,故 A 正确。B、*( a1+1 )的值为 2为 8, 故 B 不正确C、* ( a+1 ) +2 的值为 8这里 a+1 是一个指针,指向的是a1.*(a+1)为 a1,a1指向的是加 2 得 8,故 C 正确;D、 a0与 a相同 因二者都是指针,指针的地址都是指向数组中的第一个元素的地址,故E、a12的值为 10A, C, D, E )a10.*(a+1)

9、为 6,D 正确。第5页第6页它是指第二行的第三个元素,为10,正确2、对函数的正确使用方法描述(A, C, D )。A、用数组做函数参数时,必须在主调函数和被调函数中分别定义数组B、实参数组元素和形参数组元素类型可以不一致C、 形参数组长度可以不指定D、形参数组长度可以大于实参数组长度E、数组名做参数属于值传递3、 对静态变量的正确描述(A, B, D, E )A、 静态局部变量在静态存储区内分配单元()B、静态外部变量可以赋初值,也可以不赋初值C、静态外部变量的作用与外部变量相同D、静态局部变量在函数调用结束时,仍保存其值,不会随着消失。E、静态局部变量只赋一次初值4、 下列描述正确的是(

10、A , C)。A、 由 main 函数及其参数 argc 和* argv可以实现命令行方式B、使用 fclose 关闭文件时,先释放文件指针,再写缓冲区数据到文件中/先写缓冲区数据到文件中 ,再释放文件指针C、 字符数组并不要求它的最后一个字符是0 /是的,以字符指针指向的字符串才要求,因为只有这样,才能知道字符串的长度,而在字 符数组中,不用 0,一样可以知道到哪里是字符数组的结尾。D、A 和“A”都是字符串常量E、 若 char*S= “ta017bc”;则指针变量 S 指向的字符串所占的字节数是75、 在缓冲文件系统中用于读写的函数有(A, B, D )A、 putchar () B、

11、fread() C、 rewind () D、 purw()E、 fseek()二、程序阅读,并给出运行结果( 1 ) main() unsigned a,b,xint n;a=0 x763输出结果:n=6;b=avv(12-n);x=(a n-2)5;/+,-,的优先级比 高。printf( “nx=%x” ,b,x);在用 2 个字节表示整数的系统中结果为d8c0d8b6在用 4 个字节表示整数的系统中 结果为1d8c01d8b6 故以上两种结果都正确。(2) #include stdin.hstruct m int x;int *y;*p;int a 4= 12, 33, -40, 10

12、0;struct m b 4= 10,&a2,9,&a3,8,&a0,7,&a1第7页main()p=b;输出结果 :printf (“dn”,+p- x) ; /- 的优先级高于 +,因此等于是 +(p-x),为 11printf (“ %dn” ,(+p)- x) ; /p 后移一个元素,其 x 值为 9;printf (“ %dn” ,+(*p- y) ;/-的优先级高于*,此时 p 已指向 b1,故*(p-y)为 a3为 100自加后为 101;故输出结果为:119101三、程序设计设在文件 a.txt 和文件 b.txt 中分别存有两个字符串,设计一个

13、程序将这两个字符串按依序交 叉的方式合并为一个字符串(例如aaaaa 与bbb”的合并结果为abababaa,而bbb”与aaaaa的合作结果为bababaa,)并将结果存入文件a.txt 中。【答案】写程序时,可以分别读取a.txt 文件和 b.txt 文件,注意(1),无论 a 文件先读完还是 b 文件先读完,程序都能作出适应性的判断。注意(2)把 a 和 b 合并的结果,写到一个临时文件c 中,最后把 c 的文件覆盖到 a 文件中,达到题意的要求。#include main()FILE *fp,*fq,*fr;char ch;if(fp=fopen(a.txt,r+)=NULL) pri

14、ntf(cannot open file a.txt);exit(0); if(fq=fopen(b.txt,r)=NULL) printf(cannot open file b.txt);exit(0);fr=fopen(c.txt,w+); while(!feof(fp) ch=fgetc(fp);fputc(ch,fr);if(!feof(fq)ch=fgetc(fq);fputc(ch,fr);while(!feof(fq)ch=fgetc(fq);fputc(ch,fr);rewind(fp); rewind(fr); while(!feof(fr)ch=fgetc(fr);fput

15、c(ch,fp); fclose(fp); fclose(fq); fclose(fr);一、单项选择题1、 t 表示什么?A 字符串常数 B 标识符 C 变量 D 字符常量 (D) 注:后面选择题答案均为D2、对宏定义不正确的描述是哪一个?A 在进行宏定义时,可以引用已经定义的宏名,可以层层置换 /可以引用已经定义了的宏名,可以层层置换B 宏名的有效范围包括本文件的任何位置 /宏名的有效范围定义命令之后到本源文件结束,可以用#define 终止宏定义的作用域第8页C 宠定义不是语句,不必在行末加分号 /是预处理定义语句D 对程序中双引号括起来的字符串,即使与宏名相同,也不进行置换3、若定义

16、static char s20= ” computer”;则执行语句 x = strlen(s);之后,x 的值为多少?12098 19/strlen 函数计算 char*型字符串的长度的时候,并不包含末尾的0;4、以下哪一个表达式取值是正确的?65 结果为 66&5 结果为 76|5 结果为 765 结果为 05、如定义enum weekday one, two, thr, fou, fiv ;enum weekday working ;以下哪个是不正确的枚举变量的使用? worki ng = thr; worki ng =2;3worki ng = (enum weekday)2;

17、4working = (enum weekday) (5-3);/不能对其赋值6、下列说法中正确的是哪一个?1sizeof (char)是结果为整型的表达式2sizeof (char)是一个不合法的表示形式3sizeof (char)是一种函数调用4sizeof (char)是结果为实型的表达式二、阅读程序,并回答问题1、下列程序的输出是什么?# include void main ()char * aplha=“ ABC ”,“ DEF ”,“GHI”,“ JKL”,“ MNO ”,“PQR”;char *p;int i;p = aplha;for (i = 0; i4; i+)printf

18、 (“ %s” , pi);printf ( n”“);/输出结果ABCDEFGHIJKL 刚好是字符串数组里面的前四个元素的内容连接起来2、下列程序为什么无法将用户输入的三个整数按从小到大排序输出?应该如何修改?(6分)# include void swap (int x, int y)int t = x;x = y;y = t;void main ()第9页int a, b, c;scanf (“ %d, %d, %d”, a, b, c);if (ab) swap (a, b);if (ac) swap (a, c);if (bc) swap (b, c);printf (“ %d, %

19、d, %d ” , a, b, c);/函数 swap 采用值传递,虽然将形参x 和 y 交换了,但是并不影响到实参。将值传递改成指针传递就可以了。C 函数参数采用值传递方式,虽然swap 函数将形式参数 x 和 y 的值进行了调换,但是影响不到相应的实在参数。所以在主函数中,通过调用sawp 函数调换 a 和 b (或 a 或 c,或 b 和c)的值是根本达不到目的的。修改:( 1 )( 2 分)void swap (int *x, int*y)int t = *x;*x = *y;*y = t;( 2)( 2 分)主函数if(ab) swap(a,b); if(ac) swap(a,c);

20、 if(bc) swap(b, c);、 假设系统为基本整型量分配2 个字节,为字符型量分配 1 个字节。下列程序完成的功能 是什么?( 3 分)# include unionint n;char ch 2; u;void main ()int m;scanf (“ %d”, m);.n = m;printf ( “n%u, %u ”, u.ch0, u.ch1); /该程序的功能,取用户输入的整数值的高字节和低字节,并按照任意整数的低字节和高字 节分别输出。三、程序设计题假设一个文本文件中保存着 100 个整数,请将这 100 个整数按从小到大的顺序写到另一个文 本文件中去,并且在新文件中每

21、 10 个整数占一行。源文件名和目标文件名通过命令行参数 获取。分数分配:变量定义2 分命令行参数处理 1 分 文件打开 1 分文件读2 分排序 3 分 文件写2 分文件关闭 1 分# include void main ( int argc, char *argv )FILE *fin, *fout;第10页Int a 100, i, j, t;if ( argc!=3 )printf ( “ You forgot to enter a filenanm”e);return;fin = fopen (argv1, “ r ” );fout = fopen (argv2,“ w” );for

22、(i = 0; i100; i+)fscanf (fin, “%d” , ai);for (i = 0; i99; i+)for (i = 0; iaj+1) t = aj; aj = aj+1; aj+1=t;for (i = 0; i a=value;r- pNext =NULL;pHead=r;else if (valuev=p-a) r=(struct linkage *) malloc (sizeof (struct linkage);r- a=value;r- pNext =p;pHead=r;else q=p pNext;while (q)第12页if (valuev=q-a)b

23、reak;else p=q;q=p- pNext;r=(struct linkage *)malloc (sizeof (struct linkage);r- a=value;r- pNext=q;p- pNext=r;return pHead;四、程序设计 。单位 HTML 文件由标签,标题和正文主体等部分组成。如下所示:HTML HEAD TITLE HTML 标题部分 /HEAD 这里是 HTML 文件的主体部分。 换新行。/HTML 符号, 等。其它部分是标题和主体。请按以下说明和要求完成程序,将简单的 HTML 文件转换为 TXT 文件:1.序将简单 HTML 文件的有标签和换行符(

24、n)(去掉。标题部分结束(遇到 标 签)后加上一个换行符(n)。每一个标签换成一个换行符(n )。其余部分原样保留。 如上面的简单 HTML 文件处理为(/表示换行):HTML 标题部分/这里是 HTML 文件的主体部分。/换新行。2.简单 HTML 文件的标签内没有嵌套情况,即在 这间不会再出现 。3.标签内的内容大小写无关。如, 等价。4.示签的 和”与标签内容间无空格。即不会出现或等情况。5标题和正文中不会出现 字符,它们通过转义字符实现,这时尤需考虑。6程序需要处理命令行参数。第一个参数指要处理的HTML 文件名,第二个参数指定处理后要存放的文件名。这两个文件都是文本文件。7程序必须进

25、行必要的出错处理,如无法打开文件等。8程序不需要包含头文件。1、 main ()函数形参处理: 2 分。2、变量定义 1 分。3、打开关闭文件 2 分;4、读源文件 1 分;5、能从标签中找出内容BR/TITLE换为n部分 2 分;6、 区分开标签和其它部分,并按要求写入目标文件2 分;7、整体结构正确 2 分;第13页void main (int argc, char *argv) char C,tag7;int status ,len ;FILE*fin,*fout;if (argc!=3) printf( 参数个数不对! )exit (1)if (fin=fopen (argv 1,r)=NULL)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论