admin 管理员组文章数量: 1087649
2025年1月1日发(作者:php的网页文件根目录是)
助学指导书
高等教育自学考试
《计算机基础与程序设计》
复习参考题
郑州大学土木工程学院
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)
-Dos
s2000
D.C语言处理程序 2000字处理软件
7.在计算机硬件设备中能用作输入设备是(B)
A.显示器B.键盘C.绘图仪D.打印机
8.在Dos系统中可以用文件扩展名表示文件类型,其中批处理文件的扩展名是(C)
A..OBJB..CC..BATD..BAK
9.具有只读功能的内存储器是指( A )
A.ROM B.RAM
A.2
3
字节
C.硬盘 D.CD-ROM
10.存储量1MB等于( C )
B.2
10
字节C.2
20
字节 D.2
30
字节
11.下面数据中最小数是( A )
A.(0.1100)
2
B.(0.64)
8
C.(0.8125)
10
D.(0.D)
16
处理数据和指令的基本单位是字(Word),一个字的字长是(D)
A.8bitsB.16bits
C.32bitsD.与CPU数据总线有关的bit位数
13.与十进制1100等值的十六进制数是(B)
A.44AB.44CC.54AD.54C
14.与二进制数1011.01等值的十进制数是( C )
是( D )
A.单用户、单任务的操作系统
C.多用户、单任务的操作系统
B.单用户、多任务的操作系统
D.多用户、多任务的操作系统
16.一个二进制数位也称为一个( D )
17.(B)是用助记符来表示指令的符号语言。
A.机器语言?????B.汇编语言C.高级语言?????D.语言处理程序
18.-123的原码是(??A?)
C.01111011?????D.0000101
19.若当前路径为C盘TC子目录,仅将A盘根目录下的文件名第3个字符为P,扩展名为C
的所有文件复制到C盘TC子目录下,一定成功的命令是(C)。
:*P*.:??P*.CC:
:??P*.C ??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:THDATA目录中,如果将它们完整地复制到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)。
s
6.下面哪些是组成MS—DOS操作系统的模块(ABCE)
7.与十进制141等值的数是(ACD)
22
C.(215)
8
D.(8D)
16
E.(8E)
16
8.?X*.C可以代表的文件是(ADE)
A、、、、、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)
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)。
→unsigned→long→→int→long→unsigned
→int→unsigned→→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)
=0,j=0;(i=3,(j++)+i);=1,j=0;j=i=(i=3)*2);
=0,j=1;(j==1)?(i=1):(i=3);=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_.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.指针
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
7.C语言中实型变量分为两种类型:__单精度__和__双精度__。
第三章C的基本语句及顺序结构程序设计
一、选择题
1.如果inti=3,则printf("%d",-i++)的输出结果及i的值是(A)。
A)-34B)-44
C)-43D)-33
2.在printf语句中,格式说明符u表示( C )p47
A.以十进制带符号形式输出整数B.以十六进制带符号形式输出整数
C.以十进制无符号形式输出整数D.以十六进制无符号形式输出整数
3.设charx=′a′;则printf(″x=﹪c,y=﹪cn″,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)
(abs(n^x+e^x)) (fabs(pow(n,x)+pow(x,e)))
(fabs(pow(n,x)+exp(x))) (fabs(pow(x,n)+exp(x)))
7.有以下程序,其中%u表示按无符号整数输出
main()
{unsignedintx=0xFFFF;/*x的初值为十六进制数*/
printf(“%un”,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("%dn",y);
}
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
11以下程序的输出结果是()结果为:10,22,16
main()
{inti=012,j=22,k=0x10;
printf(“%d,%d,%dn”,i,j,k);
}
A.12,22,10B.10,22,10
12.以下程序的输出结果是(C)
main()
{inta=10;
a>10?a--:a++;
a+=a;
printf(″%dn″,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("%dn",p);
}
3、下面程序段的运行结果是()27,15,3
main()
{inta,b,c;
a=(b=(c=3)*5)*2-3;
printf(″%d,%d,%dn″,a,b,c);
}
4.以下程序的正确输出结果为()。a=%d,b=%d
main()
{
}
5、要使下面程序的输出语句在屏幕上显示1,2,34
则从键盘上输入的正确数据格式为:()。1234
main()
inta=2,c=5;
printf("a=%%d,b=%%dn",a,c);
{
chara,b;
intc;
scanf("%c%c%d",&a,&b,&c);
printf("%c,%c,%dn",a,b,c);
}
6、#include
main()
{
}
则程序运行结果是:68。
intx,y;
scanf("%2d%*2s%2d",&x,&y);
printf("%d",x+y);
第四章条件语句与选择结构程序设计
一、单项选择题
1.若有inta=3,b=4,c=5,d=6,x=4;执行下列程序段后x的值是( A )
if(a
{
if(c==d)
x=c;
}
else
x=d++
A.4B.5C.6D.7
2.关于switch中的表达式,正确的说法是( D )
A.它必须是算术表达式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
s=s*s;
printf(″%d″,s);
}
A.9B.12C.16D.25
7.若运行以下程序段时,从键盘输入2473(表示回车),则下面程序的运行结果是(A)。运行加
#include
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.668977B.668966D.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(”%dn”,s);
}
A.0B.1C.2D.3
9.两次运行下面程序,如果从键盘上分别输入6和4,则程序的输出结果是(C)
main()
{intx;
scanf(″%d″,&x);
if(x++>5)printf(″%d″,x);
elseprintf(″%dn″,x-1);}
A.7和5B.6和3C.7和4D.6和4
10.以下有关switch语句的正确说法是(B)。
语句是语句中必须的一部分
B.在switch语句中可以根据需要使用或不使用break语句
语句在switch语句中不可以使用
D.在switch语句中的每一个case都要用break语句
11.以下if语句语法正确的是(A)。
(x>0)printf(“%f”,x)?????
(x>0){x=x+y;printf(“%f”,x);}
elseprintf(“%f”,-x);???????elseprintf(“%f”,-x);
(x>0){x=x+y;printf(“%f”,x);};???
(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>b){if(c>d)x=1;elsex=2;}
(a>b){if(c>d)x=1;}elsex=2;
((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 E.if(x 2.以下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",&x); 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",y); 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 if(x if(x printf(″%d,%d,%d″,x,y,z); } (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=%dn″,a,b);} 请分析该程序的执行过程并写出运行结果。a=2,b=1 四、编程题: 1、已知能被4整除而不能被100整除的或者能被400整除的年份是润年,则判断某一年是否 是润年。答案1:教材p65例题4-9;答案2如下: main() {intyear; scanf("%d",&year); if((year%4==0)&&(year%100!=0)&&(year%400==0)) printf("%disaleapyear!",year); else printf("%disnotaleapyear!",year);} 2、是判断一个学生考试成绩及格与否的程序(成绩A,或B,或C者为及格;成绩为D者不 及格)。答案1:教材p64例题4-8;答案2如下: #include main() {intgrade;charchgrade; printf("pleaseinputascore:n"); scanf("%d",&grade); 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:%cn",chgrade);} 第五章循环语句与循环结构程序设计 一、选择题 1、有如下程序片段: inti=0; while(i++<=2) printf("%d",i); 则i的最终执行结果是:(B) A.2B.3C.4D.无结果 2、若i为整型变量,则以下循环执行次数是(B) for(i=2;i==0;)printf("%d",i--); 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(""%dn",x-=2);}while(!(--x)); 则上面程序段(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("%dn",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=%dn″,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); 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=%dn",a); } 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=%dn″,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=%dt",m); printf("n=%dn",n); printf("-----------n"); } printf("-----END------nnn");} 四、程序阅读分析 1、下面程序段的运行结果是().8 main() { inti=1,s=3; do{s+=i++; if(s%7==0)continue; else++i; }while(s<15); printf("%d",i); } 2、#include main() { intk=4,n=0; for(;n { } printf("k=%d,n=%dn",k,n); n++; if(n%2==0)break; k--; 3、下面程序的运行结果是____s=254_____. #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",s); } 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=%dn″,sum); } gotoloop1; } sum-=x; printf(″sum=%dn″,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=%fn",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",&n); for(i=1;i<=n;i+=2) {b=b*i;s=s+b;} printf("n1!+3!+5!+...+(2*%d!-1)!=%dn",n,s);} 2、用以下近似公式编一个求 的近似值的程序。 4 1 1111 (1) n1 3572n1 ,其中n的值由键盘输入。 #include voidmain() {floatpi=0.0,s=1.0; intn,i; printf("Pleaseinputn="); scanf("%d",&n); for(i=1;i<=n;i++) {pi=pi+s/(2*i-1); s=s*(-1.0);} printf("pi=%fn",pi*4);} 第六章数组 一、选择 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",a,b); C.scanf("%s%s",&a,&b);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[]="hellonworldn"; intn=0; n=strlen(s); printf(″%dn″,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(″%dn″,a[i]); case1:printf(″%dn″,a[3]); case2:printf(″%dn″,a[++i]);break; case3:printf(″%dn″,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′,′b′,′c′,′d′,′e′,′0′};[10];s=″abcde″; [10];strcpy(s,″abcde″)[10];getchar(s); [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 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,%dn",s1,s2);} 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=%dn”,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("%sn",&a[i-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",&a[n]);} 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=%dn",max,maxPos); printf("min=%d,pos=%dn",min,minPos);} 2、编程实现从键盘任意输入20个整数,统计非负数个数,并计算非负数之和。 main() {intinput,sum=0,count=0,Num=20; printf("Pleaseinput20numbers:n"); do {scanf("%d",&input); if(input>=0){sum+=input;count++;} Num--;} while(Num!=0); printf("n%dnumbersofnon-negative'ssum=%dn",count,sum);} 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",&n,&m); printf("Input%d*%darray:n",n,m); for(i=0;i for(j=0;j for(i=0;i for(j=0;j printf("n");} aver=sum/(n*m); printf("nTheaveragevalueofalltheelementsis%fn",aver); for(i=0;i for(j=0;j } 4、若有n行n列数组,试编写一程序,分别求出两条对角线元素之和。(从键盘输入 整型数,n≤20) #include #defineN20 voidmain() {inta[N][N],n,i,j,k=0,t=0; scanf("%d",&n); for(i=0;i for(j=0;j scanf("%d",&a[i][j]); for(i=0;i {k+=a[i][i];t+=a[i][n-1-i];} printf("k=%d,t=%dn",k,t); n*n个 } 5、从键盘输入n*n个整型数(n≤20),组成n行n列数组,打印出其上三角数组。 #include #defineSIZE20 main() {inta[SIZE][SIZE],i,j,n; printf("Inputn:"); scanf("%d",&n); printf("Input%d*%darray:n",n,n); for(i=0;i {for(j=0;j for(i=0;i } printf("n");} 第七章函数 一、选择 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,%dn”,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=%dn”,a,b); change(intx,inty) {intt;t=x,x=y;y=t;} printf(“x=%d,y=%dn“,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",Func(i)); {inta=4,b=5,c; c=plus(a,b); printf("A+B=%dn",c); } 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%dn”,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=%dn”,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=%dn”,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(“%idn”,fac);} } 6、以下程序的运行结果是: inta=5,b=5; chang1() {inta=4; printf(“a1=%d,b1=%dn”,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=%dn”,a,b); } 五、程序设计题 1.???已有变量定义和函数调用语句:intx=57;isprime(x);函数isprime()用来判断一个整形数 number是否为素数,若是素数,函数返回1,否则返回0。请编写主函数与isprime函数。 main() {intx=57; if(isprime(x))printf("n%disaprimenumber!",x); elseprintf("n%disNotaprimenumber!",x);} isprime(intx) {inti,flag=1; if(x==1)flag=0; elseif(x==2)flag=1; else {for(i=2;i return(flag);} 1 、输出结果 #include"string.h" main() {char*s="tNameAddressn"; intl; l=strlen(s); printf("l=%dn",l);} 第八章指针 一、单项选择 1.语句char*s=”tNameAddressn’’;中,指针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(a printf("%d,%d",*p1,*p2); printf("%d,%d",a,b);} A)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,%4dn",a,b,c);}} (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; p=a; while(*p!='u'){printf("%c",*p-32);p++;}} 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=%dn",a); } 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",p); sum=s(p); printf("sum=%dn",sum); } } 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",k); } printf("n"); } sub(int*s) {staticintt=0; t=*s+t; } 4.写出下列程序的运行结果。78 voidmain() {inta[10]={12,25,33,45,56,67,78,89},*p; p=a; printf("%d",(p+=3)[3]); } 5.请阅读分析下列程序,然后写出程序的运行结果。 voidmain(void) { inta[]={1,2,3,4,5,6},*p; p=a; p++; *(p+3)+=2; printf("%dn",*p); printf("%dn",*(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",p); getch(); } 2.编写一个程序,根据从键盘上输入的年历月份,自动输出该月份的英文名称。 #include main() {charmonth[][20]= {"January","February","March","April","May","June","July","August","September","October","Nov ember","December"}; inti=0,n; do {scanf("%d",&n); printf("%s",month[n-1]); i++;}while(i!=3);} 第九章结构体与共用体 一、选择题 1在说明一个结构体变量时系统分配给它的存储空间是(D)。 A.该结构体中第一个成员所需的存储空间 B.该结构体中最后一个成员所需的存储空间 C.该结构体中占用最大存储空间的成员所需的存储空间 D.该结构体中所有成员所需的存储空间的总和 2以下对结构体变量stu1中成员age的非法引用是(B)。 structstudent { intage; intnum; }stu1,*p; p=&stu1; A...p->ageD.(*p).age 3有如下定义: Structdate { Intyear,month,day; }; Structworklist { Charname[20]; Charsex; Structdatebirthday; }person; 对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是(C)。 A.year=1958B.=1958 D.=1958 4.下列程序的输出结果是(D)。 #include main() {structstru{inta,b;charc[6];}; printf(″%dn″,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"},{2,"cd"}},*p=tab; 则表达式*p->y的结果是ab。 6.下面程序的运行结果是LWangBing。 structsamp1{charname[10];intnumber;}; structsamp1test[3]={{"WangBing",10},{"LiYun",20},{"HuangHua",30}}; main() {printf("%c%sn",test[1].name[0],test[0].name); } 三、简答题 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,%xn",a.s[0],a.s[1]); } 3.分析下面程序的运行结果。 unionxx {inta;floatb;}; main() {unionxxy; y.a=10;printf("y.a=%dn",y.a); y.b=1.234;printf("y.b=%fn",y.b); printf("y.a=%d,y.b=%fn",y.a,y.b);} 4.请参阅下面程序,并回答相关问题。 structnode{intx; structnode*next;}; voidprint(structnode*head) {structnode*p; p=head; while(p!=NULL) {printf(″%dn″,p->x); p=p->next; } } (1)函数print完成的功能。输出结构体变量成员值 (2)语句p=p→next;的作用。指针指向下一结构体变量地址 5.写出下面程序的输出结果。10 #include main() {structstru{inta,b;charc[6];}; printf("%dn",sizeof(structstru)); 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%dn”,i1,i2);} 3.写出下列程序的输出结果。11 #defineNX2+3 #defineNYNX*NX main() {inti=0,m=0;for(;i 4.写出下列程序的输出结果。7 #defineMAX(x,y)(x)>(y)?(x):(y) main() {inta=5,b=2,c=3,d=3,t;t=MAX(a+b,c+d)*10;printf(“%dn”,t);} 5.写出下列程序的输出结果。MIN #defineMAX(a,b)a>b #defineEQU(a,b)a==b #defineMIN(a,b)a main() {inta=5,b=6;if(MAX(a,b))printf(“MAXn”);if(EQU(a,b))printf(“EQUn”); if(MIN(a,b))printf(“MINn”);} 6.写出下列程序的输出结果。011 #defineTEST main() {intx=0,y=1,z;z=2*x+y; #ifdefTEST printf(“%d%d”,x,y); #endif printf(“%dn”,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" 函数的作用是指定文件读入一个字符,该文件的打开方式必须是(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.当已经存在一个文件时,执行函数fopen("","r++")的功能是(D)。 (A)打开文件,清除原有的内容 (B)打开文件,只能写入新的内容 (C)打开文件,只能读取原有内容 (D)打开文件,可以读取和写入新的内容 二、填空 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","w+"))==NULL) {printf("cannotcreattempfilen"); exit(0); } for(i=1;i<=10;i++) fprintf(fp,"%3d",i); for(i=0;i<=5;i++) { fseek(fp,i*6L,SEEK_SET); fscanf(fp,"%d",&n); printf("%3d",n); } printf("n"); fclose(fp); } 五、编程 1.设当前路径下有一个名为“”文件,现要将文件中所有的小写字母改为大写字母后存 放回原文件中,文件中其他字符不变。 #include main(void) {charch,str[1000]; inti=0; FILE*fp=fopen("","r+"); if(fp==NULL) {printf("can'topenfilen");exit(0);} while(!feof(fp)) {ch=fgetc(fp); printf("%c",ch); if(ch>='a'&&ch<='z') ch-=32; printf("%c",ch); str[i]=ch; i++; } rewind(fp); fputs(str,fp); fclose(fp); fp=NULL; } 2.在c盘根目录下有一个ASCII码文件,文件中有12个字符串分别为英文1~12月 的名字,现从键盘上输入一个表示月份的整数,输出该月份的名字。若输入的整数不在1~12之间, 则打印“Illegalmonth”。 答案一: #include"stdio.h"/*头文件1分*/ main() {inti,n;/*变量定义2分*/ chara[13][11]; FILE*p; p=fopen("c:","r");/*打开文件1分*/ for(i=1;i<=12;i++) fscanf(p,"%s",a[i]);/*输入正确2分*/ scanf("%d",&n);/*输入n正确1分*/ if(n>=1&&n<=12) printf("%sn",a[n]);/*判断及输出正确3分*/ elseprintf("Illegalmonth"); fclose(p);/*关闭文件1分*/ } 答案二 include #include #include intmain() { FILE*fp; charbuff[255]; intm; memset(buff,0,255); fp=fopen("c:","r"); fseek(fp,0L,SEEK_SET); printf("Typeamonthofintegers:"); scanf("%d",&m); if(m>0&&m<=12) {for(inti=0;i<=m&&!feof(fp);i++) fscanf(fp,"%s",buff); printf("%s",buff);} else {printf("Illegalmonth");} system("pause"); return0; } 3.把字符串“The2008BeiJingOlympicGame!”存于磁盘C的根目录下的“”的文件中。 答案一: #include"stdio.h" main() {FILE*fp;char*str="The2008BeiJingOlympicGame!"; if((fp=fopen("c:","w+"))==NULL) {printf("Notenoughdiskspace!n");exit(0);} fclose(fp);} 答案二 #include main() {FILE*fp;char*str="The2008BeiJingOlympicGame!";inti=0; if((fp=fopen("c:","w"))==NULL) {printf("Notenoughdiskspace!n");exit(0);} while(str[i]!='0'){fputc(str[i],fp);i++;} fclose(fp); } 4.从键盘上输入长度不超过50的一串字符,写入文本文件“”中,再将文本文件的内容读 出,显示在终端上。 #include main() {FILE*fp;charstr[51]; printf("pleaseinputastringnomorethan50haracters:n");gets(str); if((fp=fopen("","w"))==NULL) {printf("Diskspaceisnotenough!n");exit(0);} fputs(str,fp);fclose(fp); if((fp=fopen("","r"))==NULL) {printf("Fileisnotexist!n");exit(0);} while(!feof(fp)) fgets(str,51,fp); printf("Thestringinthefileis:n"); puts(str);fclose(fp);}} 5.有两个磁盘文件和,各存放一行字母,要求把这两个文件中的信息合并,把中的 信息追加到信息后面并输出到一个新文件中。 #include #include main() {charch[100],*p=ch; FILE*fa,*fb,*fc; if((fa=fopen("","r"))==NULL) {printf("cannotopenfilen");exit(0);} if((fb=fopen("","r"))==NULL) {printf("cannotopenfilen");exit(0);} if((fc=fopen("","w"))==NULL) {printf("cannotopenfilen");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);}
版权声明:本文标题:计算机基础与程序设计复习参考题及答案(完整) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1735749981a1688401.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论