第4章选择结构习题答案
- 格式:doc
- 大小:32.00 KB
- 文档页数:2
第1章程序设计和C语言11.1什么是计算机程序11.2什么是计算机语言11.3C语言的发展及其特点31.4最简单的C语言程序51.4.1最简单的C语言程序举例61.4.2C语言程序的结构101.5运行C程序的步骤与方法121.6程序设计的任务141-5 #include <stdio.h>int main ( ){ printf ("**************************\n\n"); printf(" Very Good!\n\n");printf ("**************************\n"); return 0;}1-6#include <stdio.h>int main(){int a,b,c,max;printf("please input a,b,c:\n");scanf("%d,%d,%d",&a,&b,&c);max=a;if (max<b)max=b;if (max<c)max=c;printf("The largest number is %d\n",max);return 0;}第2章算法——程序的灵魂162.1什么是算法162.2简单的算法举例172.3算法的特性212.4怎样表示一个算法222.4.1用自然语言表示算法222.4.2用流程图表示算法222.4.3三种基本结构和改进的流程图262.4.4用N S流程图表示算法282.4.5用伪代码表示算法312.4.6用计算机语言表示算法322.5结构化程序设计方法34习题36第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例373.2数据的表现形式及其运算393.2.1常量和变量393.2.2数据类型423.2.3整型数据443.2.4字符型数据473.2.5浮点型数据493.2.6怎样确定常量的类型513.2.7运算符和表达式523.3C语句573.3.1C语句的作用和分类573.3.2最基本的语句——赋值语句593.4数据的输入输出653.4.1输入输出举例653.4.2有关数据输入输出的概念673.4.3用printf函数输出数据683.4.4用scanf函数输入数据753.4.5字符数据的输入输出78习题823-1 #include <stdio.h>#include <math.h>int main(){float p,r,n;r=0.1;n=10;p=pow(1+r,n);printf("p=%f\n",p);return 0;}3-2-1#include <stdio.h>#include <math.h>int main(){float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;p1=p*((1+r5)*5); // 一次存5年期p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次 p5=p*pow(1+r0/4,4*5); // 存活期存款。
第 4 章广义线性表——多维数组和广义表2005-07-14第 4 章广义线性表——多维数组和广义表课后习题讲解1. 填空⑴数组通常只有两种运算:()和(),这决定了数组通常采用()结构来实现存储。
【解答】存取,修改,顺序存储【分析】数组是一个具有固定格式和数量的数据集合,在数组上一般不能做插入、删除元素的操作。
除了初始化和销毁之外,在数组中通常只有存取和修改两种操作。
⑵二维数组A中行下标从10到20,列下标从5到10,按行优先存储,每个元素占4个存储单元,A[10][5]的存储地址是1000,则元素A[15][10]的存储地址是()。
【解答】1140【分析】数组A中每行共有6个元素,元素A[15][10]的前面共存储了(15-10)×6+5个元素,每个元素占4个存储单元,所以,其存储地址是1000+140=1140。
⑶设有一个10阶的对称矩阵A采用压缩存储,A[0][0]为第一个元素,其存储地址为d,每个元素占1个存储单元,则元素A[8][5]的存储地址为()。
【解答】d+41【分析】元素A[8][5]的前面共存储了(1+2+…+8)+5=41个元素。
⑷稀疏矩阵一般压缩存储方法有两种,分别是()和()。
【解答】三元组顺序表,十字链表⑸广义表((a), (((b),c)),(d))的长度是(),深度是(),表头是(),表尾是()。
【解答】3,4,(a),((((b),c)),(d))⑹已知广义表LS=(a,(b,c,d),e),用Head和Tail函数取出LS中原子b的运算是()。
【解答】Head(Head(Tail(LS)))2. 选择题⑴二维数组A的每个元素是由6个字符组成的串,行下标的范围从0~8,列下标的范围是从0~9,则存放A至少需要()个字节,A的第8列和第5行共占()个字节,若A按行优先方式存储,元素A[8][5]的起始地址与当A按列优先方式存储时的()元素的起始地址一致。
第四章习题一、 选择题1. 下面说法正确的是:---------------------------- ( D )(A) 分子中各类对称元素的完全集合构成分子的对称群(B) 同一种分子必然同属于一个点群,不同种分子必然属于不同的点群(C) 分子中有 Sn 轴,则此分子必然同时存在 Cn 轴和σh 面(D) 镜面σd 一定也是镜面σv2. 下面说法正确的是:---------------------------- ( B )(A) 如构成分子的各类原子均是成双出现的,则此分子必有对称中心(B) 分子中若有C4,又有i ,则必有σ(C) 凡是平面型分子必然属于Cs 群(D) 在任何情况下,2ˆn S =E ˆ3. 如果图形中有对称元素S6,那么该图形中必然包含:---------------------------- ( C )(A) C6, σh (B) C3, σh (C) C3,i (D) C6,i二、 填空题1. I3和I6不是独立的对称元素,因为I3= +I ,I6= +σh 。
2. 对称元素C2与σh 组合,得到__ i __;Cn 次轴与垂直它的C2组合,得到_n 个C2__。
3. 有两个分子,N3B3H6和 C4H4F2,它们都为非极性,且为反磁性,则N3B3H6几何构型_平面六元环__,点群 _。
C4H4F2几何构型_平面,有两个双键_,点群 。
三、 判断题1. 既不存在C n 轴,又不存在σh 时,S n 轴必不存在。
---------------------------- ( × )2. 在任何情况下,2ˆnS =E ˆ 。
---------------------------- ( × ) 3. 分子的对称元素仅7种,即σ ,i 及轴次为1,2,3,4,6的旋转轴和反轴。
---------------------------- ( × )四、 简答题1. 写出六重映轴的全部对称操作。
第4章 受弯构件的正截面承载力4.1选择题1.( C )作为受弯构件正截面承载力计算的依据。
A .Ⅰa 状态;B. Ⅱa 状态; C. Ⅲa 状态; D. 第Ⅱ阶段; 2.( A )作为受弯构件抗裂计算的依据。
A .Ⅰa 状态;B. Ⅱa 状态; C. Ⅲa 状态; D. 第Ⅱ阶段; 3.( D )作为受弯构件变形和裂缝验算的依据。
A .Ⅰa 状态;B. Ⅱa 状态;C. Ⅲa 状态; D. 第Ⅱ阶段;4.受弯构件正截面承载力计算基本公式的建立是依据哪种破坏形态建立的( B )。
A. 少筋破坏;B 适筋破坏;C 超筋破坏;D 界限破坏;5.下列那个条件不能用来判断适筋破坏与超筋破坏的界限( C )。
A .b ξξ≤;B .0h x b ξ≤;C .'2s a x ≤; D .max ρρ≤6.受弯构件正截面承载力计算中,截面抵抗矩系数s α取值为:( A )。
A .)5.01(ξξ-; B .)5.01(ξξ+;C .ξ5.01-;D .ξ5.01+;7.受弯构件正截面承载力中,对于双筋截面,下面哪个条件可以满足受压钢筋的屈服( C )。
A .0h x b ξ≤;B .0h x b ξ>;C .'2s a x ≥;D .'2s a x <;8.受弯构件正截面承载力中,T 形截面划分为两类截面的依据是( D )。
A. 计算公式建立的基本原理不同;B. 受拉区与受压区截面形状不同;C. 破坏形态不同;D. 混凝土受压区的形状不同;9.提高受弯构件正截面受弯能力最有效的方法是( C )。
A. 提高混凝土强度等级;B. 增加保护层厚度;C. 增加截面高度;D. 增加截面宽度;10.在T 形截面梁的正截面承载力计算中,假定在受压区翼缘计算宽度范围内混凝土的压应力分布是( A )。
A. 均匀分布;B. 按抛物线形分布;C. 按三角形分布;D. 部分均匀,部分不均匀分布;11.混凝土保护层厚度是指( B )。
C程序设计(第五版)-第4章选择结构程序设计课后习题答案1. 什么是算术运算?什么是关系运算?什么是逻辑运算?【答案解析】算熟运算:算术运算即“四则运算”,是加法、减法、乘法、除法、乘⽅、开⽅等⼏种运算的统称。
其中加减为⼀级运算,乘除为⼆级运算,乘⽅、开⽅为三级运算。
在⼀道算式中,如果有多级运算存在,则应先进⾏⾼级运算,再进⾏低⼀级的运算。
C语⾔中的算熟运算符包括:+、-、*、/、++、--、%等种类。
如果只存在同级运算;则从左⾄右的顺序进⾏;如果算式中有括号,则应先算括号⾥边,再按上述规则进⾏计算。
⽰例:$ (1 + 1)^{2} * 4+5 * 3$解析:1. 先进⾏括号内运算1+1,然后进⾏乘⽅运算得到结果4.2. 接下来与4相乘,得到结果163. 因为乘法优先级⼤于加法,因此先进⾏5*3,得到结果154. 最终相加得到结果31结果:31关系运算:关系的基本运算有两类:⼀类是传统的集合运算(并、差、交等),另⼀类是专门的关系运算(选择、投影、连接、除法、外连接等),⽽在C语⾔中,关系运算通常被认为是⽐较运算,将两个数值进⾏⽐较,判断⽐较结果是否符合给定的条件。
常见的关系运算符包括:<、<=、>、>=、==、!=等种类。
其中,前4种关系运算符(<、<=、>、>= )的优先级别相同,后2种(==、!=)也相同。
⽽前4种⾼于后2种。
例如, >优先于==。
⽽>与<优先级相同。
并且,关系运算符的优先级低于算术运算符,关系运算符的优先级⾼于赋值运算符(=)。
逻辑运算:在逻辑代数中,有与、或、⾮三种基本逻辑运算。
表⽰逻辑运算的⽅法有多种,如语句描述、逻辑代数式、真值表、卡诺图等。
⽽在C语⾔中,逻辑运算通常⽤于使⽤逻辑运算符将关系表达式或其它逻辑量连接起来组成逻辑表达式⽤来测试真假值。
常见的逻辑运算符包括:&&、||、!等种类&&:与是双⽬运算符,要求有两个运算对象,表⽰两个运算对象都成⽴,则结果为真,否则结果为假。
第4章选择结构1、以下选项中,当x为大于1的奇数时,值为0的表达式是A) x%2==0B) x/2C) x%2!=0D) x%2==1参考答案:A【解析】算术运算符的优先级高于关系运算符的优先级,所以当x为大于1的奇数时,A选项的值为假,即0。B选项的值为不定值,但绝对不是0。C选项的值为真,即1。D选项的值为真,即1。2、当变量c的值不为2、4、6时,值为"真"的表达式是A) (c>=2 && c<=6)&&(c%2!=1)B) (c==2)||(c==4)||(c==6)C) (c>=2 && c<=6)&& !(c%2)D) (c>=2 && c<=6) || (c!=3) || (c!=5)参考答案:D【解析】逻辑或表达式中有一个值不为0,结果即为真,逻辑与表达式中只有两个运算对象均非零,结果才为真。所以只有选项D满足要求。3、以下叙述中正确的是A) 在C语言中,逻辑真值和假值分别对应1和0B) 关系运算符两边的运算对象可以是C语言中任意合法的表达式C) 对于浮点变量x和y,表达式:x==y 是非法的,会出编译错误D) 分支结构是根据算术表达式的结果来判断流程走向的参考答案:B【解析】A选项中,在C语言中,逻辑真值对应非0; C选项中,表达式:x==y 是合法的;D选项中,分支结构的流程走向是根据表达式的值,并不仅仅是算数表达式的值。
因此B选项正确。
4、下列关系表达式中,结果为"假"的是A) 3 <= 4B) (3 < 4) == 1C) (3 + 4) > 6D) (3 != 4) > 2参考答案:D【解析】B选项中,关系表达式(3<4)==1即1==1,结果为真; C选项中,(3+4)>6即7>6,结果为真;A选项中,3<=4结果为真。
第4章选择结构程序设计习题(P111)4。
2 C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?答:C语言中用1表示真,0表示假;系统按照“非0为真,0为假”判断一个逻辑量的真假。
4.3 写出下面各逻辑表达式的值。
设a=3,b=4,c=5。
(1)a+b〉c&&b==c (2)a||b+c&&b-c (3)!(a〉b)&&!c||1(4)!(x=a)&&(y=b)&&0 (5)!(a+b)+c—1&&b+c/2解:该题在求解过程中注意:一、优先级。
逻辑运算符(&&和||)低于算术运算符和关系运算符而高于赋值运算符,在逻辑运算符中,逻辑非最高,逻辑与其次,逻辑或最低;二、逻辑表达式的求值规则。
(P94)所以得以上表达式的值分别为:(1)0 (2)1 (3)1 (4)0 (5)14。
4有3个整数a、b、c,由键盘输入,输出其中最大的数。
分析:这是一个规模较小的求最值的算法,习题1.6用函数的方法实现。
该题不用函数调用实现,但方法类似。
法一:先求前两个数的最值,再用前两个数的最值和第三个数比较即得结果。
法二:先假设第一个数是最值,再依次和第二、第三个数比较得结果。
其中都要用到单分支或双分支选择结构语句。
参考程序如下:法一:main(){ int a,b,c,max;/*定义4个整型变量,其中a,b,c存原始数据,max存最值*/ printf(”\ninput the value of a,b,c:"); /*提示输入*/scanf(”%d%d%d",&a,&b,&c);/*格式符之间无分隔符,输入时可以以空格、回车、跳格分隔*/if(a>b) max=a;else max=b;if(max<c) max=c;printf("\nmax=%d\n",max);}法二:main(){int a,b,c,max;printf(”\ninput the value of a,b,c:”);scanf(”%d%d%d",&a,&b,&c);max=a;if(max〈b) max=b;if(max<c) max=c;printf("\nmax=%d\n”,max);}4.6有一个函数:写一段程序,输入x,输出y的值。
目录第1-3章C语言基础知识习题 (2)1 选择题 (2)2 填空题 (7)3 答案及部分解析 (9)第4章选择结构习题 (11)1 选择题 (11)2 填空题 (17)3 答案及部分解析 (23)第5章循环结构习题 (26)1 选择题 (26)2 填空题: (32)3 答案及部分解题分析 (39)第6章数组习题 (41)1. 单项选择题 (41)2. 填空题 (44)3. 判断题 (45)4. 程序填空题 (45)5. 阅读程序,分析程序的功能。
(49)第7章函数习题 (55)1. 单项选择题 (55)2. 填空题 (56)3. 判断题 (57)4. 程序填空题 (58)5. 写出下列程序运行结果 (59)第8章指针习题 (67)1 选择题 (67)2 填空题 (69)第1-3章C语言基础知识习题1 选择题1. 以下不是C语言的特点的是()。
A、语言简洁紧凑B、能够编制出功能复杂的程序C、C语言可以直接对硬件操作D、C语言移植性好2.下列字符序列中,不可用作C语言标识符的是()。
A.abc123 B.no.1 C._123_ D._ok3.正确的C语言标识符是()。
A._buy_2 B.2_buy C.?_buy D.buy?4. 请选出可用作C语言用户标识符的一组标识符()。
A.void B.a3_b3 C.For D.2adefine _123 -abc DOWORD IF Case sizeof5. 下列符号中,不属于转义字符的是()。
A.\\ B.\0xAA C.\t D.\06.不属于C语言关键字的是()。
A.int B.break C.while D.character7.是C语言提供的合法关键字的是()。
A.Float B.signed C.integer D.Char8.以下不能定义为用户标示符的是()。
A.scanf B.Void C._3com_ D.int9.一个C程序是由()。
第四章选择结构习题参考答案:
一、选择题
1-10:A CABD CADD A
11-20:C CBDC ACACB
21-30:D CB B D AC A BA
31-40:DCDCB BAACB
41-50:CDDDA A A D DB
二、填空题
(1) 2 (2) 4,5,99 (3) 10 20 0 (4) 2 1 (5) -4 (6) 3 (7) yes (8) 1
(10) 20,0 (11) 585858 (12) 0
三、编程题
1,
.#include<stdio.h>
void main()
{ int x,y;
scanf(“%d”,&x);
if(x>-1)
{if(x>5) y=2*x+5;
else if(x>2) y=x*(x+2);
else y=2*x;
printf(“y=%d\n”,y);
}
else printf(“输入值范围错误!”) ;
}
2, .
#include<stdio.h>
void main()
{float a,b;
scanf(“%f”,&a);
if(a<2000) b=0;
else if(a<4000) b=a*0.03;
else if(a<5000) b=a*0.04;
else b=a*0.05;
printf(“收入所得税为:”,b);
}
3,题目:输入某年某月某日,判断这一天是这一年的第几天?
方法一:
#include<stdio.h>
void main()
{
int year,month,daily,sum;
printf("请输入年月日:/n");
scanf("%d%d%d",&year,&month,&daily);
switch(month)
{
case 1:{sum=daily;break;}
case 2:{sum=31+daily;break;}
case 3:{sum=31+28+daily;break;}
case 4:{sum=31+28+31+daily;break;}
case 5:{sum=31+28+31+30+daily;break;}
case 6:{sum=31+28+31+30+31+daily;break;}
case 7:{sum=31+28+31+30+31+30+daily;break;}
case 8:{sum=31+28+31+30+31+30+31+daily;break;}
case 9:{sum=31+28+31+30+31+30+31+31+daily;break;}
case 10:{sum=31+28+31+30+31+30+31+31+30+daily;break;}
case 11:{sum=31+28+31+30+31+30+31+31+30+31+daily;break;} case 12:{sum=31+28+31+30+31+30+31+31+30+31+30+daily;break;} default:{printf("你输入的月份不对,请重新输入。
/n");};
}
if((year%400==0||(year%4==0 && year%100!=0) ) &&month>=2) printf("你输入的日子是%d年的第%d天。
/n",year,sum+1);
else
printf("你输入的日子是%d年的第%d天。
/n",year,sum);
}
方法二:
#include<stdio.h>
void main()
{int day,month,year,sum,leap;
printf("/nplease input year,month,day/n");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)/*先计算某月以前月份的总天数*/
{case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");break;
}
sum=sum+day; /*再加上某天的天数*/
if(year%400==0||(year%4==0&&year%100!= 0))/*判断是不是闰年*/
leap=1;
else
leap=0;
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
sum=sum+1;
printf("这一天是这一年的第%d 天.",sum);
}。