C语言题目答疑(带参考答案)

  • 格式:doc
  • 大小:445.50 KB
  • 文档页数:24

湖北工业大学计算机学院 沈华

nancy78733@ C语言题目答疑

1、以下程序段的输出结果是(),(),(),()。

double a=513.789215;

printf(“a=%8.6f, a=%8.2f, a=%14.8f, a=%14.8lf\n”, a, a, a, a);

a=513.789215, a= 513.79, a= 513.78921500, a= 513.78921500

(“%f”和“%lf ”格式的输出相同,说明“l”符对“f”类型无影响)

(【补充】为什么printf()用%f输出double型,而scanf却用%lf呢?

答:printf的%f说明符的确既可以输出float型又可以输出double型。 根据"默认参数提升"规则(在printf这样的函数的可变参数列表中 ,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到双精度数。参见问题15.2。

对于scanf,情况就完全不同了,它接受指针,这里没有类似的类型提升。(通过指针)向float存储和向double存储大不一样,因此,scanf区别%f和%lf。)

2、若有以下说明和输入语句,要求给c1、c2、c3输入字符A、B和C,请写出从键盘正确输入数据的形式是( )。

char c1, c2, c3;

scanf(“%4c”, &c1);

scanf(“%4c”, &c2);

scanf(“%4c”, &c3);

AAAABBBBCCCC或A B C 或A123B222C***等等

3、若有以下定义,请写出以下程序段中输出语句执行后的结果。

(1)( ) (2)( ) (3)( )

int i=-200, j=2500;

printf(“(1)%d %d”, i, j);

printf(“(2)i=%d, j=%d\n”, i, j);

printf(“(3)i=%d\n j=%d\n”, i, j);

(1)-200 2500(2)i=-200, j=2500

(3)i=-200

j=2500

湖北工业大学计算机学院 沈华

nancy78733@

4、有定义语句:int x, y;若要通过scanf(“%d, %d”, &x, &y),语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,正确的有()。

A、11, 12

B、11, 12

C、11, 12

D、11 12

正确的有:A, B, C

【补充】

(1)

int a,b,c;

scanf("%d%d%d",&a,&b,&c);

"%d%d%d"是按十进值格式输入三个数值。输入时,在两个数据之间可以用一个或多个空格、tab键、回车键分隔。

以下是合法输入方式:

① 3□□4□□□□5↙

② 3↙

4□5↙

③ 3(tab键)4↙

5↙

(2)

int a,b,c;

scanf("%d,%d,%d",&a,&b,&c);

运行时按如下方式输入三个值:

3,4,5 ↙(输入a,b,c的值)

或者

3,□4,□5 ↙(输入a,b,c的值)

3,□□□4,□5 ↙(输入a,b,c的值)

......

都是合法的,但是","一定要跟在数字后面,如:

3□,4,□5 ↙就非法了,程序出错。

5、以下4个选项中,可以看作是一条语句的有()

A、{;}

B、if(b==0) n=1; n=2;

C、a=0, b=0,c =0;

D、if(a>0);

A、C、D

【补充】

表达式1, 表达式2, ……,表达式n

逗号表达式的值:等于表达式n的值

自左向右依次进行运算 湖北工业大学计算机学院 沈华

nancy78733@ 优先级最低(注:与赋值号混合运算时,没括号的情况下 先赋值,再逗号)

6、以下不合法的赋值语句是( )

A、c=int(a+b);

B、x+y;

C、x=y=100;

D、d--;

B

7、以下程序段的输出结果是( )、( )、( )、( )、( )。

int x=0177;

printf(“x = %3d, x = %6d, x = %6o, x = %6x, x = %6u\n”, x, x, x, x, x);

x = 127, x = 127, x = 177, x = 7F, x = 127

8、下列程序的输出结果是( )。

main()

{

int a=7, b=5;

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

}

A、不确定

B、1

C、5

D、0

D

9、若从终端输入以下数据,要给变量c赋以283.19,则正确的是( )

A、scanf(“%8.4f”, &c);

B、scanf(“%6.2f”, &c);

C、scanf(“%f”, c);

D、scanf(“%8f”, &c);

D

【补充】

(1)scanf函数中没有精度控制,如:scanf(“%5.2f”, &a);是非法的。不能企图用此语句输入小数为2位的实数。

(2)scanf中要求给出变量的地址。

(3)在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据间的间隔则可用湖北工业大学计算机学院 沈华

nancy78733@ 空格、TAB或回车作间隔。C编译在碰到空格、TAB、回车或非法数据(如对”%d”输入12A,A即为非法数据)时即认为该数据结束。

(4)在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入字符均为有效字符。

10、以下程序的输出结果是( )

main()

{

int a = 2, b = 5;

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

}

A、a=%2, b=%5 printf(“a=%%%d, b=%%%d\n”, a, b);

B、a=%%d, b=%%d printf(“a=%%%%d, b=%%%%d\n”, a, b);

C、a=%d, b=%d

D、a=2, b=5 printf(“a=%d, b=%d\n”, a, b);

C

11、下列程序的输出结果是( )

main()

{

int x=1, y=0, a=0, b=0;

switch(x)

{

case 1: switch(y)

{

case 0: a++; break;

case 1: b++; break;

}

case 2: a++; b++; break;

case 3: a++; b++; break;

}

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

}

a=2, b=1

湖北工业大学计算机学院 沈华

nancy78733@

12、(判断题)若有定义和语句:

int a; char c; float f; scanf(“%d, %c, %f”, &a, &c, &f);

若通过键盘输入:

10, A, 12.5, 则a=10, c=’A’, f=12.5

13、以下程序的功能是计算

0!nksk

请填空。

long f(int n)

{

int i; long s;

s = 1 ;

for(i = 1; i <= n; i++) s = s * i ;

return s;

}

main()

{

long s; int k, n;

scanf(“%d”, &n);

s = 0 ;

for(k=0; k<=n; k++)

s = s + f(k) ;

printf(“%d\n”, s);

}

14、以下程序的输出结果是( )

main()

{

int a = 3, b = 2, c = 1;

c -= ++b;

b *= a + c;

{

int b=5, c=12;

c /= b * 2;

a -= c;

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

a += --c;

}

printf(“%d, %d, %d\n”, a, b, c); 湖北工业大学计算机学院 沈华

nancy78733@ }

15、以下程序的输出结果是( )

fun1(int a, int b)

{

int c;

a += a;

b += b;

c = fun2(a, b);

return c * c;

}

fun2(int a, int b)

{

int c;

c = a * b % 3;

return c;

}

main()

{

int x = 11, y = 19;

printf(“%d\n”, fun1(x, y));

}

16、以下程序的输出结果是( )

double sub(double x, double y, double z)

{

y -= 1.0;

z = z + x;

return z;

}

main()

{

double a = 2.5, b = 9.0;