助学指导书
高等教育自学考试 《计算机基础与程序设计》
复习参考题
郑州大学土木工程学院
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.条件“2 第三章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,对应正确的数据输入方法是(其中 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、#include 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(x 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 (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 {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、#include intk=4,n=0; for(;n n++; if(n%2==0)break; k--; 3、下面程序的运行结果是____s=2_____. #include 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、用以下近似公式编一个求的近似值的程序。 411111(1)n13572n1,其中n的值由键盘输入。 #include 第六章数组 一、选择 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 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、#include 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 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] 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 {inta[SIZE][SIZE],i,j,n,sum=0;floataver=0; printf(\"Inputn,m:\"); scanf(\"%d%d\ printf(\"Input%d*%darray:\\n\ for(i=0;i 4、若有n行n列数组,试编写一程序,分别求出两条对角线元素之和。(从键盘输入整型数,n≤20) #include {inta[N][N],n,i,j,k=0,t=0; scanf(\"%d\for(i=0;i n*n个 } 5、从键盘输入n*n个整型数(n≤20),组成n行n列数组,打印出其上三角数组。 #include {inta[SIZE][SIZE],i,j,n; printf(\"Inputn:\"); scanf(\"%d\ printf(\"Input%d*%darray:\\n\ for(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) { } 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;i 第八章指针 一、单项选择 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 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 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 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 {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 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 {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 {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 fseek(fp,i*6L,SEEK_SET); fscanf(fp,\"%d\printf(\"%3d\} printf(\"\\n\"); fclose(fp); } 五、编程 1.设当前路径下有一个名为“change.txt”文件,现要将文件中所有的小写字母改为大写字母后存放回原文件中,文件中其他字符不变。 #include 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 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 {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 {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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务