C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.doc_第1页
C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.doc_第2页
C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.doc_第3页
C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.doc_第4页
C语言程序设计教程 清华大学出版社 陈明主编 第3章答案.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章 习题解答一、选择题1以下叙述中错误的是 。A)C语言是一种结构化程序设计语言B)结构化程序由顺序、分支、循环三种基本结构组成C)使用三种基本结构构成的程序只能解决简单回题D)结构化程序设计提倡模块化的设计方法解析:结构化程序由顺序结构、循环结构和选择结构三种基本结构组成,并且由三种基本结构组成的算法结构可以解决任何复杂问题。答案:C2在下列选项中,不正确的赋值语句是 。A)+t;B)nl = (n2 = (n3 = 0);C)k = i = j;D)a = b + c = 1;解析:选项A中“+t;”相当于“t = t +1;”,是正确的;选项B相当于“nl = n2 = n3 = 0;”,也是合法的;在选项C中,“k = i = j;”相当于“k = (i = 1)”,也就是将括号内关系表达式的值赋给k,是正确的;选项D相当于“b+c=1;a=b+c;”,第一个语句中赋值号的左边出现了表达式,是错误的。答案:D3有以下程序:/* 文件路径名:ex3_1_3main.c */ #include /* 包含库函数printf()所需要的信息 */int main(void)/* 主函数main() */int a = 0, b = 0;/* 定义变量 */a = 10;/* 给a赋值 */b = 20;/* 给b赋值 */printf(a+b=%dn, a + b);/* 输出计算结果 */return 0; /* 返回值0, 返回操作系统 */程序运行后的输出结果是 。A)a+b=10 B)a+b=30 C)30 D)出错解析:“printf(a+b=%dn, a + b);”用于输出a+b的值,输出形式为a+b=30。答案:B4以下叙述中正确的是 。A)调用printf()函数时,必须要有输出项B)调用putchar()函数时,必须在之前包含头文件stdio.hC)在C语言中,整数可以以十二进制、八进制或十六进制的形式输出D)调用getchar()函数读入字符时,可以从键盘上输入字符所对应的ASCII码解析:对于选项A,调用printf()函数时,不一定总有输出项,所以A错误;对于选项C,C语言中,整数可以以十进制、八进制和十六进制表示,而不存在十二进制的表示形式,所以B错误;对于选项D,getchar()读入字符时,从键盘输入的均被认为是字符形式存入到变量中,而不能输入该字符对应的ASCII码。所以D错误。对于选项B,由于putchar()是标准库函数,所以在程序开头必须包含头文件stdio.h。答案:B5有以下程序:/* 文件路径名:ex3_1_5main.c */ #include /* 包含库函数printf()所需要的信息 */int main(void)/* 主函数main() */char c1 = 1, c2 = 2;/* 定义变量 */c1 = getchar(); c2 = getchar();/* 输入c1,c2 */putchar(c1); putchar(c2);/* 输出c1,c2 */return 0; /* 返回值0, 返回操作系统 */当运行时输入a后,以下叙述正确的是 。A)变量c1被赋予字符a, c2被赋予回车符B)程序将等待用户输入2个字符C)变量c1被赋予字符a, c2中仍是原有字符2 D)变量c1被赋予字符a, c2中将无确定值解析:函数getchar()用于从终端输入一个字符,包括回车符在内,所以本题中c1被赋值字符a,c2被赋予回车符。答案:A6设有定义:“int a=2,b=3,c=4;”,则以下选项中值为0的表达式是 。A)(!a=1)&(!b=0)B)(ab)&!c|1C)a&b D)a|(b+b)&(c-a)解析:选项A中的值为(!2=1)&(!3=0)= (0=1)&(!3=0)= 0&(!3=0)=0。选项B中的值为(23)&!4|1=0&!4|1=0|1=1。选项C中的值为2&3=1。选项D中的值为2|(3+3)&(4-2)=1。答案:A7有以下程序:/* 文件路径名:ex3_1_7main.c */ #include /* 包含库函数printf()所需要的信息 */int main(void)/* 主函数main() */int a, b, d = 25;/* 定义变量 */a = d / 10 % 9; b = a & (-1);/* 计算a,b之值 */printf(%d,%dn, a, b);/* 输出a,b */return 0; /* 返回值0, 返回操作系统 */程序运行后的输出结果是 。A)6,1 B)2,1 C)6,0 D)2,0解析:由于d初值为25,所以a=d/10%9=2%9=2, b=2&(-1)=1,所以输出结果应该是:2. 1。答案:B8在嵌套使用if语句时,C语言规定else总是 。A)和之前与其具有相同缩进位置的if配对B)和之前与其最近的if配对C)和之前与其最近的且不带else的if配对D)和之前的第一个if配对解析:C语言的语法规定else子句总是与前面最近的不带else的if相结合。答案:C9有以下程序段:int k = 0, a = 1, b = 2, c = 3;k = a c ? c : k;执行该程序段后,k的值是 。A)3 B)2 C)1 D)0解析:第一个条件表达式a b ? b : a = 1 c ? c : k = 2 3 ? 3 : 2 = 2。答案:B10设有条件表达式“(EXP)?i+:j”,则以下表达式中与(EXP)”完全等价的是 。A)(EXP=0) B)(EXP!=0) C)(EXP=1)D)(EXP!=1)解析:条件表达式(EXP)”为真表示EXP非0,也就是选项B。答案:B11下列叙述正确的是 。A)break语句只能用于switch语句B)break语句必须与switch语句中的case配对C)在switch语句中必须使用defaultD)在switch语句中,不使用break语句在语法上也是正确的解析:break语句可在循环语句中使用;也可在case之后的语句中使用break语句;在switch语句中没有break在语法上也是正确的。.答案:D12在以下给出的表达式中,与while(E)中的(E)不等价的表达式是 。A)(!E=0)B)(E0|E0)C)(E=0)D)(E!=0)解析:表示当E为假时,选项C 中“(E=0)”为真,所以不等价,可知应选择选项C。答案:C13若有以下程序:/* 文件路径名:ex3_1_13main.c */ #include /* 包含库函数printf()所需要的信息 */int main(void)/* 主函数main() */int y = 10;/* 定义变量 */while (y-);/* while循环 */printf(y=%dn, y);/* 输出y */return 0; /* 返回值0, 返回操作系统 */程序运行后的输出结果是 。A)y=0 B)y=-1 C)y=1 D)while构成无限循环解析:当结束循环时,y-的值为0,先取出y的值作为表达式的值,所以y=0,然后y的值再自减1,所以最后y=-1。答案:B14有以下程序:/* 文件路径名:ex3_1_14main.c */ #include /* 包含库函数printf()所需要的信息 */int main(void)/* 主函数main(void) */int k = 5, n = 0;/* 定义变量 */do switch (k)case 1:case 3: n += 1; k-; break;default: n = 0; k-;case 2:case 4: n += 2; k-; break;printf(%d, n);/* 输出n */ while (k 0 & n 0 & n 5)”不成立,结束循环不。答案:A15若变量已正确定义,有以下程序段:/* 文件路径名:ex3_1_15main.c */ #include /* 包含库函数printf()所需要的信息 */int main(void)/* 主函数main() */int i = 0;/* 定义变量 */ do printf(%d, i); while (i+); printf(%dn, i);/* 输出i */return 0; /* 返回值0, 返回操作系统 */其输出结果是 。A)0, 0 B)0 1 C)1, 1 D)程序进入无限循环解析:第1次循环时,输出i的值0,然后条件“i+”的值为0,i的值再自加1和i=1,结束循环,再输出i的值1。答案:B 16有以下程序:/* 文件路径名:ex3_1_16main.c */ #include /* 包含库函数printf()所需要的信息 */int main(void)/* 主函数main() */int y = 9;/* 定义变量 */for (; y 0; y-)if (y % 3 = 0)printf(%d, -y);/* 输出y */ printf(n);/* 换行 */return 0; /* 返回值0, 返回操作系统 */程序的运行结果是 。A)741 B)963 C)852 D)875421解析:条件“y % 3 = 0”表示y为3的倍数,可知当y为9,6和3时,将输出-y的值8,5和2。答案:C17有以下程序:/* 文件路径名:ex3_1_17main.c */ #include /* 包含库函数printf()所需要的信息 */int main(void)/* 主函数main() */int i, j, x = 0;/* 定义变量 */for (i = 0; i 2; i+)x+;/* x自加1 */for (j = 0; j = 3; j+)if (j % 2 != 0)/* j为奇数 */continue;x+;/* x自加1 */x+;/* x自加1 */ printf(x=%dn, x);/* 输出x */return 0; /* 返回值0, 返回操作系统 */程序执行后的输出结果是 。A)x=4 B)x=8 C)x=6 D)x=12解析:内层for循环,当j为奇数时,执行“continue;”继续下次内层循环,当j为偶数0,2时,执行“x+”,所以内层for循环语句实现x=x+2,故外层for循环语句单次循环实现x=x+4,所以程序执行后的输出结果为x=8。答案:B二、填空题1若变量a,b已定义为int类型并赋值21和55,要求用printf()函数以a=21,b=55的形式输出,请写出完整的输出语句 。解析:printf函数的一般格式为.“printf(格式控制,输出表列)”,输出a=21,b=55的格式控制为a=%d,b=%d。答案:printf(a=%d,b=%d, a, b);2以下程序运行后的输出结果是 。/* 文件路径名:ex3_2_2main.c */ #include /* 包含库函数printf()所需要的信息 */int main(void)/* 主函数main() */int x = 0210;/* 定义变量 */printf(%dn, x);/* 输出x */return 0; /* 返回值0, 返回操作系统 */解析:C语言中以0打头的整数为八进制表示,x的十进制表示为2*64+8=136。所以输出结果为130。答案:1303执行以下程序时输入1234567,则输出结果是 。/* 文件路径名:ex3_2_3main.c */ #include /* 标准输入/出库头文件 */int main(void)/* 主函数main() */int a = 1, b;/* 定义变量 */scanf(%2d%2d, &a, &b);/* 输入a,b */printf(%d %dn, a, b);/* 输出a,b */return 0; /* 返回值0, 返回操作系统 */解析:题中两个变量的场宽都为2,所以输入1234567后,变量a的值为12,变量b的值为34。答案: 12 344己定义“char ch = $; int i = l, j;”,执行“j=!ch&i+”以后,i的值为 。解析:由于!ch的值为0,所以第1个表达式的值为假,这样整个表达式的值为假,这样不再执行“i+”,所以i的值为1。答案:15以下程序运行后的输出结果是 。/* 文件路径名:ex3_2_5main.c */ #include /* 包含库函数printf()所需要的信息 */int main(void)/* 主函数main() */int a = 10, b = 20, c;/* 定义变量 */c = (a % b 1 );/* 计算c之值 */printf(%d,%d,%dn, a, b, c);/* 输出a,b,c */return 0; /* 返回值0, 返回操作系统 */解析:a的初值为10, b的初值为20,所以“a%b”的值为10,“(a%b1)”的结果为假,所以“(a % b 1 )的值为假(0),因此c的值为0。答案:10 20 06以下程序运行后的输出结果是 。/* 文件路径名:ex3_2_6main.c */ #include /* 包含库函数printf()所需要的信息 */int main(void)/* 主函数main() */int a = 3, b = 4, c = 5, t = 99;/* 定义变量 */if (b a & a c) t = a;/* 条件成立时将a赋值给t */a = c; c = t;/* 赋值运算 */if (a c & b c) t = b;/* 条件成立时将b赋值给t */b = a; a = t;/* 赋值运算 */printf(%d %d %dn, a, b, c);/* 输出a,b,c */return 0; /* 返回值0, 返回操作系统 */解析:由于a,b,c和t的初值为3,4,5和99,所以if语句的条件“b a & a c”为假,不执行 t = a;”,但后面的“a = c; c = t;”与此if语句无关,仍被执行。执行后a的值为5,b的值仍是4, c的值为99,再执行第二个if语句,由于此时“a c & b c”为真,从而执行“t = b;”,执行后t的值为4,紧随执行其后的“b = a; a = t;”,执行后a的值为4,b的值是5,c的值为99。因此输出结果是:4 5 99答案:4 5 997以下程序运行后的输出结果是 。/* 文件路径名:ex3_2_7main.c */ #include /* 包含库函数printf()所需要的信息 */int main(void)/* 主函数main() */int x, a = 1, b = 2, c = 3, d = 4;/* 定义变量 */x = (a b) ? a : b;/* 计算条件表达式之值 */x = (x x) ? x : d;/* 计算条件表达式之值 */printf(%dn, x);/* 输出x */return 0; /* 返回值0, 返回操作系统 */解析:第一个条件表达式(a b) ? a : b = (1 2) ? 1 : 2 = 1;第二个条件表达式(x c) ? x : c = (1 x) ? x : d = (4 1) ? 1 : 4 = 1,所以结果为1。答案:18当执行以下程序时,输入1234567890,则其中while循环体将执行 次。/* 文件路径名:ex3_2_8main.c */ #include /* 包含库函数printf()所需要的信息 */int main(void)/* 主函数main() */char ch;/* 定义变量 */while (ch = getchar() = 0)printf(#);/* 输出# */printf(n);/* 换行 */return 0; /* 返回值0, 返回操作系统 */解析:“ch=getchar()”用于从终端读入一个字符赋给变量ch,输入字符1被赋给ch,由于1!=0,所以循环体不执行,直接退出while循环,所以循环体执行的次数为0。答案:09以下程序运行后的输出结果是 。/* 文件路径名:ex3_2_9main.c */ #include /* 包含库函数printf()所需要的信息 */int main(void)/* 主函数main() */char c1, c2;/* 定义变量 */for (c1 = 0, c2 = 9; c1 c2; c1+, c2-)printf(%c%c, c1, c2);/* 输出c1,c2 */printf(n);/* 换行 */return 0; /* 返回值0, 返回操作系统 */解析:for循环的循环变量c1的初值为0, c2的初值为9。第1次循环沓,输出字符c1, c2,也就是09。执行c1+和c2-后,c1的值为1,c2的值为8。第2次循环沓,输出字符c1, c2,也就是18。执行c1+和c2-后,c1的值为2,c2的值为7。第3次循环沓,输出字符c1, c2,也就是27。执行c1+和c2-后,c1的值为3,c2的值为6。第4次循环沓,输出字符c1, c2,也就是36。执行c1+和c2-后,c1的值为4,c2的值为5。第5次循环沓,输出字符c1, c2,也就是45。执行c1+和c2-后,c1的值为5,c2的值为4,这时c1c2不成立,所以结束循环。答案:091827364510若有以下程序段,且变量已正确定义和赋值:for (s = 1.0, k = 1; k = n; k+)s = s + 1.0 / (k * (k + l );printf(s=%fn, s);请填空,使下面程序段的功能与之完全相同:s = 1.0; k = 1;while ( 【1】 )s = s + 1.0 / (k * (k + l ); 【2】 ;printf(s=%fn, s);解析:本题要求将for循环改写成while循环。while循环与for循环的结束条件是相同的,因此,第1处应填写k=n;while循环体内应改变循环变量的值,因此,第2处应填写k+。答案:【1】k = n【2】k+12以下程序的功能是:输出 100以内(不含100)能被3整除且个位数为6的所有整数,请填空。/* 文件路径名:ex3_2_12main.c */ #include /* 包含库函数printf()所需要的信息 */int main(void)/* 主函数main() */int i, j;/* 定义变量 */for (i = 0; 【1】 ; i+)j = i * 10 + 6;/* j个位数为6 */if ( 【2】 ) continue;printf(%d , j);/* 输出j */printf(n);/* 换行 */return 0; /* 返回值0, 返回操作系统 */解析:for循环语句中表达式“j = i * 10 + 6;”可以给出100以内个位数为6的所有整数,所以if语句只需判断该数能否被3整除即可,可应用取余运算表达式“j % 3 != 0”判断。答索:【1】i 10【2】j % 3 != 0三、编程题1编程判断输入的整数否是2或3的倍数。参考程序:/* 文件路径名:ex3_3_1main.c */#include /* 包含库函数printf()所需要的信息 */#include /* 包含库函数system()所需要的信息 */int main(void)/* 主函数main() */int n;/* 定义变量 */printf(输入一个整数:);/* 输入提示 */scanf(%d, &n);/* 输入n */if (n % 2 = 0 | n % 3 = 0)/* 是2或3的倍数 */printf(%d是2或3的倍数n, n);/* 输出结果 */else/* 不是2或3的倍数 */printf(%d不是2或3的倍数n, n);/* 输出结果 */ system(PAUSE);/* 调用库函数system( ),输出系统提示信息 */return 0; /* 返回值0, 返回操作系统 */2编程判断输入的整数否是2与3的公倍数。参考程序:/* 文件路径名:ex3_3_2main.c */#include /* 包含库函数printf()所需要的信息 */#include /* 包含库函数system()所需要的信息 */int main(void)/* 主函数main() */int n;/* 定义变量 */printf(输入一个整数:);/* 输入提示 */scanf(%d, &n);/* 输入n */if (n % 2 = 0 & n % 3 = 0)/* 是2与3的公倍数 */printf(%d是是2与3的公倍数n, n);/* 输出结果 */else/* 不是2与3的公倍数 */printf(%d不是2与3的公倍数n, n);/* 输出结果 */ system(PAUSE);/* 调用库函数system( ),输出系统提示信息 */return 0; /* 返回值0, 返回操作系统 */3有一个函数:试编程实现输入x,输出y的值。参考程序:/* 文件路径名:ex3_3_3main.c */#include /* 包含库函数printf()所需要的信息 */#include /* 包含库函数system()所需要的信息 */int main(void)/* 主函数main() */float x, y;/* 定义变量 */printf(输入一个数:);/* 输入提示 */scanf(%f, &x);/* 输入n */if (x 1) y = x;/* x1 */else if (x 16) y = 5 * x + 6;/* 1x16 */else y = 7 * x - 9;/* x16 */printf(y=%fn, y);/* 输出结果 */ system(PAUSE);/* 调用库函数system( ),输出系统提示信息 */return 0; /* 返回值0, 返回操作系统 */4求(也就是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论