《高级语言程序设计(一)课后习题答案.pdf》由会员分享,可在线阅读,更多相关《高级语言程序设计(一)课后习题答案.pdf(68页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第一章概述一、单项选择题1.二进制语言是属于()A.面向机器语言B.面向问题语言C.面向过程语言D.面向汇编语言解:A.人们研制了许许多多计算机程序设计语言,其中二进制语言直接来自计算机的指令系统,与具体计算机紧密相关,所以是一种面向机器语言.面向问题语言是为了易于描述和求解某类特定领域的问题而专门设计的一种非过程语言.面向过程语言是一种能方便描述算法过程的计算机程序设计语言.有汇编语言,但没有面向汇编语言.汇编语言也是一种面向机器的语言,与机器语言比较,汇编语言用有助于记忆的符号来代表二进制代码.2.将汇编语言编写的程序翻译成目标程序的是()程序A.解 释 B.编 译 C.汇 编 D.源解:
2、C.3.不属于面向机器语言的是()A.符号语言B.二进制语言C.汇编语言D.C语言解:D.4.下列语言中不属于面向过程的语言是()A.高级语言B.低级语言C.C语 言 D.ALGOL语言解:B.C语言和ALGOL等程序设计语言都是高级语言,它们用于描述复杂加工的处理过程,所以也称它们是面向过程语言.低级语言是指机器语言和汇编语言,低级语言是面向机器的语言,而不是面向过程的语言.5.将高级语言编写的程序翻译成目标程序的是()程序A.解 释 B.编 译 C.汇 编 D.源解:B.6.不属于高级语言的计算机语言是()语言A.BASIC B.C C.ALGOL D.符号解:D.二、填空题1.汇编语言属
3、于面向语言,高级语言属于面向语言.解:汇编语言与具体计算机密切有关,是属于面向机器的语言;而高级语言用来描述求解题的算法,所以是面向过程的语言.所以解答是:机器,过程.2.用高级语言编写的程序称为程序,它可以通过程序翻译一句执行一句的方式执行,也可以通过程序一次翻译产生程序,然后执行.解:用高级语言编写的程序称为源程序,源程序不能在计算机上直接运行,运行源程序有种方式:种是通过解释程序,对源程序逐句解释执行;另种是先让编译程序将源程序翻译产生目标程序(目标程序是计算机可直接执行的机器语言程序,它是一种二进制代码程),然后执行目标程序.所以解答时:源,解释,编译,二进制.3.从计算机角度出发,程
4、 序 就 是,程序设计就是.解:用某种计算机能理解并执行的计算机语言描写解决问题的方法步骤;分析解决问题的方法步骤,并将其记录下来的过程.第二章C语言的基本知识一、单项选择题1.属于C 语言字符集中可显示字符的是()A.B.n C.t D.b解:A2.不属于C 语言字符集中的符号是()A.B.|CD.A解:C3.下列选项中,不是转义字符的是()A.W B.V C.074 D.0解:C4.下列选项中,正确的转义字符是()AA0F1 B.CA094 D.OxFl解:B5.下列给出的符号串中,不属于C 语言保留字的是()A.swith B.cher C.case D.else解:B6.下列给出的符号
5、串中,属于C 语言保留字的是()A.ifB.iFC.IfD.IF解:A7.下列给出的符号串中,可作为标识符的是()A.?a B.a=2 C.a.3 D.a_3解:D8.下列给出的符号串中,不能作为C 语言标识符的是()A.a_2 B._2a C._a2 D.2_a解:D9.下列给出的符号串中,可以作为C 语言标识符的是()A.static B.do C.register D.GOTO解:D10.下列说法中错误的是()A.主函数可以分为2 个部分:主函数头和主函数体B.主函数可以调用任何不是主函数的其他函数C.任何函数可以调用不是主函数的其他函数D.程序总是从排在程序最前面的某个函数开始执行解:
6、D 程序总是在主函数中开始执行,并在主函数中结束二、填空题1 .转义字符是由符号开始的单个字符或者若干个字符组成的.解:反斜杠2.C 语言的保留字规定全部由 字母组成,解:英文小写3.C 语言标识符是由 或 开头的字母、数字、下划线组成的串符号.ANSIC规定标识符的长度W 个字符;而PC机上规定前 个字符有效.解:字母,下划线,32,84.C 语言词类主要分为,和6类.解:常量,变量,运算符,函数调用,表达式,保留字5.C 语言的语句主要分为 语句,语句,语 句,语 句,语句,语 句,语句和 语句.解:数据定义,赋值,函数调用,表达式,流程控制,复合,空,其他6.在C 语言中既是词类,又能单
7、独组成语句的有和两类.解:保留字,标识符7.C 语言的程序是由若干个函数组成的,其中有且仅有一个函数名规定为 的主函数.解:main8.C 程序的执行总是由 函数开始,并且在 函数中结束.解:主,主9.C 语言程序的注释可以出现在程序中的任何地方,它总是以符号作为开始标记,以符号作为结束标记.解:/*,*/10.C 语句的最后一定要有一个号.解:分11.使用Turbo C 调试C 程序的主要操作步骤分为一,.解:输入新程序或调入已存在的程序,编辑修改源程序,源程序清单存盘,编译连接生成目标程序,执行目标程序,显示运行结果.第三章基本数据类型、运算符和表达式一、单项选择题1 .下列选项中属于C
8、语言字符常量的是()A.abc B.n C.a D.a0解:C2.下列选项中属于字符串常量的是()A.ABC B.ABC C.abc D.a解:B.C 程序中,一个字符串常量是表示个字符序列,书写时,用双引号字符前后括住这个字符序列.所以只有ABC是一个正确的字符率常量,其余都不是.其中,ABC可作为标识符,字符列,abc不能出现在C 程序中,区是一个字符常量.3.在PC机中,。在内存占用的字节数是()A.l B.2C.3 D.4解:B.一般来说,一个字符在内存中只占1 个字节,5,是转义字符,其意义是换行符,它作为一个字符存储,在内存占2 个字节.4.下列字符串常量中,占用内存字节数为2 的
9、字符串常量是()A.12 B.1C.1O D.nn解:B5.字符串ABC在内存占用的字节数是()A.3 B.4C.6 D.8解:B.字符串中的每个字符占1个字节,但 C 程序在存储字符串时,要在最后一个有效字符后面接 上 1个字符串结束的标记符0.这样,存储字符串常量ABC需要4 个字节.6.在C 语言中,合法的长整型常量是()A.OL B.4962 C.0.054838743 D.2.1869el0解:A.为表示不同范围的整数,整型数据分短整型、基本型和长整型,并对三种整型内部表示的最高位的不同理解,又分别分成无符号和带符号两种.若要明确指明一个整数是长整型的,必须在整数之后接上字符U.所
10、以 0 L 是一个长整型的整型常量,而 4962是基本整型数据;0.054839743 和 2.1869el0 都是 double 型的实数.7.下列符号常量的定义中正确的是()A.#define N3 B.define N 3 C.#define N_1 3 D.#define N 1 3解:C8.设有宏定义#define R 2+3,则 R*R的宏替换结果正确的是()A.(2+3)*(2+3)B.2+3*2+3 C.5*5 D.5.0*5.0解:B9.char型数据在内存中存放的是()A.ASCH代 码 值 B.二进制代码值C.八进制代码值D.十进制代码值解:A.计算机存储字符,通常是存储
11、字符的某种代码值.有许多种字符编码的方法,最流行的是ASCII代码.在C 语言中,char型数据用ASCII代码表示.10.下列说法中错误的是()A.整形变量可以存放字符常量的值B.字符型变量可以存放任意整形常量的值C.变量必须先定义,后使用 D.字符串的长度不等于它占用的字节数解:B11.设整型变量i 的值为3,则表达式i-i 的值为()A.0B.1 C.2 D.3解:A.有些运算符只有一个字符,也有许多运算符由两个字符组成.特别是有些字符既可是单个字符的运算符,又能组成双字符的运算符.编译系统在识别源程序时,通常是尽量多地读字符,能组成多字符单词的先尽量组成多字符单词.所以表达式i-i,被
12、编译器理解为(i-)-i.另外,当表达式中某变量有后缀自增和自减运算时,先按变量的原值计算表达式,然后再对变量进行自增和自减运算.同样地,当表达式中某变量有前缀自增和自减运算时,先对变量进行自增和自减运算,然后再按变量的新值计算表达式.按这个约定,求表达式(i-)-i是计算i-i的值为0,然后再对i 作自减运算,这样,表达式i-i 的值为0.12.设整型变量a,b,c均为2,表达式a+b+c+的结果是()A.6 B.9C.8 D.12解:A.与上一小题解答的理由相同,表 达 式 a+b+c+被系统理解成(a+)+(b+)+(c+).表达式 变量+的值是变量的原来值,所以在变量a,b,c均 为
13、2 的前题下,执行上述表达式,得到结果为6.13.表达式10!=9的值是()A.trueB.非 0 值 C.O D.1解:D.关系运算的结果只有。和 1,若关系成立,则结果为1;若关系不成立,则结果为0.因关系式10!=9成立,所以表达式的结果为1.14.设a 为整型变量,下列C 表达式中,不能表达数学关系式:10a15的是()A.10a10&a15 D.!(a=15)解:A.数学关系式10a10&a15,或!(a=15)或 a=ll|a=12|a=13|a=14,若写成 10a10的结果0 或 1,然后以这个结果与15比较,是否小于15.显然这与数学式子的意义是不一致的.15.设a,b和 c
14、 都是int型变量,且 a=3,b=4,c=5,则下面的表达式中值为0 的是()A.a&b B.a=b C.a|b+c&b-c D.!(ab)&(n=ab)后 m,n的值是QA.0,0 B.0,1 C.1,0 D.1,1解:B.表达式(m=ab)&(n=ab)是一个逻辑表达式,它的计算过程是先计算逻辑与的左分量m=ab,其中乂是先计算ab.因 ab不成立,结果为0,将 0 赋给变量m,最后逻辑与的左分量结果为0.由于逻辑运算采用特别的优化计算规则,当逻辑与的左分量结果为0 时,不再计算逻辑与的右分量,而直接以0 为逻辑与的结果.所以,上述表达式计算使m 的值变为0,而 n 的值没有变,依旧为I
15、.21.若已定义x 和 y 为 double类型,则表达式:x=l,y=x+3/2结果是()A.l B.2 C,2.0 D.2.5解:C.由于变量x 和 y 都是double类型,表达式x=l,y=x+3/2是先计算x=l,由 于 1 是整型的x是double类型的,该计算先将整数1转换成double类型的1.0,并将1.0赋给变量x.计算y=x+3/2是先求3/2的值,因是两整数相除,结果是整型值1,然后在计算x+1时,也先将1 转换成1.0,然后求得x+l的值为2Q 最后将该值赋给变量y,并得到整个表达式的值为2 022.执行语句x=(a=3,b=a-);后,x,a,b的值依次为()A.3
16、,3,2 B.2,3,2 C.3,2,3 D.2,3,3解:C.计算表达式x=(a=3,b=a-)时,先计算赋值号右端圆括号内的逗号表达式.逗号表达式要求各子表达式顺序计算,并以最后予表达式的值为整个逗号表达式的结果,所以该表达式计算时,先让变量a 的值为3,a-的值是a 当时的值,以该值为结果赋给变量b,并以该值为逗号表达式的值赋给变量X,然后a 的值被减少1.所以计算该表达式后,使变量x,a,b的值依次为3,2,3.23.设a 为 5,执行下列计算后,b 的值不为2 的是()A.b=a/2 B.b=6-(-a)C.b=a%2 D.b=a3?3:2解:C.因两个整型数据相除,结果是整数,当
17、a 的值为5 时,计算表达式b=a/2后,使 b 的值为2.计算表达式b=6-(-a)是先计算子表达式G-a)的,先让a 的值减1变成4,并以减1后的a 为子表达式的结果,所以子表达式的结果为4,最后使b 的值为2.在计算表达式b=a%2时,求余运算a%2的结果为1,最后使变量b 的值为1 .计算表达式b=a3?3:2时,先计算条件表达式a3?3,2,以2 为结果,最后也使变量b 的值为2.24.设 a=l,b=2,c=3,d=4 则表达式 ab?a:cd?a:d 的结果为()A.4 B.3 C.2 D.1解:D.条件运算符的优先级比关系运算符的优先级低,并且它的结合性是自右向左的,所以表达式
18、ab?a:cd?a:d可用圆括号等价地写成(ab?a:(cd)?a:d).因 a=A&ch=A&chv=Z)?(ch+32):ch.先计算其中条件表达式,由于条件(ch=A&ch3;后,k 的值是()A.06 B.0177776 C.066 D.0177766解:D.将变量i 的八进制数值013写成二进制形式为00001011,将变量j 的十六进制值0 x13写成二进制数形式为00010011.表达式k=i|j 3 的计算过程是先求i,结果用八进制代码表示为 0177764,接着计算j 3,结果为02,对它们进行按位或运算结果为0177766.30.设整型变量x,y,z均已赋值,下列选项中,正
19、确的赋值表达式是()A.x=3 B.x+=z-y C.x=y=z D.x=y+l,z-2解:B31.在以下一组运算符中,优先级最高的运算符是()A.=B.=C.%D.&解:C.常规运算符的优先级自高到低的排列顺序是算术运算符,移位运算符,关系运算符,按位运算符逻辑运算符,条件运算符,赚值运算符,逗号运算符.所以问题所给的四个运算符按优先级自高到低的排列顺序是,b 的 值 为,abc 的值为.解:0,0.因a的值为3,b的值是2,条件ab为真,其值为1.表达式abc的求值顺序是计算ab,结果为1,接着计算lc,H c的值为1,条 件l c为假.结果为0.14.C语言中作为运算对象时的逻辑值真是用
20、表示的,逻辑值假是用表示的.逻辑表达式值为真时是用表示的,逻辑表达式值为假时是用表示的.解:在C程序中,判逻辑值时,用非0值表示真,用值0表示假;但逻辑表达式计算结果,逻辑表达式值为真是用1表示的,而逻辑表达式的值为假,则用0表示.15.若已知a=10,b=20,则表达式!ab的值为_.解:计算表达式!avb,先计算!a,因a的 值 为10,!a的值为0.关系表达式020为真,所以表达式!ab的值为1.13.能表述20 x30或x-100的C语 言 表 达 式 是.解:首先表述20Vx30的C表达式可写成20 x&x30.所以表述20Vx30或x-100的C表达式为 20 x&x30|x-10
21、0.17.设变量x,y,z均为实型,表示其中至少有一个负数的表达式是.tf?:x0|y0|zA=l=1)=1得 到1,再计算1z)?x+2:x-2,3,2 后,x=_.解:在变量x,y,z的值均为5的情况下,计算各表达式.由于表达式x-=y-z等价于表达式x=x-(y-z),所以计算后x的值为5.表达式x%=y+z等价于表达式x=x%(y+z),所以计算后x的值也为5.表达式x=(yz)?x+2:x-2,3,2的计算过程用圆括号描述其计算顺序是:x=(yz)?x+2:x-2,3,2,即这是一个逗号运算表达式,由个赋值表达式和两个数值构成,逗号表达式要求顺序求各子表达式的值.表达式x=(yz)?
22、x+2:x-2的计算是先求赋值号右边的条件表达式,因条件(yz)为假,求出x-2的值为3,将该值赋给变量x,使x的值为3.21.设有下列运算符,+,+,&,=,其 中 优 先 级 最 高 的 是,优先级最低的是.解:对运算符,+,+,&,=,按它们的优先级自高到低的顺序排列为:+,+,0)y=l;else y=0;-l(x0)1 (x0)0(x0)-l(x0)0(x0)1 (x0)0(x0)解:C.程序段首先置变量y 的值为接着按变量x 值的不同情况重置变量y 的值.重置的首要条件是x!=0,若变量x 的值为0,则不再重置变量y 的值,所以在x 值为0 情况下,y 的值是-1.在变量x 的值不
23、等于0 的条件下,若 x 的值大于0,重置变量y 的值为1;若变量x 的值小于0,重置变量y 的值为0.所以程序段实现当变量x 的值为0 时,变量y 的值为-1;当变量x 的值大于0 时,置变量y 的值为1;当变量x 的值小于0 时,置变量y 的值为0.9.设整型变量m l值为3,m 2值为2,m 3值 为 1,执行下列语句后,整型变量m 4值是()switch(m 1 =m2=m3+1)case 1 :m4=l;break;case 3:m4=3;break;case 2:m4=2;break;default:m4=4;)A.l B.2C.3 D.4解:A10.下列语句中,错误的是()A.w
24、hile(x=y)5;B.do x+while(x=10);C.while(0);D.do 2;while(a=b);解:B.while语句的般形式是:while(表达式)语句;.这里的表达式可以是任何合理的表达式,语句可以是任何语句,包括空语句,或表达式语句.可能书写的while语句没有任何意义,如供选择的A.While(x=y)5;和 C.while(O);,但这两个语句的句法没有任何错误.do-While语句的般形式是:d o 语 句 while(表达式);,其中的成分语句也可以是任何语句,但供选择答案B.dox+while(x=10);中的代码x+是一个表达式,不是语句,所以是错误的.
25、11.设有循环语句for(i=l;i 4;i+)i+;其循环体执行的次数是()A.无限 B.O C.3 D.4解:C12,设有循环语句for(x=O,y=O;(y!=123)|(x 4);x+);其循环体执行的次数是()A.无 限 次 B.不确定次C.4次 D.3次解:A.for循环语句的初始化部分置变量x 和 y 的初值为0,循环条件是(y!=123)|(x4),每次循环后变量x 的值增1.由于循环过程中变量y 的值未被修改过福环条件又是一个逻辑或,其左分量(y!=123)永远成立,也就是循环条件永远成立.所以该循环语句将循环执行无限次.13.若i,j已定义为int类型,则以下程序段中的内循
26、环体 的执行次数是()for(i=5;i;i-)for(j=0;j4;j+).A.20 B.24 C.25 D.30解:A.问题所给的程序段的外循环是一个for循环语句,它的初始化部分置变量i 的初值为5,循环条件简写成i,即i!=0,每次循环后变量i 的值减1.所以外循环共控制5 次循环.内循环也是一个for循环语句,它的初始化部分置变量j 的初值为0,循环条件是j4,每次循环后变量j 的值 增 1.所以内循环共控制4 次循环.这样,如内循环的体内未曾对变量i 和 j 有修改,在内,外循环 起控制下,内循环的体共被重复执行20次.14.假定a 和 b 为 int型变量,则执行以下语句后b 的
27、值为()a=l;b=10;do b-=a;a+;while(b 0);A.9B.-2 C.-l D.8解:D.在这个程序段中,循环开始前变量a 的值为l,b 的值为10,每次循环从变量b 减去a,并让a 增 1,并在循环条件判定时,又让b 减 去 1.第一次循环后,变量b 的值变成9,变量a 的值变为2,循环判断时,因 b 的值大于0,循环条件不成立,结束循环.但在循环判断时,让 b 减去了 1,所以循环结束时,变量b 的值为8.15.设x 和 y 为 int型变量,则执行下面的循环后,y 的值为()fbr(y=l,x=l;y=10)break;if(x%2=l)x+=5;continue;x
28、-=3;)A.2 B.4C.6D.8解:C.for循环语句的初始化部分置变量x 和 y 的初值为L循环条件是(y=50),每次循环后变量 y 的值增1,控制循环最多执行5 0 次.循环体有三个语句:首先在发现变量x 的值大于等于10时,结束循环;接着是当变量x 除 2 的余数为1(即变量x 是奇数)时,让变量x 值增5,让x变成偶数,并直接进入下一轮循环;如变量X是偶数,则从变量x 减去3,让变量x 变成奇数.由上述分析知,每两次循环使变量x 的值增加2.第一次循环后,变量x 的值变成6.第二次循环后,变量x 的值变成3.第三次循环后,变量x 的位变成8.第四次循环后,变量x 的值变成5.第五
29、次循环后,变量x 的值变成10.第六次循环时,因变量x 的位大于等于10,直接跳出循环,这次循环是非正常结束,对变量y 的修正只执行了 5 次.所以循环结束后,变量y 的值增至6.16.设有数据定义语句ints,k;,不能正确计算s=l+2+.+10的程序段是()A.s+=l+2+3+4+5;s+=6+7+8+9+10;B.s=k=0;do s+=k;while(k+10);C.s=k=O;while(kl 1)s+=k+;D.for(s=k=0;kl 1 ;k+)s+=k;解:A.在 A 选项中,s 无初值.17.在C 语言中,下列说法中正确的是()A.不能使用do语句;while(表达式)
30、;的循环B Jdo语句;while(表达式);的循环中必须使用break语句退出循环C.do语句;while(表达式);的循环中,当条件非0 时将结束循环D.do语句;while(表达式);的循环中,当条件为0 时将结束循环解:D.do-while语句的一般形式是:do语句;while(表达式);,其语义是重复执行其成分语句,直至表示条件的表达式值为0 时结束.do-while语句是正常使用的一种循环结构之,do-while语句的循环结束条件由while后的表达式值为0 所控制,并不一定要有break语句跳出循环来结束循环.do-while语句在条件值非0 时,将继续循环,而不是结束循环.条件
31、值为0 时,才结束循环.18.以下说法中正确的是()A.continue只能在循环体中使用B.break只能在循环体中使用C.break不能在循环体中使用 D.break只能在switch语句中使用解:A二、填空题1 .结构化程序设计规定的三种基本结构是结构,选择结构和构.解:结构化程序设计的三种基本控制结构是顺序结构,选择结构和循环结构.2.选择结构通常包括三种形式:选择结构,选择结构,选择结构.解:单分支,双分支,多分支3.先执行循环体,后判断控制循环的条件是否成立的循环一般称为一型循环;先判断控制循环条件,后执行循环体的循环一般称为型循环.解:直到,当4.使用系统函数getchar(),
32、必须在程序的开头写上一条命令.解:#include5.printf()系统函数的第一个参数是,后面参数是.解输出格式字符串,输出表达式表6.在格式输入/输出函数中,d格式可以用于型,型,型,型的数据.ld可以用于型,型的数据.对格式输入函数,格式只可用于型的数据,F 格式只可用于一型的数据;对格式输出函数,格式既可用于一型的数据,也可用于型的数据.解:整,短整,无符号整,无符号短整,长整,无符号长整,单精度实,双精度实,单精度实,双精度实7.语句if(el)if(e2)s;的 基 本 功 能 是.解:如果表达式el,e2都为真,执行语句s,否则不执行8.语句if(el)sl;else if(e
33、2)s2;”的 基 本 功 能 是.解:如果表达式e l 为真,执行语句si,否则如果表达式e2为真,执行语句s2,否则不执行9.若有定义inta=25,b=14,c=19;,以 下 语 句 的 执 行 结 果 是.if(a+=25&b=2&c+)prinif(*a=%d,b=%d,c=%dn,a,b,c);else printf(#a=%d,b=%d,c=%dn,a,b,c);解:问题所给的if语句中,条 件 a+=25&b-=2&c+是先求逻辑与的第一个运算分量,它是 个关系式,关系成立.接着判定第二个逻辑与运算分量,又是一个关系式,由于变量b 的值是 14,b不小于等于2,运算分量的关系
34、式不成立,导致if语句的条件为假,执 行 else部分.在求且语句的条件时,计算了 2 个逻辑与分量,使变量a 的值增了 1,变 量 b 的值被减了 L所以输出内容是:#a=26,b=13,c=19.10.以下两条i&else语句可合并成一条if-else语 句 为.if(ab)printf(%dn,y);else printf(%dn,x);解:在以上两条if语句中,两个条件刚巧相反.若将前一个if语句的第一个成分语句与第二个if语句的第二个成分语句合并;第一个if语句的第二个成分语句与第二个if语句的第一个成分语句合并,写成一条 if 语句如 F:if(a=b)x=l;printf(%dn
35、,x);else y=2;printf(%dn,y);11.语句d o 语句;while(表达式);的基本功能是.解:执行语句,计算表达式,若表达式值为0 则退出循环,否则继续循环12.语句fbr(;表达式;)语句;的基本功能是.解:计算表达式,若为非0,则执行语句,否则退出循环13.设ij,k 均为int型变量,则执行完下面的for语句后,k 的值为.for(i=0,j=10;i=j;i+j-)k=i+j;解:该for语句以i 为 0,j为 10初始化,循环条件是i=j,每次循环后i 增 l,j减 1,循环体是将i与j 的和赋给k.这样变量k 将保存的是最后一次赋给它的值.一次循环后i 为
36、Lj为 9,二次循环 后 i 为 2.j为 8,.五次循环后i 为 5.j为 5,继续第六次循环,将 i 与 j 的 和 10存于k 后,i为 6,j为4,结束循环.循环执行后k 为 10.三、阅读程序题1.阅读下列程序,写出程序运行的输出结果.void main()char c 1 =A,c2=101,c3=0 x41;printf(A=%d,%c=010 1,%C=0X4 1 n,c 1 ,c2,c3);解:A=65,A=0101,A=0 x412.阅读下列程序,写出程序运行的输出结果.void main()int a=10,b=4,c=3;if(ab)a=b;if(ac)a=c;prin
37、tf(%d,%d,%d,a,b,c);解:程序中,第一个if语 句 iRab)a=b,当 ab时,让 b 值置a,该语句确保a 的值不比b 小.同样第二个if语句if(ac)a=c,当 ac时,让 c 值置a,使 a 的值不比c 小.实际情况是a 本来就比b和 c 都大,所以a 的值没有变,程序输出a,b和 c 的原来值:10,4,33.阅读下列程序,写出程序运行的输出结果.void main()int x=100,a=10,b=20,ok 1 =5,ok2=0;if(ab)if(b!=15)if(!okl)x=l;else if(ok2)x=10;else x=l;printf(H%dn,x
38、);解:程序预置变量x 的值为100,a 的值为10,b的值为20,okl为 5,ok2为 0.程序中给出的if语句可以写成更结构化的形式如卜.:if(ab)if(b!=15)if(!okl)x=l;else if(ok2)x=10;else x=l;由于条件a0)printf(%d,%d,%dnu,i,n,m)解:0,8,-225.阅读下列程序,写出程序运行的输出结果.void main()int y=9;for(;y0;y-)if(y%3=0)printf(M%d,-y);continue;解:循环前,变量y 的值为9,其中的循环语句在y 大 于 0 情况下循环,每次循环后y 的值减1.循
39、环体是当y 能被3 整除时输出表达式一y,输出的是减1 后的y 值.这样悌 次循环因y 为9,能被3 整除,输出8,y也变成8.又经两次循环,y 的值变为6,又让y 减 1变成5,并输出5;又经两次循环,y 的值变成3,让v减至变成2,输出2;再经两次循环后,y 的值变成0,结束循环.所以程序输出852.6.阅读下列程序,写出程序的主要功能.void main()int x;while(1)scanf-d”,&x);if(x0)printfflW);else break;解:输入一个数X,如果是正数,输 出 1,如果是负数,输出 1,知道输入0 时退出循环7.阅读下列程序,写出程序的主要功能.
40、void main()int i,x,sl,s2;sl=s2=0;fbr(i=l;ill;i-H-)scanf(n%dH,&x)if(x%2=0)sl+=x;if(x%2=l)s2+=x;printf(sl=%d s2=%dn,sl,s2);输 入 10个整数,计算其中的偶数和奇数的和,分别保存到si,s2中8.阅读下列程序,写出程序的主要功能.void main()int n;for(n=l;n100;n+)if(n%10=1 )&n%3=0)printf(n%dnn,n);解:输出从1 到 100的所有个位为1且能被3 整除的整数?四、程序填空题1.下列程序的功能是将变量x,y,z中大者存
41、放到x 中,请填写程序中缺少的语句.void main()int x,y,z;scanf(”d,%d,%d”,&x,&y,&z);if(x=0;i)scanf(%f,&x);s+=x;printf(n%fnn,s);解:i=33.假定运行下列程序输出的是:*,请填写程序中缺少的语句成分.void main()int x=6;doprintf(*);x-;x-;w h i l e;)解:(x=2)4.下列程序的功能是输入个正整数,判断是不是素数,若为素数输出1,否则输出0。请填写程序中缺少的语句成分.void main()inti,x,y=l;scanf(%d,&x);for(i=2;i=x/2
42、;i+)if y=0;b reak;printf(%dn,y);)解:为判数x 是否是素数,预置变量y 的值为l(x 可能是素数),然后用循环,用 2 至 x/2的整数i测试对x的整除性,若能被其中的某个整数整除,则 x 是合数,置 y 的值为0(不是素数),结束测试循环.若都不能整除,则 x 为素数.i能否整除x,可用求余运算x%i等于0 来判定.所以程序中的空框可填x%i=0.测试x 为素数的代码可写成:y=l;for(i=2;i=x/2;i+)if(x%i=0)y=0;break;5.下列程序时按照以下公式计算并输出兀值,请填写程序中缺少的语句.71/4=1-1/3+1/5-1/7+.+
43、/-l/n 精度要求(|l/n|v 10A-4)#includevoid mian()double pi=l,0,tl,t2=3.0,t3=-l.0;while(fabs(tl)=le-4)tl=t3/t2;pi+=t 1 ;t 2+=2;printf(%fn,4*pi);解:t3*=-1.0;五、程序设计题1.编 个程序,输入华氏温度(F),按下列公式计算并输出对应的摄氏温度(C):C=5(F-32)/9解:利用公式:C=5(F-32)/9,输 入 F 氏温度,计算并输出对应的C 氏温度,程序要引入两个变量,分别用于存储F 氏温度和C 氏温度,计算时应采用浮点型,包括公式中的常数也应写成浮点
44、数,不能采用整型和把常数写成整数.因采用整型编写,公式中的除运算变成整除,会得出与实际要求不一致的结果.程序如下:void main()float F,C;/*变量定义*/printf(输入 F 氏温度n”);scanRf,&F);C=5.0*(F-32.0)/9.0;printf(对应的C 氏温度为6.2八/,0;2.编一个程序,输入一个整数,输出其符号(若对,输 出 1;若=0)printf(nlnH);else printf(-lnu);)3.编个程序,输入x 的值,按下列公式计算并输出y 的值.x(xl)y=2x-l(Kx10)3x-ll(10 x)解:输入x,按公式计算y.这可用一个
45、嵌套的if 语句分段判断并计算出v的值.然后输出y 值.程序如下:#includevoid main()int x,y;/*变量定义*/printf(”输入一个整数n);scanf(H%dn,&x);if(x=l)y=x;else if(xy)min=y;if(minz)min=z;printf(n%f,%f,%f 中的最小值是 fn”,x,y,z,min);5.编一个程序求一个短整型正整数中的最大数字.如12354的最大数字是5.解:程序如下:void main()short x,x 1 ,x2,x3,x4,x5,max=0;scanf(H%dM,&x);while(x!=0)xl=x%10
46、;x/=10;x2=x%10;x/=10;x3=x%10;x/=10;x4=x%10;x/=10;x5=x%10;if(maxxl)max=x 1;if(maxx2)max=x2;if(maxx3)max=x3;if(maxx4)max=x4;if(maxx5)max=x5;printf(H%dnn,max);6.编一个程序,求出所有各位数字的立方和等于1099的 3 位数.解:找出所有各位数字的立方和等于1199的 3 位整数.3 位整数是100至 999范围内的整数,设分别用a,b,c存 储 3 位数的百位,十位和个位的数字,程序用三重循环求出a,b,c的立方和为1099的 3 位数a*1
47、00+b*10+c.程序如下:void main()int2 0 工产变量定义*/fbr(a=l;a=9;a+)fbr(b=0;b=9;b+)for(c=0;c=9;c+)氓 a*a*a+b*b*b+c*c*c=1099)printf(n%dnn,l 00*a+b*l 0+c);若用一个变量i 表示3 位数,循环体将3 位数变量i 分拆出它的百位,十位和个位共3 个数字,然后判这三个数字的立方利是否是1099,若是就输出该变量的值.程序如下:void main()int a1)心/*变量定义*/for(i=100;i=999;i+)a=i/100;b=(i/10)%10c=i%100;if(a
48、*a*a+b*b*b+c*c*c=l 099)printf(H%dni);|7.编 个程序,输 入 10个整数,统计并输出其中正数,负数和零的个数.解:输入10个整数,统计其中正数,负数和零的个数.程序引入3 个计数器变量,用于统计大于以小于0 和等于0 的整数的个数.开始时,这 3 个计数器都置0,然后用循环逐,输入10个整数,并判定当前输入的整数是大于0,或小于0,或等于0,并按判定结果累加相应计数器.最后,程序输出这3 个计数器的值.程序如下:void main()int i,d,n=O,z=O,p=O;/*变量定义*/for(i=l;i=10;i+)print(输入第d 个整数”,i)
49、;scanf(n%dn,&d);if(d0)p-H-;else z+;printf(负数有d 个,正数有(1个,零有d 个An”,n,p,z);)8.编程序,按下列公式计算e 的值(精度 为 le-6):e=l+l/l!+l/2!+l/3!+.+l/n!+.解:按e 的幕级数展开式计算e 的值.这是典型的求级数和计算问题.通常采用逐项计算,并累计的方法.计算新的项时,可用上一轮循环计算出的项,这能提高程序的效率.循环直至当前项的值小于精度要求结束.程序如卜.:void main()double e=O.O,t=l.0,i=l.0;/*变量定义*/while(t=1.0e-6)e+=t;t/=i
50、;i+=1.0;printf(e=%.6fnH,e);)9.编程序,按下列公式计算y 的值(精度为le-6):y=/r*r+l解:按所给公式计算数列的和.类 似 上 小题的解,逐项计算并累计.程序如下:void main()double y=0.0,r=1.0,t;/*变量定义*/while(t=1.0/(r*r+1.0)=1 .Oe-6)y+=t;r+=1.0;printf(y=%.6fn,y);)10.编个程序显示ASCII代码0 x20至 0 x5f的十进制数值及其对应字符.解:显示ASCII代码为十六进制0 x20至 0 x5f的字符的十进制代码值与其字符.程序可用一个循环,让变量i