C语言理论基础考试习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一部分C语言理论基础
(4) 结构化程序由三种基本结构组成,三种基本结构组成的算法
A) 可以完成任何复杂的任务
B) 只能完成部分复杂的任务
C) 只能完成符合结构化的任务
D) 只能完成一些简单的任务
(7) 以下叙述中正确的是
A) C语言比其他语言高级
B) C语言可以不用编译就能被计算机识别执行
C) C语言以接近英语国家的自然语言和数学语言作为语言的表达形式
D) C语言出现的最晚,具有其他语言的一切优点
第二部分C语言基本语法知识
(2)以下叙述中错误的是
A)C语句必须以分号结束
B)复合语句在语法上被看作一条语句
C)空语句出现在任何位置都不会影响程序运行
D)赋值表达式末尾加分号就构成赋值语句
(4)以下能正确定义且赋初值的语句是
A)int n1=n2=10;
B)char c=32;
C)float f=f+1.1;
D)double x=12.3E2.5;
(5)设有定义:int k=1,m=2; float f=7;,则以下选项中错误的表达式是
A)k=k>=k B)-k++ C)k%int(f) D)k>=f>=m
(6)有以下程序段
int k=0,a=1,b=2,c=3;
k=a<b ? b:a; k=k>c ? c:k;
执行该程序段后,k的值是
A)3 B)2 C)1 D)0
(8).以下不能定义为用户标识符的是
A)Main
B)_0
C)_int
D)sizeof
(11)若整型变量a、b、c、d中的值依次为:1、4、3、2。
则条件表达式a<b?a:c<d?c:d的值
A)1 B)2 C)3 D)4
(15) 以下4组用户定义标识符中,全部合法的一组是
A) _main B) If C) txt D) int
enclude -max REAL k_2
sin turbo 3COM _001
(24)下列关于单目运算符++、--的叙述中正确的是
A) 它们的运算对象可以是任何变量和常量
B) 它们的运算对象可以是char型变量和int型变量,但不能是float型变量
C) 它们的运算对象可以是int型变量,但不能是double型变量和float型变量
D) 它们的运算对象可以是char型变量、int型变量和float 型变量
(26) 以下选项中合法的用户标识符是
A) long B) _2Test C) 3Dmax D) A.dat
(27) 以下非法的赋值语句是
A) n=(i=2,++i); B)j++; C) ++(i+1); D)x=j>0;
(28) 设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是
A)6.500000
B)6
C) 5.500000
D) 6.000000
(33) 以下选项中不属于C语言的类型的是
A) signed short int
B) unsigned long int
C) unsigned int
D) long short
(34) 以下叙述正确的是
A) 可以把define和if定义为用户标识符
B) 可以把define定义为用户标识符,但不能把if定义为用户标识符
C) 可以把if定义为用户标识符,但不能把define定义为用户标识符
D) define和if都不能定义为用户标识符
(35) 在C语言中,合法的长整型常数是
A) 0L
B) 4962710
C) 324562&
D) 216D
(37) 假定x和y为double型,则表达式x=2,y=x+3/2的值是
A) 3.500000
B) 3
C) 2.000000
D) 3.000000
(38) 以下合法的赋值语句是
A) x=y=100
B) d--;
C) x+y;
D) c=int(a+b);
(40) 以下程序的输出结果是
main()
{ int a=3;
printf(“%d\n”,(a+a-=a*a) );
}
A) –6
B)12
C) 0
D) –12
(41) 以下所列的C语言常量中,错误的是
A) 0xFF
B) 1.2e0.5
C) 2L
D) ‘\72’
(42) 下列选项中,合法的C语言关键字是
A) VAR
B) cher
C) integer
D) default
(47) 若已定义x和y为double类型,则表达式x=1,y=x+3/2 的值是
A) 1 B) 2 C) 2.0 D) 2.5
(48) 若变量a、iI已正确定义,且i已正确赋值,合法的语句是
A) a==1 B) ++i; C) a=a++=5; D) a=int(i); (49) 若有以下程序段,
int c1=1,c2=2,c3;
c3=1.0/c2*c1;
则执行后,c3中的值是
A) 0 B) 0.5 C) 1 D) 2
(50) 设有int x=11; 则表达式(x++ * 1/3) 的值是
A) 3 B) 4 C) 11 D) 12
(51) 下列程序的输出结果是
A) 3 B) 3.2 C) 0 D) 3.07
main()
{ double d=3.2; int x,y;
x=1.2; y=(x+3.8)/5.0;
printf("%d \n", d*y);
}
(52) 下列变量定义中合法的是
A) short _a=1-.le-1;
B) double b=1+5e2.5;
C) long do=0xfdaL;
D) float 2_and=1-e-3;
(53) 以下选项中属于C语言的数据类型是
A) 复数型
B) 逻辑型
C) 双精度型
D) 集合型
(62) C语言提供的合法的数据类型关键字是
A) Double B) short C) integer D) Char
(73) C语言程序的基本单位是
A) 程序行B) 语句C) 函数 D) 字符
(5) 设a、b、c为整型数,且a=2、b=3、c=4,则执行完以下语句:
a*=16+(b++)-(++c);
后,a的值是【5】。
第三部分顺序结构:输入与输出
(1)有以下程序
main()
{ int m,n,p;
scanf("m=%dn=%dp=%d",&m,&n,&p);
printf("%d%d%d\n",m,n,p);
}
若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p 中的值为789,则正确的输入是
A)m=123n=456p=789
B)m=123 n=456 p=789
C)m=123,n=456,p=789
D)123 456 789
(2) 有以下程序
main()
{ int m=0256,n=256;
printf("%o %o\n",m,n);
}
程序运行后的输出结果是
A) 0256 0400
B) 0256 256
C) 256 400
D) 400 400
(5) 有以下程序
main()
{ 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);
}
程序运行后的输出结果是
A) 1 65 1 6.5
B) 1 65 1.5 6.5
C) 1 65 1.0 6.5
D) 2 65 1.5 6.5
(6) 有定义语句:int x,y;,若要通过scanf("%d,%d",&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是
A) 11 12<回车>
B) 11,12<回车>
C=11,12<回车>
D=11,<回车>
12<回车>(8)若有以下程序段(n所赋的是八进制数)
int m=32767,n=032767
printf("%d,%o/n",m,n);
执行后输出结果是
A) 32767,32767 B) 32767,032767
C) 32767,77777 D) 32767,077777
(9)若有以下程序段
int m=0xabc,n=0xabc;
m-=n;
printf("%X\n",m);
执行后输出结果是
A) 0X0
B) 0x0
C) 0
D) 0XABC
(11) 设有定义:long x=-123456L;,则以下能够正确输出变量x值的语句是
A)printf(“x=%d\n”,x);
B) printf(“x=%ld\n”,x);
C)printf(“x=%8dL\n”,x);
D)printf(“x=%LD\n”,x);
(12) 以下程序段的输出结果是
int a=1234;
printf("%2d\n",a);
A) 12
B) 34
C) 1234
D) 提示出错、无结果
(18) 以下程序的输出结果是
A) 17,021,0x11 B) 17,17,17
B) 17,0x11,021 D) 17,21,11
main( )
{ int k=17;
printf("%d,%o,%x \n",k,k,k);
}
(23) 请读程序:
#include<stdio.h>
main()
{ int a; float b, c;
scanf("%2d%3f%4f",&a,&b,&c);
printf("\na=%d, b=%f, c=%f\n", a, b, c);
}
若运行时从键盘上输入9876543210<CR>(<CR>表示回车),则上面程序的输出结果是
A) a=98, b=765, c=4321
B) a=10, b=432, c=8765
C) a=98, b=765.000000, c=4321.000000
D) a=98, b=765.0, c=4321.0
(25)以下程序的输出结果是【25】。
# include <stdio.h>
main()
{ int a=2,c=5;
printf("a=%%d,b=%%d\n",a,c); }
A) a=%2,b=%5
B) a=2,b=5
C) a=%%d,b=%%d
D) a=%d,b=%d
(8)若有程序
main()
{ int i,j;
scanf("i=%d,j=%d";&i,&j);
printf("i=%d,j=%d\n",i,j);
}
要求给i赋10,给j赋20,则应该从键盘输入【8】。
(14) 若想通过以下输入语句使a=5.0,b=4,c=3,则输入数据的形式应该是【14】。
int b,c;float a;
scanf("%f,%d,c=%d",&a,&b,&c);
(15) 若想通过以下输入语句给a赋于1,给b赋于2,则输入数据的形式应该是【15】。
int a,b;
scanf("a=%d,b=%d",&a,&b);
第四部分选择结构
(3)设有定义:int a=2,b=3,c=4;,则以下选项中值为0的表达式是
A)(!a==1)&&(!b==0)
B)(a<b)&& !c||1
C)a && b
D)a||(b+b)&&(c-a) (4)设变量a、b、c、d和y都已正确定义并赋值。
若有以下if 语句
if (a<b)
if(c==d) y=0;
else y=1;
该语句所表示的含义是
(6)有以下程序
main()
{ int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d %d %d\n",i,j,k);
}
程序运行后的输出结果是
A)1 2 3
B)2 3 4
C)2 2 3
D)2 3 3
(8)有以下程序
main()
{
int a=3,b=4,c=5,d=2;
if(a>b)
if(b>c)
printf("%d",d++ +1);
else
printf("%d",++d +1);
printf("%d\n",d);
}
程序运行后的输出结果是
A) 2
B) 3
C) 43
D) 44
(10)以下4个选项中,不能看作一条语句的是
A) {;}
B) a=0,b=0,c=0;
C) if(a>0);
D) if(b==0) m=1;n=2;
(11)以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是
A) if((a>B) &&(b>C) ) k=1; B) if((a>B) ||(b>C) ) k=1
else k=0;
C) if(a<=B) k=0; D) if(a>B) k=1;
else if(b<=C) k=1; else if(b>C) k=1;
else k=0;
(12) 有以下程序
main()
{int a=1,b=2,m=0,n=0,k;
k=(n=b>a)||(m=a<b);
printf("%d,%d\n",k,m);
}
程序运行后的输出结果是
A) 0,0
B) 0,1
C) 1,0
D) 1,1
(15)有以下程序
main()
{ 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) 编译时有错,无结果
(16) 已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1 && y+z/2的值是
A) 6 B) 0C) 2 D) 1
(17) 有一函数,,以下程序段中不能根据x值正确计算出y值的是
A) if(x>0) y=1; B) y=0;
else if(x==0) y=0; if(x>0) y=1;
else y=-1; else if(x<0) y=-1;
C)y=0; D)if(x>=0)
if(x>=0); if(x>0) y=1;
if(x>0) y=1 ; else y=0;
else y=-1; else y=-1;
(18) 有以下程序
main()
{ 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\n”,m);
}
程序运行后的输出结果是
A) 1 B) 2 C) 3 D) 4
(24) 设x、y、t均为int型变量,则执行语句:x=y=3;t=++x||++y;后,y的值为
A) 不定值B) 4 C) 3 D) 1
(46) 在下列选项中,不正确的赋值语句是
A) ++t;
B) n1=(n2=(n3=0));
C) k=i==j;
D) a=b+c=1;
(47) 能正确表示a≥10或a≤0的关系表达式是
A)a>=10 or a<=0
B)a>=10│a<=0
C)a>=10││a<=0
D)a>=10 ││a<=0
(2)以下程序运行后的输出结果是
main()
{
int a=3,b=4,c=5,t=99;
if(b<a&&a<c) t=a;a=c;c=t;
if(a<c&&b<c) t=b;b=a;a=t;
printf("%d%d%d\n",a,b,c);
}
(3)以下程序运行后的输出结果是
main()
{
int a,b,c
a=10;b=20;c=(a%b<1)||(a/b>1);
printf("%d %d %d\n",a,b,c);
}
(5)有以下程序
main( )
{ int n=0,m=1,x=2;
if(!n) x-=1;
if(m) x-=2;
if(x) x-=3;
printf(“%d\n”,x);
}
执行后输出结果是【5】。
(6) 以下程序运行后的输出结果是【6】。
main()
{ int p=30;
printf (“%d\n”,(p/3>0 ? p/10: p%3));
}
(9)若有以下程序
main()
{ int a=4,b=3,c=5,t=0;
if(a<b)t=a;a=b;b=t;
if(a<c)t=a;a=c;c=t;
printf("%d %d %d\n",a,b,c);
}
执行后输出结果是【9】。
(10)以下程序运行后的输出结果是[10] 。
main()
{ int x=10,y=20,t=0;
if(x==y)t=x;x=y;y=t;
printf(“%d,%d \n”,x,y);
}
(15) 若x为int类型,请以最简单的形式写出与逻辑表达式!x等价的C语言关系表达式[15] 。
第五部分:循环结构
(3)有以下程序
main()
{ int k=5,n=0;
while(k>0)
{ switch(k)
{ default : break;
case 1 : n+=k;
case 2 :
case 3 : n+=k;
}
k--;
}
printf("%d\n",n);
}
程序运行后的输出结果是
A)0
B)4
C)6
D)7
(4)有以下程序
main()
{
int a=1,b;
for(b=1;b<=10;b++)
{
if(a>=8) break;
if(a%2==1) { a+=5; continue;}
a-=3;
}
printf("%d\n",b);
}
程序运行后的输出结果是
A)3
B)4
C)5
D)6
(12) 有以下程序段
int n=0,p;
do{scanf(“%d”,&p);n++;}while(p!=12345 &&n<3); 此处do—while循环的结束条件是
A) P的值不等于12345并且n的值小于3
B) P的值等于12345并且n的值大于等于3
C) P的值不等于12345或者n的值小于3
D) P的值等于12345或者n的值大于等于3
(17) 以下程序的输出结果是
main()
{ int num= 0;
while(num<=2)
{ num++; printf(“%d\n”,num);
}
A} 1 B} 1 C}1 D} l
2 2 2
3 3
4
(18) 以下程序的输出结果是
main()
{ int a, b;
for(a=1, b=1; a<=100; a++)
{ if(b>=10) break;
if (b%3= =1)
{ b+=3; continue; }
}
printf(“%d\n”,a);
}
A) 101
B) 6
C) 5
D) 4
(19) 有以下程序段
int k=0;
while(k=1)k++;
while 循环执行的次数是
A) 无限次
B) 有语法错,不能执行
C) 一次也不执行
D) 执行1次
(28) 以下程序的输出结果是
A) 10 1 9 2
B) 9 8 7 6
C) 10 9 9 0
D) 10 10 9 1
main( )
{ int x=10,y=10,I;
for(i=0;x>8;y=++i)
printf("%d,%d ",x--,y);
}
(29) 以下程序的输出结果是
A) 2 0
B) 3 1
C) 3 2 1
D) 2 1 0
main( )
{ int n=4;
while(n--)printf("%d ",--n);
}
(32) 执行以下程序后,输出的结果是
A) -1 B) 1 C) 8 D) 0
main ()
{ int y=10;
do { y - -;} while(- - y);
printf("%d\n",y - -);
}
(34) 执行语句: for(i=l:i++<4:);后,变量i的值是
A) 3
B) 4
C) 5
D) 不定
(38) 假定a和b为int型变量,则执行以下语句后b的值为a=1; b=10;
do
{ b-=a; a++; }
while (b--<0) ;
A) 9 B) -2 C) -1 D) 8
(47) 请读程序片段:
#include<stdio.h>
main()
{ int a, b;
for(a=1;b=1;a<=100;a++)
{ if(b>=20) break;
if(b%3==1)
{b+=3;
continue;
}
b-=5;
}
printf("%d\n",a);
}
上面程序的输出结果是
A) 7
B) 8
C) 9
D) 10
(49) 请读程序:
#include<math.h>
#include<stdio.h>
main()
{ float x,y,z;
scan("%f%f",&x,&y);
z=x/y;
while(1)
{ if(fabs(z)>1.0)
{ x=y; y=z; z=x/y;
}
else break
}
printf("%f\n",y);
}
若运行时从键盘上输入3.6 2.4<CR>(<CR>表示回车),则输出的结果是
A) 1.500000
B) 1.600000
C) 2.000000
D) 2.400000
(51) 语句while(!E);中的条件!E等价于。
A)E = = 0
B)E!=1
C)E!=0
D)~E
(6) 以下程序的输出结果是【7】。
main()
{int s,i;
for(s=0,i=1;i<3;i++,s+=i);
printf("%d\n",s);
}
(7)以下程序运行后的输出结果是【8】。
main()
{ int i=10, j=0;
do
{ j=j+i; i-;
while(i>2);
printf(“%d\n”,j);
}
(9) 下面程序的功能是:计算1到10之间奇数之和及偶数之和,请填空。
#include <stdio.h>
main()
{ int a, b, c, i;
a=c=0;
for(i=0;i<10;i+=2)
{ a+=i;
[10] ;
c+=b;
}
printf("偶数之和=%d\n",a);
printf("奇数之和=%d\n",c-11);
}
(10) 下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。
#include <stdio.h>
main()
{ int i, j;
for(i=0; [11] ; i++)
{ j=i*10+6;
if( [12] ) continue;
printf("%d",j);
}
}
(11) 设i,j,k均为int型变量,则执行完下面的for循环后,k的值为【13】。
for(i=0,j=10;i<=j;i++,j--)
k=i+j;
(13) 下面程序的输出是【16】。
main()
{ int x=2;
while(x--);
printf("%d\n", x);}
第六部分:字符型数据
(1)以下叙述中正确的是
A)调用printf函数时,必须要有输出项
B)使用putchar函数时,必须在之前包含头文件stdio.h
C)在C语言中,整数可以以十二进制、八进制或十六进制的形式输出
D)调用getchar函数读入字符时,可以从键盘上输入字符所对应的ASCII码
(3)有以下程序
#include <stdio.h>
main()
{ char c1='1',c2='2';
c1=getchar(); c2=getchar(); putchar(c1); putchar(c2); }
当运行时输入:a<回车> 后,以下叙述正确的是
A)变量c1被赋予字符a,c2被赋予回车符
B)程序将等待用户输入第2个字符
C)变量c1被赋予字符a,c2中仍是原有字符2
D)变量c1被赋予字符a,c2中将无确定值
(4)数字字符0的ASCII值为48,若有以下程序
main()
{ char a='1',b='2';
printf("%c,",b++);
printf("%d\n",b-a);
}
程序运行后的输出结果是
A)3,2
B)50,2
C)2,2
D)2,50
(8) 已定义ch为字符型变量,以下赋值语句中错误的是
A) ch="\";
B) ch=62+3;
C) ch=NULL;
D) ch="\xaa";
(9) 已定义c为字符型变量,则下列语句中正确的是
A) c=‘97’;
B) c="97";
C) c=97;
D) c="a";
(11) 已知大写字母A的ASCII码值是65,小写字母a的ASCII 码是97,则用八进制表示的字符常量‘\101’是
A) 字符A
B)字符a
C)字符e
D)非法的常量
(23) 在C语言中,合法的字符常量是
A) ‘\084'
B) ‘\x43'
C) ‘ab'
D) “\0”
(25) 已知字母A的ASCII码为十进制的65,下面程序的输出是
A) 67,D
B) B,C
C) C,D
D) 不确定的值
main()
{ char ch1,ch2;
ch1='A'+'5'-'3';
ch2='A'+'6'-'3';
printf("%d,%c\n",ch1,ch2);}
(28) 有以下程序:
# include<stdio.h>
main()
{ int c;
while((c=getchar())!='\n')
{ switch(c-'2')
{ case 0:
case 1: putchar(c+4);
case 2: putchar(c+4);break;
case 3: putchar(c+3);
case 4: putchar(c+2);break; } }
printf("\n"); }
从第一列开始输入以下数据,<CR>代表一个回车符。
2743<CR>
程序的输出结果是【28】。
A) 66877
B) 668966
C) 6677877
D) 668876
(3)已知字符A的ASCII代码值为65,以下程序运行时若从键盘输入:B33<回车>.输出结果是
#include "stdio.h"
main()
{
char a,b;
a=getchar(); scanf("%d",&b);
a=a-'A'+'0';
b=b*2;
printf("%c %c\n",a,b);
}
(5)有以下程序
#include <stdio.h>
main( )
{ char ch1,ch2; int n1,n2;
ch1=getchar(); ch2=getchar();
n1=ch1-‘0’;n2=n1*10+(ch2-‘0’);
printf(“%d\n”,n2);
}
程序运行时输入:12<回车>,执行后输出结果是【5】。
(7) 执行以下程序后,输出‘#’号的个数是【7】。
#include <stdio.h>
main()
{ int i,j;
for(i=1; i<5; i++)
for(j=2; j<=i; j++) putchar('#');
}
(10) 下列程序段的输出结果是【10】。
int n=’c’;
switch(n++)
{ default: printf(“error”);break;
case ‘a’:case ‘A’:case ‘b’:case ‘B’:printf(“good”);break;
case ‘c’:case ‘C’:printf(“pass”);
case ‘d’:case ‘D’:printf(“warn”);
}
(11) 若输入字符串:abcde<回车>,则以下while循环体将执行[11] 次。
While((ch=getchar())==’e’) printf(“*”);
(1)以下关于函数的叙述中正确的是
A)每个函数都可以被其它函数调用(包括main函数)
B)每个函数都可以被单独编译
C)每个函数都可以单独运行
D)在一个函数内部可以定义另一个函数
(2)设函数fun的定义形式为
void fun(char ch, float x ) { …}
则以下对函数fun的调用语句中,正确的是
A)fun("abc",3.0);
B)t=fun('D',16.5);
C)fun('65',2.8);
D)fun(32,32);
(3)有以下程序
int f1(int x,int y){return x>y?x:y;}
int f2(int x,int y){return x>y?y:x;}
main()
{ int a=4,b=3,c=5,d=2,e,f,g;
e=f2(f1(a,b),f1(c,d));
f=f1(f2(a,b),f2(c,d));
g=a+b+c+d-e-f;
printf("%d,%d%d\n",e,f,g);
}
程序运行后的输出结果是
A)4,3,7
B)3,4,7
C)5,2,7
D)2,5,7
(4)有以下程序
#define P 3
#define F(int x) { return (P*x*x);}
main()
{
printf("%d\n",F(3+5));
}
程序运行后的输出结果是
A)192
B)29
C)25
D)编译出错
(5) 若程序中定义了以下函数
double myadd(double a,double B)
{ return (a+B) ;}
并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是
A) double myadd(double a,B) ;
B) double myadd(double,double);
C) double myadd(double b,double A) ;
D) double myadd(double x,double y);
(9) 有以下函数定义:
void fun( int n, double x) { …… }
若以下选项中的变量都已正确定义并赋值,则对函数fun的正确
调用语句是
A) fun(int y,double m);
B) k=fun(10,12.5);
C) fun(x,n);
D) vold fun(n,x);
(17) 以下函数值的类型是
fun ( float x )
{ float y;
y= 3*x-4;
return y;
}
A) int
B) 不确定
C) void
D) float
(20) 有如下函数调用语句
func(rec1,rec2+rec3,(rec4,rec5));
该函数调用语句中,含有的实参个数是
A) 3
B) 4
C) 5
D) 有语法错
(26) 请读程序:
#include<stdio.h>
func( int a, int b)
{ int c;
c=a+b;
return c;
}
main()
{ int x=6, y=7, z=8, r;
r=func( x--,y==,x+y),z--);
printf("%d\n",r);
}
上面程序的输出结果是
A) 11
B) 20
C) 21
D) 31
二、填空题
(1)有以下程序 int sub(int n) { return (n/10+n%10); }
main()
{ int x,y;
scanf("%d",&x);
y=sub(sub(sub(x)));
printf("%d\n",y);
}
若运行时输入:1234<回车>,程序的输出结果是【1】。
(5) 以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果。
请填空。
int fun(int n)
{ int n=0,f=1, i;
for (i=1; i<=n; i++)
{ m+=i*f;
f= 【6】;
}
return m;
}
main()
{ printf("m=%d\n", 【7】);}
(6) 请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。
【8】(double,double);
main()
{ double x,y;
scanf("%1f%1f",&x,&y);
printf("%1f\n",max(x,y));
}
double max(double a,double b)
{ return (a>b ? a:b) :}
(9) 函数pi的功能是根据以下近似公式求π值:
(π*π)/6=1+1/(2*2)+1/(3*3)+..+1/(n*n)
现在请你在下面的函数中填空,完成求π的功能。
#include “math.h”
double pi(long n)
{ double s=0.0; long i;
for(i=1;i<=n;i++)s=s+ [11] ;
return(sqrt(6*s));
}
(10) 下面程序的输出是【12】。
unsigned fun6( unsigned num)
{ unsigned k=1;
do {
k*=num%10;
num/=10;
} while(num);
return(k);}
main()
{ unsigned n=26;
printf("%d\n", fun6(n));
}
第九部分(一) :一维数组与指针
(6)有以下程序
main()
{
int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++<7) if(p[i]%2) j+=p[i];
printf("%d\n",j);
}
程序运行后的输出结果是
A)42
B)45
C)56
D)60
(9)有以下程序
#define N 20
fun(int a[],int n,int m)
{ int i,j;
for(i=m;i>=n;i--)
a[i+1]=a[i];
}
main()
{
int i,a[N]={1,2,3,4,5,6,7,8,9,10};
fun(a,2,9);
for(i=0;i<5;i++)
printf("%d",a[i]);
}
程序运行后的输出结果是
A)10234
B)12344
C)12334
D)12234
(16) 有以下程序
main()
{ int x[]={1,3,5,7,2,4,6,0},i,j,k; for(i=0;i<3;i++)
for (j=2;j>=i;j--)
if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;} for(i=0;i<3;i++)
for(j=4;j<7-i;j++)
if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}
for (i=0;i<3;i++)
for(j=4;j<7-i;j++)
if(x[j]>x[j+1]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}
for (i=0;i<8;i++) printf("%d",x[i]);
printf("\n");
}
程序运行后的输出结果是:
A) 75310246
B) 01234567
C) 76310462
D) 13570246
(18) 有以下程序
void swap1(int c[])
{ int t;
t=c[0];c[0]=c[1];c[1]=t;
}
void swap2(int c0,int c1)
{ int t;
t=c0;c0=c1;c1=t;
}
main( )
{ int a[2]={3,5},b[2]={3,5};
swap1(A) ; swap2(b[0],b[1]);
printf(“%d%d %d %d\n”,a[0],a[1],b[0],b[1]); }
其输出结果是
A) 5 3 5 3
B) 5 3 3 5
C) 3 5 3 5
D) 3 5 5 3
(20) 有以下程序
void sort(int a[],int n)
{ int i,j,t;
for(i=0;i<n-1;i+=2)
for(j=i+2;j<n;j+=2)
if(a[i]<a[j]) { t=a[i];a[i]=a[j];a[j]=t;}
}
main()
{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(aa,10);
for(i=0;i<10;i++) printf(“%d”,aa[i]); printf(“\n”);
}
其输出结果是
A) 1,2,3,4,5,6,7,8,9,10,
B) 10,9,8,7,6,5,4,3,2,1,
C) 9,2,7,4,5,6,3,8,1,10,
D) 1,10,3,8,5,6,7,4,9,2,
(29) 以下程序的输出结果是
f(int b[],int m,int n)
{ int i,s=0;
for(i=m;i<n;i=i+2) s=s+b[i];
return s;
}
main()
{int x,a[]={1,2,3,4,5,6,7,8,9};
x=f(a,3,7);
printf("%d\n",x);
}
A) 10
B) 18
C) 8
D) 15
(31) 以下程序的输出结果是
main()
{ int i, a[10];
for(i=9;i>=0;i--) a[i]=10-i;
printf(“%d%d%d”,a[2],a[5],a[8]);
}
A) 258
B) 741
C) 852
D) 369
(35) 以下程序的输出结果是
A) 20
B) 21
C) 22
D)23
main()
{ int i, k, a[10], p[3];
k=5;
for (i=0;i<10;i++) a[i ]=i;
for (i=0;i<3;i++) p[i ]=a[i *(i+1)]; for (i=0;i<3;i++) k+=p[i] *2; printf(“%d\n”,k);
}
(38) 有如下程序
main()
{ int n[5]={0,0,0},i,k=2;
for(i=0;i<k;i++) n[i]=n[i]+1;
printf(“%d\n”,n[k]);
}
该程序的输出结果是
A) 不确定的值
B) 2
C) 1
D) 0
(48) 以下程序的输出结果是
main()
{ int i,k,a[10],p[3]:
K=5;
for (i=0;i<10;i++) a[i]=i;
for (i=0;i<3;i++) p[i]=a[i*(i+1)];
for (i=0;i<3;i++) k+=p[i]*2;
printf("%d\n",k);
}
A) 20
B) 21
C) 22
D)23
(55) 阅读下列程序:
main( )
{ int n[3],i,j,k;
for(i=0;I<3;i++) n[i]=0;
k=2;
for (i=0;I<k;i++)
for (j=0;j<k;j++) n[j]=n[i]+1;
printf("%d\n",n[1]); )
下述程序运行后输出结果是
A) 2
B) 1
C) 0
D} 3
(4) 若已定义:int a[10], i;,以下fun函数的功能是:在第一个循环中给前10个数组元素依次赋1、2、3、4、5、6、7、8、9、10;在第二个循环中使a数组前10个元素中的值对称折叠,变成1、2、3、4、5、5、4、3、2、1。
请填空。
fun( int a[ ])
{ int i;
for(i=1; i<=10; i++) 【5】=i;
for(i=0; i<5; i++) 【6】=a[i];
}
(7) 以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。
请填空。
main( )
{ float x[1000],sum=0.0,ave,a;
int n=0,i;
printf("Enter mark:\n");scanf("%f",&a);
while(a>=0.0&& n<1000)
{ sum+ 【9】;x[n]= 【10】;
n++;scanf("%f",&a);
}
ave= 【11】;
printf("Output:\n");
printf("ave=%f\n",ave);
for (I=0;I<n;I++)
if 【12】printf (“%f\n”,x[I]);
}
(15) 下面程序的输出是【23】。
main()
{ int arr[10],i,k=0;
for( i=0; i<10; i++)
arr[i]=i;
for( i=1; i<4; i++)
k+=arr[i]=i;
printf( '%d\n", k);}
(17) 以下程序统计从终端输入的字符中每个大写字母的个数。
用#号作为输入结束标志,请填空。
#include <stdio.h>
#include <ctype.h>
main( )
{ int num[26],i; char c;
for(i=0; i<26; i++) num[i]=0;
while( 【25】!='#') /*统计从终端输入的大写字母个数*/
if( isupper(c)) num[c-65]+=1;
for(i=0; i<26; i++) /*输出大写字母和该字母的个数*/
if(num[i]) printf("%c:%d\n,i 【26】, num[i]);
}
第九部分:二维数组与指针
(4) 以下能正确定义二维数组的是
A) int a[][3];
B) int a[][3]= {2*3};
C) int a[][3]={};
D) int a[2][3]={{1},{2},{3,4}};
(7) 有以下程序
int f(int b[][4])
{ int i,j,s=0;
for(j=0;j<4;j++)
{ i=j;
if(i>2) i=3-j;
s+=b[i][j];
}
return s;
}
main( )
{ int a[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}};
printf(“%d\n”,f(A) );
}
执行后的输出结果是
A) 12
B) 11
C) 18
D) 16
(11) 以下能正确定义数组并正确赋初值的语句是
A) int N=5,b[N][N];
B) int a[1][2]={{1},{3}};
C) int c[2][]={{1,2},{3,4}};
D) int d[3][2]={{1,2},{34}};
(12) 有以下程序
main()
{ int m[][3]={1,4,7,2,5,8,3,6,9};
int i,j,k=2;
for(i=0;i<3;i++)
{ printf("%d",m[k][i]); }
}
执行后输出结果是
A) 4 5 6
B) 2 5 8
C) 3 6 9
D) 7 8 9
(14) 有以下程序
main()
{ int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,s=0
for(i=0;i<4;i++) s+=aa[i][1];
printf(“%d\n”,s);
}
程序运行后的输出结果是
A) 11
B) 19
C) 13
D) 20
(16) 以下程序的输出结果是
main()
{ int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;
for(i=0;i<3;i++)
for(j=i;j<=i;j++) t=t+b[i][b[j][j]];
printf("%d\n",t);
}
A) 3
B) 4
C) 1
D) 9
(18) 以下程序的输出结果是
main()
{ int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};
printf(“%d%d%d%d\n”,a[0][3],a[1][2],a[2][1],a[3][0]); }
A) 0650
B) 1470
C) 5430
D) 输出值不定
(19) 以下程序的输出结果是
A) 1,5,9
B) 1,4,7
C) 3,5,7
D)3,6,9 main()
{ int i, x[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++) printf(“%d,”,x[i][2-i]); }
(20) 以下程序的输出结果是
A) 18
B) 19
C) 20
D)21
main()
{ int a[3][3]={ {1,2},{3,4},{5,6} },i,j,s=0; for(i=1;i<3;i++)
for(j=0;j<=i;j++)s+=a[i][j];
printf(“%dn”,s);
}
(22) 有如下程序
main0
{ int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=1;i<3;i++)
for(j=0;j<i;j++) s+=a[i][j]
printf(“%d\n”,s);
}
该程序的输出结果是
A) 18
B) 19
C) 14
D) 21
(26) 以下程序的输出结果是
A)14
B)0
C)6
D)值不确定
main()
{ int n[3][3] , i, j;
for ( i=0; i<3; i++ )
for ( j=0; j<3; j++ ) n[i][j]=i+j;
for ( i=0; i<2; i++ )
for ( j=0; j<2; j++ ) n[i+1][j+1]+= n[i][j]; printf(“%d\n”,n[i][j]);
}
int x[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是
for(i=0;i<3;i++) printf("%d",x[i][2-i]);
A) 1 5 9
B) 1 4 7
C) 3 5 7
D) 3 6 9
(5) 以下程序运行后的输出结果是【9】
main()
{ int i,j,a[][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
for(j=i+1;j<3;j++) a[j][i]=0;
for(i=0;i<3;i++)
{ for(j=0;j<3;j++) printf("&d ", a[i][j]);
printf("\n");
}
}
(6) 若有以下程序
main()
{ int a[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0} };
int i,j,s=0;
for(i=0;i<4;i++)
{ for(j=0;j<4;j++)
{ if(a[i][j]<0)continue;
if(a[i][j]==0)break;
s+=a[i][j];
}
}
printf("%d\n",s);
}
执行后输出的结果是【10】。
(10) 以下程序中,主函数调用了LineMax函数,实现在N行M 列的二维数组中,找出每一行上的最大值。
请填空。
#define N 3
#define M 4
void LineMax(int x[N][M])
{ int i,j,p;
for(i=0; i<N;i++)
{ p=0;
for(j=1; j<M;j++)
if(x[i][p]<x[i][j]) 【17】;
printf(“The max value in line %d is %d\n”, i,【18】);
}
}
main()
{ int x[N][M]={1,5,7,4,2,6,4,3,8,2,3,1}; 【19】
}
(13) 阅读下列程序:
#include<stdio.h>
main()
{ int i, j, row, column,m;
static int array[3][3]={{100,200,300}, {28,72,-30},
{-850,2,6}
};
m=array[0][0];
for (i=0; i<3; i++)
for (j=0; j<3; i++)
if (array[i][j]<m)
{ m=array[i][j]; row=i; column=j;} printf("%d,%d,%d\n",m,row,column); }
上述程序的输出结果是【22】。