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.条件“22&&x<3)||(x<-10)_。

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 D.2,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、#includep49即12+56=68

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、#includek=3,n=2

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)

n1

3572n1

,其中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、#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,%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;javer)printf("a[%d][%d])=%d",i,j,a[i][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);}


本文标签: 程序 文件 变量 函数