




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学而不思则惘,思而不学则殆C语言经典习题及其答案详解第二章基本数据类型和表达式2.1 单项选择题1 .下列字符列中,可以作为字符串常量”的是()ABC"ABC"'abdD 'a'解C程序 中,一个字符率常量是表示一个字符序列,书写 时,用双引号字符前后括住这个字符序列。所以只 有“ABC是一个正确的字符率常量,其余都不是。其中,ABC可作为标识符,字符列ab环能出现在C程序中,最一个字符常量。所以解答是。2 .在以字节存储字符的系统中,n '在内存占用的字节数是()1234解一般来说,一个字符在内存中只占1个字节,n是转义字符,其意义是换行符
2、,它作为一个 字符存储,在内存也只占1个字节。所以解答是。3 .字符串“xyz在内存占用的字节数是()3468解字符串中的每个字符占1个字节,但 C程序在存储字符串时,要在后一个有效字符后面接 上1个字符串结束的标记符0'。这样,存储字符串常量“xyz需要4个字节。所以解答是。4.在以下字符列中,合法的长整型常数是() 0L 4962710 0.054838743 2.1869el0解为表示不同范围的整数,整型数据分短整 型、基本型和长整型,并对三种整型内部表示的 高位的不同理解,又分别分成无符号和带符号两 种。若要明确指明一个整数是长整型的,必须在 整数之后接上字符'L
3、9;所以0L是一个长整型的整型常量,而 4962710是基本整型数据,而对于 用2个字节表示一个基本整型数据的系统来说,该整数将因超出范围而是一个错误的整数;0.054839743 和 2.1869el0 者B是 double 型的实数。 所以解答是。5 .一个char型数据,它的值在内存中存放的是 ()ASCll代码值 BCD代码值 内码值 十进 制代码值解计算机存储字符,通常是存储字符的某种 代码值。有许多种字符编码的方法,流行的是ASCII代码。在 C语言中,Char型数据也用 ASCII代码表示。所以解答是。6 .设变量m, n, a, b, c, d的初值均为 0,执行 (m = a
4、=b) | (n=c=d)后,m, n 的值是()0, 00, 1l, 01, 1解计算(m =a=b) | (n=c=d)的过程是先计算逻辑或的左运 算分量(m=a=b)的值,由于赋位运算符的优先级 比关系运算符=的优先级低,又先计算 a=b.因a, b均为0后,所以比较结果值为1.将1赋给变量m,使变量 m的值变为1 .同时这个赋值运算的结 果也是1,这样逻辑运算的左运算分量的值为1.由于逻辑或运算的左运算分量值为1,按照C语言对逻辑或运算优化计算的规定,不再计算逻辑或的右 运算分量,而直接得到逻辑或运算的结果为1 .由于逻辑或的右运算分量不曾计算过,所以变量n的值也不为变化。这样,上述表
5、达式计算后,变量 m的 情为1,变量n的值为0.所以解答是。7 .设a为5,执行下列计算后,b的值不为2的 是() b = a/2 b = 6- (-a) b=a%2 b = a< 3? 3: 2解因两个整型数据相除,结果是整数,当 a 的值为5时,计算表达式 b=a/2后,使b的值为 2.计算表达式 b= 6- (-a)是先计算子表达式(- a)的,先让a的值减1变成4,并以减1后的a 为子表达式的结果,所以子表达式的结果为4,后使b的值为2.在计算表达式 b= a%2时,求余运算 a% 2的结果为1,后使变量b的值为1.计算表达 式b =av 3? 3: 2时,先计算条件表达式 av
6、 3? 3: 2,以2为结果,后也使变量 b的值为人所以 解答是。8 .执行语句“一(a= 3, b=a-);"后,X, a, b 的值依次为()3, 3, 2 2, 3, 2 3, 2, 3 2, 3, 3 解计算表达式x= ( a=3, b=a-)时,先计算赋值号右端圆括号内的逗号表达式。逗号表达式要 求各子表达式顺序计算,并以后予表达式的值为整 个逗号表达式的结果。所以该表达式计算时,先让 变量a的值为3, a-的值是a当时的值,以该值 为结果赋给变量 b,并以该值为逗号表达式的值赋 给变量x,然后a的值被减少1.所以计算该表达 式后,使变量 x, a, b的值依次为 3, 2
7、, 3.所以 解答是。9 .设整型变量 m, n, a, b, c, d均为1,执行 "(m =a>b) && ( n= a> b)”后 m, n 的值是 () 0, 0 0, l 1, 0 1 , l解表达式( m= a >b)&&(n = a >b)是 一个逻辑表达式,它的计算过程是先计算逻辑与的 左分量(m = a>b,其中又是先计算a>b.因a>b不成立,卫果为 0,将0赋给变量 m,后逻辑与 的左分量结果为 0.由于逻辑运算采用特别的优化计 算规则,当逻辑与的左分量结果为0时,不再计算逻辑与的右分量,
8、而直接以 0为逻辑与的结果。所 以,上述表达式计算使m的值变为0,而n的值没有变,依旧为l.所以解答是。10,设有代码“int a 3; ",则执行了语句“a+=a*a;"后,变量a的值是()309-12解由于赋值运算符的结合性自右至左,语句 “a+=a=a*a; "的执行是先计算 a*a,得到值9,再 计算a-=a*a,使a的值为-6,接着计算a+ = a,使 a的值为-12.所以解答是。11.在以下一组运算符中,优先级高的运算符 是()v=;&&解常规运算符的优先级自高到低的排列顺序 是算术运算符、移位运算符、关系运算符。按位运 算符、逻辑运算
9、符、条件运算符、赋值运算符、逗 号运算符。所以问题所给的四个运算符按优先级自 高到低的排列顺序是%, < = , &&,=。所以解 答是。14 .若已定义x和y为double类型,则表达式: x = l, y=x+3/2 结果是()l22.02.5解由于变量 x和y都是double类型,表达 式x = l, y = x + 3/ 2是先计算x = 1,由于1是整 型的,x是double类型的,该计算先将整数1转换成double类型的1.0,并将 1.0赋给变量 x.计 算y =x+3/2是先求3/2的值,因是两整数相 除,结果是整型值1,然后在计算x+1时,也先将 1转换
10、成1.0,然后求得x+l的值为2.0,后将该值 赋给变量y,并得到整个表达式的值为2.0.所以解答是。15 .设 a=1, b=2 , c=3, d= 4 则表达式 a< b?a: cv d? a: d的结果为()4321解条件运算符的优先级比关系运算符的优先级低,并且它的结合性是自右向左的,所以表达式avb? a: cvd? a: d可用圆括号等价地写成(a <b? a: (c<D) ? A: D)。因 Av B 成立,计算结果为A的值1.所以解答是。17 .下列表达式中,正确的C赋值表达式是()a = 7 + b+ c= a + 7 a= 7+bHF= a+7a=(7+b
11、, b+ + , a+7) a= 7+b, c=a+ 7解赋值运算符是运算符之一,赋值运算也可 以出现在一般表达式中。赋值运算时,出现在赋值 运算符左边的表达式应该是引用一个存储对象,例 如变量。不可以是一个数值计算表达式。如表达式 a=7+b+c=a+ 7因算术运算符比赋值运算符的优 先级高,要把 a+ 7的结果赋给 7 + b+c,这是错 误的。同样理由,表达式 a= 7+ b + + = a+ 7也是 错误的。而表达式 a= (7+b, b+ +, a+7)就是 正确的赋值表达式,它是先计算赋值号左边的括号 内的表达式,括号表达式内是一个逗号表达式,远 号表达式要求顺序逐一计算各子表达式
12、,并以后一个子表达式的值作为远号表达式的结果,后将该结 果赋给变量 a.而表达式a= 7+b, c=a +7则不是 一个赋值表达式,而是一个逗号表达式,它由两个 赋值子表达式组成。所以解答是。18 .若有以下定义:char a; int b; float c; doubled;则表达式 a*b+d-c值的类型为()float int char double解基本类型的数据可以混合运算,但运算 时,对要求运算分量类型相同的运算来说,如运算 分量的类型不是全相同,则会有自动类型转换发 生。类型自动转换规则规定类型低(简单)的向类 型高(复杂)的转换。各类型由高到低的排列顺序 是:long doub
13、le、float、unsigned long、long、 unsigned int、int 这样,若有定义: char a; int b; float c; double d;则表达式 a*b+d-c的值的类型 是double的。首先计算 a*b,得到int类型的值, 接着计算 a*b+d ,得到double类型的值,后计算 a*b+d-c ,得到double类型的值。所以解答是。19 .表达式“9 =7”的值是()true非0值01解关系运算的结果只有。和1,若关系成立,则结果为1;若关系不成立,则结果为。.因关系式9! = 7成立,所以表达式的结果为1.虽然1也是非0值,在供选择白答案中有
14、1,所以确切的解答是。22 .设a, b和c都是int型变量,且 a= 3, b =4, c=5,则下面的表达式中值为0的是()'a& & 'b a v = b a|b+c& & b-c ! (a<B) &&! |1)解对于表达式破& 七两个非 o运算分量的逻辑与结果为1.对于表达式 av=b,由于关系式成立,结果也为此又由于变量a为非0,表达式a|b+c&& b-c的结果也为 1.对于表达式! (av b) &&! c|1),先是计算(av b)得到结果 1;计 算! C得到结果为
15、0;再计算它们的逻辑与,结 果为0.继续与1求逻辑或,得到结果为 1.后,对 1求逻辑非,得到结果为0.所以解答是。23 .设ch是char型变量,其值为 'A则下面表 达式的值是()ch= ( ch>= 'Ac&chv= N? (ch+32): ch飞'巡,Z气解由于字符型变量 ch的值为A,'计算表达 式 ch = h>= 'A'&&chv= 'Z') ? ( ch+32): ch,先计算其中条件表达式,由于条件( ch>= 'A &&hv = ' Z)
16、成立,该条彳表达式以ch+32 = 97为结果,将该值赋给变量ch,以字符表达这个值为a所以解答是。2.2填充题1 .在内存中,存储字符串"X要占用 个字节,存储字符'X要占用 个字节。解计算机存储一个字符用1个字节,存储字符串时,每个字符要占用1个字节,另在字符串的有效字符之 后存储1个字符串的结束标记符。所以存储字符率“X要占用2个字节,存储字符刈要1个字节。2 .在C程序中,判逻辑值时,用 表示逻辑 值 真",又用 表示逻辑值 假在求逻辑值 时,用 表示逻辑表达式值为“真;又用表示逻辑表达式值为“假:解在C程序中,判逻辑值时,用非 0值表 示真;而判逻辑值时,
17、用值 0表示假。但逻辑表达 式计算结果,逻辑表达式值为真是用1表示的,而逻辑表达式的值为假,则用0表示。3 .定义符号常量的一般形式是 .解定义符号常量用预处理命令的宏定义,其定义的一般 形式是:# define符号常量名常量、5.无符号基本整型的数据类型符为双精度实型数据类型符为字符型数据类型符为解无符号的基本整型的类型符为unsigned int,或简写成 unsigned.双精度实型数据类型符为 double,字符型数据类型符为 char.6 .定义指定数据类型的变量时,较完整的一般形 式是 。解要指定变量的存储类型,定义指定类型的 变量,其一般形式是:存储类型符数据类型符变量名1,变量
18、名2,;7.设有下列运算符:VV、+、+ +、&&、< =,其中优先级高的是,优先级低的是.解对运算符V、+、+ +、&&、v =, 按它们的优先级自高到低的顺序排列为:+、+、<V、<=、&&所以,优先级高的是+,优先级低的是&&。9 .设 a=3, b= 2 , c=l,则 c > b 的值为 ., a> b> c 的值为.解因a的值为3, b的值是2,条件a>b 为真,其值为 1.表达式a>b>c的求值顺序是计 算a>b,结果为1,接着计算 1>c,因c的值
19、为1,条件1>c为假,结果为 0.10 .已知 a=10, b= 20,则表达式! avb的值为解计算表达式!a<b,先计算! a,因a的值为10,! a的值为0.关系表达式 0<20为真, 所以表达式! a< b的值为1.11 .设x和y均为int型变量,且 x=l, y=2, 则表达式1.0 + x/y的值为.解计算表达式1.0 + x/y,先求x/y,因x和 y是整型变量,其中的除运算是整除,1/2的结果为0.接着计算1.0+0,计算时,先将右分量转 换成0.0,后得到结果 1.0.12.设整型变量 x、V、z均为5:执 "-=y-x"后,x
20、=,执行“跖=y + z"后,x=. 执行 ”后(y>z) ? x + 2: x- 2, 3, 2 后,x =解在变量 x、y、z的值均为5的情况下, 计算各表达式。由于表达式x- = y-z等价于表达式x = x- ( yz),所以计算后 x的值为5.表达 式x%=y +z等价于表达式 x = x% (y+z),所以 计算后x的值也为5.表达式x= (y>z) ? x + 2: x-2, 3,2的计算过程用圆括号描述其计算顺序是:(x= (y>z) ? x+2: x 2), 3), 2即这是一个逗号运算表达式,由一个赋值表达式和两个数值构成,逗号表达式要求顺序求各
21、子表达式的值。表达式 x = (y>z) ? x+2: x 2的 计算是先求赋值号右边的条件表达式,因条件( y >z)为假,求出 x-2的值为3,将该值赋给变 量x,使x的值为3.13.能表述“20 x v 30或x v-100”的C语言表达 式是.解首先表述 20<x<30的C表达式可写成20vx&&xv30.所以表述 “20xv30 或 xv-100” 的 C 表达式为 20Vx && xv 30|x< -100.14,请写出数学式 x/y*z的C语言表达式解数学式子表述的是 x除以y乘z的积, 写成C表达式可以写为 x/ (
22、 y*z ),或可等价地 写成x/y/z.15.C语言中运算结果可以当成逻辑值使用的表达 式有:表达式、.表达式、表达式、表达式、表达 式、表达式。解在 C语言中,逻辑判断以非0值为真,以0值为假。所以,几乎所有的表达式的运算结果都 可以当成逻辑值使用,如算术表达式、关系表达 式、逻辑表达式、赋值表达式、逗号表达式、条件 表达式等。第三章C程序结构3.1 单项选择题1 .设 a= 3, b= 4 执行"printf( %d, % d', (a, b), (b, a); ”的输出是()3, 44, 33, 34, 4解在调用格式输出函数的语句中,其中每个格式符对应一个输出项,格
23、式符d要求输出项内容以十进制整数形式输出。第一个输出项( a, b) 是一个逗号表达式,该表达式的值是b的值,输出4.接着输出字符逗号。第二个输出项( b, a) 的值是a的值,输出3.所以语句执彳T将输出 4, 3. 正解的选择是。2 .使用"scanf" x=%f y=%f '; &x, &y)”,要使x, y均为1.25,正确的输入是() 1.25, 1.25 1.25 1.25 x=1.25, y= 1.25X = 1.25 y=1.25解格式输入函数的格式字符串中的字符可以分成三类:空格类字符、其它普 通字符和格式转换说明。其中空格类字符用
24、来跳过 一个空格类字符序列,直至下一个非空格类字符。普通字符要求输入字符与其完全相同。格式转换说 明对输入字符列按格式转换说明进行转换,得到内 部值存储到对应输入项所指定的存储位置中。函数 调用 scanf ( "x= %f, y=%f, &x, &y)以普通字 符x=开头,输入时也要先输入x=o接着是一个浮点数输入格式,所有能构成一个浮点数1.25的字符序列都能满足要求。接着是普通字符列",y=:在输入的浮点数之后也要有字符列 y= o后又是浮点数输入格式,同样所有能构成一个浮点数1.25的字符序列都能满足要求。问题给出的供选择答案 中只有x=1.25,
25、y= 1.25是能满足上述要求的。所 以正确选择是。答是。4.设a, b为字符型变量,执行“scanf(”户 c, b=%c“,&a , &b) "后使 a 为A' b为B'从键盘上的正确输入是()'A "畸'A''骑A = A, B= B a=A, b=B解函数调用 scanf ("c, b= %c , &c,&b)中,普通字符必须按格式字符串要求照原样输 入,c格式对紧接的任何字符都输入。所以实现问 题的要求,输入字符列应为“后A, b=B"。另外要特别指出,在程序中,为
26、表示字符常量,字符前后 需加单引号。但用字符格式输入字符时,在要输入 字符前后不必另键人单引号。若键人单引号,则这 个单引号也将作为字符被输入。正确的解答是。和逻辑或构成的逻辑表达式有特别的计算规则,顺 序计算各逻辑子表达式,并当一旦能得到逻辑表达 式的结果时,就立即结束逻辑表达式的计算,不再 计算后继逻辑子表达式。本题的逻辑表达式是两个 运算分量的逻辑或,而且左运算分量+x的值为非0,立即得到逻辑或运算的结果为1,并将1赋给变量t,所以变量t的值为1.正确解答为。6设x、v、z均为int型变量,则执行以下语句后, x、y, z 的值为() x= 1; y = 0; z = 2; y + +
27、&& + + z |+ x;2、l、3 2、0、3 2、l、3 2、1、2解语句序列"x= l ; y = 0 ; z = 2 ;y+&&+z|+x ;"先使变量 x的值为1 ,变量 y 的值为0,变量z的值为2.由逻辑与和逻辑或构 成的逻辑表达式的特别计算规则,顺序计算各逻辑 子表达式,并当一旦能得到逻辑子表达式的结果 时,就立即结束逻辑子表达式的计算,不再计算该 逻辑子表达式。计算y+因y的值为0,使 y+&&+z 的结果为 0 ,立即去计算+x ,这次计 算使变量y的值变成1,而变量z的值本改变。 接着计算+x ,使x的
28、值变为2.所以经上述语句执 行后,x、v、z的值依次为2、1、2.正确解答为。7.假定所有变量均已正确定义,下列程序段运行 后x的值是()a= b= c= 0; x=35;if (! a) x-; else if (b); if (c) x=3; else x=4;344353解以变量 a, b, c的值均为0,变量x的值 为35,语句:if (! a) x-; else if (b); if (c) x=3; else x =4; 由两个if语句组成。首先执行前一个if语句"if (! a) x-; else if (b); ”,因变量 a 的 值为0,条件! a成立,执行 x-使
29、x的值变为 34.接着执行后继的if语句"if(c) x=3; else x = 4; ”,因变量 c的值为0,条件不成立而执行x=4,终使变量 x的值为4.正确解答是。注意前一个if语句的else部分的成分语句只有 “if (b); ",这是一个单分支if语句,且其成分语句为空语句。9.下列语句中,句法错误的是(不考虑语义) () while (x=y) 5 ; do x+ while (x = 10);while (0);do 2; while (a= = b);解while语句的一般形式是:while (表达式)语句这里的表达式可以是任何合理的表达式,语句可 以是任何
30、语句,包括空语句,或表达式语句。可能 书写的 while语句没有任何意义,如供选择的 while (x = y) 5;和while (0);,但这两个语句 的句法没有任何错误。do-while语句的一般形式是: do语句while (表达式);其中的成分语句也可以是任何语句,但供选择答 案do x+ while (x=10);中的代码 x+是一个 表达式,不是语句,语句必须要以分号结束,所以 是错误的。正确解答是。10,循环语句 “for(x=0, y=0; (y! =123)| ( x<4); x+ + ); ”的循环执行()无限次 不确定次 4次3次 解for 循环语句的初始化部分置
31、变量x和y的初值为0,循环条件是(y! = 123) | (x<4),每次循环 后变量X的值增1.由于循环过程中变量y的值未被修改过,循环条件又是一个逻辑或,其左分 量(y! =123)永远成立,也就是循环条件永远 成立。所以该循环语句将循环执行无限次。正确 解答是。11.若i、j已定义为int类型,则以下程序段中 的内循环体的执行次数是() for ( i = 5; i;i-) for (j= 0; j <4; j+) 20242530解问题所给的程序段的外循环是一个阶循环语句,它的初始化部分置变量i的初值为5,循环条件简写成i,即i! =0,每次循环后变量i的值减1.所以外循环
32、共控制5次循环。内循环也是一个for循环语句,它的初始化部分置变量j的初值为0,循环条件是j<4,每次循环后变量 j的值增 1.所以内循环共控制 4次循环。这样,如内循环的 体内未曾又变量i和j有修改,在内、外循环一起 控制下,内循环体共被重复执行20次。正确解答是。12.假定a和b为int型变量,则执行以下语句后b的值为()a= 1; b=10;dob- = a ;a+; while (b-v0);9-2-18解在这个程序段中,循环开始前变量a的值为1, b的值为10,每次循环从变量b减去a,并让a增1,并在循环条件判定时,又让 b减 去1.第一次循环后,变量 b的值变成9,变量a 的
33、值变为2,循环判断时,因 b的值大于0,循 环条件不成立,结束循环。但在循环判断时,让 b减去了 1 ,所以循环结束时,变量 b的值为8. 正确的解答是。13.设x和y为int型变量,则执行下面的循环后,y的值为()for (y=l, x = l; yv=50; y+ + ) if (x>= 10) break; if (x%2=1) x + = 5; continue ; x - = 3;2468解for循环语句的初始化部分置变量x和y的初值为1,循环条件是(y<= 50),每次循环后 变量y的值增1,控制循环多执行 50次。循环体 有三个语句:首先在发现变量x的值大于等于 10
34、时,结束循环;接着是当变量x除2的余数为1(即变量x是奇数)时,让变量 X值增5,让x 变成偶数,并直接进入下一轮循环;如变量 x是偶 数,则从变量 x减去3,让变量 x变成奇数。由 上述分析知,每两次循环使变量x的值增加 2.第一次循环后,变量x的值变成 6.第二次循环后,变量x的值变成3.第三次循环后,变量 x的位变 成8.第四次循环后,变量 x的值变成5.第五次循 环后,变量 x的值变成10.第六次循环时,因变量 x的位大于等于10,直接跳出循环,这次循环是非 正常结束,对变量 y的修正只执行了5次。所以循环结束后,变量y的值增至 6.正确的解答是。14.在C语言中,下列说法中正确的是(
35、)不能使用"d品句while (条件)”的循环"d(M句While (条件)”的循环中必须使用“break!乎句退出循环"do语句while (条件)”的循环中,当条件非0时将结束循环"d图句while (条件)”的循环中,当条件为 0时将结束循环解do-while语句的一般形式是:do语句 while (表达式);其语义是重复执行其成分语句,直至表示条件的表达式值为 0时结束。do-while语句是正常使用的 一种循环结构之一。do-while语句的循环结束条件 由while后的表达式值为 0所控制,并不一定要有 break语句跳出循环来结束循环。 d
36、o-while语句在条 件值非0时,将继续循环,而不是结束循环。条件 值为0时,才结束循环。所以正确的选择是。3.2填充题1 .结构化程序设计规定的三种基本结构是结构,选择结构和 结构。解结构化程序设计的三种基本控制结构是顺 序结构、选择结构和循环结构。2 .若有定义 “inta= 25, b=14, c=19; ",以下 语句的执行结果是.if ( a+v= 25&& b-v= 2&& c+) prinif ("*a= % d, b=%d, c=%dn",a, b, c);else printf ( "#a=% d, b
37、=% d, c = %dn", a, b, c);解问题所给的 if语句中,条件 a+<= 25 && b-<= 2&& c+是先求逻辑与的第一个运算 分量,它是一个关系式,关系成立。接着判定第 二个逻辑与运算分量,又是一个关系式,由于变 量b的值是14, b不小于等于2,运算分量的关 系式不成立,导致 if语句的条件为假,执行 else 部分。在求且语句的条件时,计算了2个逻辑与分量,使变量 a的值增了 1 ,变量b的值被减了 1.所以输出内容是:#a=26, b=13, c= 19.4 .设i, j, k均为int型变量,则执行完下面的
38、 for语句后,k的值为.for (i=0 , j = 10; i = j; i+, j-) k=i + j;解该for语句以i为0、j为10初始化,循 环条件是iv=j,每次循环后i增1、j减1,循环 体是将i与j的和赋给k.这样变量k将保存的是后 一次赋给它的值。一次循环后i为l.j为9,二次循环后i为2.j为8,,五次循环后i为5.j为5, 继续第六次循环,将i与j的和10存于k后,i为 6、j为4,结束循环。所以循环执行后k为10.5 .下列程序的功能是输入一个整数,判断是不 是素数,若为素数输出1,否则输出0,请为程序填空。 main ()int i, x, y=1 ;scanf (
39、 '% d", & x);for(i=2;i<=x/2;i+)if y=0 ; break;printf ( %dn",y);解为判数 x是否是素数,预置变量y的值为1 (x可能是素数),然后用循环,用 2至x/2 的整数i测试对x的整除性,若能被其中的某个整 数整除,则 x是合数,置 y的值为 0 (不是素 数),结束测试循环。若都不能整除,则 x为素 数。i能否整除x,可用求余运算 x%i等于0来判 定。所以程序中的空框可填x% i = = 0.测试X为素数的代码可写成:y=l; for ( i=2; iv=x/2; i+) if(x%i = =0
40、) y=0; bleak; 3.3程序分析题1 .阅读程序,写出运行结果。 main () int a=10, b = 4, c= 3;if (avb) a=b; if (av c) a=c; printf ( %d, % d, % n",a, b, c);解程序中,第一个 if语句if (a<b) a=b, 当a<b时,让b值置a,该语句确保 a的值不比 b小。同样第二个 IF语句if (av c) a= c,当av c时,让C值置A ,使A的值不比C小。实际; 情况是a本来就比b和c都大,所以a的值没有 变,程序输出 a、b和c的原来值:10, 4, 3.2.阅读下列
41、程序,写出程序的输出结果。main () int x=100 , a=10, b=20, ok1 = 5, ok2=0; if (avb) if (b! =15) if (! ok1) x =1;else if (ok2) x=10; else x=-l; printf(%dn",x);解程序预置变量 x的值为100, a的值为10, b 的值为 20, ok1 为 5, ok2 为 0.程序中给出的if语句可以写成更结构化的形式如下:if (av b) if (b! = 15) if (! ok1) x=1; elseif (ok2) x=10;else x= l ;由于条件 a&
42、lt; b成立,并且条件b! =15也成立,而ok1不等于0,执行else后的语句。又因 ok2等于0,执行else后的语句赋-1给x.所以程 序输出-l.3.阅读下列程序,写出程序的输出结果。main () int y =9; for (; y> 0; y-)if (y%3=0) printf ( %d”, -y); continue; 解循环前,变量 y的值为9,其中的循环 语句在y大于0情况下循环,每次循环后y的值减1.循环体是当y能被3整除时输出表达式-y, 输出的是减1后的y值。这样,第一次循环因y为9,能被3整除,输出 8, y也变成8.又经两 次循环,y的值变为6,又让y减
43、1变成5,并# include<stdio.h> printf ( "y=%.6fn", y); main () int i, d, n, z, p; /*变量定义*/ 9.编一个程 序显示 ASCII代码0x20至ox6f的十n = z= p=0;进制数值及其对应字符。for (i = 1; i<=10; i+) 解显示 ASCII代码为十六进制0x20至ox6f print ("输入第%d个整数”,i);的字符的十进制代码值与其 字符。程序可用一个循 scanf ( "d, &d ); 环,让变量i顺序地取0X20至OX6f
44、的值,并逐 一 if (d<0) n+;输出其十进制代码和对应的输出5;又经两次循环,y的值变成3,让y减至 变成2,输出2;再经两次循环后, y的值变成 0,结束循环。所以程序输出 852.3.4程序设计题2.编一个程序,输入一个整数,输出其符号(若 泡输出1;若v 0输出-1)。解程序可用if语句判断输入数的符号,并控 制输出1或-l.程序如下:# include<stdio.h>main () int c; /* 变量定义 */printf(输入一个整数”);scanf ( "%d”, &c);if (c>=0) printf(“In”); el
45、se printf ( “ n”);6.编一个程序,输入10个整数,统计并输出其中正数、负数和零的个数。解输入 10个整数,统计其中正数、负数和 零的个数。程序引入3个计数器变量,用于统计大于以小于 0和等于0的整数的个数。开始时,这 3个计数器都置 0,然后用循环逐一输入 10个整 数,并判定当前输入的整数是大于0,或小于0,或等于0,并按判定结果累加相应计数器。后,程 序输出这3个计数器的值。程序如下:字符,程序如下:else if (d>0) p+;# include<stdio.h>else z+;main() int i , k=0;printf (负数有 %d个,
46、正数有 %d个,零有 %d for (i=0x20 ; i<=0x6f ; i+ ) 个。n”, n, p, z); if (k+%10= 0) /*每行十个*/ printf ( “n”);第四章数组4.1单项选择题1.若有下列说明,则数值为4的表达式是()int a12 = l, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ; char c= 'a'd, g; ag-c a4a 'd''c' a 'dC解数组元素的下标自 0开始顺序编号,值 为4的元素是a3.所以只有下标表达式的值为3的才是正确的。下标
47、表达式g-c中的的变量 g和c的值是还未被设定的,其值不确定。a4的值为5,下标为4是不对的。d''的值为1, al的值 是2,所以也是不对的。变量 c的值为a;'dc=3,所以正确解答是。2.设有定义:"char s12= " string ”则 printf("%ch", strlen (s);的输出是()671112解在 C语言中,字符串是指在有效字符之 后有字符列结束标记符的字符列,并约定字符串 的长度是指字符列中有效字符个数,不包括字符 串的结束标记符。存放于字符数组s中的字符串是“string,该字符串的长度为6,所以
48、输出该字符串的长度应是6.正确的解答是。3.下列语句中,正确的是() char a3='abc," 1 ' chara口3='a bc l; ' char a3=: a'"1" char a口3=;a"“1”;解如定义数组时有初始化,其高维的长度可 以省缺,由系统根据初始化时的初值个数确定,而 其它维的长度是不可以缺省的。对二维字符数组的 初始化,可以按行用字符串对其初始化,也可以按 二维数组元素的存储顺序逐一用字符对其元素初始化。在供选择解答和中,有不是高维的长度被 缺省,所以是错误的。在供选择解答和中,还将字符
49、串常量写作abc'这也是错误的。只有,用字符列按行给二维字符数组初始化,这才是正确 的。正确构解答是。4.合法的数组定义是()int a= "string nt a5=0 , 1, 2, 3, 4, 5;char a= "string (har a=0 , 1, 2, 3, 4,5;解错误的原因是整数数组不可以用字符串 对其初始化。错误的原因是,数组初始化时,初 始化指定的值的个数多于数组的元素个数。错误 的原因是,能用字符串初始化的只;有字符指针变 量,或字符数组。字符率不能对其它类型的变量初 始化,包括字符变量。是正确的,因为字符数组 可以用小整数(作为字符的A
50、SCII代码值)对其元素初始化。7.设有如下定义,则正确的叙述为() charx = "abcdefg ;” char y = ,a,h, c,d' 'e' ',' 'g; 数组x和数组y等价 数组x和数组y长度相同数组x的长度大于数组 y的长度数组x的长度小于数组y的长度解不指定数组长度的字符数组定义,其所 需要的字节数可由初始化中给出的值的个数确 定。字符数组可以用字符串初始化,也可用字 符逐个给字符数组的元素初始化。但用字符初 始化时,尽管给出了字符串中的全部字符,还 是不会自动有字符率结束字符。但字符串初始 化自动会含有字符串的
51、结束标记符,字符串初 始化所需要的字节个数会比用同样多的字符初 始化多1个字节。所以只有才是正确的。4.2填充题1 .根据变量定义 “static int b5, a口3=1 , 2, 3, 4, 5, 6; ", b4=, a12=解系统规定,静态变量定义时,若末初始化,系统自动给定二进制代码全0的值。所以静态数组b的元素全为 0,当然包括 b4也为0。静态数组 a是二维数组,每行有三个元素,在初始化中结出了六个初值,所以数组a有2行。由于数组的元素按行顺序存储,并按行顺序初始化。前三个值是第一行,后三个值是第二行。a12是第二行的第三列元素,也是 a的后一个元素,所以其值是6.等
52、于0的情况下循环,能顺序求出n的十六进制的个位数、十位数、百位数等等。程序中变量 base 已预置16,所以在第一个空框处可填代码 n%base。当n的十六进制数的个位、十位、百位等 数字依次存放于数组 c中后,就从高位至低位,参 照数组c的内容d (以其内容为下标),取十六进 制数字符表中的字符 bd输出。所以在第二个空框 处可填入代码 bd.4.3程序分析题3.若在程序中用到 “putcha ()”函数时,应在程 序开头写上包含命令 ,若在程序中用到“strlen() ”函数时,应在程序开头写上包含命令解putchar ()是系统提供的头文件stdio.h中定义的宏,所以程序要使用它,必须
53、写上包含命 令:#include<stdio.h>.函数strlen ()是系统提供的 字符串处理函数之一,字符串处理函数的函数原型 说明和它们用到的有关常量、数据结构等,在系统 提供的头文件 string.h中定义,所以使用该函数的 程序应在程序开头写上包含命令#include<string.h>.6.以下程序可把输入的十进制数以十六进制数的 形式输出,请填空。main () char b17= “0123456789ABCDE F ;int c64 , d, i=0, base= 16; long n; printf ( " Entera number:
54、n') ; scanf("%ld”, &n ) : do ci= ;i+; n=n/base; while (n! =0);printf ( "Transmite new base n");for - -i; i>= 0 ; -i) d = ci ; printf("%己 _); printf ( “n”);解程序中,字符数组b存储十六进制的16个数字符,整型数组c存储译出的十六进制数的各位数值。从整数 n译出它的各位十六进制数值,需 采用除16取余的方法,即求 n除16的余。得到 它的十六进制的个位数,接着将n除以16.在n不1
55、.编程序,输入单精度型一维数组a10,计算并输出a数组中所有元素的平均值。解为了计算数组元素的平均值,首先要累计它的全部元素的 和,然后除以数组元素的个数,即得数组元素的平 均值。写成C程序如下:# include main () int i , n = 10; float s , a10 ; printf("Enter %d numbersn”, n); for ( i=0;i< n ; i+ ) scanf ( "%f; &s); ai= s ; for (s=0.0, i=0 ; i<N ; I+)s+=a ; s / = n ; printf (
56、平均值 是 n",s);2.编程序,输入 10个整数存入一维数组,再按逆 序重新存放后再输出。解将数组的元素逆序重新存放,就是将数 组的首尾对应元素两两交换。简单地可用两个游 标变量i和j, i是前端元素的下标,j是后端元素 的下标,交换以这两个变量值为下标的数组元 素。开始时,i的值为 0, j的值为末元素的下 标。每次交换后,i增1, j减1.继续交换的条件是i<J.程序如下:# include<stdio.h> main () int a10 , i, j, 3 n=10;printf("Enter %d numbers n”, n); for (i
57、 =0; i<n ; i+) scanf ( " %d; &ai); for (i=0 , j = n-1 ; i<j ; i+ , j-) t=ai; ai = aj ; aj =t; for (i = 0; i<n ; i+) printf ( "d",ai); printf ( ”);5.输入一个3X5的整数矩阵,输出其中大值、小 值和它们的下标。解输入一个二维数组,寻找二维数组的大值 和小值。其中寻找大值和小值的工作可用两重循环 实现,即按行按列考察二维数组的元素。程序如 下:# include<stdio.h> ma
58、in () int a35 , i,j,t,n=3, m=5, min , max, minrow , mincol , maxrow, maxcol; printf ("Enter %d*%d numbers ! n” , n, m); for (i =0; i<n ; i+ ) for ( j = 0; j<m ; j+ ) scanf ( " %d; &t) ; aij = t;min = max=a00 ; minrow = mincol = maxrow=maxcol=0 ;for (i = 0; i<n ; I+) for (j=0; j<m ; J+) if ( aij> m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物流仓储外包合同范本
- 调酒用品采购合同范本
- 私人餐厅采购合同范本
- 租赁高空架子合同范本
- 物品改造劳动合同范本
- 甲方租赁设备合同范本
- 私人钢管租赁合同范本
- 绵阳小区保洁合同范本
- 民间借钱合法合同范本
- 购房协议等于购房合同
- 临床技术操作规范麻醉学分册
- CNAS-CC121-2017 环境管理体系审核及认证的能力要求
- 电力工程项目中八大员的具体职责
- 纪念九·一八:致敬那场永不妥协的抗争-主题班会课件
- 铂耐药复发性卵巢癌诊治中国专家共识(2025年版)解读课件
- 《人工智能基础与应用-(AIGC实战 慕课版)》全套教学课件
- 2025年护士执业资格考试题库(社区护理学专项)-社区护理护理法律法规试题
- 第一单元 从感知到物联 第2课传感之古今未来 教学设计2024-2025学年 人教版新教材 初中信息技术八年级上册
- 2024年同等学力申硕《英语》试题真题及答案
- 胃疡病中医护理查房
- 水泥电杆行业分析报告
评论
0/150
提交评论