第2-5章习题讲解_第1页
第2-5章习题讲解_第2页
第2-5章习题讲解_第3页
第2-5章习题讲解_第4页
第2-5章习题讲解_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

第二章1、将下面各数用八进制和十六进制数表示:(1)10(2)32(3)75(4)-617(5)-111(6)2483(7)-28654(8)21003012,0xA(2)040,0x20(3)0113,0x4B(4)0176627(-01151),0xFD97(-0x269)(5)0177621(-0157),0xFF91(-0x6F)(6)04663,0x9B3(7)0110022(-067756),0x9012(-0x6FEE)(8)051013,0x520B2.将”China”译成密码。密码的规律:用原来的字母后面第4个字母代替原来的字母。例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。请编一程序,用赋初值的方法使c1、c2、c3、c4、c5这5个变量的值分别为”C”、”h”、”I”、”n”、”a”。经过运算,使c1,c2,c3,c4,c5分别变为“G”、”l”、”m”、”r”、”e”,并输出。解:#include<stdio.h>voidmain(){charc1=‘C’,c2=‘h’,c3=‘I’,c4=‘n’,c5=‘a’;c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;prinft(“passwordis%c%c%c%c%c\n”,c1,c2,c3,c4,c5);}3.求下面算术表达式的值:(1)x+a%3*(int)(x+y)%2/4

设x=2.5,a=7,y=4.7(2)(float)(a+b)/2+(int)x%(int)y

设a=2,b=3,x=3.5,y=2.5解:(1)2.5(2)3.5

4.写出下面程序的运行结果

#include<stdio.h>Voidmain(){inti,j,m,n;i=8;j=10;m=++i;n=j++;Printf(“%d,%d,%d,%d\n”,i,j,m,n);printf("%d,%d,%d,%d\\n\n",i++,++j,m,n);printf("%d,%d,%d,%d\n",i,j,m,n);}结果:9,11,9,109,12,9,10\n10,12,9,101.设圆半径r=1.5,圆柱高h=3,求圆周长、面积,圆球表面、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编程序。#include<stdio.h>voidmain(){floath,r,l,s,sq,vq,vz;floatpi=3.1415926;printf(“请输入圆半径r,圆柱高h:”);scanf(“%f,%f”,&r,&h);第3章l=2*pi*r;S=r*r*pi;sq=4*pi*r*r;vq=4.0/3.0*pi*r*r*r;vz=pi*r*r*h;printf(“圆周长为:l=%6.2f\n”,l);printf(“圆面积为:s=%6.2f\n”,s);printf(“圆球表面积为:sq=%6.2f\n”,sq);printf(“圆球体积为:vq=%6.2f\n”,vq);printf(“圆柱体积为:vz=%6.2f\n”,vz);}2.输入一个华氏温度,要求输出摄氏温度。公式为

c=5/9(F-32)输出要有文字说明,取2位小数。解:#include<stdio.h>voidmain(){floatc,f;printf(“请输入一个华氏温度:”);scanf(“%f”,&f);c=(5.0/9.0)*(f-32);printf(“摄氏温度为:%5.2f\n”,c);}

3、编程序,用getchar函数读入两个字符给c1,c2,然后分别用putchar函数和printf函数输出这两个字符。并回答以下问题:(1)变量c1,c2应定义为字符还是整型?或二者皆可?(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3)整型变量与字符型变量是否在任何情况下都可以互相代替?如:“charc1,c2;”与“intc1,c2;”是否无条件等价?

#include<stdio.h>voidmain(){charc1,c2;c1=getchar();c2=getchar();printf(“%c,%c\n”,c1,c2);putchar(c1);putchar(c2);}

1、写出下面各逻辑表达式的值。设a=3,b=4,c=5.(1)a+b>c&&b==c0(2)a||b+c&&b-c1(3)!(a>b)&&!c||11(4)!(x=a)&&(y=b)&&00(5)!(a+b)+c-1&&b/5+c/60第4章2.输入4个整数,要求按由小到大的顺序输出。解:此题采用依次比较的方法排出其大小顺序。也可利用循环和数组。#include<stdio.h>voidmain(){intt,a,b,c,d;printf(“请输入4个数:”);scanf(“%d,%d,%d,%d”,&a,&b,&c,&d);printf(“a=%d,b=%d,c=%d,d=%d\n”);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(a>d){t=a;a=d;d=t;}if(b>c){t=b;b=c;c=t;}if(b>d){t=b;b=d;d=t;}If(c>d){t=c;c=d;d=t;}printf(“排列的结果如下:”);prnitf(“%d%d%d%d\n”,a,b,c,d);}3、企业发放的奖金根据利润提成。利润I低于或等于100000元的,奖金可提10%,利润高于100000元,低于200000元(100000<I<=200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成7.5%;200000<I<=400000时,低于200000元的部分仍按上述办法提成(下同),高于200000元的部分按5%提成;400000<I<=600000元时,高于400000元的部分按3%提成;600000<I<=1000000时,高于600000元的部分按1.5%提成;I>1000000时,超过1000000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。要求:(1)用if语句编程实现;(2)用switch语句编程实现。#include<stdio.h>voidmain(){longintbonus,total;scanf(“%ld”,&total);if(total<=100000)bonus=total*0.10;elseif(total<=200000)bonus=10000+(total-100000)*0.075;elseif(total<=400000)bonus=17500+(total-200000)*0.05;elseif(total<=600000)bonus=27500+(total-400000)*0.03;elseif(total<=1000000)bonus=36500+(total-600000)*0.015;elsebonus=36500+600+(total-1000000)*0.01;printf(“%ld\n”,bonus);}#include<stdio.h>voidmain(){longintbonus,total;scanf(“%ld”,&total);switch(total/100000){case0:bonus=total*0.10;break;case1:bonus=10000+(total-100000)*0.075;break;case2:case3:bonus=17500+(total-200000)*0.05;break;case4:case5:bonus=27500+(total-400000)*0.03;case6:case7:case8:case9:bonus=36500+(total-600000)*0.015;break;default:bonus=36500+600+(total-1000000)*0.01;}printf(“%ld\n”,bonus);}1.用迭代法求x=a1/2

。求平方根的迭代公式为:

xn+1=1/2(xn+a/xn)要求前后两次求出的x的差的绝对值小于10-5

。解:用迭代法求平方根的算法如下:(1)设定一个x的初值x0;(2)用以上公式求出x的下一个值x1;(3)再将x1代入迭代公式的右侧的xn,求出x的下一个值x2;(4)如此继续下去,直到前后两次x的值之差的绝对值满足要求为止。第5章程序:

#include<stdio.h>#include<math.h>voidmain(){floata,x0,x1;printf(“enterapositivenumber:”);scanf(“%f”,&a);x0=a/2;x1=(x0+a/x0)/2;do{x0=x1;x1=(x0+a/x0)/2;}while(fabs(x0-x1)>=1e-5);printf(“Thesquarerootof%5.2fis%8.5f\n”,a,x1);}2.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程找出1000之内的所有“完数”,并按下面格式输出其因子:6:itsfactorsare1,2,3。#include<stdio.h>voidmain(){inti,j,sum;for(i=1;i<=1000;i++){sum=0;for(j=1;j<i;j++)if(i%j==0)sum=sum+j;if(sum==i){printf(“%d:itsfactorsare”,i);for(j=1;j<i;j++)if(i%j==0){if(j!=1)printf(“,”);printf(“%d”,j);}printf(“.\n”);}}}

3.输出以下图案:*************************程序:#include<stdio.h>voidmain(){inti,j,k;for(i=1;i<=4;i++){for(j=1;j<=4-i;j++)printf(““);for(k=1;k<=2*i-1;k++)printf(“*”);printf(“\n”);}for(i=1;i<=3;i++){for(j=1;j<=i;j++)printf(““);for(k=1;k<=7-2*i;k++)printf(“*”);printf(“\n”);}}4用二分法求下面方程的在(-10,10)区间的根:

2x3-4x2+3x-6=0#include<stdio.h>voidmain(){floatx1=-10,x2=10,y1,y2,y,x;do{y1=2*x1*x1*x1-4*x1*x1+3*x1-6;y2=2*x2*x2*x2-4*x2*x2+3*x2-6;x=(x1+x2)/2;y=2*x*x*x-4*x*x+3*x-6;if(abs(y)<1e-6)break;if(y1*y<0)x2=x;if(y2*y<0)x1=x;}while(abs(y1-y2)>1e-5);printf(“%f”,x);}6.6输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方各等于该数本身。例如,153是一个水仙花数,因为153=13+53+33。#include<stdio.h>voidmain(){Inti,j,k,n;printf(“anrcissusnumbersare:”);for(n=100;n<1000;n++){i=n/100;j=n/10-i*10;k=n%10;If(n==i*i*i+j*j*j+k*k*k)printf(“%d”,n);}printf(“\n”);}7.11输出以下图案:

*************************利用循环来实现:#include<stdio.h>voidmain(){inti,j;for(i=1;i<=6;i++){for(j=1;j<=i;j++)printf(““);for(j=1;j<=5;j++)printf(“*”);printf(“\n”);}}用数组来实现:#include<stdio.h>voidmain(){chara[5]={‘*’,’*’,’*’,’*’,’*’};inti,j,k;charspace=‘‘;for(i=0;i<5;i++){printf(“\n”);printf(““);for(j=1;j<=i;j++)printf(“%c”,space);for(k=0;k<5;k++)printf(“%c”,a[k]);}printf(“\n”);}7.4已有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。解:假设数组a有n个元素,而且已按升序排列,在插入一个数时按下面的方法处理:(1)如果插入的数num比a数组中最后一个数大,则将插入的数放在a数组的末尾。(2)如果插入的数num不比a数组最后一个数大,则将它依次和a[0]到a[n-1]比较,直到出现a[i]>num为止,这时表示a[0]到a[i-1]各元素的值比num小,a[i]到a[n-1]各元素的值比num大。num应该插到a[i-1]之后、a[i]之前。(3)将a[i]到a[n-1]各元素向后移一个位置。然后再将num放在a[i]中。程序:

#include<stdio.h>voidmain(){inta[11]={1,4,8,9,13,15,20,25,28,30};inti,j,num;printf(“该序列是:\n”);for(i=0;i<10;i++)printf(“%6d”,a[i]);printf(“\n”);printf(“insertdata:”);scanf(“%d”,&num);

if(num>a[9])a[10]=num;else{for(i=0;i<10;i++)if(a[i]>num){for(j=9;j>=i;j--)a[j+1]=a[j];a[i]=num;break;}}printf(“插入数后的排序为:\n”);for(i=0;i<11;i++)printf(“%6d”,a[i]);printf(“\n”);}7.9有15个数按由大到小顺序存放在一个数组中,输入一个数,找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。解:法1:用顺序查找法,即从第一个数开始比较,一直到最后,看是否与某一个数相等。程序略。

法二:折半法。

#include<stdio.h>#defineN15voidmain(){inti,number,top,bott,mid,loca,a[N],flag=1,sign;charc;printf(“enterdata:\n”);scanf(“%d”,&a[0]);i=1;while(i<N){scanf(“%d”,&a[i]);if(a[i]>=a[i-1])i++;elseprintf(“enterthisdataagain:\n”);}printf(“\n”);for(i=0;i<N;i++)printf(“%d”,a[i]);printf(“\n”);while(flag){printf(“inputnumbertolookfor:”);scanf(“%d”,&number);sign=0;top=0;bott=N-1;if((number<a[0])||(number>a[N-1]))loca=-1;while((!sign)&&(top<=bott)){mid=(bott+top)/2;if(number==a[mid]){loca=mid;printf(“Hasfound%d,itspositionis%d\n”,number,loca+1);sign=1;}elseif(number<a[

温馨提示

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

评论

0/150

提交评论