




已阅读5页,还剩81页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
z 习 题 解 答目 录 1.2 习题解答.3 1.2.1 选择题.3 1.2.2 填空题.3 1.2.3 编程题.4 2.2 习题解答.5 2.2.1 选择题.5 2.2.2 填空题.7 2.2.3 编程题.8 3.2 习题解答.11 3.2.1 选择题.11 3.2.2 填空题.12 3.2.3 编程题.12 4.2 习题解答.15 4.2.1 选择题.15 4.2.2 填空题.17 4.2.3 编程题.18 5.2 习题解答.29 5.2.1 选择题.29 5.2.2 填空题.31 5.2.3 编程题.33 6.2 习题解答.37 6.2.1 选择题.37 6.2.2 填空题.41 6.2.3 编程题.43 7.2 习题解答.67 7.2.1 选择题.67 7.2.2 填空题.68 7.2.3 编程题.68 2 1.2 习题解答 1.2.1 选择题 1、B 【分析】在一个C程序中必须有且只能有一个main函数,而且main函数可以在任何地方出现. 2、C 【分析】C 语言中合法以的标识符组成为:字母,数字,下划线,且数字不能打头,亦不能为关键字。A中,-sub 不合法。B 中4d不合法。D 中void 为关键字。 3、 【分析】 4、C 【分析】转义字符中,第一个”输出“,第二输出,第三个b退格,把前一个去掉了,第四个输出,第五个t跳格,第六个”输出”,第七个n输出换行。5、C 【分析】本题将10进制17,分别按8、16进制输出。8的进制21=2*8+1*1=17(10, 16制11=1*16+1*1=17(10) 1.2.2 填空题 1、主 【分析】一个C源程序中至少包括一个主函数,其他函数没有限制。 2、双引号。 【分析】两种写法都是允许的,使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找.使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。用户编程时可根据自己文件所在的目录来选择某一种命令形式。 3、261,b1 【分析】将10进制的177,按8进制和16进制两种形式输出。 4、a3 b7 x8.5 y71.82 c1=A c2=a 【分析】scanf函数中,格式说明符以外的原样输入。 5、printf函数中,格式说明符以外的原样输出。%m.nf控制输出结果中共m位,小数3 占n位。 【分析】 1.2.3 编程题 1. #include stdio.h void main() float qianmi,yingli; /定义变量 scanf(qianmi=%f,&qianmi); /输入数据 printf(yingli=%f,qianmi*1.60934); /计算并输出数据 2. #include stdio.h void main() char x; printf(请输出一个小写小母n); scanf(%c,&x); printf(输出字母的大写型式为:%c,x+32); 3、#include void main() float c,f; printf(请输入一个摄氏温度:) ; scanf(%f,&c); f=32*c+9.0/5*c; 4 printf(华氏温度为:%5.2fn,f); 4. #include void main() int a =3,b=4,c=5; float x=1.2,y=2.4,z=-3.6; double u=51274,n=128765; printf(a=%-3d,b=%-3d,c=%dn,a,b,c); printf(x=%7.6f,y=%7.6f,z=%7.6fn,x,y,z); printf(x+y= %3.2f,y+z= %3.2f, x+z=%3.2fn,x+y,y+z,x+z); printf(u= %.0lf n= %.0lfn,u,n); printf(c1=a or 97nc2=b or 98n); 2.2 习题解答 2.2.1 选择题 1、C 【分析】语言的运算符按运算对象的个数可以分为单目、双目和三目运算符和多目运算符。 2、C 【分析】 %运算符要求参加运算的数必须是整数 3、A 【分析】 B.赋值运算的作用是用将常量赋给变量,而不能给表达形式 所以a*3=2 不对。 C. %运算符要求参加运算的数必须是整数,而x是float 类型所以x%(-3) 不对 。 D. y=float(i),由于i是 int 类型,向 float类型转换是自由转的,不需要强制转。 4、A . 【分析】 因为 k=7,x=12; x%=k,则x=12%7,此时x=5,而k%=5,即k=7%5此时K=2,所以(x%=k)-(k%=5)就等价于5-2=3。同理,x%=(k%=5)的值为0;x%=(k-k%5)的值为2;x%=k-k%5的值也为2 5、A 5 【分析】首先通过n*100+0.5将原数扩大100,并通过+0.5判断是否进位。之后/100进行舍去小数点后第三位的运算。 6、B 【分析】分析 根据优先级别,先计算小括号里,y 与3相等成立所以表达式的值为1,再将1赋给x,而x的值就是表达式的值为1. 7、A 【分析】略 8、D 【分析】“a大于等于10”、“ a小于等于0”两者分别为关系运算,一个“或”字又表明为逻辑或运算,所以D对。 9、B 【分析】在逻辑表达式求解中,并不是所有的逻辑运算符都被执行,对&运算符来说,只有前一个表达式不等于0时,才继续进行右边的运算。由于ab为0,所以左边的表达式为0,所以右边的+n将不被计算,所以n的值不变仍为2。10、B 【分析】241的二进制形式为11110001,15的二进制形式为00011111,进行按位&运算后为00010001;a的二进制形式为01100001,z的二进制形式为01111010,进行按位|运算后为011111011。00010001与011111011都为非0元素,所以再进行&时结果一定为1。 11、A 【分析】b2表示向右移动两位,相当于除以两个2结果为8/2=4;同理,b1相当于除一个2,结果为6,4/6为0。12、B 【分析】3的二进制数为00000011。10的二进制为00001010,a双目,算术运算关系运算逻辑运算。 14、B 【分析】19的二制数为00010011,23的二进制数为00010100,两者进行按位与后结果为00010000十进制16,即为16进制的13。 15、C 【分析】0x39的二进制形式为00111001,0xf的二进制形式为00001111,两者进行异或运算,异或结算的规则,参加运算的两个二进制位同号,则结果为假,异号则为真。结果为:00110110即为16进制的36。 16、A 6 【分析】进行按位或运算,要a的低8位为1,则要求b的低8位全为1,高8位要求不变,则要求高8位全为0,即b应该为:0000000011111111,即为8进制的0377。 17、A 【分析】由题得12不成立,所以xy?+x:+y表达式的值为+y,则此时Y的值为3,而+x没有被执行,所以x的仍值为1,而Z的值与表达式的值相同所以选A。 18、C 【分析】赋值运算符的作和是将一个表达式或一个变量,常量赋给另一个变量,赋值号的左边只能是变量,不能是常量,所以A、B、D不对。 19、B 【分析】逗号运算符是级别最纸的运算符,逗号表达式也是值是所有表达式中最右边的值。即a+b的值,由题从左向右算起,b+后b为6,则a+b为8.20、D 【分析】在不同种数据类型进行计算时的转换规则是:数据类型低的全部转换成运算过程中级别最高的。在int、long、unsigned和char四个类型中,long的类型级别最高,所以结果的类型为long. 2.2.2 填空题 1. -17.5 【分析】“/”要求两操作数如果一个为实数结果都为实数,如果都为整数结果也为整数,所以a/4.0=2.5,a/4=2.所以原式=2.5-2*10=-17.5。2. 5,32 【分析】x+表示将x的值拿来用,然后再+;而y*=x+等价于y=y*x,即y=8*4=32,此计算结束之后x 的值才增加1,变为5。3. -40 【分析】赋值运算符的结合方向是从右向左的,所以先计算a*a=25,所以a+=a-=a*a等价于a+=(a-=25),而此时a仍为5.接下来计算a-=25得a=2-25=-20;则a+=(a-=25)等价于a+=-20,所以a=a-20=-20-20=-40。4. 16 【分析】x+=-x%-y等价于x+=(-x)%(-y),-放在变量的前面时,要先对变量进行变化,然后再用,所以原式即为x+=14%3,而14%3=2,即x+=2,而此时x=14,所以x=x+2=16。5. x1&x10 |x关系运算逻辑运算可知,要先算a+b=7,接下来计算7c即75成立为1,然后计算b=c,而4=5不成立,所以值为0,即最终表达式等价于1&0,所以结果为0.7. 0 【分析】略,同第6题。 8. -17 【分析】条件运算符优先级别高于赋值运算符,所以先算(ab)?a:b的值,由于1325成立,所以(ab)?a:b的值 为a 的值,并将a的值赋给y,此时,原式等价于(13-17)?y:c,而13-17不成立,所以表达式的值为C的值,即为-17。 9. 18, 3,3 【分析】对逗号表达式的值,即为从左向右最后一个表达式的值 ,本题中表达式的值即为6*a的值即18。 10. 3.5 【分析】算术运算符中同一级别的运算符按从左向右的顺序进行,所以先算a%43=8,再计算8*(int)(x+y)=8*9=72,再计算72%3=0,再计算0/5=0.最后计算与X相加,所以最终结果为3.5。 2.2.3 编程题 1. 编写一个程序,要求输入圆的半径r,计算并输出该圆的周长和面积。 #define PI 3.14 #include stdio.h void main() float r, S=0, L=0; printf(input r:n); scanf(%f, &r); S= PI *r*r; /计算圆面积 L=2* PI *r; /计算圆周长 printf(S=%f,L=%fn, S,L); 2. 假设美元与人民币的汇率是1美元兑换6.4742元人民币,欧元与人民币的汇率是1欧元兑换9.2338元人民币,编程实现输入人民币的钱数,输出能兑换的美元及欧元金额。 # include stdio.h void main() float renminbi,meiyuan,ouyuan; 8 printf(input renminbi:n); scanf(%f, &renminbi); meiyuan = renminbi *6.4742; /计算美元金额 ouyuan = renminbi *9.2338; /计算欧元金额 printf(meiyuan =%f ouyuan =%fn,meiyuan, ouyuan); 3. 编写一个程序,从键盘上输入3个字符后,按各字符的ASCII码从小到大顺序输出这些字符。 /这道题关键是把输入3个字符后的回车过滤掉,不然回车就会成为下一组的第一个字符。有两种方法: /第一种: #include int main() char a,b,c,tmp; while(a=getchar()!=EOF) b=getchar(); c=getchar(); getchar(); /在录入c后用getchar()滤掉回车 if(ab) tmp=a; a=b; b=tmp; if(ac) tmp=a; a=c; c=tmp; if(bc) tmp=b; b=c; c=tmp; printf(%c %c %cn,a,b,c); return 0; /第二种: #include int main() char a,b,c,tmp; 9 while(scanf(%c%c%c%*c,&a,&b,&c)!=EOF) /用%*c(空字符,不存储字符的字符)滤掉回车 if(ab) tmp=a,a=b,b=tmp; /逗号表达式,简洁 if(ac) tmp=a,a=c,c=tmp; if(bc) tmp=b,b=c,c=tmp; printf(%c %c %cn,a,b,c); return 0; 输入数据有多组,每组占一行,有三个字符组成,之间无空格。 例如输入 qwe asd zxc 输出 e q w a d s c x z 4. 编程实现输入一个无符号整数(unsigned类型),分别输出它的低四位和高四位。 #include (待查) main() unsigned u=0xffff;/举例 unsigned char l,h; /scanf(%u,&u); l=u&0xff; /得到低8位. h=u8; /得到高8位 printf(u=%u,l=%u,h=%u,u,l,h); getchar(); 5. 根据当前银行的利率表,编程实现从键盘输入存款金额money,存期year和年利率rate,计算银行存款的本息sum(保留1位小数)。 #include int main() int year; float money,rate,sum; printf(请输出金额,利率,存款时间n); scanf(%f,%f,%d,&money,&rate,&year); sum=money*year*rate; printf(存款的本息sum=%.1f n,sum); 10 3.2 习题解答 3.2.1 选择题 1D 【分析】在此要注意,else总是于之前面最近的且没有用过的if进行配对,所以在本题中,else与第二个if 配对,且整体做为第一个if语句的语句体。又因,1020不成立,所以第一个if 根本不被执行,所以m的值没有任何变化。 2. A 【分析】else总是于之前面最近的且没有用过的if进行配对,所以在本题中, if (ab) t=s+t; else if (a=b) t=5; else t=2*s; 相当于t=s+t;(ab) t=5 (a=b); t=2*s(ab); 3. C 【分析】while(E)的含义是当E为真。为真即为不等于0,而A、B、D 都是表示非零。 4. D 【分析】i=0,+i 后,i 为1,i%2=1,所以执行j+=i;即j=1,i=1小于5所以还执行+i,此时 i为2,则i%2等于0,跳出本次判断。同理当i 等于4 ,6时同样跳出判断,而当i为3,5时,都要执行j+=i。 5. A 【分析】while (1)进行判断时,条件永远成立,所以执行循环体。输出一个“*”后,i+,i变为1,又13成立,所以结束循环。 6. D 【分析】当i=1时,执行s+=i 后s=1;执行循环体中i+后,i为2,而后还要执行一次for结构中的i+,则i为3.3小于6成立,则再执行s+=i; i+;则s为4, i为4, 而后还要执行一次for结构中的i+,则i为5,同样5小于6成立,则再执行s+=i; i+;则s为9, i为6, 而后还要执行一次for结构中的i+,则i为7,且7小于6已不再成立。所以最后输出9 7 7. B 【分析】在for(语句1;语句2;语句3)结构中,语句1为初值,语句2为循环体执行的条件,语句3为变量自增语句。本题中i为2,i=0不成立,所以循环体不被执行。 8. D 11 【分析】a=1,a=20不成立, b%3=1成立,则执行b+=3;continue;则b=4,然后跳出本次行循环,则此时a=2,b=4.以后同理进行判断。 10. A 【分析】对于双重循环,外层循环变化一次,内层变化一个循环。本题。当i=1时,j可以为3、2、1,同理当当i=2时,j可以为3、2、1;当i=3时,j可以为3、2、1;而语句if (i*j3) break; 则表时,如果i*j3时结束整个for循环。条件不成立时再执行m*=i*j; 3.2.2 填空题 1. hn*2 【分析】sn为第n次落地时共经过的米数,hn为第n次反弹的高度n=2 ,hn*2才为第n次经过的距离。 2. n!=0 j+ 【分析】由输出语句可知,定义的变量i,j 分别用于存放正数和负数的个数。 所以只要输入的数不是0,则进行判断。 3. 0 k/10 count+ 【分析】count 作为累计的和所以初值一定为0;而while循环的作用是将指定的数k的各各位上的字数字取出来。k%10负责实现取出K的个位。则前两位则需通过k/10来实现。if (t=10)成立即是需要的数字,则总数需要自增。所以count+. 4. 50 (i*1.0) 【分析】本题的累加问题中,累加50次,即i=50,两个相除时如果都为整数则结果一定为整数,为此,需要将分母转化成FLOAT 类型。所以填(i*1.0)。5. 2*i-1 printf(n); i 【分析】略 3.2.3 编程题 1. 编写一个程序,计算并输出下列分段函数值: 22226,356010,2,3153,2,3,10xxxxyxxxxxxxxxxx+=+= 12 其中,x从键盘输入。 #includestdio.h int main() float x,y; printf(输入X); scanf(%f,&x); printf(n); if (x0 &x!=-3) y=x*x+2*x-6; else if (0=x&x10&x!=2&x!=3) y=x*x-5*x+6; else y=x*x-x-15; printf(y=%f,y); 2. 编写一个程序,从键盘输入年和月,计算并输出该年的该月份共有多少天。 算法分析:要考虑大月有31天,小月有30天,闰年的二月有29天以及非闰年的二月有28天这几种情况。 源程序:#include int main() int year,month,days; printf(Enter year and month:); scanf(%d%d,&year,&month); switch (month) case 1: case 3: case 5: case 7: case 8: case 10: case 12: /*处理大月*/ days=31;break; case 4: case 6: case 9: case 11: /*处理小月*/ days=30;break; case 2: /*处理平月*/ if (year%4=0&year%100!=0|year%400=0) days=29; /*如果是闰年*/ 13 else days=28; /*不是闰年*/ break; default: printf(Input error! n); /*月份输入错误*/ days=0; if (days!=0) printf(%d,%d is %d daysn,year,month,days); return 0; 3. 编写一个程序,计算并输出下列级数之和: 231.2!3!nxxxxexn=+ 其中n与x从键盘输入。 #includestdio.h #include math.h main() int i,n; double s=1.0,s1=1.0,x; scanf(%d,%f,&n,&x); for(i=1;i=65&c=97&c=48&c=57) j+; /j为数字数 else if(c=32) k+; /k为空格数 else l+; /l为其他字符 printf(i=%d,j=%d,k=%d,l=%d/n,i,j,k,l); 5. 编写一个程序,解决猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个;以后每天早上都吃了前一天剩下的一半零一个;到第10天早上想再吃时,只剩一个桃子了。问猴子第一天共摘了多少桃子? 14 #includestdio.h main() int i=1,sum=0; for(;i=0 【分析】前一个嵌套的for循环输出数组a主对角线上的元素之和。后一个嵌套的for循环输出数组a次对角线上的元素之和。次对角线上的元素满足的特点是行下标和列下标的和为2,内层for循环第三条语句为j-,所以j的初值为2,条件为j=0。 5. slen!= 0 【分析】本程序是输出字符数组s中存放的字符串的长度,从s0开始,向后搜索,每搜索一个元素,len增1,直到遇到字符串结束标志0为止。重复过程结束。这时,len中所保存的就是s中有效字符的个数。 6. str0 s 【分析】strcpy(s, str0)函数是将字符串str0复制到字符数组s中,先假设字符串str0中存放的是三个字符串中最小的,strcmp()函数是将两个字符串比较,总把最小的字符串放到s中。最后输出s。 17 7. 12 【分析】结构体变量占内存的大小是该结构体各成员所需内存量的总和。结构体类型struct date中共定义三个成员都为int类型,共占12个字节。 8. person1.birthday.year=1982 【分析】嵌套结构体类型定义变量,采用逐级访问的方式对变量赋值。式中的圆点“.”称为成员运算符。 9. 4 8 【分析】共用体类型的所有成员公用一个存储空间,同一时间只能存储一个成员,并且所引用的是最后一次存入成员的值。则e.in.x=2*2=4; e.in.y=4+4=8; 10. 1 6 【分析】枚举类型变量的值是一些整数,从花括号的第一个名字开始,系统自动赋予从0开始的值。Red=0,yellow=1;若在定义类型时对枚举常量进行了初始化,则按照初始化的值计算,blue=4,green=5,white=6。 4.2.3 编程题 1. 编写一个程序,计算Fibonacci数列的前15个数,并将其存储到一维数组fib中,然后输出结果。Fibonacci数列的定义为: 1101121=+=nnnFFFnnn 【问题分析】 【程序代码】 #include int main() int fib15=1,1; int i; for (i=2;i15;i+) fibi=fibi-1+fibi-2; for (i=0;i15;i+) printf(%5d,fibi); printf(n); return 0; 2. 有一个已经排好序的数组,编写一个程序,实现输入一个数,并按原来排序次序将该数插入到数组中。 【程序代码】 18 #include int main() const int N=10; /定义一个包含11个元素的整型数组a,并初始化一组有序序列 int aN+1=20,25,31,36,41,46,67,68,78,98; int i,d; printf(请输入一个整数:n); scanf(%d,&d); for (i=N-1;i=0;i-) if (aid) ai+1=ai; else ai+1=d; break; printf(插入整数后的新序列:n); for (i=0;iN+1;i+) printf(%4d,ai); return 0; 3. 随机生成50个1200之间的整数,并存入数组a中,然后输出这些整数;同时找出数组a中的所有素数,存入数组b,并按每行5个元素的格式由大到小输出这些素数。 【程序代码】 #include #include #include #include int main() int a50,b25=0; int num=0,flag; int i,j,t; /以下产生50个1200之间的随机数存于数组a,并显示 srand(int)time(0); for (i=0;i50;i+) ai=(int)(1+199*rand()/RAND_MAX); printf(%5d,ai); printf(n); /找出数组a中所有素数 for (i=0;i50;i+) flag=1; for (j=2;jsqrt(ai);j+) 19 if (ai%j=0) flag=0; break; if (flag=1) & (ai!=1) bnum=ai; num+; /对数组b进行排序 for (i=0;inum;i+) for (j=0;jnum-i;j+) if (bjbj+1) t=bj; bj=bj+1; bj+1=t; /输出素数 for (i=0;inum;i+) printf(%5d,bi); if (i+1)%5=0) printf(n); return 0; 4. 编写一个程序,实现在一个5行6列的矩阵中查找指定数据,并输出该数据及其在矩阵中的位置。 【程序代码】 #include int main() int a56=23,56,78,90,12,45,13,14,16,17,18,19, 32,35,36,38,39,31,41,43,45,46,48,49, 51,52,53,55,57,58; int i,j,c,r; int d;/查找的数据 int flag=0;/是否找到标志 /输入要查找的数据 printf(请输入查找数据:); scanf(%d,&d); for (i=0;i5;i+)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汇文中学2025届高三第四次教学质量检测试题考试物理试题
- 课题申报书:基于行动导向的课程质量标准研究
- 广东省河源市龙川县隆师中学2024-2025学年高考冲刺模拟物理试题含解析
- 课题申报书:基于就业导向的高校生涯教育与专业教学融合模式研究
- 课题申报书:基于多维度预警模型融合高校学生群体画像的精准思政研究
- 黑土高级测试题及答案
- 黑龙江省友谊县红兴隆管理局第一高级中学2025届高三第一次模拟考试物理试题A卷
- 锅炉燃烧设备 煤粉炉炉膛 炉膛受热面结渣
- 电厂引热入市区配套管网建设项目建议书(参考模板)
- VB1080-生命科学试剂-MCE
- 2024年护士资格证考试内外科基础护理试题及答案
- 《东欧社会主义国家的改革与演变》社会主义国家的改革与演变化课件-2
- 2024安徽省徽商集团有限公司招聘若干人笔试参考题库附带答案详解
- 2025年郑州铁路职业技术学院单招职业倾向性测试题库必考题
- 2024-2025学年人教版七年级生物下册知识点总结
- 2025年许昌职业技术学院单招职业技能测试题库及答案一套
- 声屏障行业跨境出海战略研究报告
- 2025年安阳职业技术学院高职单招语文2019-2024历年真题考点试卷含答案解析
- 2025陕西省建筑安全员-B证考试题库及答案
- 中央2024年国家药品监督管理局中国食品药品检定研究院招聘笔试历年参考题库真题考点解题思路附带答案详解
- 2025年中铁特货物流股份有限公司招聘(75人)笔试参考题库附带答案详解
评论
0/150
提交评论