《程序设计基础》习题参考答案与部分解析第1章 C 语言概述一、填空a) C源程序的基本单位是函数。
b) 一个C程序中至少应包括一个main函数。
c) 在C语言中,输出操作是有库函数printf( )函数完成。
二、单选题1、A2、C3、B解析:第1题答案:A 。
因为一个C程序总是从main函数开始执行的,而不论main函数在程序中的位置。
且到main函数结束。
第2题答案:C 。
因为main函数没有限制必须位于程序的最前面。
C程序书写自由,一行内可写几个语句。
在对一个 C 程序进行编译的过程中,无法检查注释当中的拼写错误。
不过C语言本身并没有输入输出语句,输入输出是由函数完成的。
第3题答案:B。
因为一个C语言程序是由若干个函数组成的。
但至少包含一个main 函数,且main函数的位置不限。
三、编程题1、编写一个输出“Welcome to C!”信息的小程序。
解:程序如下#include “stdio.h”main( ){printf(“Welcome to C!”) ;}2、已知三角形的三边长分别为3,4,5,试用海轮公式编程求其面积。
海伦公式为:S△= ,其中s= (a+b+s)/2 ;解:程序如下#include “math.h”#include “stdio.h”main( ){int a , b , c ; /* a ,b,c 3个整型变量表示三角形的3条边。
*/float s ,s1 ; /* s1作为面积变量,s 作为中间变量是都应该是实形*/a=3 ; b= 4; c=5 ;s= (a+b+c)/2.0 ;s1= sqrt(s*(s-a)*(s-b)*(s-c)); /* sqrt函数完成开平方根功能。
*/printf(“area=%f\n”,s1);}第2章程序设计基础知识一、单选题1、C2、A3、C4、A5、C6、C7、D8、C9、D 10、A 11、D 12、A 13、C 14、C 15、B A16、B 17 D解析:1. 答案:C。
这里考察的是用户标识符的定义。
用户标识符由字母、数字、下划线组成。
且必须以字母或下划线开头,区分大小写,且不能与C语言已有的32个关键字同名。
由于选择不合法的用户标识符,A项的 A 、P_0、Do都是合法的用户标识符;B项的_A是合法的;D项的_123、temp、INT 也都是合法的。
只有C 选项的标识符都是错误的用户标识符。
2.答案:A。
这里考察的是整型常量的概念。
B项当中01a不正确,C项当中的0668不是正确的八进制常量,D项当中的2e5是float型常量。
3.答案:C。
这里考察的是字符常量的定义。
字符常量是用单撇号括起来的单个字符或转义字符。
所以答案是C。
4.答案:A。
字符变量只能包含一个字符。
5.答案:C。
这里考察的是转义字符的正确表示。
C项的‟074‟是错误的转义字符,正确表示方法是‟\074‟。
6.答案:C。
字符变量只能包含一个字符,而C项的c=‟yes‟是错误的。
7.答案:D。
这里考察的是输入格式的控制。
输入格式要与scanf语句中字符串格式相对应。
8.答案:C。
这里考察的是输出格式和字符对应的ASCII 码值。
‟A‟的ASCII码值是65,‟Y‟字符的ASCII码值是89。
9.答案:D。
这里考察输入格式和输出结果形式。
由于输入格式不正确,所以输出的是不确定值。
10.答案:A。
这里考察的是标识符的特点区分大小写,变量sum和变量sUM是两个不同的变量,sum并没有参加运算,所以它的值不边仍然是7。
11.答案:D。
%运算符要求两边的运算数必须是整型。
12.答案:A。
这里考察的是复合赋值运算。
a%=b+1;等价与a=a%(b+1);由于a=10,b=4;所以运算后a的值是0。
13.答案:C。
这里考察的是在变量定义类型是进行赋值操作。
要求a,b,c都赋值为5,且为int 类型。
只有C正确。
14.答案:C。
这里考察的是类型的自动转换,只要有单精度类型或双精度类型参加运算,结果都是double(双精度)类型。
15.答案:B, A。
这里考察的是逻辑表达式的运算过程。
表达式1&表达式2 ,若表达式1的值是0的话,结果就是0,表达式2就不参加运算。
要注意:赋值表达式的值是左边赋值变量的值。
所以答案为B ,A。
16.答案:B。
这里考察的是逗号表达式运算过程是从第1个表达式开始运算,然后依次运行到最后一个表达式。
逗号表达式的值是最后表达式的值,且注意逗号运算符优先级低于赋值运算符。
所以表达式(a=2,b=5,b++,a+b)运算过程a=2 —> b=5 —> b++ —> a+b=8;结果是8。
17.答案:D。
这里考察的是条件表达式的结合性是从右向左。
所以k<a?k:c<b?c:a;等价于k<a ? k:(c<b?c:a);先运算c<b?c:a ;的值是1,然后计算k<a ? k:1;的值是1。
二、填空题1、-32768-327672、字母,数字,下划线3、分号(;)4、30 ,155、186、07、-264 8、7 9、010、1 11、y%2= = 1 12、x<z | | y<z13、0 14、(x>2&&x<3) | | x < -10 15、1三、编程题1、编写程序,输入一个长方形的二边长,输出其面积。
解:程序如下#include “stdio.h”main( ){int a , b , s ; /* a , b 作为长方形的两个边长,s为面积。
*/printf(“请输入两个边长\n”) ;scanf(“%d%d” , & a , & b) ;s = a * b ;printf(“ The area : %d \n “ , s ) ;}2、设置半径为r = 2.9 ,编程求圆周长和圆面积解:程序如下#include “stdio.h”#define PI 3.14main( ){float r , L , S ;L = 2*PI*r ;S = PI * r *r ;printf( “ L = %f , S = %f \n “ , L , S ) ;}3、输入一个华氏温度,输出相应的摄氏温度。
二者的换算公式是:c = 5/9(F – 32) , 其中F表示华氏温度,c表示摄氏温度。
解:程序如下#include “stdio.h”main( ){float c , F ;printf(“请输入一个华氏温度:\n”) ;scanf(“%f” , &F);c = (float) 5/9 *(F-32) ;printf(“ F=%f , c=%f \n” , F , c) ;}第3章程序设计初步一、单选题1、C2、C3、B4、 B5、B解析:1. 答案:C。
这里考察的是if-else 语句和表达式中有增量和减量的执行过程。
if(m++>5) printf(“%d\n”, m) ; else printf(“%d\n”,m++) ;先执行m>5 的值是0,然后执行m=m+1; 得到m=6;由于m>5 的值是0所以执行else语句,应先输出m的值是6,然后m再自增一个单位变成7。
2.答案:C。
这里考察的是if语句的嵌套。
根据else子句总是与之前最近的if语句配对来进行选择满足条件的答案。
3.答案:B。
这里也考察的是if语句的嵌套。
同理:if(x<y) if(y<0) z=0 ; else z+=1 ; 等价与if(x<y) { if(y<0) z=0 ; else z+=1 ; } 因此答案是B。
4.答案:B。
这里考察的是if语句的嵌套。
根据else子句总是与之前最近的if语句配对。
5.答案:B。
由于B项:if(x=y) &&(x!=0) x+=y ; if 后的条件表达式没有用圆括号括起来。
正确的是:if((x=y) &&(x!=0))x+=y ;二、根据要求完成程序填空1、z > y z > x y > x2、ch >= …A‟ && ch<=‟Z‟ch=ch-323、x < 0 x / 10 y!=2三、编程题1、编写一个程序,要求用户从终端键入两个整数数值。
检测这两个数,判定第一个数是否能被第二数整除,并在终端上显示相应的信息。
解:程序如下#include “stdio.h”main( ){int a , b ; /* a为第一个数,b为第二个数*/printf(“Please input two numbers: \n”) ;scanf(“%d%d” , &a ,&b) ;if( a%b = = 0 )printf(“%d能被%d整除。
\n” , a , b) ;elseprintf(“%d不能被%d整除。
\n” , a , b) ;}2、有3个整数a , b , c , 由键盘输入,输出其中最大的数。
解:程序如下#include “stdio.h”main( ){int a , b , c , max ;printf(“ Please input three numbers : \n”) ;scanf(“%d%d%d” , &a ,&b , &c) ;if(a>b) max = a ;else max = b ;if(max < c ) max = c ;printf( “The max is %d \n”, max ) ;}3、给出一百分制成绩,要求输出成绩等级A、B、C、D、E。
其中90分以上为A,80~89分为B,70~79为C,60~69为D,60分以下为E。
解:程序如下#include “stdio.h”main( ){float score ;int grade ;printf(“Please input a score :\n”);scanf(“%f “ ,&score) ;grade=(int ) score /10 ;switch(grade){ case 10:case 9: printf(“grade is A\n”) ; break ;case 8: printf(“grade is B\n”) ; break ;case 7: printf(“grade is C\n”) ; break ;case 6: printf(“grade is D\n”) ; break ;default: printf(“grade is E\n”) ;}}4、新世纪百货进行打折促销活动,消费金额(P)越高,折扣(d)越大,标准如下:消费金额折扣P < 100 0%100 ≤ P < 200 5%200 ≤ P < 500 10%500 ≤ P < 1000 15%P ≥ 1000 20%编程实现从键盘输入消费金额,输出折扣率和实付金额(f)。