C语言顺序结构作业(含解答) 联系客服

发布时间 : 星期二 文章C语言顺序结构作业(含解答)更新完毕开始阅读6f28f44e852458fb770b56f9

顺序结构作业解答(2)

一、选择题:

1. 有以下程序:

#include void main()

{ int a=10, b=20, c=30; printf(“%d\\n”, (a=50, b*a,c+a)); }

程序运行后输出结果是

a) 40 b)50 c)600 d)80

答案:d)

解答:(a=50, b*a,c+a)是一个逗号表达式,执行的顺序按排列顺序进行,整个表达式的值

是括号中最后一个表达式的值。计算过程: a=50,——> a的值为50;

a*b, ——> a的值仍然为50,b的值仍然为20;a*b的值为1000;

c+a, ——> a的值仍然为50,c的值仍然为30;c+c的值为30+50,即80;

2. 有以下程序:

#include void main() { int x;

x=x++;

printf(\

}

程序运行后输出结果是

a) 1 b)0 c)编译出错 d)不错定

答案:d)

解答:x=x++;的执行顺序为: 首先取x的值,那么x的值是什么呢?在一对{ } 之间定义的变量,称为局部变量,系统对没有赋初值的局部变量不作任何处理,即,它的值是不确定的。 然后将取出的x值赋给“=”左边的x,最后x的值增1; 进一步思考:如果上面的程序段改成: #include

void main() { int x=1;

x=x++;

printf(\ } 程序运行后输出结果应该是什么值?

3. 有以下程序:

#include void main()

z++;

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

}

{ int x=1, y=5,z; z=x%y; 程序运行后输出结果是

a) 1 b)2 c)5 d)0

答案:b)

解答:z=x%y;的执行结果为:1%5(1除以5的余数)的值为1;将1赋给z; z++; 的执行结果为:z的值增1;

4. 有以下程序: #include

void main() {

float x=1, y=5,z; z=x%y; z++;

}

printf(“%d\\n”, z); 程序运行后输出结果是

a) 2 b)5

c)编译程序指出,程序第5行有错 d) 编译程序指出,程序第5、6、8行有错

答案:c)

解答: 1. %运算两个运算数必须是整数;

2. ++运算的运算量必须是整型变量;但是因为在之前已经指出z的错误,所以这 里不再给出错误信息。

3. “printf(“%d\\n”, z);”的错误是用“%d”说明一个float类型量的输出格式, 输出结果是错误的,但语法检查,不提示错误信息。

5. 有以下程序: #include void main()

{ int x; x=32768; printf(“%d\\n”, x); } 程序运行后输出结果是

a) -32768 b)32768 c)0 d)编译出错

答案:a) 解答: 1. 32768对应的二进制数为10000000 00000000;最高位为1。 2. 按“%d”格式输出,意味着,将x中的值识别为十进制有符号整数。即:

最高位为符号位。当最高位为0时,该数为正数,后15位存放的是数的原码; 当最高位为1时,该数为负数,后15位存放的是数的反码。

3. 32768对应的二进制数为10000000 00000000;最高位为1。后15位“0000000 00000000”为一个数的补码,补码=反码+1;所以反码为01111111 11111111,

15

原码为100000000 00000000,即原码=2=32768,x的值为-32768。

6. 有以下程序:

#include void main()

}

{ int m=10; printf(“%d\\n”, (--m*3/5)); 程序运行后输出结果是

a) 6 b)5 c)4 d)7

答案:b) 解答:

“printf(“%d\\n”, (--m*3/5));”的执行结果是输出表达式(--m*3/5)的值; 表达式(--m*3/5)的计算过程:

1. m作自减运算,m变为9;

2. 然后取m的值与3作乘法,结果味27; 3. 27与5作整除,结果为5;

7. 有以下程序:

#include void main()

}

{ int m=10,n=20; printf(“m=%d\\nn=%d\\n”, m,n); 程序运行后输出结果是

a) 10 20 b)10 c)m=10 n=10 d)m=10

20 n=10 答案:d)

解答:

printf语句的格式控制串中有三类字符:

? 格式控制字符:控制输出的表达式的值的格式,%d、%f、%c等;

? 转义字符:\\n等控制输出换行等。 ? 按原样输出的普通字符:除格式控制字符、转义字符以外的所有字符都成为普通字符,这类字符会按他所在的位置和样式按原样输出。

8. 有以下程序:

#include void main() { int x,z;

float y;

printf(“input 1020304050\\n”);

scanf(“-_=”,&x,&y,&z); printf(“x=%d y=%f z=%d\\n”,x,y,z); }

程序运行后输入1020304050<回车>,则输出结果是

a) x=10 y=20304 z=050 b) x=10 y=20304.000000 z=050 c) x=10 y=20304 z=50 d) x=10 y=20304.000000 z=50 答案:d)

解答:

scanf语句的格式控制串中的域宽的作用: 当输入数据宽度够用时,按宽度读取数据;对于本问题,首先提示用户:输入 1020304050 ,然后按回车键;当用户输入:1020304050并按了Enter键后,程序的执行过程式这样的:

? 首先按-格式,读取两个数字,按有符号十进制数送入变量x中。x=10

? 然后按_格式,读取5个数字,按十进制float数送入变量y中。 _意味着从当前位置开始包括小数点读取5位。如果输入的数据有小数点,将小数点读入;如果输入的数据没有小数点,则在数的末尾加上小数点;所以,y=20304.000000

? 最后按=格式,读取三个数字,按有符号十进制数送入变量z中。z=50 ? 需要说明的一点:

? ?

在scanf语句中 读入float类型数据时 ,用%f格式,可以加整数域宽,例:_,但不可以写成%5.1f。

在scanf语句中 读入double类型数据时 ,用%lf格式,可以加整数域宽,例:%5Lf,但不可以写成%5.1Lf。

9. 若有定义“long x=100000;”,则正确输出x的值的语句是

a) printf(“x=%d” , x); b) printf(“x=%ld” , x); c) printf(“x=%f” , x); d) printf(“x=%lf” , x);

答案:b) 解答:

printf语句的格式控制字符控制输出的表达式的值的格式,%d、%f、%c等;不同类

型的数据需要按指定格式符输出;

int %d; long ld; float %f; double %lf; char %c;

10. 若有定义“double x=123.5;”,则正确输出x的值的语句是

a) printf(“x=%d” , x); b) printf(“x=%ld” , x);

c) printf(“x=%f” , x); d) printf(“x=%lf” , x); 答案:d)

11. 若有输入语句“scanf(“%d,%d,%d”,&x,&y,&z);”,欲使x值为10,y值为20,z值为30,

则正确的输入是

a) 10 ,20 ,30<回车> b)10 20 30<回车>

c) 10,20,30<回车> d)10<回车>,20<回车>,30<回车> 答案:c)

解答:若输入语句scanf的格式控制串中有普通字符,在输入数据时,必须按格式控制串中的样式一点不差的输入,才能读入正确的数据。

二、填空题:

1. 结构化程序设计提倡使用的三种基本控制结构为 顺序结构、选择结构、循环结构 。 2. 顺序结构中的语句可被执行 一 次。 3. 有以下程序:

#include void main()

{ int a=021, b=216;

printf(“%d %x\\n”, a,b ); } 程序运行后输出结果是 17 d8 。

4. 若有定义“int a=1,b=2;”,则语句“a=a+b;b=a-b;a=a-b;”的作用是 将a与b的内容交

换 。

5. 有以下程序:

#include void main()

{ double a; int b; b=a=10/4; printf(“%d,%f\\n”, b,a); 程序运行后输出结果是 2, 2.000000 。

}