




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
习题参考答案习题一参考答案:【习题1-1】ABCD 【习题1-2】C【习题1-3】B【习题1-4】B【习题1-5】略习题二参考答案:一、单项选择题【习题2-1】【习题2-6】:CCDBAA二、简答题【习题2-7】:C语言提供了丰富的数据类型,可以根据这些数据类型构造出不同的数据结构。C中的数据类型包括基本类型、构造类型、指针类型、空类型等。其中基本类型包括整型、字符型、实型(浮点型)等。【习题2-8】: C中整常数的表示整型常量即整常数。C整常数可用以下三种形式表示:十进制整数;八进制整数。以数字0开头的数是八进制数,如0123表示八进制数123; 十六进制整数。以0x开头的数是十六进制数。如0x123,代表十六进制数123。【习题2-9】:C规定对所有的变量要“先定义,后使用”,这样规定有以下好处:(1)便于纠错;(2)便于编译系统为变量分配存储空间;(3)运算合法性检查。【习题2-10】:C语句可以分为以下五类:(1)控制语句。 完成一定的控制功能;(2)函数调用语句;(3)表达式语句;(4)空语句;(5)可以用 把一些语句括起来成为复合语句。C只有9种控制语句,它们是:(1)if( )else(条件语句)(2)for( ) (转向语句) (3)while( ) (循环语句) (4)dowhile( ) (循环语句) (5)continue(结束本次循环语句) (6)break(中止执行switch或循环语句) (7)switch(多分支选择语句) (8)goto(转向语句) (9)return(从函数返回语句)【习题2-11】:表达式不是独立存在的,它存在于其它表达式、语句、函数参数里,表达式后面加上一个分号,就变成表达式语句,如i=i+1 (是表达式,不是语句) i=i+l; (是语句) 表达式能构成语句是C语言的一个特色。其实“函数调用语句”也是属于表达式语句,因为函数调用也属于表达式的一种,只是为了便于理解和使用,我们把“函数调用语句”和“表达式语句”分开来说明。由于C程序中大多数语句是表达式语句(包括函数调用语句), 所以有人把C语言称作“表达式语言”。【习题2-12】:字符常量就是一个字符,用单引号括起来,占一个字节;而字符串常量是由若干个字符组合而成,用双引号括起来,存贮时自动在后面加“0”,即使同样是一个字符,字符串常量后面还要加一个“0”。【习题2-13】:(1)12,a;(2)40,20;(3)113,4b;(4)176627,fd97;(5)177621,ff91;(6)4663,9b3;(7)110022,9012;(8)51013,520b。三、阅读程序写结果或填空【习题2-14】:aa bb cc abcA N【习题2-15】:261【习题2-16】:10【习题2-17】:57 5 767.856400,-789.12402367.856400 ,-789.124023 67.86, -789.12,67.8564,-789.1240,67.856400,-789.1240236.78564e+01, -7.9e+02A,65,101,411234567,4553207,d68765535,177777,ffff,-1COMPUTER, COM【习题2-18】:9,11,9,10【习题2-19】:2.5【习题2-20】:3.5【习题2-21】: (1)14,(2)10,(3)60,(4)0,(5)0,(6)0【习题2-22】: x-5&x5|x-5四、编写程序题【习题2-23】main() float r,h,C1,Sa,Sb,Va,Vb; scanf(%f,%f,&r,&h); C1=2*3.14*r; Sa=3.14*r*r; Sb=4*Sa; Va=4*3.14*r*r*r/3; Vb=Sa*h; printf(C1=%.2fn,C1); printf(Sa=%.2fnSb=%.2fnVa=%.2fnVb=%.2fn,Sa,Sb,Va,Vb); 【习题2-24】main() float F,c; printf(请输入一个华氏温度:n);scanf(%f,&F); c=5.0/9.0*(F-32); /*注意5和9 要实型表示,否则5/9的值为0*/printf(摄氏度为:%5.2fn,c); 【习题2-25】#includestdio.h main() char c1,c2; printf(请输入两个字符c1,c2:n);c1=getchar();c2=getchar(); printf(用putchar语句输出结果为:n);putchar(c1);putchar( );putchar(c2);printf(用printf语句输出结果为:n);printf(n%c %cn,c1,c2); (1)都可以;(2)用printf()函数;(3)不是在任何情况下,因为char只有一个字节,而int有2个字节。能表示的范围不一样。【习题2-26】:#include#define PI 3.14159main()float r,h,cl,cs,cvz;printf(Input r,h:);scanf(%f,%f,&r,&h);cl=2*PI*r;cs=PI*r*r;cvz=cs*h;printf(The length of the circumference:%6.2fn,cl);printf(area of the circle: %6.2fn ,cs);printf(volume of the column: %6.2fn ,cvz);【习题2-27】:#includemain()char ch;printf(nInput a letter:);scanf(%c,&ch);printf(nASCII the letter:%d,ch);习题三参考答案:一、单项选择题【习题3-1】【习题3-6】: DCADCB。【习题3-7】:(1) 0 ,(2) 1 ,(3) 1 ,(4) 0 ,(5) 1。二、简单题【习题3-8】:程序解决问题是按指定的次序执行一系列操作的结果,按照次序执行操作的过程描述称为算法。算法的特性:(1)有穷性;(2)确定性;(3)有零个或多个输入;(4)有一个或多个输出;(5)有效性。举例:菜谱操作步骤、乐谱、施工图纸等等。【习题3-9】: (1)自然语言,(2)伪代码,(3)流程图,(4)计算机语言。自然语言通俗易懂,但有歧义性;伪代码方便实用,但没有流程图明晰,容易犯逻辑错误;流程图明晰但绘制和修改时比较繁琐;计算机语言表示算法严谨,但无法做到算法设计的第一步就使用计算机语言,读程序比看流程图要费神很多。【习题3-10】:顺序结构,由顺序执行的一组语句或者结构组成。(2)分支结构,根据判断条件,做出取舍,要么执行A分支要么执行B分支,必须执行其中的一个,不可全执行也不可全不执行。(3)循环结构,由需要反复执行的一段代码或者结构组成。任何算法功能都可以通过以上三种基本程序结构的组合来实现。【习题3-11】:非0为真,0为假。三、用传统流程图表示求解以下问题的算法。【习题3-12】【习题3-19】:如下图3-123-19所示。 3-12 3-13 3-14其中的符号“”表示“倒给”,例如“AC”“将A瓶中的液体倒给C瓶” 3-15 3-16 3-173-18 3-19四、编写程序题【习题3-20】:#include main() int x,y; printf(输入x:); scanf(%d,&x); if(x1) /* x1 */ y=x; printf(x=%3d, y=x=%dn,x,y); else if (x10) /* 1x-10 */ y=2*x-1; printf(x=%3d, y=2*x-1=%dn,x,y); else /* x10 */ y=3*x-11; printf(x=%3d, y=3*x-11=%dn,x,y); 【习题3-21】:#include main() long int num; int indiv,ten,hundred,thousand,ten_thousand,place; /*分别代表个位、十位、百位、千位、万位和位数*/ printf(请输入一个整数(099999):); scanf(%ld,&num); if (num9999) place=5; else if(num999) place=4; else if(num99) place=3; else if(num9) place=2; else place=1; printf(place =%dn, place); ten_thousand=num/10000; thousand=num/1000%10; hundred=num/100%10; ten=num%100/10; indiv=num%10; switch(place) case 5: printf(%d,%d,%d,%d,%d,ten_thousand,thousand,hundred,ten,indiv); printf(n反序数字为;); printf(%d%d%d%d%dn,indiv,ten,hundred,thousand,ten_thousand); break; case 4: printf(%d,%d,%d,%d,thousand,hundred,ten,indiv); printf(n反序数字为:); printf(%d%d%d%dn,indiv,ten,hundred,thousand); break; case 3: printf(%d,%d,%d,hundred,ten,indiv); printf(n反序数字为:); printf(%d%d%dn,indiv,ten,hundred); break; case 2: printf(%d,%d,ten,indiv); printf(n反序数字为:); printf(%d%dn,indiv,ten); break; case 1: printf(%d,indiv); printf(n反序数字为:); printf(%dn,indiv); break; 【习题3-22】:(1) 用if语句编程序。 #include main() long i; float bonus,bon1,bon2,bon4,bon6,bon10; bon1=100000*0.1; /*利润为10万元时的奖金*/ bon2=bon1+100000*0.075; /*利润为20万元时的奖金*/ bon4=bon2+200000*0.05; /*利润为40万元时的奖金*/ bon6=bon4+200000*0.03; /*利润为60万元时的奖金*/ bon10=bon6+400000*0.015; /*利润为100万元时的奖金*/ printf(请输入利润i:); scanf(%ld,&i); if(i=100000) bonus=i*0.1; /*利润在10万元以内按0.1提成奖金*/ else if(i=200000) bonus=bon1+(i-100000)*0.075; /*利润在10万至20万元时的奖金*/ else if(i=400000) bonus=bon2+(i-200000)*0.05; /*利润在20万至40万元时的奖金*/ else if(i=600000) bonus=bon4+(i-400000)*0.03; /*利润在40万至60万元时的奖金*/ else if(i=1000000) bonus=bon6+(i-600000)*0.015; /*利润在60万至100万元时的奖金*/ else bonus=bon10+(i-1000000)*0.01; /*利润在100万元以上时的奖金*/ printf(奖金是%10.2fn,bonus); 此题的关键在于正确写出每一区间的奖金计算公式。例如利润在10万元至20万时,奖金应由两部分组成:利润为10万元时应得的奖金。即100000*0.1;10万元以上部分应得的奖金。即(num-100000)*0.075。同理,20万40万这个区间的奖金也应由两部分组成:利润为20万元时应得的奖金,即100000*0.1*10万*0.075;20万元以上部分应得的奖金,即(num-200000)*0.05。程序中先把10万、20万、40万、60万、100万各关键点的奖金计算出来,即bon1、bon2、bon4、bon6、hon10;然后再加上各区间附加部分的奖金。 (2) 用switch语句编程序。 输入利润i,确定相应的提成等级branch #include main() long i; float bonus, bon1, bon2, bon4, bon6, bon10; int c; bon1=100000*0.1; bon2=bon1+100000*0.075; bon4=bon2+200000*0.05; bon6=bon4+200000*0.03; bon10=bon6+400000*0.015; printf(请输入利润i:); scanf(%ld,&i); c=i/100000; if(c10) c=10; switch(c) case 0: bonus=1*0.1;break; case 1: bonus=bon1+(i-100000)*0.075;break; case 2 : case 3: bonus=bon2+(i-200000)*0.05; break; case 4: case 5: bonus=bon4+(i-400000)*0.03;break; case 6: case 7: case 8: case 9: bonus=bon6+(i-600000)*0.015;break; case 10: bonus=bon10+(i-1000000)*0.01; printf(奖金是%10.2f,bonus); 【习题3-23】:#include main() int t,a,b,c,d; printf(请输入4个整数:); scanf(%d,%d,%d,%d,&a,&b,&c,&d); printf(n a=%d,b=%d,c=%d,d=%dn,a,b,c,d); if(ab) t=a; a=b; b=t; if(ac) t=a; a=c; c=t; if(ad) t=a; a=d; d=t; if(bc) t=a; b=c; c=t; if(bd) t=b; b=d; d=t; if(cd) t=c; c=d; d=t; printf(排序结果如下:n); printf(%d, %d, %d, %dn,a,b,c,d); 【习题3-24】:#include main() int p,r,n,m,temp;printf(请输入两个正整数n,m:);scanf(%d,%d,&n,&m);if(nm) temp=n; n=m; m=temp; /*把大数放在n中,小数放在m中*/p=n*m; /*先将n和m的乘积保存在p中,以便求最小公倍数时用*/while(m!=0) /*求n和m的最大公约数*/ r=n%m;n=m;m=r;printf(它们的最大公约数为:%dn,n);printf(它们的最小公倍数为:%dn,p/n); /*P是原来两个整数的乘积*/【习题3-25】:#include main() char c;int letter=0,space=0,digit=0,other=0;printf(请输入一行字符:n);while(c=getchar()!=n) if(c=a&c=A&c=0&c=9)digit+;elseother+;printf(字母数=%d, 空格数=%d, 数字数=%d, 其他字符数=%dn,letter,space,digit,other);【习题3-26】:#includemain()int a,b,x,y;scanf( %d,%d,&a,&b);x=a*a+b*b;if(x100)y=x/100;printf(%d,y);else printf(%d,a*a+b*b);【习题3-27】:#includemain()int x;scanf( %d, ,&x);if(x%5=0&x%7=0) printf(Yes);else printf(No.);【习题3-28】:#includemain()int x;float y;scanf( %d, ,&x);if(x0&x10&x20&x40) y=-0.5*x+20; else y=-1;if(y!=-1) printf(%f,y);else printf(Error!n);【习题3-29】:#includemain()int x;scanf(%d,&x);if(x%3=0)&(x%5=0)&(x%7=0)printf(%d can be divided by 3,5,7n,x);else if(x%3=0)&(x%5=0)printf(%d can be divided by 3,5,n,x);else if(x%3=0)&(x%7=0)printf(%d can be divided by 3,7n,x);else if(x%5=0)&(x%7=0)printf(%d can be divided by 5,7n,x);else if(x%3=0)printf(%d can be divided by 3n,x);else if(x%5=0)printf(%d can be divided by 5n,x);else if(x%7=0)printf(%d can be divided by7n,x);else printf(%d cannot be divided by 3,5,7n,x);【习题3-30】:#includemain()float x;int y;printf(n input x:);scanf(%f,&x);switch(x0)case 1:y=-1;break;case 0:switch(x=0) case 1:y=0;break; defaut:y=1;printf(n y=%d,y);【习题3-31】:#includemain()int score,temp,log;char grade;log=1;while(log)printf(enter score:);scanf(%d,&score);if(score100|score0)printf(n error,try again!n);else log=0;if (score=100) temp=9;else temp=(score-score%10)/10;switch(temp)case 0:case 1: case 2:case 3:case 4:case 5: grade=E;break;case 6: grade=D;break;case 7: grade=C;break;case 8: grade=B;break;case 9: grade=A;break;printf(score=%d,grade=%cn,score,grade);【习题3-32】:#includemain()int a,b;char symbol;printf( please enter:);scanf(%d%c%di ,&a,&symbol,&b);printf(Original value:%d%c%din,a,symbol,b);if(symbol=-)symbol=+;else symbol=-;printf(New value:%d%c%di,a,symbol,b);【习题3-33】:#include main() int a,n,i=1,sn=0,tn=0;printf(a,n=:);scanf(%d,%d,&a,&n);while(i=n) tn=tn+a; /*赋值后的tn为i个a组成数的值*/sn=sn+tn; /*赋值后的sn为多项式前i项之和*/a=a*10;+i;printf(a+aa+aaa+.=%dn,sn);【习题3-34】:#include main() float s=0,t=1;int n;for(n=1;n=20;n+) t=t*n; /*求n!*/s=s+t; /*将各项累加*/printf(1!+2!+.+20!=%en,s);【习题3-35】:#include main() int n1=100,n2=50,n3=10;float k;float s1=0,s2=0,s3=0;for(k=1;k=n1;k+)/*计算1到100的和*/s1=s1+k;for(k=1;k=n2;k+)/*计算l到50各数的平方和*/s2=s2+k*k;for(k=1;k=n3;k+)/*计算1到10各数的倒数和*/s3=s3+1/k;printf(总和=%8.2fn,s1+s2+s3);【习题3-36】:#include main() int i,j,k,n;printf(“水仙花”数是:);for(n=100;n1000;n+) i=n/100;j=n/10-i*10;k=n%10;if(n=i*i*i+j*j*j+k*k*k)printf(%4d,n);printf(n);【习题3-37】:#includemain()int day=0,num=2;float sum=0.0,ave;while(num=100)sum+=0.8*num;day+;num*=2;ave=sum/day;printf(nave=%5.2f,ave);【习题3-38】:#includemain()int i;for(i=1;i100;i+)if(i*i%10=i| i*i%100=i)printf(%3d,i);【习题3-39】 参考答案:#includemain()int i,x,y;long last=1;printf(Input x, y:);scanf(%d,%d,&x,&y);for (i=1;i=y;i+)last=last*x%1000;printf(The 3 digits:ldn,last);【习题3-40】:方法一:程序如下#define M 1000/*定义寻找范围*/#include main() int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;int i,a,n,s;for(a=2;a=M;a+)/*a是21000之间的整数.检查它是否完数*/ n=0;/*n用来累计a的因子的个数*/s=a;/*s用来存放尚未求出的因子之和,开始时等于a*/for(i=1;i1)printf(%d,%d,k1,k2); /*nl表示a至少有2个因子*/if(n2)printf(,%d,k3);/*n2 至少有3个因子,故应再输出1因子*/if(n3)printf(,%d,k4);/*以下类似*/if(n4)printf(,%d,k5);if(n5)printf(,%d,k6);if(n6)printf(,%d,k7);if(n7)printf(,%d,k8);if(n8)printf(,%d,k9);if(n9)printf(,%d,k10);printf(n);方法二:程序如下#include main() int m,s,i;for(m=2;m1000;m+) s=0;for(i=1;im;i+)if(m%i)=0) s=s+i;if(s=m) printf(%d Its factors are ,m);for(i=1;im;i+)if(m%i=0)printf(%d,i);printf(b n);方法三:此题用数组方法更为简单。程序如下#include main() int k100;int i,a,n,s;for(a=2;a1000;a+) n=0;s=a;for(i=1;ia;i+)if(a%i)=0) n+;s=s-i;kn=i;/*将找到的因子赋给k1),k10*/if(s=0) printf(%d Its factors are ,a);for(i=1;in;i+)printf(%d,ki);printf(%dn,kn);【习题3-41】:#include main() int i,t,n=20;float a=2,b=1,s=0;for(i=1;i=n;i+) s=s+a/b;t=a;a=a+b;/*将前一项分子与分母之和作为下一项的分子*/b=t;/*将前一项的分子作为下一项的分母*/printf(sum=%9.6fn,s);【习题3-42】:#include main() float sn=100,hn=sn/2;int n;for(n=2;n=10;n+) sn=sn+2*hn;/*第n次落地时共经过的米数*/hn=hn/2; /*第n次反弹的高度*/printf(第10次落地时共经过%fm。n,sn);printf(第10次反弹%fm。n,hn);【习题3-43】:#include main() int day,x1,x2;day=9;x2=1;while(day0) x1=(x2+1)*2;/*第l天的桃子数是第2天桃子数加1后的2倍*/x2=x1;day-;printf(total=%dn,x1);【习题3-44】:#include main() int i,j,k;for(i=0;i=3;i+)/*输出上面4行*号*/ for(j=0;j=2-i;j+) /*输出*号前面的空格*/printf( );for(k=0;k=2*i;k+) /*输出*号*/printf(*);printf(n); /*输出完一行*号后换行*/for(i=0;i=2;i+) /*输出下面3行*号*/ for(j=0;j=i;j+)printf( );/*输出*号前面的空格*/for(k=0;k=4-2*i;k+) /*输出*号*/printf(*);printf(n); /*输出完一行*号后换行*/【习题3-45】 参考答案:用迭代法求平方根的算法如下:(1)设定一个x的初值x0 ;(2)用上述公式求出x的下一个值x1 ;(3)再将x1代人上述公式,求出x的下一个值x2 ;(4)如此继续下去,直到前后两次求出的x值(xn+1和xn)满足以下关系:xn+1-xn10-5为了便于程序处理,今只用变量x0和x1,先令x的初值x0=a/2(也可以是另外的值),求出x1 ;如果此时x1-x010-5,则使x1x0 ,然后用这个新的x0求出下一个x1 ,如此反复,直到x1-x0lO-5为止。#include #include main() float a,x0,x1;printf(Enter a positive number:);scanf(%f,&a);/*输入a的值*/x0=a/2;x1=(x0+a/x0)/2;do x0=x1;x1=(x0+a/x0)/2;while(fabs(x0-x1)=1e-5);printf(The square root of %5.2f is %8.5fn,a,x1);【习题3-46】:牛顿迭代法又称牛顿切线法。它采用以下的方法求根:先任意设定一个与真实的根接近的值x0作为第一次近似根,由x0求出f(x0),过(x0,f(x0)点做f(x)的切线,交x轴于x1,把它作为第二次近似根,再由x1求出f(x1),过(x1,f(x1)点做f(x)的切线,交x轴于x2,求出f(x2);再作切线如此继续下去,直到足够接近真正的根x*为止,,见图3.1。从图3.1可以看出,f(x0)=f(x0)/(x1-x0)因此:x1=x0-f(x0)/f(x0)这就是牛顿迭代公式。可以利用它由x0求出x1,然后再由x2求出x3设f(x)=2x3-4x2+3x-6可以写成以下形式: f(x)=(2x-4)x+3x-6同样,f(x)可写成: f(x)=6x2-8x+3=(6x-8)x+3用这种方法表示的表达式,在运算时可节省时间。例如求f(x)只需要进行3次乘法和3次加法,而原来的表达式要经过多次指数运算、对数运算和乘法、加法运算,花费时间较多。现在由于计算机的运算速度愈来愈快,这点时间开销是微不足道的,这是以前计算机的运算速度较慢时所提出的问题。由于过去编写的程序往往采用这种形式,所以我们在此也顺便介绍一下,以便在阅读别人所写的程序时知道其所以然。#include #include main() float x,x0,f,f1;x=1.5;do x0=x;f=(2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;x=x0-f/f1;while(fabs(x-x0)=1e-5);printf(The root of equation is%5.2fn,x);为了便于循环处理,程序中只设了x0和x,x0代表前一次的近似根,x代表后一次的近似根。求出一个x后,把它的值赋给x0,然后用它求下一个x0由于第一次执行循环体时,需要对x0赋值,故在开始时应先对x赋一个初值(今为1.5,也可以是接近真实根的其他值)。【习题3-47】:先分析题目。按题意,画出图3.2的示意图。 图中带“”符号的虚线表示不允许的组合。从图中可以看到: X既不与A比赛,又不与C比赛,必然与B比赛; C既不与X比赛,又不与Z比赛,必然与y
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年养老护理员高级面试必-备知识点与模拟题
- 2025年中国烟花爆竹安全技术规范解析及模拟题集
- 2025年高精度压力、差压变送器项目合作计划书
- 2025年低温多效海水淡化装置项目建议书
- 抢救药品培训课件
- 2025秋苏教版六年级上册数学教学计划
- 2025年保险中介服务项目建议书
- 抢救制度课件
- 2025年洗涤剂用4A沸石项目合作计划书
- 河北省部分示范高中2024-2025学年高三下学期三模化学试题(含答案)
- 专升本《建筑力学》-试卷-答案
- 学会沟通学会表达课件
- 针灸血肿课件
- 自学考试国际商务谈判笔记精华
- 文化差异与跨文化交际课件(完整版)
- 工程经济学完整版课件全套ppt教程
- 小学六年级体育教案(全册48课时)
- 人教部编版道德与法治九年级下册教材解读及单元目标
- 屋面支撑和系杆计算书
- 财务尽职调查工作方案
- 圆形二沉池专项施工方案
评论
0/150
提交评论