您好,欢迎来到好走旅游网。
搜索
您的当前位置:首页计算机基础与程序设计复习参考题及答案(完整)

计算机基础与程序设计复习参考题及答案(完整)

来源:好走旅游网


助学指导书

高等教育自学考试 《计算机基础与程序设计》

复习参考题

郑州大学土木工程学院

2010年11月 第一章计算机及程序设计基础知识 一、单项选择题

1.一个完整的计算机系统应该包括( D ) A.主机和外设

B.主机和操作系统 C.硬件系统和系统软件 D.硬件系统和软件系统 2.在计算机中,指令通常是由( A )

A.操作码、操作数组成 B.源操作数、目标操作数组成

C.反码、补码组成

D.直接寻址、目的寻址组成

3.下列设备中属于输出设备的是( D )

A.扫描仪 B.键盘C.鼠标

D.显示器

4.整数-2在机器内存中的表示是( B )

A. B. C.

D.

5.如果文件存储的是数据在内存中存放的字节形式,则该文件是( C A.ASCII文件

B.文本文件C.二进制文件

D.设备文件

6.下列软件中属于应用软件的是(C)

A.Ms-Dos

B.Windows2000 D.C语言处理程序

C.WPS2000字处理软件

7.在计算机硬件设备中能用作输入设备是(B)

A.显示器B.键盘C.绘图仪D.打印机

8.在Dos系统中可以用文件扩展名表示文件类型,其中批处理文件的扩展名是(C)

A..OBJB..CC..BATD..BAK

9.具有只读功能的内存储器是指( A )

A.ROM B.RAM A.23字节

C.硬盘

D.CD-ROM

10.存储量1MB等于( C )

B.210字节C.220字节 D.230字节

11.下面数据中最小数是( A ) A.(0.1100)2 B.(0.)8C.(0.8125)10 D.(0.D)16

12.CPU处理数据和指令的基本单位是字(Word),一个字的字长是(D)

A.8bitsB.16bits C.32bitsD.与CPU数据总线有关的bit位数 13.与十进制1100等值的十六进制数是(B) A.44AB.44CC.AD.C 14.与二进制数1011.01等值的十进制数是( C ) 15.Unix是( D )

A.单用户、单任务的操作系统 C.多用户、单任务的操作系统

B.单用户、多任务的操作系统 D.多用户、多任务的操作系统 16.一个二进制数位也称为一个( D )

A.word

B.byteC.KB

D.bit

17.(B)是用助记符来表示指令的符号语言。

A.机器语言?????B.汇编语言C.高级语言?????D.语言处理程序 18.-123的原码是(??A?)

C.01111011?????D.0000101

19.若当前路径为C盘TC子目录,仅将A盘根目录下的文件名第3个字符为P,扩展名为C的所有文件复制到C盘TC子目录下,一定成功的命令是(C)。

A.COPYA:\\*P*.CB.COPYA:\\??P*.CC: C.COPYA:\\??P*.C D.COPY??P*.CC:\\TC 20.按冯诺依曼的设计思想,计算机采用的数制是(A)

A.二进制B.八进制C.十进制D.十六进制

21.计算机能够自动按照人们的意图进行工作的最基本思想是(B)

A.采用逻辑部件B.存储程序和数据 C.控制代码D.总结结构

22.磁盘处于写保护状态,那么磁盘中的数据(B)

A)不能读出,不能删改,也不能写入新数据 B)可以读出,不能删改,也不能写入新数据 C)可以读出,可以删改,但不能写入新数据 D)可以读出,不能删改,但可以写入新数据

23.应用软件系统TH的总容量大约1MB,其主要程序文件存放在C:\\TH目录中,而数据文件存放在C:\\TH\\DATA目录中,如果将它们完整地复制到A盘,应该使用的命令是(B)

A)XCOPYC:\\THA:\\B)XCOPYC:\\THA:\\/S C)XCOPYC:\\THA:\\/MD)XCOPYC:\\THA:\\/P 24.?所谓“裸机“是指(C) A)单片机B)单板机 C)不装备任何软件的计算机D)只装备操作系统的计算机

25.算法中,对需要执行的每一步操作,必须给出清楚、严格的规定,这属于算法的(C)A)正当性B)可行性C)确定性D)有穷性 二、多项选择题 1.存储在下列哪些设备中的信息可以长期保存?( BCDE ) A.RAMB.ROMC.硬盘 D.软盘E.光盘 2.下列设备中属于外存储设备的有( BCDE ) A.RAMB.光盘C.硬盘D.软盘E.磁带 3.微机系统的主机包含的部件有(BDE)

A.输入设备

B.存储器C.输出设备

D.运算器

E.控制器

4.总线是连接微机CPU、内存和外设之间传送信号的公共通道,微机的总线包括有(BCD)

A.电源线

B.数据线C.地址线

D.控制线

E.网络线

5.下面哪些软件属于操作系统范畴(ADE)。

A.DOSB.FoxproC.TurboCD.UNIXE.Windows 6.下面哪些是组成MS—DOS操作系统的模块(ABCE)

D.TurboCE.BOOT

7.与十进制141等值的数是(ACD)

22C.(215)8

D.(8D)16E.(8E)16

8.?X*.C可以代表的文件是(ADE)

A、AXCD.CB、AXCD.DC、ABX.CD、RX.CE、XX1234.C

三、填空题

1.计算机的硬件由五部分组成,它们分别是输入设备、输出设备、存储器、运算器和控制器。 2.微型计算机的性能主要取决于CPU。

3.一片存储容量是1.44MB的软磁盘,可以存储大约140万个_字节(byte)__。 4.在MS-DOS环境中同时按下[Ctrl]和[Break]两个键,其作用是__中断程序运行__。

第二章关于C语言程序的基本知识

一、选择题

1.下列转义字符中,表示回车的是( B )

A.\\0 B.\\n C.\\r D.\\f

2.若定义doubled;则d在内存中分配的字节数是( D )

A.1个B.2个C.4个D.8个

3.如果a=5,b=2,c=3,d=4,则表达式a>b?a:c>d?c:d的值是(C)

A.8B.9C.10D.7

4.C语言源程序的基本单位是( D )

A.过程 B.函数 C.子程序 D.语句

5.在TurboC2.0中,寻求在线帮助可按键( A )

A.F1 B.F5C.F9 D.F10 6.设有inta=3,b=-4,c=0;表达式((a>b)?a:b)&&c<0的值是( B ) A.-4 B.0C.1 D.3 7.退出TurboC2.0返回系统,在主菜单File项中可选择(D) A.LoadB.NewC.SaveD.Quit 8.在TurboC2.0中,若定义unsignedinta;则变量a在内存中分配的字节数是( B ) A.1个

B.2个C.4个

D.8个 9.下面四个选项中,均是合法整型常量的选项是(??A?)。 A.160???-0xffff???011B.-0xcdf???01a????0xe C.-01???986,012??0668D.-0x48a??2e5????0x 10.在C程序中,main函数的位置是(C)。

A.必须作为第一个函数B.必须作为最后一个函数 C.可以放在任意位置D.必须放在它所调用的函数之后 11.如果a=5,b=2,c=3,d=4,则表达式a>b?a:c>d?c:d的值是(D)。

A.2B.3C.4D.5

12.在C程序中,设一表达式中包含有int,long,char和unsigned类型的变量和数据,这四种类型数据的转换规则是(C)。

A.int→unsigned→long→charB.char→int→long→unsigned C.char→int→unsigned→longD.int→char→unsigned→long

13.设有说明:inta=11,b=10;执行表达式a%=b+(a&&b)后,a的值为(A)。

A.0B.1C.11D.22

14.下面哪一个是合法的指数型实数(C)

A.%dB.a+bC.-123D.3D

15.以下使i的运算结果为4的表达式是(D)

A.inti=0,j=0;(i=3,(j++)+i);B.inti=1,j=0;j=i=(i=3)*2); C.inti=0,j=1;(j==1)?(i=1):(i=3);D.inti=1,j=1;i+=j+=2; 16.字符串常数\"CHINA\"在内存中存储时占的字节数是(B)

A、5个B、6个C、7个D、8个 17.设有intp,q;以下不正确的语句是(D)

A、p*=3B、p/=qC、p+=3D、p&&=q

18.以下不正确的C语言标识符是(D)。(题目为:简述标识符的命名规则)

A.ABCB.abcC.a_bcD.ab.c 19、下面关于运算符优先顺序的描述中正确的是(C)

A关系运算符<算术运算符<赋值运算符<逻辑与运算符 B逻辑运算符<关系运算符<算术运算符<赋值运算符 C赋值运算符<逻辑与运算符<关系运算符<算术运算符 D算术运算符<关系运算符<赋值运算符<逻辑与运算符 20、下列叙述中正确的是(D) A)C语言中既有逻辑类型也有集合类型 B)C语言中没有逻辑类型但有集合类型 C)C语言中有逻辑类型但没有集合类型 D)C语言中既没有逻辑类型也没有集合类型 21.已知inti,a;执行语句”i=(a=2*3,a*5),a+6;”后,变量a的值是(A)。

A.6B.12C.30D.36

22.不能进行++和--运算的数据类型是(B)。

A.指针B.doubleC.intD.long

23.下列叙述中错误的是(D)【2007计算机等级考试】

A)计算机不能直接执行用C语言编写的源程序

B)C程序经编译程序编译后,生成后缀为.obj的文件是一个二进制文件 C)后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件 D)后缀为.obj和.exe的二进制文件都可以直接运行 24.对于一个正常运行的C程序,以下叙述中正确的是(A)

A)程序的执行总是从main函数开始,在main函数结束p23

B)程序的执行总是从程序的第一个函数开始,在main函数结束 C)程序的执行总是从main函数开始,在程序的最后一个函数中结束 D)程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束 25以下合法的字符型常量是(AD)

A)”\\x13”B)”\\018”C)”65”D)”\\n”

26.C程序在作逻辑运算时判断操作数真、假的表述中,正确的是( A )

A.0为假,非0为真??????B.只有1为真 C.-1为假,1为真??????D.0为真,非0为假

二、多项选择题

1.设a=1,b=3,c=0;下面表达式的值为1的有( ABCE )

A.!a&&b||a&&(c+1) B.a-b+3 C.(a>b)==c D.(a=0)&&(b=10) E.b>a&&a>c 2.若有intx;floaty;指出下面结果为整型数的表达式(ACD)p41

A、(int)(x+y)B、(int)x+yC、'a'+xD、x+(int)y E、x*y 三、填空题 1.C语言中基本数据类型包括___整型、实型、字符型____。P26 2.初始化值是0.618的双精度变量a的定义形式为__doublea=0.618__。 3.表达式a=1,a+1,a++的值是____1____。 4.已知x、y分别为a、b、c中的最大、最小值,求a、b、c中间值的表达式为__b>y&&x>b__。 5.C语言程序由main()函数开始执行,应在__main()__函数中结束。 6.条件“22&&x<3)||(x<-10)_。 7.C语言中实型变量分为两种类型:__单精度__和__双精度__。

第三章C的基本语句及顺序结构程序设计

一、选择题

1.如果inti=3,则printf(\"%d\的输出结果及i的值是(A)。

A)-34B)-44 C)-43D)-33

2.在printf语句中,格式说明符u表示( C )p47

A.以十进制带符号形式输出整数B.以十六进制带符号形式输出整数 C.以十进制无符号形式输出整数D.以十六进制无符号形式输出整数 3.设charx=′a′;则printf(″x=﹪c,y=﹪c\\n″,x,97);的输出是( D )

A.x=a,y=97B.x=97,y=a C.x=97,y=97D.x=a,y=a 4.在文件使用方式中,字符串″rb″表示( A )p195

A.打开一个已存在的二进制文件,只能读取数据 B.打开一个文本文件,只能写入数据 C.打开一个已存在的文本文件,只能读取数据 D.打开一个二进制文件,只能写入数据 5.设变量均已正确定义,若要通过scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。以下所示的输入形式中正确的是(注:□代表空格字符)(D)即10和X间不能用空格来区分p50 A.10□X□20□Y〈回车〉B.10□X20□Y〈回车〉 C.10□X〈回车〉D.10X〈回车〉

6.若有代数式(其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是(C)

A.sqrt(abs(n^x+e^x)) B.sqrt(fabs(pow(n,x)+pow(x,e))) C.sqrt(fabs(pow(n,x)+exp(x))) D.sqrt(fabs(pow(x,n)+exp(x))) 7.有以下程序,其中%u表示按无符号整数输出 main()

{unsignedintx=0xFFFF;/*x的初值为十六进制数*/ printf(“%u\\n”,x); }

程序运行后的输出结果是(B)

A.-1 B.65535 C.32767 D.0xFFFF

8.执行下列语句printf(“%d”,’a’=?=’A’)后输出为( C )

A.1B.语法错C.0D.97

9.下列程序段的输出结果是( B )

voidmain(void) {

inty=1,x=5; if(x<0)y=-1; if(x>=0)y=0; printf(\"%d\\n\} A.-1 B.0C.1 D.5 10.若有下列程序段,欲使a=2,b=3,对应正确的数据输入方法是(其中表示换行)(inta,b scanf(“%d%d”,&a,&b); A.2 B.a=2b=3 3 C.a=2,b=3 D.2,3 11以下程序的输出结果是()结果为:10,22,16 main() {inti=012,j=22,k=0x10; printf(“%d,%d,%d\\n”,i,j,k); }

A.12,22,10B.10,22,10 12.以下程序的输出结果是(C) main() {inta=10; a>10?a--:a++; a+=a;

printf(″%d\\n″,a); }

A.-22B.11C.22D.-11

二、简答题

1.C语言中的运算符“=”与数学中的“=”的意义相同吗?为什么?

D )

C语言中“=”表示将等号右边值赋给等式左边变量;数学“=”表示等式两侧数值相等;

2.简述TurboC2.0系统中,在主菜单File下选用Quit命令的作用。

Quit命令是退出TurboC2.0系统。

三、阅读分析

1、阅读下面程序,写出运行结果:k=9,i=3

main() {inti=3,k; k=i+i+i;

printf(″k=%d,i=%d″,k,i); }

2、下面程序段的输出结果是( 6 ) main() {ints,p; s=p=5; p=--s; p++;++p; printf(\"%d\\n\} 3、下面程序段的运行结果是()27,15,3 main() {inta,b,c;

a=(b=(c=3)*5)*2-3; printf(″%d,%d,%d\\n″,a,b,c); }

4.以下程序的正确输出结果为()。a=%d,b=%d main() { }

5、要使下面程序的输出语句在屏幕上显示1,2,34 则从键盘上输入的正确数据格式为:()。1234 main() inta=2,c=5;

printf(\"a=%%d,b=%%d\\n\

{

chara,b; intc;

scanf(\"%c%c%d\

printf(\"%c,%c,%d\\n\}

6、#includep49即12+56=68

main() { } 则程序运行结果是:68。 intx,y;

scanf(\"%2d%*2s%2d\printf(\"%d\

第四章条件语句与选择结构程序设计

一、单项选择题

1.若有inta=3,b=4,c=5,d=6,x=4;执行下列程序段后x的值是( A )

if(aA.它必须是算术表达式B.它必须是关系表达式 C.它必须是逻辑表达式D.它可以是任意类型的表达式 3.执行如下程序段后,x的值是( D ) intx=1,y=-1; if(y<0)x-=y; elsex+=y;

A.-1 B.0C.1 D.2 4.下面程序的输出结果是( B )

main() { intx=5,y; if(x>0) y=1; y=0; if(x<0) y=-1;

printf("%d",y); }

A.-1 B.0

C.1

D.5

5.关于if语句下面叙述正确的是( D )

A.只有当if语句中表达式的值等于1时,才执行if的内嵌语句 B.只有当if语句中表达式的值为假时,才执行if的内嵌语句 C.只有当if语句中表达式的值等于0时,才执行if的内嵌语句 D.只要if语句中表达式的值非0时,就执行if的内嵌语句

6.若执行下面程序时,从键盘输入数据3和4,则程序的输出结果是( C )

main() {inta,b,s;

scanf(″%d%d″,&a,&b); s=a; if(a intc; while((c=getchar())!=’\n’) ?switch(c-‘2’) ???{case0:

???case1:putchar(c+4); ???case2:putchar(c+4);break; ???case3:putchar(c+3); ???default:putchar(c+2);break; }

A.6677B.6666D.6688766 8.下面程序段的运行结果是(C)。 main() {

intx=1,y=2,z=3,s=0; if(y>x) if(y>z)s=1; elses=2;

elses=3; printf(”%d\\n”,s); }

A.0B.1C.2D.3

9.两次运行下面程序,如果从键盘上分别输入6和4,则程序的输出结果是(C) main() {intx;

scanf(″%d″,&x); if(x++>5)printf(″%d″,x); elseprintf(″%d\\n″,x-1);}

A.7和5B.6和3C.7和4D.6和4

10.以下有关switch语句的正确说法是(B)。

A.break语句是语句中必须的一部分 B.在switch语句中可以根据需要使用或不使用break语句 C.break语句在switch语句中不可以使用

D.在switch语句中的每一个case都要用break语句 11.以下if语句语法正确的是(A)。 A.if(x>0)printf(“%f”,x)????? B.if(x>0){x=x+y;printf(“%f”,x);} elseprintf(“%f”,-x);???????elseprintf(“%f”,-x); C.if(x>0){x=x+y;printf(“%f”,x);};??? D.if(x>0){x=x+y;printf(“%f”,x)}

elseprintf(“%f”,-x);???????elseprintf(“%f”,-x); 12.与语句if(a>b)if(c>d)x=1;elsex=2;等价的是( C )

题目:设inta=2,b;则执行b=a&&1;语句后,b的结果

A.if(a>b){if(c>d)x=1;elsex=2;} B.if(a>b){if(c>d)x=1;}elsex=2; C.if((a>b)&&(c>d))x=1;elsex=2;

二、多项选择题

1.下列语句中正确的有( CD )

A.if(x>y);

B.if(x=y)&&(x!=0)x+=y;

C.if(x!=y)scanf(“%d,&x);elsescanf(“%d”,&y);

D.if(xE.if(x2.以下if语句中没有语法错误的有( ACE )

A.if(x>0)printf(″%f″,x);

elseprintf(″%f″,x);

B.if(x>0){x=x+y;printf(″%f″,x)} elseprintf(″%f″,x)

C.if(x>0){x=x+y;printf(″%f″,x);} elseprintf(″%f″,x);

D.if(x>0)x=x+y;printf(″%f″,x); elseprintf(″%f″,x) E.ifx>y x++; else x--; 三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。 1.阅读分析下面程序,请说明程序的功能;然后写出当键盘输入14时,程序的运行结果。no(同时被5和7整除)

main() { intx;

scanf(″%d″,&x); if(x%5==0&&x%7==0) printf(″yes″); else printf(″no″); }

2.若分别输入0和5时,请阅读分析下列程序,然后分别写出两种输入情况下程序的运行结果。035

main() {

intx,y;

scanf(\"%d\if(x>2&&x<=10) y=x*(x+2); elseif(x>-1&&x<=2) y=2*x;

elseif(x<-1)y=x-1; if(y!=-1) printf(\"%d\else

printf(\"error\"); } 3.阅读下面程序,并回答问题: main() {inta,b,x,y; scanf(″%d,%d″,&a,&b); x=a*a+b*b; if(x>100) {y=x/100;printf(″%d″,y);} elseprintf(″%d″,a+b); }

(1)若程序运行时,输入6和9,输出结果是什么?1 (2)说明程序的功能。计算输入两个整数的平方和,如果之和大于100则输出其整除一百厚的结果,否则输出两个整数之和。 4.阅读下面程序,并回答问题:

main() {intx,y,z,c;

scanf(″%d%d%d″,&x,&y,&z); if(x(1)若程序运行时,输入3、2和5,则输出结果是什么?5,3,2

(2)写出程序所实现的功能。从大到小排序 5.请阅读分析下面程序,然后写出运行结果。15630 main() { } intx=156,a,b,c; if(x>100) { } if(x>10) { } printf(“%3d%3d%3d%3d”,a,b,c,a*b*c); b=x/10; c=x%10; a=x/100; x=x%100;

6.阅读下列程序,并回答问题: main() {intx=1,y=0,a=0,b=0; switch(x) {case1:switch(y) {case0:a++;break; case1:b++;break;} case2:a++;b++;break; case3:a++;b++;}

printf(″a=%d,b=%d\\n″,a,b);}

请分析该程序的执行过程并写出运行结果。a=2,b=1

四、编程题:

1、已知能被4整除而不能被100整除的或者能被400整除的年份是润年,则判断某一年是否是润年。答案1:教材p65例题4-9;答案2如下:

main() {intyear;

scanf(\"%d\

if((year%4==0)&&(year%100!=0)&&(year%400==0)) printf(\"%disaleapyear!\else

printf(\"%disnotaleapyear!\

2、是判断一个学生考试成绩及格与否的程序(成绩A,或B,或C者为及格;成绩为D者不及格)。答案1:教材p例题4-8;答案2如下:

#include main()

{intgrade;charchgrade; printf(\"pleaseinputascore:\\n\"); scanf(\"%d\switch((int)(grade/10)) {case10: case9:chgrade='A';break; case8:chgrade='B';break; case7:chgrade='C';break; case6:chgrade='D';break; default:chgrade='F';break;} printf(\"Theperformancelevelsare:%c\\n\

第五章循环语句与循环结构程序设计

一、选择题

1、有如下程序片段: inti=0; while(i++<=2) printf(\"%d\

则i的最终执行结果是:(B)

A.2B.3C.4D.无结果

2、若i为整型变量,则以下循环执行次数是(B) for(i=2;i==0;)printf(\"%d\A.无限次B.0次C.1次D.2次 3、设有程序段 intk=10; while(k=0)k=k-1; 这下面描述中正确的是(C) A.while循环执行10次B.循环是无限循环 C.循环体语句一次也不执行D.循环体语句执行一次 4、以下正确的描述是(B)

A.continue语句的作用是结束整个循环的执行 B.只能在循环体内和switch语句体内使用break语句 C.在循环体内使用break语句或continue语句的作用相同 D.从多层循环嵌套中退出时,只能使用goto语句 5、若有如下语句 intx=3;

do{printf(\"\"%d\\n\则上面程序段(B)

A.输出的是1B.输出的是1和-2 C.输出的是3和0D.是死循环

6、对do语句while(表达式);结构的循环,下列说法正确的是(A.当表达式的值为非零时不执行循环体 B.循环体至少被执行一次

B )

C.当表达式的值为零时循环体一次也不执行 D.循环体仅被执行一次

7、在下述程序中,for循环执行的次数是( C )

main() {

inti=0,j=10,k=2,s=0; for(;;){i+=k;

if(i>j){printf("%d\\n",s);break;} s+=i;} }

A.4 B.5

C.6

D.7

8、下面程序段的循环次数是( A ) intk=2; while(k==0)printf(″%d″,k); k--;printf(″\\n″); A.0次 B.1次C.2次 D.无限次 9、结束while(表达式)循环的条件是( A ) A.当表达式的值为0时 C.当表达式的值为1时 B.当表达式的值不为0时 D.当表达式的值为非1时 10、以下程序段的运行结果是(C)y值应比x小1 for(y=1;y<10;)y=((x=3*y,x+1),x-1); printf(“x=%d,y=%d”,x,y);

A.x=27,y=27 B.x=12,y=13C.x=15,y=14 D.x=y=27 多选:

11、下列循环将会产生死循环的有( ACD )

A.while(1); B.do{}while(0);C.do{}while(1); D.for(k=1;k>―10;k++);E.for(k=1;k=10;k++,k――);

二、填空题:

1、用下列for循环将大写字母顺序输出(从’A’到‘Z’) for(i=0;i<26;i++)putchar(’A’+__i__)

2、若所有变量都已定义,则程序段中for循环的循环次数为___0___。 a=2;b=10;

for(i=b;i<=a;i--,a++)printf(“%3d”,i);

3、设i、n、p均为int变量,执行以下程序段后,P的值是___24___。即4! p=1;n=4;

for(i=1;i<=n;i++)p=p*i;

4、break语句只能用于switch语句和___循环__语句中。

5、__goto__语句可以从最内层循环立即跳到最外层循环外,而break,一次只能跳出一层。

三、简答题

1、用while循环结构完成下面程序段的功能。 s=0 for(i=1;i<=10;i++) s+=i; 2、阅读下面程序,并回答问题: main() {intu,v,a,b,t,r; u=24;v=16; if(u>v){t=u;u=v;v=t;} a=u;b=v; while((r=b%a)!=0) {b=a;a=r;} printf(″a=%d\\n″,a); } (1)程序输出结果是什么?a=8 (2)该程序完成什么功能?求u,v的最大公约数

(3)若将while循环替换为do-while循环,请写出相应的程序段。 3、设有程序如下: main() {

charch='A'; while(ch<='E') {

printf(〃%c〃,ch); ch++; }

反序输出: main() {charch='E'; while(ch>='A') { printf(\"%c\ch--; } printf(\"\\n\"); } (3)替换为do-while循环: main() {intu,v,a,b,t,r; u=24;v=16; if(u>v){t=u;u=v;v=t;} a=u;b=v; do {r=b%a;b=a;a=r;}while((r=b%a)!=0); printf(\"a=%d\\n\} main() {inti=1,s=0; while(i<=10){s+=i;i++;} }

printf(〃\\n〃); }

该程序的运行结果是什么?ABCDE

如果要将给定程序的运行结果按相反的顺序输出,请写出相对应的程序。 4、阅读下面程序,并回答问题: main() {intm,n; m=65; n=14; while(m!=n) {while(m>n)m-=n; while(n>m)n-=m; } printf(″m=%d\\n″,m); } (1)程序输出结果是多少?m=1 (2)外循环执行完一次时,m和n的值分别是多少?m=9n=5 (3)将while(n>m)n-=m;语句删除后,程序运行情况如何?循环无法退出,死循环 程序演示: main() {intm,n; m=65; n=14; while(m!=n) {while(m>n)m-=n; while(n>m)n-=m; printf(\"m=%d\\printf(\"n=%d\\n\printf(\"-----------\\n\"); } printf(\"-----END------\\n\\n\\n\");} 四、程序阅读分析 1、下面程序段的运行结果是().8 main() { inti=1,s=3; do{s+=i++; if(s%7==0)continue; else++i; }while(s<15); printf(\"%d\}

2、#includek=3,n=2 main() {

intk=4,n=0;

for(;nprintf(\"k=%d,n=%d\\n\

n++;

if(n%2==0)break; k--;

3、下面程序的运行结果是____s=2_____. #include main() {inta,s,n,count; a=2;s=0;n=1;count=1; while(count<=7){n=n*a;s=s+n;++count;} printf(\"s=%d\} 4、请阅读分析下列程序,然后写出程序运行结果。@*@*@ main(void) { inti; for(i=1;i<6;i++) { if(i%2) {

printf("@");continue; }

printf("*"); }

printf("\\n"); } 5、main() {

intx,sum=0; loop1:

scanf(″%d″,&x);

if(x!=8) {

if(x%2==0) { sum+=x;

printf(″sum=%d\\n″,sum); } gotoloop1; } sum-=x;

printf(″sum=%d\\n″,sum); } 当程序执行时输入数据12345678↙,写出程序运行结果。 6、阅读下面程序: voidmain(void) { ints=0,n=0,x; label:scanf("%d",&x); if(x>0){ s+=x; n++;

printf("s=%d,n=%d,even=%f\\n",s,n,1.0,s/n); } if(x!=0) gotolabel; else

printf("goodbye!"); }

当依次输入12-3-65130↙时,写出程序的运行结果。

运行结果: s=12,n=1,even=1.000000 s=17,n=2,even=1.000000 s=30,n=3,even=1.000000 goodbye! 运行结果: sum=2 sum=6 sum=12 sum=4 五、程序设计题

1、编程计算:1!+3!+5!+…+(2n-1)!的值。其中,n值由键盘输入。 #include

voidmain() {inti,b=1,s=0,n; printf(\"Pleaseinputn=\"); scanf(\"%d\for(i=1;i<=n;i+=2) {b=b*i;s=s+b;}

printf(\"\\n1!+3!+5!+...+(2*%d!-1)!=%d\\n\2、用以下近似公式编一个求的近似值的程序。

411111(1)n13572n1,其中n的值由键盘输入。

#include voidmain() {floatpi=0.0,s=1.0; intn,i; printf(\"Pleaseinputn=\"); scanf(\"%d\for(i=1;i<=n;i++) {pi=pi+s/(2*i-1); s=s*(-1.0);} printf(\"pi=%f\\n\

第六章数组

一、选择

1、合法的数组定义是(D)教材p98

A.inta[]=\"language\";char

B.inta[5]={0,1,2,3,4,5};越界

C.chara=\"string\";数组名不能赋值D.chara[]={\"0,1,2,3,4,5\2、若二维数组a有m列,则在a[i][j]之前的元素个数为(B)

A.

j*m+iB.i*m+jC. i*m+j-1D.i*m+j+1

3、下列的定义中,正确使用字符串初始化的是(C)教材p153

A.charstr[7]=\"FORTRAN\";B.charstr[]={F,O,R,T,R,A,N,0}; C.char*str=\"FORTRAN\";D.charstr[]={'F','O','R','T','R','A','N'}; 4、有两个字符数组a、b,则以下正确的输入语句是(C) A.gets(a,b);B.scanf(\"%s%s\C.scanf(\"%s%s\D.gets(\"a\"),gets(\"b\"); 5、若有定义inta[4]={1,2,3,4};则a[a[2]-3*a[0]+1]的值是(B)a[3-3*1+1]=a[1] A.1B.2C.3D.4 6、若有定义inta[3][5];则数组a在内存中分配的字节数(D) A.8B.15C.24D.30

7、已知str1和str2是字符串数组,下列哪个函数能正确的完成字符串的输入() A.gets(str1)B.gets(str1,str2)C.getchar(str1)D.getchar(str1,str2) 8、下面程序执行后,i的值是(C) main()

{inta[5]={1,2,3,4,5},i=2; printf(″%d″,a[i++]); }

A.1

B.2C.3

D.4

9、下面程序的输出结果是( A ) main()

{inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; inti,j,k=0; for(i=0;i<3;i++) k=k+a[i][0];

#include main() {chars[]=\"hello\\nworld\\n\"; intn=0; n=strlen(s);

printf(″%d\\n″,k); }

A.27B.33C.39 D.45

10、.设变量定义为chars[]=″hello\nworld\n″;则数组s中有(A)个元素。

A.12

B.13C.14

D.15

多项选择:

1、 main()

{inti,j,a[]={1,3,5,7,9,11,13,15}; i=5; switch(i) {default:printf(″%d\\n″,a[i]); case1:printf(″%d\\n″,a[3]); case2:printf(″%d\\n″,a[++i]);break; case3:printf(″%d\\n″,a[--i]); } } 上述程序的输出结果不包括( AC ) A.5B.7C.9D.11E.13

2、设有说明:chars[20];下面各项中能够正确的将一个字符串"abcd"赋给s数组的有( BD )

A.s="abcd";

B.gets(s); C.scanf("%s",s); D.strcpy(s,"abcd"); E.strcpy("abcd",s);

3、下面各选项中,能正确进行字符串操作的有( ACE )

A.chars[]={′a′,′b′,′c′,′d′,′e′,′\\0′};B.chars[10];s=″abcde″; C.chars[10];strcpy(s,″abcde″)D.chars[10];getchar(s); E.chars[10];gets(s);

二、填空题

1、C程序在执行过程中,不检查数组下标是否____越界_____。

2、对一个2*5的int型数组t,t中位于第2行的所有元素的表达式是___t[1][i]___。 3、二维数组的元素在内存中按____行____存放的。

4、把字符串str2连接到字符串str1后面的连接函数是____strcat(str1,str2)____。

5、数组名是____地址常量____量,不能对其进行赋值运算。

三、简答题

1、简述C语言标准库函数strcpy的格式与功能。 功能:拷贝一个字符串到另一个

用法:char*strcpy(char*destin,char*source);

2、设有说明:intb[3][4];请用四种方式来表示数组元素b[1][2]。 *(*(b+1)+2)b[1][2]*(&b[1]+2)*(b+1)[2]

3、试定义一个三行的二维字符数组s,并用"Iamaboy","youareagirl","heisateacher"对其进行初始化。

Charstr[3][20]={"Iamaboy","youareagirl","heisateacher"}

四、阅读程序,写出运行结果 1、#include18,10 main() {

staticinta[][3]={9,7,5,3,1,2,4,6,8}; inti,j,s1=0,s2=0; for(i=0;i<3;i++) { }

printf(\"%d,%d\\n\

for(j=0;j<3;j++) { }

if(i==j) { } if(i+j==2) { }

s2=s2+a[i][j]; s1=s1+a[i][j];

2、#include#&*&%

main()

{chars[]=\"ABCCDA\"; intk;charc;

for(k=1;(c=s[k])!='\\0';k++) {switch(c)

{case'A':putchar('%');continue; case'B':++k;break; default:putchar('*'); case'C':putchar('&');continue; }

putchar('#'); } } 3、 main() {staticinta[]={5,3,7,2,1,5,4,10}; ints=0,k; for(k=0;k<8;k+=3) {s+=a[k]; printf(“a[%d]=%d,s=%d\\n”,k,a[k],s);} } 4、main() {

inta[3][3],i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) a[i][j]=i+j for(i=0;i<3;i++) {

for(j=0;j<=i;j++) printf(“%2d”,a[i][j]); printf(“\\n”); }

3、输出结果 a[3]=2,s=7 a[6]=4,s=11 4、输出结果 0 12 234

}

5、chara[]={'9','8','7','6','5','4','3','2','1','0','\\0'}; voidmain(void) { inti=8,j; for(j=0;j<4;j++) printf(\"%s\\n\-j]); }

5、输出结果 10 210 3210 43210 五、程序设计题

1、从键盘输入10个整型数据,放入数组a中,求其最大值、最小值及其所在元素的下标位置,并输出。 #include main() {inta[10],n,max,min,maxPos,minPos;

for(n=0;n<10;n++){scanf(\"%d\max=min=a[0]; maxPos=minPos=0; for(n=0;n<10;n++) {if(a[n]>max){max=a[n];maxPos=n;} elseif(a[n]printf(\"max=%d,pos=%d\\n\printf(\"min=%d,pos=%d\\n\

2、编程实现从键盘任意输入20个整数,统计非负数个数,并计算非负数之和。 main()

{intinput,sum=0,count=0,Num=20; printf(\"Pleaseinput20numbers:\\n\"); do

{scanf(\"%d\

if(input>=0){sum+=input;count++;} Num--;} while(Num!=0);

printf(\"\\n%dnumbersofnon-negative'ssum=%d\\n\

3、由键盘输入n*m个数,并把它们存放在一个n行m列的数组中(n、m均不超过20)。(1)按n行m列输出该二维数组;

(2)求出该二维数组全部元素的平均值;

(3)把该二维数组中大于平均值的元素的值、以及它们行列下标打印出来。 #include #defineSIZE20 main()

{inta[SIZE][SIZE],i,j,n,sum=0;floataver=0; printf(\"Inputn,m:\"); scanf(\"%d%d\

printf(\"Input%d*%darray:\\n\ for(i=0;iaver)printf(\"a[%d][%d])=%d\}

4、若有n行n列数组,试编写一程序,分别求出两条对角线元素之和。(从键盘输入整型数,n≤20)

#include #defineN20 voidmain()

{inta[N][N],n,i,j,k=0,t=0; scanf(\"%d\for(i=0;i{k+=a[i][i];t+=a[i][n-1-i];} printf(\"k=%d,t=%d\\n\

n*n个

}

5、从键盘输入n*n个整型数(n≤20),组成n行n列数组,打印出其上三角数组。 #include #defineSIZE20 main()

{inta[SIZE][SIZE],i,j,n; printf(\"Inputn:\"); scanf(\"%d\

printf(\"Input%d*%darray:\\n\ for(i=0;i{for(j=0;jfor(i=0;i第七章函数

一、选择

1、C语言源程序的某文件中定义的全局变量的作用域为:(C)。

A.本文件的全部范围B.本函数的全部范围

C.从定义该变量的位置开始到本文件结束D.本程序的所有文件的范围 2、C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式为(B)

A.地址传递B.单向值传递

C.由实参传给形参,再由形参传回给实参D.由用户指定传递方式 3、C语言允许函数值类型缺省定义,此时该函数值隐含的类型是(B) A.floatB.intC.longD.double 4、下列说法不正确的是(D) A.一个C程序由一个或多个源程序文件组成 B.一个C程序以函数为的编译单位 C.不同函数中可以使用相同名字的变量 D.C函数既可以嵌套定义又可以嵌套调用 5、下列关于函数的描述中正确的是(B) A.C程序中有调用关系的所有模块必须放在同一个源文件中 B.函数必须有返回值,否则不能使用函数 C.C程序必须由一个或一个以上函数组成 D.C函数既可以嵌套定义又可以嵌套调用 6、有下列程序,则(B) intd=10; main()

{Inta=3;printf(“%d,%d\\n”,a,d);

A.a是全局变量,d是全局变量;B.a是局部变量,d是全局变量 C.a是全局变量,d是局部变量;D.a是局部变量,d是局部变量 7、凡是函数中未指定存储类别的局部变量,其隐含的存储类别是(A) A.自动(auto)B.静态(static) C.外部(extern)D.寄存器(register) 8、在C语言中,确定函数返回值的类型由(D)

A.return语句中的表达式类型B.调用该函数的主函数类型决定

C.调用函数时临时决定D.定义函数时所指定的函数类型决定

9、变量包括数据类型与存储类别两种属性,其中存储类别属性主要用来决定(C) A.变量的存储长度B.变量的作用范围 C.变量的生存期D.变量的取值范围 10、在C语言程序中,当调用函数时(B)

A.由系统自动指定对应实参和形参是否共用存储单元 B.对应实参与形参各占一个的存储单元 C.对应实参与形参共用一个存储单元

D.可以由用户指定对应实参与形参是否共用存储单元

二、填空

1、对于以下递归函数f,计算f(3)的值________。 intf(intk) {return(k<0?(k*=2):(f(k-2)+k);} 2、一个函数的返回值类型由定义函数时____函数____类型决定的。

3、定义局部变量,如果是静态(static)变量,编译时自动赋初值是____0____。 4、main() {inta=5,b=8; chang(a,b); printf(“a=%d,b=%d\\n”,a,b); change(intx,inty) {intt;t=x,x=y;y=t;}

printf(“x=%d,y=%d\\n“,x,y);}运行结果x=__8__,y=_5__a=___5__,b=___8__ 三、简答

1、什么是变量的作用域?什么是局部变量?什么是全局变量?简述全部变量与局部变量的作用域.

变量的作用域:可引用变量的范围,与其位置有关。

局部变量是在函数内部定义的,且只能在本函数内部使用的变量。(外部函数不可引用,不同函数局部变量名称可以重复,但是相互没有干扰)

全局变量是在函数外部定义的变量,它可以为本文件中其他函数所共享,其作用域是从定义之处开始,直到本源文件结束

2、若在一个函数中对变量a、b有如下定义: staticinta;

autointb;简述它们之间的异同。

前者定义静态变量,自动赋初值0,函数退出时不释放内存,下次调用时仍保留上次函数调用结束时的值;后者定义auto变量,函数退出存储空间释放。

3、变量存储类别分为哪几种?它们分别存储在什么区域?

变量的存储类型:有auto(自动)(系统默认存储类别),static(静态)register(寄存器)和extern(外部)四种,

Auto局部变量存储在动态存储区中,static与extern静态变量存储在静态存储区中,register存储在计算机的CPU通用寄存器中。

四、阅读分析

1、以下程序的运行结果是:1317 #include intFunc(inti); main() { }

intFunc(inti) { }

2、以下程序的运行结果是:A+B=9 inta=5;intb=7; main()

staticintk=10; for(;i>0;i--) { } return(k);

k++;

inti; for(i=3;i<5;i++) { }

printf(\"\\n\");

printf(\"%d\

{inta=4,b=5,c; c=plus(a,b);

printf(\"A+B=%d\\n\}

plus(intx,inty) {intz; z=x+y; return(z); }

3、以下程序的运行结果是: check(intn,intk) { intm; do{ m=n%10;n=n/10; }while(k--); return(m); } main() { intj,y=2345; For(j=1;j<4;j++) Printf(“j=%d,numberis%d\\n”,j,check(y,j)); }

4、以下程序的运行结果是: viodfun(); voidmain(viod) {fun(); fun(); } viodfun() {

staticinta[3]={0,1,2},b=10; inti;

4、输出结果 0,2,4,b=10 0,4,16,b=11 3、输出结果 j=1,numberis4 j=2,numberis3 j=3,numberis2 if(b==10) {for(i=0;i<3;i++) a[i]+=a[i]; for(i=0;i<3;i++) printf(“%d,”,a[i]); printf(“b=%d\\n”,b); b++;} else

{for(i=0;i<3;i++) a[i]*=a[i]; for(i=0;i<3;i++) printf(“%d,”,a[i]); printf(“b=%d\\n”,b); } } 5、以下程序的运行结果是: longfactor(intm) {longintfc; if(m==0||m==1)fc=1; elsefc=factor(m-1)*m; return(fc); } main() {intn; longintfac; for(n=1;n<5;n++) {fac=factor(n); printf(“%id\\n”,fac);} }

6、以下程序的运行结果是: inta=5,b=5; chang1() {inta=4;

printf(“a1=%d,b1=%d\\n”,a,b++);5、输出结果 1d 2d 6d 24d 6、输出结果 a1=4,b1=5 a2=6,b2=7

}

chang2(inta,intb) {a++;b--;} main()

{chang1();a++;b++;chang2(a,b); printf(“a2=%d,b2=%d\\n”,a,b); }

五、程序设计题

1.???已有变量定义和函数调用语句:intx=57;isprime(x);函数isprime()用来判断一个整形数number是否为素数,若是素数,函数返回1,否则返回0。请编写主函数与isprime函数。

main() {intx=57; if(isprime(x))printf(\"\\n%disaprimenumber!\elseprintf(\"\\n%disNotaprimenumber!\isprime(intx) {inti,flag=1; if(x==1)flag=0; elseif(x==2)flag=1; else

{for(i=2;i1、输出结果 #include\"string.h\" main() {char*s=\"\\\\\Name\\Address\\n\"; intl; l=strlen(s); printf(\"l=%d\\n\

第八章指针

一、单项选择

1.语句char*s=”\\\\\Name\\Address\\n’’;中,指针s所指字符串的长度为(C)。

(A)说明不合法(B)19(C)14(D)15

2.变量i的值为3,i的地址为1000,若欲使p为指向i的指针变量,则下列赋值正确的是(D)。

(A)&i=3(B)*p=3(C)*p=3(D)p=&i

3.已知下列函数定义,调用此函数的正确写法是:(D). (假设变量a的说明为inta[50]) setw(int*b,intm,intn,intdat) {intk; for(k=0;k<m*n;k++){*b=dat;b++;} } (A)setw(*a,5,8,1);(B)setw(&a,5,8,1); (C)setw((int*)a,5,8,1);(D)setw(a,5,8,1). 4.下面程序的运行结果是(A) #include main() {int*p1,*p2,*p; inta=5,b=8; p1=&a;p2=&b;

if(aA)8,55,8(B)5,88,5(C)5,85,8(D)8,58,5

5.若有说明:int i,j=2,*p=&i;,则能完成i=j赋值功能的语句是(B)。

(A)i=*p(B)*p=*&j(C)i=&j(D)i=**p 6.下列程序的输出结果是(C)。 main()

{char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5; printf(″%d″,*--p); }

(A)非法(B)a[4]的地址(C)5 (D)3 7.以下程序的运行结果是(B)。 sub(intx,inty,int*z) {*z=y-x;} main() {inta,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c);

printf(\"%4d,%4d,%4d\\n\}

(A)5,2,3(B)-5,-12,-7 (C)-5,-12,-17(D)5,-2,-7 8变量的指针,其含义是指该变量的。(B) (A)值(B)地址(C)名(D)一个标志 9.下面程序段的运行结果是。(C) main() {chara[]=\"language\p=a; while(*p!='u'){printf(\"%c\A)LANGUAGEB)languageC)LANGD)langUAGE 二、填空题

1.C语言中,数组名是一个地址常量,不能对它进行赋值运算。 2.在C程序中,指针变量能够赋地址值或变量值。 3.若有以下定义和语句:

inta[3][2]={10,20,30,40,50,60},(*p)[2]; p=a;

则*(*(p+2)+1)的值是60。 4.若有以下定义和语句: inta[4]={0,1,2,3},*p; p=&a[1];

则++(*p)的值是2。 5.已定义: chars[3]=\"AB\";

char*p;

在执行语句p=s;后,*(p+2)的值是\\0。

6.&运算符用于返回变量在内存中的地址;*运算符用于返回指针变量指向的变量的值。

三、简答题

1.说明一下变量的含义。

(1)int*p[10];指针数组,其元素为指向整型变量的指针变量; (2)int**p;指向指针的指针 2.写出变量p的以下形式的说明。 (1)p是整型变量的指针。int*p

(2)p是长度为5的字符指针数组。char*s[5] 3.请按照下列要求写出相应的C语句。 假设float类型的变量x1和x2已经定义过,且x1已经初始化为7.3。 (1)定义指向float类型变量的指针变量fptr;float*fptr (2)使fptr指向x1;fptr=&x1 (3)利用fptr,将fptr指向变量的值赋给x2;x2=*fptr (4)利用fptr,输出fptr指向变量的值。*fptr 四、阅读分析题 1.下列程序的运行结果是:a=18 #include voidmain() { int*p,a; a=8; p=&a; a=*p+10; printf(\"a=%d\\n\}

2.若输入的值分别是1↙3↙5↙写出下面程序的运行结果。 main()

{inta=0,i,*p,sum; p=&a;

for(i=0;i<=2;i++)

2、输出结果 sum=11 sum=13 sum=15

{scanf(\"%d\sum=s(p);

printf(\"sum=%d\\n\} } s(int*p) {intsum=10; sum=sum+*p; return(sum); }

3.写出以下程序的运行结果。0136 #include main() {inti,k; for(i=0;i<4;i++) {k=sub(&i); printf(\"%3d\} printf(\"\\n\"); } sub(int*s) {staticintt=0; t=*s+t; }

4.写出下列程序的运行结果。78 voidmain()

{inta[10]={12,25,33,45,56,67,78,},*p; p=a;

printf(\"%d\}

5.请阅读分析下列程序,然后写出程序的运行结果。 voidmain(void) {

inta[]={1,2,3,4,5,6},*p;

p=a; p++; *(p+3)+=2; printf("%d\\n",*p); printf("%d\\n",*(p+3)); }

5、输出结果 2 7 五、程序设计题

1.已知一个整型数组x[5],其各元素分别为7、4、6、3、9,试编写一个程序,用指针计算各元素之和。

#include main() {inta[5]={3,5,7,3,6},i; int*p=0; for(i=0;i<5;i++)*p=*p+a[0]; printf(\"sum=%d\getch(); } 2.编写一个程序,根据从键盘上输入的年历月份,自动输出该月份的英文名称。 #include main()

{charmonth[][20]=

{\"January\ember\

inti=0,n; do

{scanf(\"%d\printf(\"%s\i++;}while(i!=3);}

第九章结构体与共用体

一、选择题

1在说明一个结构体变量时系统分配给它的存储空间是(D)。

A.该结构体中第一个成员所需的存储空间 B.该结构体中最后一个成员所需的存储空间

C.该结构体中占用最大存储空间的成员所需的存储空间 D.该结构体中所有成员所需的存储空间的总和 2以下对结构体变量stu1中成员age的非法引用是(B)。

structstudent { intage; intnum; }stu1,*p; p=&stu1; A.stu1.ageB.student.ageC.p->ageD.(*p).age 3有如下定义: Structdate {

Intyear,month,day; };

Structworklist {

Charname[20]; Charsex;

Structdatebirthday; }person;

对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是(C)。 A.year=1958B.birthday.year=1958 D.person.year=1958 4.下列程序的输出结果是(D)。 #include

main()

{structstru{inta,b;charc[6];}; printf(″%d\\n″,sizeof(structstru)); }

A.2B.4C.8D.10

5有以下结构体类型,且结构体数组student中的元素都已有值,若要将这些元素写道硬盘文件fp中,以下不正确的形式是(D)。

Structst{charname[8];intnum;floats[4];}student[50]={…};

A)fwrite(student,sizeof(structst),50,fp); B)fwrite(student,50*sizeo(structst),1,fp); C)fwrite(student,2*sizeo(structst),25,fp);

D)for(i=0;i<50;i++)fwrite(student++,sizeof(structst),1,fp); 6函数调用语句:fseek(fp,-13L,1);的含义是(C)。

A)将文件位置指针移到距离文件头13个字节处。 B)将文件位置指针从文件尾处向后退13个字节处。 C)将文件位置指针从当前位置向后移动13个字节处。 D)将文件位置指针移到距离当前位置13个字节处。 二填空题 1.共用体的所有成员共享同一段存储空间,它的各个成员的数据类型可以是__不同的。 2.在unionstd

{intfjh; charaddr[30]; }wang;

中,wang是具有″unionstd″共用体类型的变量。 3.设有结构体的定义如下:

structdata{ intn charc floatf };

则sizeof(structdata)的值是7。 4.设有以下结构体类型:

structst{charname[10];intnum;floats[5];}student[60]={…};

并且结构体数字student中的元素都已赋值,若要将这些元素写到硬盘文件fp中,请将以下fwrite语句补充完整:fwrite(student,_sizeof(structst)_,_60_,fp); 5.有如下定义 sturct { intx; char*y;

}tab[2]={{1,\"ab\则表达式*p->y的结果是ab。 6.下面程序的运行结果是LWangBing。 structsamp1{charname[10];intnumber;};

structsamp1test[3]={{\"WangBing\main() {printf(\"%c%s\\n\} 三、简答题 1.解释下列C说明 例如:float*x[5];表示x是有5个元素的float型指针数组。 (1)float*(*a)[5]; (2)char(*x[5])(void));

四、阅读分析题

1.有如下定义: struct { intx; inty;

}s[2]={{1,2},{3,4}},*p=s;

写出表达式++p->x和(++p)->x的结果。23 2.以下程序的执行结果是。34,12 #include main() {

union { chars[2]; inti; }a; a.i=0x1234;

printf(\"%x,%x\\n\}

3.分析下面程序的运行结果。 unionxx {inta;floatb;}; main() {unionxxy; y.a=10;printf(\"y.a=%d\\n\y.b=1.234;printf(\"y.b=%f\\n\printf(\"y.a=%d,y.b=%f\\n\4.请参阅下面程序,并回答相关问题。 structnode{intx; structnode*next;}; voidprint(structnode*head) {structnode*p; p=head; while(p!=NULL) {printf(″%d\\n″,p->x); p=p->next; } }

(1)函数print完成的功能。输出结构体变量成员值 (2)语句p=p→next;的作用。指针指向下一结构体变量地址 5.写出下面程序的输出结果。10 #include main()

{structstru{inta,b;charc[6];}; printf(\"%d\\n\

3、输出结果 y.a=10 y.b=1.234000 y.a=-3146,y.b=1.234000

}

第十章位运算与编译预处理

一、选择题

1.以下运算符中优先级最低的是(C)。

(A)&&(B)&(C)||(D)| 2.表达式a(A)~,&,<,||(B)~,||,&,< (C)~,&,||,<(D)~,<,&,|| 3.以下叙述中不正确的是(C).

(A)表达式a&=b等价于a=a&b(B)表达式a|=b等价于a=a|b (C)表达式a!=b等价于a=a!b(D)表达式a^=b等价于a=a^b 4.若x=2,y=3,则x&y的结果是(B)。 (A)0(B)2(C)3(D)5 二、填空题 1.带参数的宏和函数的区别在于带参宏只是字符替换,没有值传递。 2.9&&6的值是1,9&6的值是0。 3.设有如下宏定义: #defineMYSWAP(z,x,y){z=x;x=y;y=z;} 以下程序段通过宏调用实现变量a、b内容交换,请填空。 floata=5,b=16,c;MYSWAP(c,a,b);

4.有语句chara=3,b=6,c=a^b>>2;运算后c中的二进制数是00000001。

四、阅读分析题

1.写出下程序输出结果。100010 #defineN10 #defines(x)x*x #definef(x)(x*x) main()

{inti1,i2;i1=1000/s(N);i2=1000/f(N);printf(“%d%d\\n”,i1,i2);} 3.写出下列程序的输出结果。11

#defineNX2+3 #defineNYNX*NX main()

{inti=0,m=0;for(;i(y)?(x):(y) main()

{inta=5,b=2,c=3,d=3,t;t=MAX(a+b,c+d)*10;printf(“%d\\n”,t);} 5.写出下列程序的输出结果。MIN #defineMAX(a,b)a>b #defineEQU(a,b)a==b #defineMIN(a,b)aprintf(“%d\\n”,z); }

五、编程题

1.定义一个带参的宏,求两个整数的余数。通过宏调用,输出求得的结果。 2.分别用函数和带参的宏,从3个数中找出最大者。

3.输入一个整数m,判断它能否被3整除。要求利用带参的宏实现。

第十一章文件

一、选择

1.若fp是指向某文件的指针,且已读到文件末尾,则库函数feof(fp)的返回值是(C)。

(A)EOF(B)-1(C)非零值(D)NULL

2.若要用fopen()函数打开一个新的二进制文件,该文件可以读也可以写,则文件打开时的模式是(C)。

〔A)\"ab+\"(B)\"wb+\"〔C)\"rb+\"(D)\"ab\"

3.fgetc函数的作用是指定文件读入一个字符,该文件的打开方式必须是(C)。 (A)只写(B)追加(C)读或读写(D)答案BC均正确 4.函数ftell(fp)的作用是(A)。 (A)得到文件当前位置指针的位置 (B)移动流式文件的位置指针 (C)初始化流式文件的位置指针 (D)以上答案均正确 5.在执行fopen函数时,若执行不成功,则函数的返回值是(D)。 (A)TRUE(B)-1(C)1(D)NULL 6.当已经存在一个abc.txt文件时,执行函数fopen(\"abc.txt\)的功能是(D)。 (A)打开abc.txt文件,清除原有的内容 (B)打开abc.txt文件,只能写入新的内容 (C)打开abc.txt文件,只能读取原有内容 (D)打开abc.txt文件,可以读取和写入新的内容

二、填空

1.C语言中根据数据的组织形式,把文件分为文本文件和二进制文件两种。 2.在C语言中,文件的存取是以字符为单位的,这种文件被称作 流式文件。

3.在C语言中,能实现改变文件的位置指针的函数是fseek。 4.在C语言中,对文件的存取是以字符为单位,即以字节为单位。 5.在C语言中,文件的打开使用函数是fopen。

6.函数调用语句:fgets(buf,n,fp);从fp如指向的文件中读入n-1个字符放到buf字符数组中。

三、简答

1.简述feof函数返回值的含义。

如果遇到文件结束,函数feof(fp)的值为1,否则为0。 2.文件分为哪些类型?各有何特点?教材p193

按数据组织形式分为文本文件和二进制文件。文本文件可读,但占用字节较多,存取慢;二进制文件不可读,但占用字节少,存取快。

四、程序阅读分析

1.写出下面程序的执行结果。135799 #include #include main() {inti,n; FILE*fp; if((fp=fopen(\"temp\{printf(\"cannotcreattempfile\\n\"); exit(0); } for(i=1;i<=10;i++) fprintf(fp,\"%3d\for(i=0;i<=5;i++) {

fseek(fp,i*6L,SEEK_SET); fscanf(fp,\"%d\printf(\"%3d\}

printf(\"\\n\"); fclose(fp); }

五、编程

1.设当前路径下有一个名为“change.txt”文件,现要将文件中所有的小写字母改为大写字母后存放回原文件中,文件中其他字符不变。

#include main(void) {charch,str[1000]; inti=0;

FILE*fp=fopen(\"change.txt\if(fp==NULL)

{printf(\"can'topenfile\\n\");exit(0);} while(!feof(fp)) {ch=fgetc(fp); printf(\"%c\if(ch>='a'&&ch<='z') ch-=32; printf(\"%c\str[i]=ch; i++; } rewind(fp); fputs(str,fp); fclose(fp); fp=NULL; }

2.在c盘根目录下有一个ASCII码文件month.dat,文件中有12个字符串分别为英文1~12月的名字,现从键盘上输入一个表示月份的整数,输出该月份的名字。若输入的整数不在1~12之间,则打印“Illegalmonth”。

答案一:

#include\"stdio.h\"/*头文件1分*/ main()

{inti,n;/*变量定义2分*/ chara[13][11]; FILE*p;

p=fopen(\"c:\\\\month.dat\打开文件1分*/ for(i=1;i<=12;i++)

fscanf(p,\"%s\输入正确2分*/ scanf(\"%d\输入n正确1分*/ if(n>=1&&n<=12)

printf(\"%s\\n\判断及输出正确3分*/

elseprintf(\"Illegalmonth\"); fclose(p);/*关闭文件1分*/ } 答案二 include #include #include intmain() { FILE*fp; charbuff[255]; intm;

memset(buff,0,255); fp=fopen(\"c:\\\\month.dat\fseek(fp,0L,SEEK_SET); printf(\"Typeamonthofintegers:\"); scanf(\"%d\if(m>0&&m<=12) {for(inti=0;i<=m&&!feof(fp);i++) fscanf(fp,\"%s\printf(\"%s\else

{printf(\"Illegalmonth\");} system(\"pause\"); return0; }

3.把字符串“The2008BeiJingOlympicGame!”存于磁盘C的根目录下的“2008.dat”的文件中。 答案一: #include\"stdio.h\" main()

{FILE*fp;char*str=\"The2008BeiJingOlympicGame!\"; if((fp=fopen(\"c:\\\\2008.dat\{printf(\"Notenoughdiskspace!\\n\");exit(0);} fclose(fp);} 答案二

#include

main()

{FILE*fp;char*str=\"The2008BeiJingOlympicGame!\";inti=0; if((fp=fopen(\"c:\\\\2008.dat\{printf(\"Notenoughdiskspace!\\n\");exit(0);} while(str[i]!='\\0'){fputc(str[i],fp);i++;} fclose(fp); }

4.从键盘上输入长度不超过50的一串字符,写入文本文件“abc.dat”中,再将文本文件的内容读出,显示在终端上。

#include main()

{FILE*fp;charstr[51];

printf(\"pleaseinputastringnomorethan50haracters:\\n\");gets(str); if((fp=fopen(\"abc.dat\{printf(\"Diskspaceisnotenough!\\n\");exit(0);} fputs(str,fp);fclose(fp); if((fp=fopen(\"abc.dat\{printf(\"Fileisnotexist!\\n\");exit(0);} while(!feof(fp)) fgets(str,51,fp); printf(\"Thestringinthefileis:\\n\"); puts(str);fclose(fp);}}

5.有两个磁盘文件A.txt和B.txt,各存放一行字母,要求把这两个文件中的信息合并,把B.txt中的信息追加到A.txt信息后面并输出到一个新文件C.txt中。 #include #include main()

{charch[100],*p=ch; FILE*fa,*fb,*fc;

if((fa=fopen(\"A.txt\{printf(\"cannotopenfile\\n\");exit(0);} if((fb=fopen(\"B.txt\{printf(\"cannotopenfile\\n\");exit(0);} if((fc=fopen(\"C.txt\{printf(\"cannotopenfile\\n\");exit(0);} while(!feof(fa))*p++=fgetc(fa);

while(!feof(fb))*p++=fgetc(fb); *p='\\0';

fputs(ch,fc);fclose(fa);fclose(fb);fclose(fc);}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- haog.cn 版权所有 赣ICP备2024042798号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务