文档库 最新最全的文档下载
当前位置:文档库 › C语言习题

C语言习题

选择题:
一、程序设计基础
1.C语言程序的基本单位是( )。
A.程序 B.语句 C.字符 D.函数
2.一个C语言程序总是从( )开始执行的。
A.main函数 B.文件中的第一个函数
C.文件中的第一个子函数调用 D.文件中的第一条语句
3.用C语言编写的源代码程序( )。
A.可立即执行 B.是一个源程序
C.经过编译即可执行 D.经过编译解释才能执行
4.以下叙述正确的是( )。
A.C程序中注释部分可以出现在程序中的任意合适的地方
B.花括号“{”和“}”只能作为函数体的定界符
C.构成C程序的基本单位是函数,所有函数名都可以由用户命名
D.分号是C语句之间的分隔符,不是语句的一部分
5.在一个C语言程序中( )。
A.main函数必须出现在所有函数之前
B.main函数可以出现在其它函数之外的任何位置
C.main函数必须出现在所有函数之后
D.main函数必须出在固定位置
6.要把高级语言编写的源程序转换为目标程序,需要使用( )。
A.编辑程序 B.驱动程序 C.诊断程序 D.编译程序
7.一个C语言程序的执行是从( )。
A.main函数开始,直到main函数结束
B.第一个函数开始,直到最后一个函数结束
C.第一个语句开始,直到最后一个语句结束
D.main函数开始,直到最后一个函数结束
8.以下叙述中正确的是( )。
A.C语言的源程序不必通过编译就可以直接运行
B.C语言中的每条可执行语句最终都将被转换成二进制的机器指令
C.C源程序经编译形成的二进制代码可以直接运行
D.C语言中的函数不可以单独进行编译
9.下列四组选项中,均不是C语言关键字的是( )。
A.define,IF ,Type B.gect,char ,printf
C.include,scanf ,case D.while,go ,pow
10.下面四个选项中,均是不合法的用户标识符的是( )。
A.A,P_0,Do B.float,lao,_A,
C.b-a,goto,int D._123,temp,INT
11.可用作用户标识符的一组标识符是( )。
A.int,define,WORD B.a3_b3,_xyz,IF
C.For,-abc,Case D.2a,DO,sizeof
12.下列四个选项中,均是C语言关键字的是( )。
A.auto,Enum,Include B.switch,typedef,continue
C.signed,union,scanf D.if ,struct,type
13.以下符号中能用作用户标识符的是( )。
A.256 B.int C.scanf D.struct
14.以下选项中,C语言合法的关键字是( )。
A.Switch B.cher C.Case D.default
15.以下符号中不能用作用户标识符的是( )。
A.if B.Switch C.gets D.Case
16.以下选项中

不合法的用户标识符是( )。
A.abc.c B.file C.Main D.printf
17.以下选项中合法的用户标识符是( )。
A.-123 B.Print# C.A$ D.Dim@
18.下列标识符组中,均不合法的用户标识符为( )。
A._0123与ssiped B.del-word与signed
C.list与*jer D.keep%与wind
19.有以下定义:int fun(int n,double x) {……}若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是( )
A.fun(int x,double n ); B.m=fun(10,12.5);
C.fun(x,n); D.int fun(n,x);
20.函数的实参不能是( )。
A.变量 B.常量
C.语句 D.函数调用表达式
21.有以下定义:void fun(int n,double x) {……}若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是( )
A.fun(int x,double n ); B.m=fun(10,12.5);
C.fun(x,n); D.void fun(n,x);
22.定义为void类型的函数,其含义是( )
A.调用函数后,被调用的函数没有返回值
B.调用函数后,被调用的函数不返回值
C.调用函数后,被调用的函数的返回值为任意的类型
D.以上三种说法都是错误的
23.C语言中,函数返回值的类型是由( )决定的。
A.调用函数时临时 B.return语句的表达式类型
C.调用该函数的主调函数类型 D.定义函数时,所指定的函数类型
24.以下说法中正确的是( )
A.实参可以是常量、变量或表达式
B.形参可以是常量、变量或表达式
C.实参可以为任意类型
D.形参应与其对应的实参类型一致
25.以下选项中不属于C语言类型标识符的是( )
A.signed short int B.unsigned long int
C.unsigned int D.long shot
26.下面四个选项中,均是合法整型常量的是( )
A.160,0xffff,011 B.-0xcdf,0la,0xe
C.-01,986.012,0668 D.-0x48a,2e5,0x
27.下面四个选项中,均是不合法浮点数的是( )
A.160,0.12,E3 B.123,2e4.2,.0e5
C.-018,123e4,0.0 D.-e3,.234,1e3
28.下面四个选项中,均是合法转义字符的是( )
A.’\’’, ‘\\’, ‘\n’ B.”\”, ‘\017’, ‘\=’
C.’\018’, ‘\f’, ‘xab’ D.’\0’, ‘\101’, ‘xlf’
29.下面四个选项中,均不是不合法的转义字符的是( )
A.’\=’, ‘\\’, ‘xf’ B.’\1011’, ‘\’, ‘\A’
C.’\011’ ,‘\f’, ‘\1’ D.’\abc’, ‘\101’, ‘xlf’
30.下面四个选项中,均是不正确的八进制数或十六进制数的是( )
A.016,0x8f,018 B.0adc,017,0xa
C.010,-0x11,0x16 D.0a12,7ff,-123
31.下面四个选项中,均是正确的数值常量或字符常

量的是( )
A.0.0,0f,8.9e,‘&’ B.”a”, 3.9E-2.5,1e1,‘\=’
C.’3’, 011,0xff00,0a D.+01,0xabcd,2e2,50
32.在C 语言中,char型数据在内存中的存储形式是( )
A.补码 B.反码 C.原码 D.ASCII码
33.设有int i;char c;float f;以下结果为整型表达式的是( )
A.i+f B.i+c C.c+f D.i+c+f
34.以下的变量定义中,合法的是( )
A.float 3_four =3.4 B.int _abc_=2;
C.double a=1+4e2.0; D.short do =15;
35.下列不正确的转义字符是( )
A.’\\’ B.’\” C.’074’ D.’\0’
36.若有以下说明语句:char s=”\\\\092” ; 则下面正确的是( )
A.使s.的值包含2个字符 B.说明语句不合法
C.使s的值包含6个字符 D.使s的值包含4个字符
37.在执行了a=5;a+=a=5;之后,a的结果为( )
A.5 B.10 C.15 D.20
38.设int x=8, y,z;执行y=z=x++;x=y=z;后,变量x的值是( )
A.0 B.1 C.8 D.9
39.有以下定义和语句char c1=’a’,c2=’f’;printf(“%d,%c\n”,c2-c1,c2-‘a’+’B’);则输出结果是( )
A.2,M B.5,1 C.2,E D.5,G
40.已知各变量的类型说明如下:int k,a,b;unsigned long w=5;double x=1.42;则以下不符合C语言语法的表达式是( )
A.x%(-3) B.w+=-2
C.k=(a=2,b=3,a+b) D.a+=a- =(b=4)*(a=3)
41.以下符合C语言语法的赋值表达式是( )
A.d=9+c+f=d+9 B.d=(9+e,f=d+9)
C.d=9+e,e++,d+9 D.d=9+e++=d+7
42.若变量已正确定义并赋值,下面不符合C语言语法的表达式是( )
A.a=a+7; B.a=7+b+c,a++ C.(int) 12.3%4 D.a=a+7=a+b
43.若有int k=11 ; 则表达式(k++*1/3)的值是( )
A.0 B.3 C.11 D.12
44.设n=10,i=4则执行赋值运算n%=i+1 后,n的值是( )
A.0 B.3 C.2 D.1
45.以下选项中,与k=n++完全等价的表达式是( )
A.k=n,n=n+1 B.n=n+1,k=n
C.k=++n D.k+=n+1
46.若有定义:int a=8,b=5 ,c;执行语句c=a/b+0.4;后,c的值为( )
A.1.4 B.1 C.2.0 D.2
47.下列关于单目运算符++,--的叙述中正确的是( )
A.它们的运算对象可以是任何变量和常量
B.它们的运算对象可以是char型和int型变量,但不能是float型变量
C.它们的运算对象可以是int型变量,但不能是double型和float型变量
D.它们的运算对象可以是char型,int型,float型和double型变量
48.下列算术运算符中,只能用于整型数据的是( )
A.- B.+ C./ D.%
49.有以下定义语句double a,b;int w;若各变量已正确赋值,则下列选项中正确的表达式是( )
A.a=a+b=b++ B.w%a+b C.w=a++=b D.w=++a=b
50.若有如下说明和语句int i=3,j;j= (++i)+(++i) + --i;执行后i,j的值

分别是( )
A.4,13 B.4,14 C.4,12 D.4,15

二、顺序程序设计
1.下列选项中哪一个不是算法的特性之一?( )。
A.有穷性 B.可行性 C.确定性 D.正确性
2.在流程图中,用来表示判断的图形是?( )。
A.平行四边形 B.菱形 C.长方形 D.正方形
3.在流程图中,用来表示输入输出的图形是?( )。
A.平行四边形 B.菱形 C.长方形 D.正方形
4.在流程图中,用来表示处理的图形是?( )。
A.平行四边形 B.菱形 C.长方形 D.正方形
5.若k 为int 型变量,则以下语句( )。
k=8567;
printf("|%-06d|\n",k);
A.输出格式描述不合法 B.输出为|008567|
C.输出为|8567 | D.输出为|-08567|
6.已定义 x 为float 型变量,则语句
x=213.82631;
printf("%-4.2f\n",x );( )。
A.输出格式描述符的域宽不够,不能输出
B.输出为213.83
C.输出为213.82
D.输出为-213.82
7.用getchar 函数可以从键盘读入一个( )。
A.整型变量表达式值 B.实型变量值
C.字符串 D.字符或字符型变量值
8.scanf函数被称为( )输入函数。
A.字符 B.整数 C.格式 D.浮点
9.scanf函数包括在头文件( )中。
A.string.h B.float.h C.stdio.h D.scanf.h
10.设a 为浮点型变量,下列选项中正确的是( )。
A.scanf("%d",&a); B.scanf("%f",a);
C.scanf(&a); D.scanf("%f",&a);
11.以下程序段的输出是( )。
int k=11;
printf("%d,%o,%x",k,k,k);
return 0;
A.11,12,11 B.11,13,13 C.11,013,0xb D.11,13,b
12.scanf("%c%c%c",&a,&b,&c)与scanf("%c %c %c",&a,&b,&c)的输入( )。
A.前者以空格作为间隔 B.都以空格作为间隔
C.前者不以空格作为间隔 D.自动以空格作为间隔


三、选择程序设计
1.判断字符型变量c1是否为小写字母的正确表达式为( )。
A.‘a’<=c1<=’z’ B.(c1>=’A’)&&(c1<=’z’)
C.(‘a’>=c1)||(‘z’<=c1) D.(c1>=’a’)&&(c1<=’z’)
2.已知int x=43,y=0; char ch='A';则表达式(x>y&&ch<'B'&&!y)的值是( )。
A.0 B.语法错 C.1 D.假
3.请从以下表达式中选出a为偶数时值为0的表达式( )。
A.a%2==0 B.!a%2!=0 C.a/2*2-2==0 D.a%2
4.能正确表示a和b同时为正或同时为负的逻辑表达式是( )。
A.(a>=0||b>=0)&&(a<0||b<0) B.(a>=0&&b>=0)&&(a<0&&b<0)
C.(a+b>0)&&(a+b<=0) D.a*b>0
5.能正确表示逻辑关系:“a>=10或a<=0”的C语言表达式是( )。
A.a>=10 or a<=0 B.a>=0|a<=0
C.a>=10&&a<=0 D.a>=10||a<=0
6.在C语言中,if语句后的一对圆括号中,用以决定分支流程的表达式( )。
A.只能用逻辑表达式 B.只能用逻辑表达式或关系表达式
C.只能用关系表达式

D.可用任意表达式
7.为避免嵌套的条件语句if-else的二义性,C语言规定:else与( )配对。
A.编排位置相同的if B.其之前最近的未配对的if
C.其之后最近的if D.同一行上的if
8.下列运算符中优先级最低的是( )。
A.?: B.&& C.+ D.!=
9.下列运算符中优先级最高的是( )。
A.! B.& C.+ D.!=
10.设a=1,b=2,c=3,d=4,则表达式aA.4 B.3 C.2 D.1
11.表达式5>3||8<=(a=10)的结果是( )。
A.0 B.1 C.非0 D.非1
12.若i为整型变量,且有程序段如下,则输出结果是( )。
i=322;
if(i%2==0) printf("####");
else printf("****");
A.#### B.****
C.####**** D.有语法错误,无输出结果
13.以下程序段的输出结果是( )。
int i=0,j=0,k=6;
if((++i>0)||(++j>0)) k++;
printf("%d,%d,%d\n",i,j,k);
A.0,0,6 B.1,0,7 C.1,1,7 D.0,1,7
14.有如下程序段
float x=2.0,y;
if(x<0.0) y=0.0;
else if(x<5.0)y=1.0/x;
else y=1.0;
printf("%f\n",y);
该程序段的输出结果是( )。
A.0.000000 B.0.250000
C.0.500000 D.1.000000
15.若变量都已正确说明,则以下程序段输出为( )。
int a=1,b=2,c,d;
if(a==b) c=d=a;
else c=b;
d=b;
printf("c=%d,d=%d",c,d);
A.c=1,d=1 B.c=1,d=2
C.c=2,d=1 D.c=2,d=2
16.设int a=9,b=8,c=7,x=1;则执行语句if(a>7)if(b>8)if(c>9)x=2;else x=3;后x的值的是( )。
A.0 B.2 C.1 D..3
17.以下程序段,运行后的输出结果是( )。
char m='b';
if(m++>'b') printf("%c\n",m);
else printf("%c\n",m--);
A.a B.b C.c D.d
18.有以下程序段
int a=5,b=4,c=3,d=2;
if(a>b>c)printf("%d\n",d);
else if((c-1>=d)==1)printf("%d\n",d+1);
else printf("%d\n",d+2);
执行后输出结果是( )。
A.2 B.3
C.4 D.编译有错,无结果
19.有如下程序段:
int x=1,a=0,b=0;
switch(x)
{
case 0:b++;
case 1:a++;
case 2:a++;b++;
}
printf("a=%d,b=%d\n",a,b);
该程序段的输出结果是( )。
A.a=2,b=1 B.a=1,b=1 C.a=1,b=0 D.a=2,b=2
20.以下程序段的输出结果是( )。
int a=15,b=21,m=0;
switch(a%3)
{
case 0:m++;break;
case 1:m++;
switch(b%2)
{
default:m++;
case 0:m++;break;
}
}
printf("%d",m);
A.1 B.2 C.3 D.4

四、循环程序设计
1.在下列选项中,没有构成死循环的程序段是( )
A. int i=100;while(1) {i=1%100+1;if(i>100) break;}
B. for(;;);
C. int k=1000;do {--k} while(k)
D. int s=36;while(s>=0) ;++s;
2.C语言的for语句中的表达式可以部分或全部省略,但两个( )不可省略。但当三个表达式均省略后,因缺少判断,物件,循环会无限制地进行下去,形成死循环。
A.“<” B.”++” C.“;” D. “,”
3.C语言的do_while循环中,循环由do开

始,用while结束,而且在while表达式后面的( )不能丢,它表达do_while循环的结束。
A.\n B. “;” C. “%” D.”,”
4.语句while (!e);中条件!e等价于( )。
A.e==0; B. e!=1 C. e!=0 D.~e
5.下面有关for循环的正确描述是( )
A. for循环只能用于循环次数已经确定的情况
B. for循环是先执行循环体语句,后判定表达式
C. 在for循环中,不能用break语句跳出循环体
D. for循环语句中,可以包含多条语句,但要用花括号括起来
6.对于for(表达式1;;表达3)可以理解为( )
A. for(表达式1;0;表达式3)
B. for(表达式1;1;表达式3)
C. 语法错误
D. 执行循环一次
7.在C语言中( )
A. 不能能使用do_while语句构成的循环
B. do_while 语句构成的循环必须用break语句才能退出
C. do_while语句构成的循环,当while语句中的表达式为非0时结束循环
D. do_while语句构成的循环,当while语句中的表达式为0时结束循环
8.执行程序段:
x=-1;
do
{
x=x*x;
} while(!x);
的结果是( )
A. 死循环 B.循环执行2次
C. 循环执行1次 D.有语法错误
9.以下程序的输出结果是( )
#include
int main()
{
int num=0;
while(num<=2)
{
num++;printf(“%d”,num);
}
return 0;
}
A.2 B.1 C.123 D.12
10.有以下程序:
#include
int main()
{
while(putchar(getchar())!=’?’);
return 0;
}
当输入”china?”时,程序的执行结果是( )
A.china B.dijob C.dijob? D.12
11.有以下程序的输出为( )
#include
int main()
{
int y=10;
while(y--);
printf(“y=%d\n”,y);
return 0;
}
A.y=0 B.无限循环,无结果输出
C.y=1 D.y=-1
12.定义如下变量:int n=25 ;则下列循环的输出结果是( )
while(n>22)
{
n--;
printf(“%d”,n);
}
A. 22 23 24 B.24 23 22 C.25 24 23 D.25 24 23 22
13.若有如下程序段:int n=0; while (n++<=2) printf(“%d”,n);则正确的执行结果是( )
A. 3 B.2 C.1 D.123
14.设有程序段:int k=10;while (k=0) k=k-1; ,则下面描述正确的是( )
A. while 循环执行10 B. 循环是无限循环
C. 循环体语句一次也不执行 D. 循环体语句执行一次
15.设有程序段: int x=0,s=0;while(!x!=0) s+=++x;printf (“%d”,s); ,则运行程序段后( )
A. 输出0 B. 输出1
C. 控制表达式是非法的 D. 执行无限次
16.设有程序段:x=y=0;while (x<10) x++; y++; printf(“%d,%d\n”,x,y); ,则运行结果是( )
A.0,0 B.10,1 C.10,10 D.1,10
17.设有程序段: int n=0;while (n++<3);printf(“%d”,n); ,则运行程序结果是( )
A.2 B.3 C.4 D. 以上都不对
18.设有程序段:x

=y=0; while(x<15) y++;x++=+y; printf(“%d,%d”,y,x); ,则运行结果是( )
A.20,7; B.6,12; C.20,8 D.8,20
19.设有程序段:int n=0;while (n++<=2);printf(“%d”,n); 则运行结果是( )
A.2 B.3 C.4 D.有语法错误
20.设有程序段:t=0;while (printf(“*”)) {t++;if (t<3)break;} ,下面描述正确的是( )
A. 其中循环控件表达式与0等价
B. 其中循环控件表达式与’0’等价
C. 其中循环控件表达式是不合法的
D. 以上说法都不对
21.以下能正确计算1×2×3×4×…×10的程序段是( )
A. do {i=1; s=1;s=s*i;i++;} while(i<=10);
B. do {i=1; s=0;s=s*i;i++;} while(i<=10);
C. i=1;s=1;do { s=s*i;i++} while (i<=10);
D. i=1;s=0;do { s=s*i;i++} while (i<=10);
22.以下描述中正确的是______
A. 由于do-while 循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B. do-while循环由do 开始,用while结束,因此在while(表达式)后无需加分号
C. 在do-while循环体中,一定要有能使while后面表达式的值变为“假”的操作
D. do-while循环中,根据情况可以省略while
23.下面程序的运行结果是( )
int y=10;
do{
y--;
} while (--y);
printf(“%d\n”,y--);
A.-1 B.1 C.8 D.0
24.下面程序的运行结果是( )
int a=1,b=10;
do{
b-=a;a++;
} while (b--<0);
printf (“a=%d,b=%d\n”,a,b);
A.a=3,b=11 B.a=2,b=8 C.a=1,b=-1 D.a=4,b=9
25.以下正确的描述是( )
A. continue语句的作用是结束整个循环的执行
B. 只能在循环体内和switch语句内使用break语句
C. 在循环体内,使用break语句和使用continue语句的作用是相同的
D. 从多层循环嵌套中退出时,只能使用goto语句

程序填空题:
一、选择程序设计

1.以下程序段对输入的一个小写字母,将字母循环后移动5个位置后输出。如‘a’变为‘f’,‘w’变成‘b’。请在空中填入正确内容。
char c;c=__①___;
if(c>=’a’&&__②___)
_③____;
else if(c>=’v’&&c<=’z’)
__④___;
putchar(c);
2.以下程序判断输入的年份是否是闰年。
void leapyear(int year)
{
int f;
? if( ? ① ??)
f=1;
? else ② ;
if(f)
printf("%d is a leap year ",y);
else
printf("%d isn’t a leap year ",y);
}
3.以下程序段实现:输入三个整数,按从大到小的顺序进行输出。请在空中填入正确内容。
int x,y,x,c;
scanf("%d%d%d",&x,&y,&z);
if(__①____) {c=y;y=z;z=c;}
if(___②__) {c=x;x=y;y=c;}
if(__③___) {c=z;z=y;y=c;}
printf("%d,%d,%d",___④__);
4.以下程序用于判断a.b.c能否构成三角形,若能,输出YES,否则输

出NO。当给a.b.c输入三角形三条边长时,确定a.b.c能构成三角形的条件是需同时满足三个条件:a+b>c,a+c>b,b+c>a。请填空。
void fun(float a,float b,float c)
{
? ?if(??????????????????????????)printf("YES\n");/*a.b.c能构成三角形*/
?? else printf("NO\n");/*a.b.c不能构成三角形*/
}
5.输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是一个小写字母,则把它变成大写字母;其它字符不变。请在下划线上填入正确的内容。
#include
void fun(char ch)
{?
if(_________①__________)?? ch=ch+32;
else?if(ch>='a'?&&??ch<='z')?? _________②_________;
printf("%c",ch);
}
6.根据以下if语句写出与其功能相同的switch语句(x的值在0~100之间,x为整数)。
if语句:
if(x<60)?? m=1;
else?? if(x<70)??? m=2;
??????? else? if(x<80)?? m=3;
??????????? else? if(x<90)?? m=4;
???????????????????? else? if(x<100)?? m=5;
switch语句:
switch(??____①______? )
{
?? ?_____②_____? ??m=1;break;
case? 6:m=2;break;
case? 7:m=3;break;
case? 8:m=4;break;
___③_______ ??m=5;
}

二、循环程序设计


1.下面程序的功能是计算1-3+5-7+ …… -99+101的值。
#include
int sum()
{
int i,t=1,s=0;
for(i=1;i<=101;i+=2)
{
① ;
s=s+t;
② ;
}
return s;
}
int main()
{
int s=0;
s=sum();
printf("%d\n",s);
return 0;
}
2.下面程序的功能是输出1到100之间每位数的乘积大于每位数的和的数。例如数字26,数位上数字的乘积12大于数字之和8。
#include
int main()
{
int n,k=1,s=0,m;
for(n=1;n<=100;n++)
{
k=1;
s=0;
① ;
while( ② )
{
k*=m%10;
s+=m%10;
③ ;
}
if(k>s)
printf("%d\n",n);
}
return 0;
}
3.下面程序的功能是统计用0至9之间的不同的数字组成的三位数的个数。
#include
int main()
{
int i,j,k,count=0;
for(i=1;i<=9;i++)
{
for(j=0;j<=9;j++)
{
if( ① ) continue;
else
{
for(k=0;k<=9;k++)
{
if( ② )
count++;
}
}
}
}
printf("%d",count);
return 0;
}
4.下面程序的功能是计算S= 0!+1!+2!+…+k! (k>=0)。
#include
long fun(int n)
{
int i;
long s=1;
for(i=

1; ① ;i++)
s*=i;
return( ② );
}
int main()
{
int k,n;
long s;
scanf("%d",&n);
s= ③ ;
for(k=0;k<=n;k++)
s+= ④ ;
printf("%ld\n",s);
return 0;
}
5.下面的程序是用递归算法求a的平方根。求平方根的迭代公式如下:X1=(X0+a/X0)/2,要求迭代精度不超过0.00001。
#include
#include
double mysqrt( double a, double x0 )
{
double x1, y;
x1 = ① ;
if( fabs(x1-x0)>0.00001 )
y = mysqrt( ② );
else y = x1;
return( y );
}
int main()
{
double x;
printf("Enter x: ");
scanf("%lf", &x);
printf("The sqrt of %lf=%lf\n", x, mysqrt( x, 1.0) );
return 0;
}
6.下面的函数sum(int n)完成计算1~n的累加和。
#include
int sum(int n)
{
if(n<=0)
printf("data error\n");
if(n==1)
① ;
else
② ;
}
int main()
{
int n,s=0;
scanf("%d",&n);
s=sum(n);
printf("%d",s);
return 0;
}
7.组合问题,由组合的基本性质可知:
(1) C(m,n)=C(n-m,n)
(2) C(m,n+1)=C(m,n)+C(m-1,n)
公式(2)是一个递归公式,一直到满足C(1,n)=n为止。当n<2*m时,可先用公式(1) 进行简化,填写程序中的空白,使程序可以正确运行。
#include
int combin( int m, int n)
{
int com;
if( n<2*m ) m=n-m;
if( m==0 ) com=1;
else if(m==1) ① ;
else ② ;
return(com);
}
int main()
{
int m,n;
printf("Input m n:");
scanf("%d%d", &m,&n);
printf("The combination numbeers is %d\n", combin(m,n));
return 0;
}
8.下面程序的功能是根据近似公式:π2/6≈ 1/12+1/22+1/32+ …… +1/n2,求π值。
#include
double pi(long n)
{
double s=0.0;
long i;
for(i=1;i<=n;i++)
s=s+ ① ;
return( ② );
}
9.下面的程序的功能是求一维数组中的最小元素。
findmin(int *s,int t,int *k)
{
int p;
for(p=0,*k=p;p if(s[p]① ;
}
int main()
{
int a[10],i,*k=&i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
findmin(a,10,k);
printf("%d,%d\n",*k,a[*k]);
return 0;
}
10.下面程序的功能是计算1-3+5-7+ …… -99+101的值。
int main()
{
int i,t=1,s=0;
for(i=1;i<=101;i+=2)
{
① ;
 

s=s+t;
② ;
}
printf("%d\n",s);
}
11.有以下程序段:
s=1.0;
for(k=1;k<=n;k++)
s=s+1.0/(k*(k+1));
printf("%f\n",s);
填空完成下述程序,使之与上述程序的功能完全相同。
s=0.0;
① ;
k=0;
do
{
s=s+d;
② ;
d=1.0/(k*(k+1));
}while( ③ );
printf("%f\n",s);
12.下面程序的功能是输出1到100之间每位数的乘积大于每位数的和的数。例如数字26,数位上数字的乘积12大于数字之和8。
int main()
{
int n,k=1,s=0,m;
for(n=1;n<=100;n++)
{
k=1;
s=0;
① ;
while( ② )
{
k*=m%10;
s+=m%10;
③ ;
}
if(k>s)
printf("%d",n);
}
return 0;
}
13.下面程序的功能是统计用0至9之间的不同的数字组成的三位数的个数。
int main()
{
int i,j,k,count=0;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
if( ① ) continue;
else for(k=0;k<=9;k++)
if( ② ) count++;
printf("%d",count);
return 0;
}
14.下面程序的功能是输出100以内的个位数为6、且能被3整除的所有数。
int main()
{
int i,j;
for(i=0; ① ;i++)
{
j=i*10+6;
if( ② ) countinue;
printf("%d",j);
}
return 0;
}
15.下面程序的功能是用辗转相除法求两个正整数m和n的最大公约数。
hcf(int m,int n)
{
int r;
if(m {
r=m;
① ;
n=r;
}
r=m%n;
while( ② )
{
m=n;
n=r;
r=m%n;
}
③ ;
}


程序阅读题:
一、程序设计基础
1.以下程序的运行结果是( )
int main()
{
int x=2,y=3,z=1;
printf("%d,%d\n",(x++,++y),z+2);
return 0;
}
2.以下程序的运行结果是( )
int main()
{
int a=3;
printf("%d\n",(a+=a-=a*a));
return 0;
}
3.以下程序的输出结果是( )
int main()
{
int a=1,b=2;
a=a+b;b=a-b;a=a-b;
printf("%d,%d\n",a,b);
return 0;
}
4.以下程序运行后的输出结果是( )
int main()
{
char a='a',b;
printf("%c,",++a);
printf("%c\n",b=a++);
return 0;
}
5.下列程序执行后的结果是( )
int main()
{
int x='f';
 

printf("%c\n",'a'+(x-'a'+1));
return 0;
}
6.下列程序执行后的输出的结果是( )
int main()
{
char x=(char)0xff;
printf("%d\n",x--);
return 0;
}
7.以下程序执行后输出结果是( )
int main()
{
char a;
a='H'-'A'+'2';
printf("%c\n",a);
return 0;
}
8.以下程序执行后输出结果是( )
int main()
{
int m=3,n=4,x;
x=-m++;x=x+8/++n;
printf("%d\n",x);
return 0;
}
9.以下程序执行后输出结果是( )
int main()
{
int a,c=1;
double f=10.0,x;
a=f+=c*=(x=6.5);
printf("%d,%d,%lf,%lf\n",a,c,f,x);
return 0;
}
10.以下程序执行后输出结果是( )
int main()
{
int k=2,i=2,m;
m=(k+=i*=k);
printf("%d,%d\n",m,i);
return 0;
}
11.以下程序执行后输出结果是( )
int main()
{
int x=6,y,z;
x*=18+1;
printf("%d,",x--);
x+=y=z=11;
printf("%d,",x);
x=y==z;
printf("%d\n",-x++);
return 0;
}
12.以下程序执行后输出结果是( )
int main()
{
int a=1,b=4,c=2;
a=(a+b)/c;
printf("%d\n",--a);
return 0;
}

二、顺序程序设计
1.以下程序段执行后,输出结果是( ) 。
int a,b,c;
a=25;
b=025;
c=0x25;
printf("%d %d %d\n",a,b,c);
2.以下程序段运行后,输出结果是( )。
int a;
char c=10;
float f=100.0;
double x;
a=f/=c*=(x=6.5);
printf("%d %d %3.1f %3.1f\n",a,c,f,x);
3.以下程序的运行结果是( )。
#include
void incx()
{
int x=0;
printf("x=%d, ",++x);
}
void incy()
{
static int y=0;
printf("y=%d, ",++y);
}
int main()
{
incx();incy();incx();incy();incx();incy();incx();incy();
return 0;
}
4.以下程序段执行后,输出结果是( )。
int i ;
float j;
i=18;
j=29.4361;
printf("i=%4d,j=%2.2f",i,j);
5.有以下程序段
char ch1,ch2;
int n1,n2;
ch1=getchar();
ch2=getchar();
n1=ch1-'0';
n2=n1*10+(ch2-'0');
printf("%d\n",n2);
运行时输入:12<回车>,执行后输出结果是( )。
6.有以下程序段
char a,b,c,d;
scanf("%c,%c,%d,%d",&a,&b,&c,&d);
printf("%c,%c,%c,%c\n",a,b,c,d);
若运行时人键盘上输入:6,5,65,66<回车>.则输出结果( )。
7.以下程序段
int x=102,y=012;
printf("%2d,%2d\n",x,y);
执行

后输出结果是( )。
8.以下程序段
int m=0xabc ,n=0xabc;
m-=n; printf("%x\n",m);
执行后输出结果是( )。
9.有以下程序段
int m=0 ,n=0;char c;
scanf("%d%c%d",&m,&c,&n);
printf("%d,%c,%d\n",m,c,n);
若从键盘上输入:10A10<回车>,则输出结果是( )。
10.以下程序段的输出结果是( )。
int a=1234;printf("%2d\n",a);
11.分析下列程序段,写出运行结果( )。
double d; float f; long l ;int i;
l=f=i=d=80/7;printf("%d%ld%f%f\n",i,l,f,d);
12.下列程序段的输出结果是(用^代表一个空格符) ( )。
float a=3.1415;printf("|%6.0f|",a);
13.以下程序段的输出结果是( )。
printf("|%0.5f|",12345.678);
14.以下程序段
int a=666,b=888;
printf("%d\n",a,b);
运行后的输出结果是( )。
15.以下程序段
unsigned int a;
int b=-1;
a=b;
printf("%u",a);
运行后的输出结果是( )。
16.以下程序段
int m=32767,n=032767;printf("%d,%o\n",m,n);
执行后输出结果是( )。
17.如下程序段所示,如果运行时,输入18,18,那么b的值( )。
int a,b;
scanf("%d,%o",&a,&b);
b+=a;
printf("%d",b);
18.以下程序段的输出结果是( )。
char c='z';
printf("%c",c-25);
19.若有程序段
int i,j;
scanf("i=%d,j=%d",&i,&j);
printf("i=%d,j=%d\n",i,j);
要求给i赋10,给j赋20,则应应该从键盘输入( )。
20.以下程序段的输出结果是( )。
printf("*%f,%4.3f*",3.14,3.1415);

三、选择程序设计
1.若从键盘输入58,则以下程序段输出的结果是( )。
int a;
scanf("%d",&a);
if(a>50)
printf("%d",a);
if(a>40)
printf("%d",a);
if(a>30)
printf("%d",a);
2.以下程序段输出的结果是( )。
int a=5,b=4,c=3,d;
d=(a>b>c);
printf("%d",d);
3.以下程序段输出的结果是( )。
int x=10,y=20,t=0;
if(x==y)
t=x;x=y;y=t;
printf("%d,%d",x,y);
4.若i=10;则执行下列程序后,变量i的正确结果为( )。
switch(i)
{
case 9:i+=1;
case 10:i+=1;
case 11:i+=1;
default:i+=1;
}
5.以下程序段完成的功能是( )。
int shu;
printf("请输入一个整数;\n");
scanf("%d",&shu);
if(shu<0)
shu=-shu;
printf("%d\n",shu);
6.以下程序段运行后的输出结果是( )。
int a=2,b=1,c=2;
if(a)
if(b<0) c=0;
else c++;
printf("%d\n",c);
7.以下程序段运行

后的输出结果是( )。
int a=2,b=1,c=2;
if(a)
{
if(b<0)
c=0;
}
else c++;
printf("%d\n",c);
8. 运行以下程序段,并输入1,则输出结果是( )。
int x;
printf("请输入一个0-2的整数:");
scanf("%d",&x);
switch(x)
{
case 0:printf("输入0。\n");
case 1:printf("输入1。\n");
case 2:printf("输入2。\n");
default: printf("输入错误! \n");
}
9.运行以下程序段,并输入1,则输出结果是( )。
int x;
printf("请输入一个0-2的整数:");
scanf("%d",&x);
switch(x)
{
case 0:printf("输入0。\n"); break;
case 1:printf("输入1。\n");break;
case 2:printf("输入2。\n");break;
default: printf("输入错误! \n");
}
10.假定w,x,y,z,m均为int型变量,有如下程序段:
w=1;x=2;y=3;z=4;
m=(w m=(m m=(m 则该程序运行后,m的值是( )。
11.请阅读以下程序段:
char c;
c=getchar();
if((c>='A'&&c<'Z'||c>='a'&&c<'z'))
printf("input character is letter\n");
else if(c>='0'&&c<='9')
printf("input character is digit\n");
else
printf("other character");
若运行时输入大写字母A,则上面程序的输出结果是( )。
12.以下程序段的结果是( )。
int i=4,x=3,y=2,z=1;
printf("%d\n",i 13.以下程序段运行后的输出结果是( )。
int a,b,c,d;
a=b=c=1;
d=++a||++b&&++c;
printf("%d%d%d%d\n",a,b,c,d);
14.以下程序段运行后的输出结果是( )。
int a,b,c,d;
a=b=c=1;
d=++a&&++b||++c;
printf("%d%d%d%d\n",a,b,c,d);
15.以下程序段运行后的输出结果是( )。
int a,b,c,d;
a=b=c=1;
d=++a&&++b&&++c;
printf("%d%d%d%d\n",a,b,c,d);
16.以下程序段的运行结果是( )。
int a=2,b=3,c;
c=a;
if(a>b)
c=1;
else if(a==b)
c=0;
printf("%d\n",c);
17.以下程序段的运行结果是( )。
if(2*1==2<2*2==4)
printf("##");
else
printf("**");
18.阅读下列程序段,写出运行结果( )。
int a=12,b=21,m=0;
switch(a%3)
{
case 0:m++;
switch(b%2)
{
default :m++;
case 0:m++;break;
}
}
printf("%d",m);
19.若所有变量都已正确定义为int型,则执行下列程序段后x的值为( )。
x=80;a=10;b=16;y=9;z=0;
if(a if(b!=15)
if(!y) x=81;
else if(!z) x=79;
20.有以下程序段

int n=0,m=1,x=2;
if(!n)x-=1;
if(m)x-=2;
if(x)x-=3;
printf("%d\n",x);
执行后输出结果是( )。

四、循环程序设计
1.下面程序的运行结果是
#include
int main()
{
int i;
for(i=100;i>=0;i-=10);
printf(“%d\n”,i);
return 0;
}
2.下面程序使循环结束的条件是
#include
int main()
{
int i;
for (i=250;i;i-=5);
printf(“%d\n”,i);
return 0;
}
3.下面程序的运行结果是
#include
int main()
{
int a=0, i;
for (i=1;i<=5;i++)
a+=i*i;
printf(“%d\n”,a);
return 0;
}
4.下面程序的运行结果是
#include
int main()
{
int a=0, i=0;
while (a<=6)
{
++i;a==i;
}
printf(“%d\n”,a);
return 0;
}
5.下面程序的运行结果是
#include
int main()
{
int a=0, i=0;
do {++i;a==i;} while (a<=6);
printf(“%d\n”,a);
return 0;
}
6.下面程序的运行结果是
#include
int main()
{
int a=0;
while (a*a*a<=10) ++a;
printf(“a=%d\n”,a);
return 0;
}
7.当运行下面程序时,从键盘键入right?<回车>,则下面程序的运行结果是

#include
int main()
{
char c;
while ((c=getchar())!=’?’)
putchar(++c);
return 0;
}
8.下面程序的运行结果是
#include
int main()
{
int a,s,n,count;a=2;s=0;n=1;count=1;
while(count<=7)
{
n=n*a;s=s+n; ++count;
}
printf(“%d”,s);
return 0;
}
9.执行下面程序后,k值是
#include
int main()
{
int k=1,n=263;
do {
k*=n%10;n/=10;
} while (n);
printf(“%d\n”,k);
return 0;
}
10.下面程序的运行结果是
#include
int main()
{
int x=2;
do
{
printf(“*”);x--;
} while (!x==0);
return 0;
}
11.下面程序的运行结果是
#include
int main()
{
int i=1,a=0,s=1;
do {
a=a+s*i;s=-s;i++;
}while (i<=10);
printf(“a=%d”,a);
return 0;
}
12.当运行以下程序时,从键盘键入1 2 3 4 5 -1 <回车>,则下面程序的运行结果是
#include
int main()
{
int k=0,n;
do {
scanf(“%d”,&n);k+=n;
}while (n!=-1

);
printf(“k=%d n=%d\n”,k,n);
return 0;
}
13.下面程序的运行结果是
#include
int main()
{
int a,i;
for (a=1,i=-1;-1<=i<1;i++)
{
a++; printf(“%2d”,a);
}
printf (“%2d”,i);
return 0;
}
14.下面程序的运行结果是
#include
int main()
{
int i;
for (i=0;i<10;i++);
printf(“%d”,i);
return 0;
}
15.下面程序的运行结果是
#include
int main()
{
int x=-5;
do {
printf(“%3d”,x+=2);
}while (!(x++));
return 0;
}
16.下面程序的运行结果是
#include
int main()
{
int i,j,x=0;
for (i=0;i<3;i++)
{
if(i%3==2) break;
x++;
for (j=0;j<4;j++)
{
if (j%2) break;
x++;
}
x++;
}
printf(“x=%d\n”,x);
return 0;
}
17.设x和y均为int 型变量,则执行以下的循环后,y 值为
for (y=1,x=1;y<=50;y++)
{
if (x>=10) break;
if (x%2==1) { x+=5;continue;}
x-=3;
}
18.下面程序的运行结果是
#include
int main()
{
int i,j;
for (j=10;j<11;j++)
{
for(i=9;i==j-1;i++)
printf(“%d”,j);
}
return 0;
}
19.当运行以下程序时,从键盘键入:ABCdef <回车>,则输出为
#include
int main()
{
char ch;
while ((ch=getchar())!=‘\n’)
{
if (ch>=‘A’&&ch<=’Z’) ch=ch+32;
else if (ch>=‘a’&&ch<=’z’) ch=ch-32;
printf(“%c”,ch);
}
printf(“\n”);
return 0;
}
20.当运行以下程序时,从键盘键入:student# <回车>,则输出结果为
#include
int main()
{
int v1=0,v2=0;char ch;
while ((ch=getchar())!=’#’)
switch(ch)
{
case ’d’:
case ‘t’:
default: v1++;
case ‘a’:v2++;
}
printf(“%d,%d\n”,v1,v2);
return 0;
}
答案:

1. ① t=t*i ② t=t>0?-1:1
2. ① m=n ② m!=0
③ m/=10
3. ① i==j ② k!=i&&k!=j
4. ① i<=n ② s
③ 0 ④ fun(k)
5.① (x0+a/x0)/2 ② a,x1
6.① return 1 ② return sum(n-1)+n
7.① com=n
② com=combin(m,n-1)+combin(m-1,n-1)
8.① 1.0/(float)(i*i) ② sqrt(6*s)
9.① *k=p
10.① t=t*i ② t=t>0?-1:1
11.① d=1 ② k++
③ k<=n
12.① m=n ② m>0
③ m=m/10
13.

① i==j ② k!=i&&k!=j
14.① i<=9 ② j%3!=0
15.① m=n ② r!=0
③ return(n)

程序阅读题:
一、程序设计基础
1.4,3 2.-12
3.2,1 4.b,b
5.g 6.-1
7.9 8.-2
9.16,6,16.0,6.50 10.6,4
11.114,124,-1 12.1

二、顺序程序设计
1.25 21 37 2.1 65 1.5 6.5
3.x=1,y=1,x=1,y=2,x=1,y=3,x=1,y=4,
4.i= 18,j=29.44
5.12 6.6,5,A,B
7.102,10 8.0
9.10,A,10 10.1234
11.111111.00000011.000000 12.|^^^^^3|
13.12345.67800 14.666
15.4294967295 16.32767,32767
17.19 18.a
19.i=10,j=20 20.*3.140000,3.142*

三、选择程序设计
1.585858 2.0
3.20,0 4.13
5.输出从键盘上输入数据的绝对值 6.3
7.2 8.输入1。
输入2。
输入错误!
9.输入1。 10.1
11.input character is letter 12.1
13.2111 14.2211
15.2221 16.2
17.** 18.3
19.79 20.-4


四、循环程序设计
1.-10 2.i=0
3.55 4.10
5.10 6.a=3
7.sjhiu 8.254
9.36 10.**
11.a=-5 12.k=14,n=-1
13.-1 14.10
15.-3 16.x=6
17.6 18.10
19.abcDEF 20.7,7

相关文档