C理论自测题及参考答案(第2次) 下载本文

内容发布更新时间 : 2024/5/20 9:43:08星期一 下面是文章的全部内容请认真阅读。

一、单选题

1. 有声明:int b;double d; ,要求当键盘输入“2,3”时b得到2且d得到3.0,则正确的语句是 。

A.scanf(\C.scanf(\2. 有以下程序

main()

{ int m,n,p;

scanf(\}

若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是 。 A. m=123n=456p=789 B. m=123 n=456 p=789 C. 123,456,789 D. 123 456 789

3. 已知字符A的机内编码是65,以下语句中不能输出字符B的是 。

A.putchar(?B?); B. putchar(”B”); C. putchar(66); D. putchar(?\\x41?+1); 4.执行程序段int a=0,b=4,k=2; k = a+1>0||++a<0 && !b--<=0; printf(“%d,%d,%d”, k,a,b);后输出结果是 。

A.1,1,3 B.1,1,4 C.1,0,3 D.1,0,4 5. 执行程序段int i,j; j=(i=1,i+9)>9 ? i++||++i:++i;后,变量i,j的值分别是 .

A.10,10 B.2,2 C.2,3 D.2,1

6. 执行程序段int x=2,y=3,z; z= ++x <= y-- ? --y==1 ? y-- : --y : y--;后,变量x,y,z的值分别是 .

A.3,0,1 B.2,0,0 C.3,1,1 D.2,2,1

7. 执行以下程序段后,变量x,w的值分别是 .

A.0,1 B.1,1 C.2,1 D.3,2 int x=0,y=1,z=2,w; if(x++)w=x;

else if(x++&&y>=1)w=y; else if(x++&&z>1)w=z;

8. 以下程序段中不会出现无穷循环的是 。

A.for(y=0,x=1;x>++y;x=i++)i=x; B.for(;;x+=i); C.while(x=8)x--;

D.for(i=10,sum=0;sum<=i;)sum=--i; 9. 逻辑异或运算可描述为“a xor b”,其中a和b为参加运算的两个操作数,运算结果为当且仅当a、b两个操作数中只有一个为真时才为真,其他情况下均为假。以下表达式中能正确表示逻辑异或运算的表达式是 。

A.a||b B.a&&b C.(a&&b)&&(a||b) D.(a||b)&&!(a&&b) 10. 以下关于break和continue语句描述中错误的是 .

A.在switch语句中使用break语句是为了跳出switch结构

1

B.在switch语句中使用continue语句是为了连续执行多个case之后的语句 C.在循环语句中使用break语句是为了使流程跳出循环体,提前结束循环

D.在循环语句中使用continue语句是为了结束本次循环,而不是终止整个循环 11.已有预处理命令和声明语句如下:

#define N 10 int a=2,c=1; double b=1.2;

下述程序段中,正确的是 。

A. switch(a) B. switch(a)

{ case c: a--;break; { case N>0: a=1;break; case c+1: a++;break; case 1 : a=0;break; } }

C. switch(a) D. switch(b)

{ case 2: b++;break; { case 1.0: b++;break; case '0': b=3; case 1.2: b=1;break; } }

12. 已知int类型数据在内存中存储长度为2个字节,以下语句中能正确输出整数32768的

A. printf(\ B. printf(\ C. printf(\ D. printf(\

13. 已知有声明“int a=3,b=4,c=5; ”,以下表达式中值为0的是 。

A. a&&b B. a<=b C. a||b&&c D. !(!c||1)

14. 已知有声明“int x,y;”,若要求编写一段程序实现“当x大于等于0时y取值1,否则y取

值-1”,则以下程序段中错误的是 (26) 。

A. if(x>=0)y=1;else y=-1; B. y=x>=0?1:-1; C. switch() D. switch(x-abs(x))

{ case x>=0: y=1; break; { case 0: y=1; break; default: y=-1; default: y=-1; } } 15. 以下选项中,不能表示函数

?1?sign(x)??0??1?x?0x?0x?0 功能的表达式是 。

A. s=(x>0)?1:(x<0)?-1:0 B. s=x<0?-1:(x>0?1:0) C. s=x<=0?-1:(x==0?0:1) D. s=x>0?1:x==0?0:-1 16. 与语句while(!x)x++; 等价的语句是______. A. while(x==0) x++; B. while(x!=0) x++; C. while(x!=1) x++; D. while(x) x++;

17. 若程序中已有相应的声明,下列语句中错误的是 。

A.printf(i==4 ? \

B.i==4 ? printf(\C.for (i=10 ; ; i--) if(i==1) break; D.for (i=10 ; ; ) if(i--); break;

单选题参考答案:

2

1~5:CABDD 6~10:ACADB 11~15:CBDCC 16~17: AD

二、多选题

1.已知有声明int a,以下表达式中不能正确表示算术式10

A.1010 && a<15 D.!(a<=10)&&(a>=15)

多选题参考答案:1.ABD

三、填空题

1. 执行语句printf(\

printf(\后输出是 。

2. 已有声明int k=1; 执行语句while(k++<5);后k的值是 。 3. 只能在循环体中出现的语句是 。

4. 已知int型变量的存储字节数为2,以下程序运行时输出是 。

#include main()

{ int a=3,b=2,c=7,d=6,e=8;

long f=a*10000+b*1000+c*100+d*10+e; printf(\}

5. 以下程序运行后的输出是 . 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(\}

6. 下程序运行后的输出是 . main()

{ int a=3,b=4,c=5,t=99; if(b

}

7. 以下程序运行后的输出是 .

main()

{ char c1,c2;

for(c1='0',c2='9';c1

3

printf(\}

8. 已知字符A的ASCII码值为65,以下程序运行时从键盘输入:B33<回车>.输出是 . #include \main()

{ char a,b;

a=getchar(); scanf(\ a=a-'A'+'0'; b=b*2;

printf(\}

9. 以下程序运行后的输出是 . #include \#include \main()

{ int a=1; char b='2';double c=3.0;

printf(\ getch(); }

10. 以下程序运行时输出到屏幕的结果是 。09q

#include void main() { int i=1,m=0; switch(i) { case 1:

case 2: m++; case 3: m++; }

printf(\

}

11. 以下程序运行时输出结果是 (6) 。

#include void main() { int k=5,n=0; while(k>0) { switch(k) { case 1:

case 3: n+=1;k--;break; default: n=0;k--; case 2:

case 4: n+=2; k--; break; }

printf(\

4

} }

12.以下程序段的运行结果是___________。 a=1; b=2; c=2;

while (a

printf (“%d, %d, %d\\n”, a, b, c);

填空题参考答案:

1.-1 65535 177777 ffff 2.6 3. continue .

4.-32768 5.4 6. 4,5,99 7. 0918273645 8. 1B 9.a=001,b=2,c=3.00,18 10. 2 11. 2 3 5 6 12. 1, 2, 0

四、完善程序

1.程序功能:用牛顿迭代法求方程3x-3x+x-1=0在2.0附近的一个实根,精度要求为10。

函数F求f(x)的值,函数F1求f(x)的一阶导数值。 牛顿迭代公式如下:

3

2

-5

x?x0?f(x0)

f'(x0)#include #include float F(float x)

{ return x*(3*x*(x-1)+1)-1; } float F1(float x)

{ return 9*x*x-6*x+1; } float newtoon(float x) { float f,f1,x0; do

{ (1) ; f=F(x0); f1=F1(x0);

x= (2) ; }while(fabs(x-x0)>1e-5); return x; }

main()

{ float x0;

scanf(\

printf(\

}

2.以下程序通过给出的公式计算?的近似值,计算过程在所加项的值小于10时终止。

357-10

?6

?1?1?1?1??13?1?1??135?1?1?????????????????????2?2?3?2??24?5?2??246?7?2?5