C语言答案删减版_第1页
C语言答案删减版_第2页
C语言答案删减版_第3页
C语言答案删减版_第4页
C语言答案删减版_第5页
已阅读5页,还剩166页未读 继续免费阅读

下载本文档

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

文档简介

clrscr();C语言答案()第一章C语言程序设计基础习题参考答案五大构成部分:输入、输出、CPU、控制器、存储器;程序存储、自动执行、逻辑判断功能;二进制的信息表示。1-6编辑、编译、链接、执行。1-7必须有一个主函数,它是程序执行的起点;一个C语言程序由函数构成;每一条可执行语句都必须由分号结束;函数的代码段必须由花括号对括住。一个函数中的语句组由声明区和可执行语句区两部分构成。1-8三个一缩;每遇到一个结构时均缩格,每结束一个结构时回退;缩格格式必须对齐。1-9试给出以下问题的程序设计过程描述:1)求两个数中之最大者。#include<>intmain(void){floatfA,fB;printf("Pleaseinputtwovalues(fA,fB)::");/*输入要比较scanf("%f,%f",&fA,&fB);/*格式化输入fA,fB*/if(fA>=fB)printf("themaxis%f",fA);if(fA<fB)printf("themaxis%f",fB);return0;}/*main()函数结束*/2)求三个数中之最大者。#include<>intmain(void){floatfA,fB,fC,fMax;printf("Pleaseinputthreevalues(fA,fB,fC)::");scanf("%f,%f,%f",&fA,&fB,&fC);if(fMax<fB)fMax=fB;if(fMax<fC)fMax=fC;printf("Themaxis%f\n",fMax);/*输出最大值*/return0;}/*main()函数结束*/求1+2+3+…+100,即。#include<>intmain(void){inti,nSum;/*声明变量i,循环的总和*/for(i=1,nSum=0;i<=100;i++){nSum+=i;printf("Sumis%d\n",nSum);/*输出累加值*/return0;}intmain(void){inti,nSum;clrscr();除的个数*/{nSum+=i*6;}/*循环累加的过程*/printf("theSumis%d",nSum);/*输出累加结果*/return0;}#include<>intmain(void){floata,b;printf("Pleaseinputtworealvalues(a,b)::");scanf("%f,%f",&a,&b);printf("\n%f+|%f|=%f\n",a,b,b>0a+b:a-b);/*利用三元条件运算,详见P52*/return0;}1-13试编写一个在五个整数中找出最大数的程序。#include<>intmain(void){floatval_1,val_2,val_3,val_4,val_5,fMax;/*声明要比较的5个变量*/printf("Pleaseinput3values(val_1,val_2,val_3,val_4,val_5)::");scanf("%f,%f,%f,%f,%f",&val_1,&val_2,&val_3,&val_4,&val_5);fMax=val_1;/*假设最大值为val_1*/if(fMax<val_2)fMax=val_2;if(fMax<val_3)fMax=val_3;if(fMax<val_4)fMax=val_4;if(fMax<val_5)fMax=val_5;/*选出最大值的过程*/printf("themaxof%f,%f,%f,%f,%fis%f",\val_1,val_2,val_3,val_4,val_5,fMax);return0;}1-14编写程序,调用库函数求下列函数的值:#include<>#include<>/*包含数学函数文件,详见P391*/intmain(void){doubleval;printf("Pleaseinputthevalue::");scanf("%f",&val);printf("theresultis%lf",cos(val));/*调用数学函数中的doublecos(doublex)函数*/return0;}#include<>#include<>intmain(void){doubleval;printf("Pleaseinputtheval::");scanf("%lf",&val);printf("theresultis%lf\n",log(val));return0;}#include<>#include<>intmain(void){doubleval;printf("Pleaseinputthevalue(val):");scanf("%lf",&val);printf("theresultis%lf\n",sqrt(val));/*调用doublesqrt(doublex)函数*/return0;}#include<>#include<>intmain(void){doubleval;printf("Pleaseinputthevalue(val)::");scanf("%lf",&val);printf("theresultis%lf",exp(val));/*调用doubleexp(doublex)函数*/return0;}1-16见名知义;变量名和函数名小写,符号常量一般大写;多个单可以使用简单的符号变量名,如a,b,c,d,x,y,z等;注意一些容易混淆的字母的使用;匈牙利前缀数据类型表第二章C语言中的数据类型及其基本操作习题参考答案2-1为什么C的每个数据都必须属于某种特定的数据类型解:变量存储空间中的值必须属于某种特定的数据类型才有意义,同时,数据的类型不同,其取值范围、所占存储空间大小、能够参加的运算类型等才有意义。据类型,大部分都可以用signed,unsigned,long,short进行修饰,以表示数据的取值范围和数据所占存储空间的字节数变化。2-2浮点数和定点数的区别在哪里解:在于小数点位置是否固定不变。2-3计算机中的数是精确的表示吗解:不完全是。对整型数据,在不超出表示值范围时一般是精确表示的。对浮点数,则一般是不能精确表示。原因在于计算机内表示浮点数的存储空间大小是固定的,因此,它所能表示出来的精度是有限的。例如,无限循环小数……在计算机内部只能近似表示。2-4为测试数据类型所占存储空间的大小,C提供了专门的运算符sizeof(),它用于返回或计算给定数据变量或数据类型所占存储空间的大小。请编写程序能够测型所占存储空间的大小。解:这里以int型为例。其它数据类型所占存储空间大小的测试方法#include<>voidmain(){intnSize=sizeof(int);printf("%d",nSize);getch();}2-9为什么要强调“先声明、后定义、再使用”的原则请阐述其理由。(2)0;解:因为变量使用前必须要有存储空间分配给它用来保存其值,对变量存储空间的分配就是通过变量的声明完成的。变量在被引用之前,其中的值应当是确定的某一个值,但变量的声明并不能保证变量存储空间中有一个合适的初始状态值,而是一个随机值。当以错误的初始值开始变量的引用时,会导致程序的执行逻辑错误。为此,一般需要在变量被引用之前赋予其一个合理的初始值。因此,在变量的使用上,一般应当遵循先声明、后定义、在引DEFGH(3)ch1(S)+ch2(x)=203(4)nX=2nY=5nZ=12nX=1830nY=28nZ=38nX=3nY=6nZ=2(1)1;(3)0;(4)0;(5)2,2,5;(6)10;(7)3;(8)12,8,30,20,0,0;(9)15,5,324;m=0n=0k=-1m=1n=1k=-1m=0n=0k=0m=0n=0k=1m=1n=0k=12-17请问C语言中的逻辑真和假的表示方法是什么均可被作为逻辑第三章C语言的程序结构、语句分类和数据的输入输出习题参考答案3-1解:因为输入、输出是计算机程序获取源数据和输出结果数据的基本手段。没有输入操作,程序无法将数据对象告知计算机,没有输出时,计算机程序的运算对于计算任务来讲是scanf(....);fscanf(...);fread(...);printf(..);fprintf(..);fgets(..);gets(..);3-2解:格式说明符、普通字符、输出格式控制字符、附加格式说明域宽:用於存放输出数据的宽度。格式化输入输出函数的主要异同参见教材相关章节。3-3解:对小数部分截断输出(四舍五入的原则)对整数部分没有影响;与截断位的精度相同;有单独的符号位;符号位不占据域宽。它们能够表示的最大有效精度范围分别为6位和17位小数位。多余的精度部分将被同时,要注意,浮点数表示中,小数点不占域宽宽度。教材)。3-6请简述C语言程序的语句类型分类并对其使用方法作简要描述。intmain(void){inta;printf(”%d”,a);return0;}while()3-7请说明使用格式化输入语句完成输入任务时和输入缓冲区之间解:scanf是从标准输入设备缓冲区数据流中自动根据内部格式控制字符串要求完成数据类型匹配,并把数据从左到右复制到参数列表变量地址空间的函数,其过程分为以下几个(1)函数执行时由标准输入设备(一般是键盘)输入相关数据,临时存放在标准输入设(2)scanf函数从数据流中复制数据从左到右一次匹配于变量列表中anf3-8解:在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则$$$#100#100**+02*chise::dec=101oct=145hex=65ASCII=eiis101::dec=101oct=145hex=65ASCII=echisx::dec=120oct=170hex=78ASCII=xiis-4::dec=-4oct=177774hex=fffcASCII=1234537890123456789i=12j=6789x=y=printf(“m=%dn=%dk=%d\n”,m,n,k);printf(“x=%fy=%fz=%f\n”,x,y,z);printf(“x+y=%.2fy+z=%.2ftxyyzzintxprintf(“u=%-9un=%9ld”,u,n);printf(“ch1=%cor%d\n”,ch1,ch1);printf(“ch2=%cor%d\n”,ch2,ch2);4,3,3,2从右往左开始算3-14请分析和给出以下程序段的输出结果。#include<>intmain(void)/*主函数*/{inti=59;floatfX;doubledY,dZ;printf("i=%d\n",i);printf("i=%5d\n",-i);printf("i=%5o\n",i);printf("i=%5x\n,i");printf("i=%ld\n",i);fX=dY=;Zprintf("%f\n",fX);printf("%f\n",dZ);printf("%e\n",dZ);printf("%.4f\n",fX);printf("%.8f\n",dY);*********printf("%.3e\n",dZ*********printf("%.18f\n”,dY);printf("%\n",dY);printf("%\n",dY);printf("%2e\n",dZ);rerturn0;}/*main()函数结束*/3-15编写一个程序显示如下的方框,椭圆,箭头,或者菱形图****************************************************************intmain(void){printf("************\n");printf("**\n");printf("**\n");printf("**\n");printf("**\n");printf("**\n");printf("************\n");return0;3-17intmain(){ntnumintsquare[11];intcube[11];for(num=0;num<=10;num++){square[num]=num*num;cube[num]=num*num*num;}printf("numbersquarecube\n");printf("--------------------------------------\n");for(num=0;num<=10;num++){printf("%-10d%-10d%-10d\n",num,square[num],cube[num]);}return0;}第四章程序设计的算法基础习题参考答案4-1试分析给出人们日常生活中对问题求解的一般过程和步骤。解:首先:(必须)知道一些已知条件或约束条件;第二,确定或寻找针对该问题的求解方法;第三,根据选择的求解方法确定具体的问题求解步骤;第四,进行问题求解的实际演算和推理活动;最后,得到并整理求解结论。4-2解:(1)1)睁开双眼;2)穿好衣服、裤子及鞋子等;3)下4)洗漱(包括洗脸、刷牙等);5)吃早餐(包括饭后洗碗等工作);6)上课学习;7)吃午餐;8)午休;9)上课学习;10)11)课外活动(包括看电视、写作业等等);12)洗漱;13)14)脱衣服、裤子及鞋子等;15)睡觉。(2)1)整理好课本;2)从座位上站起来;3)走出教室;4)走5)排队;6)判断是否已经轮排到自己,若否,则转5),否7)刷卡;8)点菜、买饭。(3)1)寻找座位;2)坐下;3)用筷子夹起饭菜;4)将饭菜5)细嚼慢咽;6)判断是否已经吃饱或者饭菜已经吃完,若否,则转7),7)重复3)~5)过程;8)整理餐具,从座位上站起;9)端10)寻找水龙头,洗碗;11)带着餐具回寝室;12)到达寝13)做个人卫生;14)午睡;4-4怎么理解Wirth提出的程序=算法+数据结构的深刻含义解:程序是在数据的某种特定表示方法和结构基础上对抽象算法的具体描述,它揭示了面向过程程序设计的本质。将程序设计问题分为算法和数据结构,充分显示了算法在程序设计过程中的重要性。算法注重问题求解的过程和步骤描述,主要考虑问题求解的方法;程序是对算法具体实现的描述,它需要考虑与程序语言及编程环境有关的实现细节,如语言环境、操作系统环境4-6解:算法的实质是对问题求解方法和过程的描述,它由解决问题的基本操作及控制操作过程次序的控制结构组成。其中基本操作包括算术、关系、逻辑等基本运算和输入输出以及函数、位操作、文件操作等;控制结构主要是顺序、选择和循环三种基本的控制结构。算法的三组成要素:1)操作;2)控制结构;3)数据结构;2)动作序列只有一个起点(即初始动作);3)每一动作只有一个后继动作;4)动作序列的终止表示问题得解或无解(不保证一定能得解)。1)传统流程图和标准流程图符号体系的表示方法;2)传统流程图符号表示的结构化表示方法;3)无流程线流程图符号的结构化表示方法;4)问题分析图的结构化表示方法;5)伪代码的结构化程序表示方法。传统流程图符号是一些专门设计的图形符号,用于表示程序或算法中的各类操作,用线条表示这些操作之间的执行顺序。标准流程图符号是针对传统流程图符号体系的改进。在算法描述中使用他们来描述算法过程,能很好地表达程序设计的结构与梗概,方便同人的交流。传统流程图运用起来灵活、自由、形象、直观,流程线指向的任意转向使得绘制过程比较随意、自由,易被接受和运用。但是流程线的不加限制带来了算法流程绘制的随意性和不规则性容易导致绘制出来的流程图零乱,阅读不变,修改和维护也比较困无流程线流程图显得更紧凑和清晰,其结构化绘制具有强迫性,绘制2)选择;结构化流程图的过程也更加容易和方便,克服了传统流程图的缺陷,同时保留了流程图的直观和简单特点。但是该表示法的图形嵌套层次不能太多,尤其是对多层次条件选择的嵌套清形,并且对图形的修改和维护,也不如传统流程图方便。问题分析图PAD采用PAD图形符号描述算法,比较方便,当问题过程方法优势更为明显,同时它克服了传统流程图的随意和非结构化特征,也套层次的增加内层矩形框急剧缩小所带来的表述上的不方便。伪代码的结构化程序表示方法,比基于图形符号的方法自由度大,同时它可以使用自然语言和程序语言进行比较自由的算法描述,可以不严格遵守程序语言的严格语法约束,另外,由于直接使用了程序语言的要素,在算法的程序语言实现时更加的方便。但它要遵守结构化描述这一基本的要求。4-8C语言提供了哪些用于结构化程序设计的基本技术1)顺序;3)循环。N-S流程图(方法2__逐一比较):#include<>intmain(void){floatfa,fb,fc,max;clrscr();printf("pleaseinputthreevalues(fa,fb,fc)::");scanf("%f,%f,%f",&fa,&fb,&fc);if(fa<fb)return0;}N-S流程图(方法3__两两比较):#include<>intmain(void){floatfa,fb,fc,temp,max;printf("pleaseinputthreevalues(fa,fb,fc)::");scanf("%f,%f,%f",&fa,&fb,&fc);clrscr();if(fa<fb)return0;}2)如果,转3);否则转4);n6);4)初始化fac=1;i=1;然后转5);ac7)输出n!的值(n非法时写‘非法’)......①#include<>intmain(void){intsteps=7;elsesteps++;}printf("thereare%dsteps!\n",steps);return0;}2)计算i!;3)计算1/i!;4)对1/i!累计求和;5)判断求解的误差(e-sum)是否小于门限值;6)若是,则转7);否则,做i++,然后转2);7)输出满足条件时i的取值.#include<>intmain(void){floate;floateps;floatfac=1;floatsum=0;inti=1;/for(i=0;i<=r_length;i=i+spacing)/*计算单侧大道绿化所需{}printf("thetotalof%dtreesarerequired!\n",2*j);/*输需要的总树苗数量2j*/活动树苗费用*/printf("the%dtrees'totalpriceis%d\n",2*j,sum);/*输的总费用sum*/return0;}4-19#include<>#include<>intmain(void){inti,j;clrscr();for(i=1;i<=9;i++){for(j=1;j<=i-1;j++){printf("\t");}for(j=1;j<=9-i+1;j++){printf("%d*%d=%d\t",i,(i+j-1),i*(i+j-1));}printf("\n");}return0;}intmain(void){intnumber=0;while(number++<=1){printf("*%d\n",number);}printf("**%d\n",number);return0;}分析:首先我们清楚自加运算符中前加(++i)和后加(i++)的区别:运算时,只要引用过其表达式就必然会加1。采用后加(number++),则number++<=1对应于是0<=1(成立),并且number由0执行下一条语句“printf(“**%d\n”,number);”输出:**3并换行,然后继续向下执行操作系统,结束。由此得到该程序段的执行结果即如下所示!intmain(void){intnumber=0;while(number<=1){number++;printf("*%d\n",number);printf("**%d\n",number);}return0;}们可以清楚地看到该程序段与程序段1最明显的差别在于:while条件表达式中完成,其输出有在循环体内,有在循环体外;而该程序段的自加和输出numbernumberwhile(成立),进入while循环,执行“number++;”语句,此时number由0句(成立),进入while循环,执行“number++;”语句,此时number由1句(不成立),退出while循环,执行“return0;”语句,返回操作系统,结束。由此得到该程序段的执行结果即如下所示!习题参考答案5-1.分析:知道最后一天的梨数,可以一天一天倒推到第一天的梨的因此,迭代公式为Xn-1=2(Xn+1),初始条件为X18=1。#include<>intmain(){longpear=1;inti;clrscr();for(i=17;i>0;i--){pear=(pear+1)*2;printf("Day::%2dPears::%ld\n",i,pear);}return0;}5-2请给出2个整数的最大公约数和最小公倍数的算法描述和程序实#include<>intmain(void){intnum1,num2,temp,p,r;printf("Pleaseinputtwonums::");scanf("%d,%d",&num1,&num2);if(num1<num2)/*比较两个数的大小,将大的数放在num1*/{temp=num1;num1=num2;num2=temp;}p=num1*num2;{r=num1%num2;num1=num2;num2=r;}printf("TheGcdis::%d\n",num1);printf("Theleastcommonmultipleis::%d\n",p/num1);return0;}#include<>/*最大公约数*/intgcd(inta,intb){if(a<b){t=a;a=b;b=t;}if(b==0)returna;returngcd(b,a%b);}/*最小公倍数*/intlcm(inta,intb){returna*b/gcd(a,b);}voidmain(void){intn,data[100],g,l;inti;printf("Thenumberis:");scanf("%d",&n);for(i=0;i<n;++i){scanf("%d",&data[i]);}g=data[0];for(i=1;i<n;++i)g=gcd(g,data[i]);l=1;for(i=0;i<n;++i)l*=data[i]/g;l*=g;printf("gcd=%d\n",g);printf("Icm=%d\n",l);return;}#include<>intmain(){intplatter=0;intx=1,y=1,z=1,i;for(i=1;i<=5;i++){x*=i;}for(i=1;i<=3;i++){y*=i;}for(i=1;i<=(5-3);i++){z=i;}platter=x/(y*z);printf("Thekindsofplatter::%d",platter);return0;}5-5对例5-20(百钱买百鸡问题),请读者用标记法完成正确解的输出#include<>intmain(void){intnCock,nHen,nChick;intflag=0;/*换行控制标记,取值范围0,1,2*/for(nCock=0;nCock<=100;nCock++){for(nHen=0;nHen<=100;nHen++){for(nChick=0;nChick<=100;nChick++){if(flag%3==0)/*换行控制及标记回0*/{printf("\n");flag=0;}if(nCock+nHen+nChick==100&&nCock*5+nHen*3+nChick/3==100){printf("cock=%d\t,hen=%d\t,chick=%d\t",nCock,nHen,nChick);}}}}return0;}#include<>intmain(void){鸡雏数*/clrscr();ncock=0;nhen=0;nchick=0;if((ncock+nhen+nchick==100)&&(ncock*5+nhen*3+nchick/3==100))printf("cock=%dhen=%dchick=%d\n",ncock,nhen,nchick);nchick++;}while(nchick<=100);/*鸡雏数不能超出100只*/nhen++;whilenhen);/*鸡母数不能超出100只*/ncock++;whilencock00);/*鸡翁数不能超出100只*/return0;}#include<>intmain(void){intncock,nhen,nchick;clrscr();ncock=0;while(ncock<=100)/*鸡翁数不能超出100只*/{nhen=0;while(nhen<=100)/*鸡母数不能超出100只*/{nchick=0;while(nchick<=100)/*鸡雏数不能超出100只*/{if((ncock+nhen+nchick==100)&&(ncock*5+nhen*3+nchick/3==100))printf("cock=%dhen=%dchick=%d\n",ncock,nhen,nchick);nchick++;}nhen++;}ncock++;}return0;}5-9输入一行字符,分别统计其中的英文字母、空格、数字、和其他#include<>得intmain(void){charc;intletters=0,space=0,digit=0,others=0;printf("Pleaseinputastring::\n");while((c=getchar())!='\n'){letters++;elseif(c=='')space++;elseif(c>='0'&&c<='9')digit++;others++;}printf("letters::%d\nspace::%d\ndigit::%d\nothers::%d\n",letters,space,digit,others);}即#include<>#include<>intmain(){inta,n,result;inti;printf("Pleaseinputa,n::");scanf("%d%d",&a,&n);result=0;for(i=1;i<=n;i++){result+=i*pow(10,n-i);}result*=a;printf("Theresultofa+aa+...+a...aaa=%d",result);return0;}5-11试找出所有“水仙花数”,即对一个三位数,各个数字位的立方和等于该数本身的#include<>intmain(void){示该三位数*/intss个数*/clrscr();{{k=0;{num=i*100+j*10+k;if(num==i*i*i+j*j*j+k*k*k){printf("thereasult%dis%d\n",s,num);}}}}return0;}相等的数,如6=1+2+3.在输出时要求输出该数本身及其因子。#include<>intmain(void){intnum,s,fac;for(num=2;num<1000;num++){for(fac=1;fac<num;fac++)if((num%fac)==0)s=s+fac;if(s==num){printf("%dfactorsare::",num);for(fac=1;fac<num;fac++)if(num%fac==0)printf("%d",fac);printf("\n");}}return0;}5-13试求#include<>nn{inta=1,i;for(i=0;i<n;i++){a*=i;}returna;}intmain(){floatpart1=0,part2=0,part3=0;floatresult,i;intktfor(k=1;k<=100;k++){t=factorial(k);part1+=1/(float)t;}for(k=1;k<=36;k++){part2+=(k*k);}for(k=1;k<=30;k++){part3+=1/(float)k;}result=part1+part2+part3;printf("Resultis%f",result);return0;}#include<>intmain(void){inti,t,n=20;floatDen=2,Mol=1,s=0;for(i=1;i<n;i++){s=s+Den/Mol;t=Den;Den=Den+Mol;/*将前一项分子与分母之和作为下一项的分子*/Mol=t;/*将前一项的分子作为下一项的分母*/}printf("sum=%\n",s);return0;}5-15试用四种选择控制结构完成求4个数的最大和最小值的程序。思考如何实现任意多个数中求最大和最小值#include<>intmain(void){intnum1,num2,num3,num4,temp;printf("Pleaseinput4nums::");scanf("%d,%d,%d,%d",&num1,&num2,&num3,&num4);printf("num1=%d,num2=%d,num3=%d,num4=%d\n",num1,num2,num3,num4);if(num1>num2){temp=num1;num1=num2;num2=temp;}if(num1>num3){temp=num1;num1=num3;num3=temp;}if(num1>num4){temp=num1;num1=num4;num4=temp;}if(num2>num3){temp=num2;num2=num3;num3=temp;}if(num2>num4){temp=num2;num2=num4;num4=temp;}if(num3>num4){temp=num3;num3=num4;num4=temp;}printf("Thesortof4numsis::");printf("%d,%d,%d,%d\n",num1,num2,num3,num4);}#include<>#defineTRUE1#defineFALSE0#defineMAX4voidbubble_sort(int*a,intn){inti,j,temp;for(i=n-1;i>=1;--i){for(j=0;j<i;++j){if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}}voidinput(int*p,intn){inti;printf("Inputthesequence(MAX=%d)::",MAX);for(i=0;i<n;i++){scanf("%d",&p[i]);}}voidoutput(int*p,intn){inti;for(i=0;i<n;i++){printf("%d",p[i]);}}intmain(void){intnArr[MAX],i;clrscr();input(&nArr[0],MAX);bubble_sort(&nArr[0],MAX);output(&nArr[0],MAX);return0;}5-17试用牛顿迭代法求以下方程在附近的根。#include<>#include<>intmain(void){floatx0,x1,f,f1;/*x0代表前一次的近似根,x1代表后一次的近似根*/{x0=x1;f=((2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;/*f的导函数*/x1=x0-f/f1;/**/}while(fabs(x1-x0)>=1e-5);printf("Therootis%\n",x1);}5-18试用二分法求方程在之间的根。#include<>#include<>intmain(void){floatx0,x1,x2,fx0,fx1,fx2;{printf("Pleaseinputx1,x2::");scanf("%f,%f",&x1,&x2);fx1=x1*((2*x1-4)*x1+3)-6;fx2=x2*((2*x2-4)*x2+3)-6;}while(fx1*fx2>0);{x0=(x1+x2)/2;fx0=x0*((2*x0-4)*x0+3)-6;if((fx0*fx1)<0){x2=x0;fx2=fx0;}{x1=x0;fx1=fx0;}}while(fabs(fx0)>=1e-5);printf("x=%\n",x0);return0;}分别打印出每一位#include<>voidmain(){intN,arr[5];/*arr[5]对应存放输入的数的每位数*/inti=10,j=10,t=1;printf("Inputthenumber::");scanf("%d",&N);while(i>=10)/*求位数*/{j=10;}printf("Medianis::%d\n",t);for(i=0;i<t;i++)/*求每一位数*/{arr[t-i]=N%10;N=N/10;printf("%d",arr[t-i]);}printf("\n");for(i=1;i<=t;i++)/*逆序输出*/{printf("%d",arr[i]);}}#include<>voidmain(){longinti;intbonus1,bonus2,bonus4,bonus6,bonus10,bonus;printf("Inputtheprofit::");scanf("%ld",&i);bonus1=100000*;bonus2=bonus1+100000*;bonus4=bonus2+200000*;bonus6=bonus4+200000*;bonus10=bonus6+400000*;if(i<=100000)bonus=i*;elseif(i<=200000)bonus=bonus1+(i-100000)*;elseif(i<=400000)bonus=bonus2+(i-200000)*;elseif(i<=600000)bonus=bonus4+(i-400000)*;elseif(i<=1000000)bonus=bonus6+(i-600000)*;bonus=bonus10+(i-1000000)*;printf("bonus=%d",bonus);}5-23请对以下条件语句进行逻辑梳理使逻辑关系更加清晰:if(a<b)if(c<d)x=1;elseif(a<c)if(b<d)x=2;elsex=3;elseif(a<d)if(b<c)x=4;elsex=5;elsex=6;elsex=7;if(a<b)if(c<d)x=1;if(a<c)if(b<d)x=2;x=3;if(a<d)if(b<c)x=4;x=5;x=6;x=7;(2)检查其有无多余或矛盾的判断条件;x=4处矛盾:此时循环语句的条件是a<b,d<c,c<a,a<d,b<cx=5处矛盾:此时循环语句的条件是a<b,d<c,c<a,a<d,c<bx=6处矛盾:此时循环语句的条件是a<b,d<c,c<a,d<a(3)重写一个等效的和简洁的条件语句。fabelsex=3;x=2;elsex=4;x=1;5-25(1)#include<>intmain(void){charch;ch=getchar();while(ch!=''){putchar(ch);ch=getchar();}return0;}分析:while循环限制为输入字符为""时不进入循环,所以输出不含intmain(void){charch;while((ch=getchar())!='')putchar(++ch);return0;}分析:while循环限制为输入字符为""时不进入循环,所以输出不含"",而在计算机中intmain(void){while(putchar(getchar())!='');return0;}所以当执行完最后一个putchar()是输出的是'',这是退出循环。5-26写一个程序计算任意给定的一个整数之各位数字之和。要求整#include<>#defineMAX20voidmain(){longarr[MAX];Ninti=10,j=10,t=1,add=0;printf("Inputthenumber::");scanf("%d",&N);while(i>=10){j=10;}for(i=0;i<t;i++){arr[t-i]=N%10;N=N/10;add+=arr[t-i];}printf("Add::%d",add);}5-30(1)#include<>voidmain(void){inti,j;clrscr();for(i=0;i<9;i++){for(j=0;j<9;j++){if(j<=i)printf("");elseprintf("*");}printf("\n");}}voidmain(void){inti,j;for(i=0;i<9;i++){for(j=0;j<i;j++){printf("*");}printf("\n");}}voidmain(void){inti,j;clrscr();for(i=0;i<9;i++){for(j=9;j>0;j--){if(j<=i)printf("*");elseprintf("");}printf("\n");}}voidmain(void){inti,j;clrscr();for(i=9;i>0;i--){for(j=i;j>0;j--){if(j<i)printf("*");elseprintf("");}printf("\n");}}#include<>#defineMAX20intmain(void){inti,j=0;floatavg=0;printf("Inputthenumbers::\n");for(i=0;i<MAX;i++){scanf("%d",&i);if(i==9999)break;/*退出循环*/avg+=i;}avg=avg/j;printf("Theaverageis%f.",avg);return0;}#include<>intmain(){intnumber,T1,T2,i,temp;printf("Inputthesequence:(Firstisthenumberofthesequence)\n");scanf("%d",&number);scanf("%d",&T1);for(i=1;i<number;i++){scanf("%d",&T2);if(T1>T2){temp=T1;T1=T2;T2=temp;}}printf("Theminofthesequenceis%d.",T1);return0;}5-36对例5-21请考虑1~1000之间能被任意给定的三个数整除的数#include<>intmain(void){intn_lcm;intnl_flag=0;ntnuminta,b,c;printf("Inputthenumbers::");scanf("%d%d%d",&a,&b,&c);n_lcm=a*b*c;num=n_lcm;while(num<1000){if(nl_flag%4==0){printf("\n");nl_flag=0;}printf("num=%d\t",num);num+=n_lcm;nl_flag++;}}#include""#defineprintf("min=%d\n",(num1<num2)num1:num2)intmain(void){tabprintf("pleaseinputtwonumbers:\n");scanf("a=%db=%d",&a,&b);MIN(a,b);/*※*/MIN(num1,num2)return0;}解析:程序第8行即※处经过宏替换后为printf("min=%d\n",(num1<num2)num1:num2)a=162b=46min=46#include""#defineMAX3(num1,num2,num3)num3>(num1>num2num1:num2)num3:(num1>num2num1:num2)intmain(void){inta,b,c,d;printf("pleaseinputthreenumbers:\n");scanf("%d,%d,%d",&a,&b,&c);d=MAX3(a,b,c);printf("d=%d\n",d);return0;}hreenumbers234,165,790d=790#include""#defineIS_UPPER_CASE(n)('A'<=n&&n<='Z')1:0intmain(void){inti;charch;printf("pleaseinputachar:\n");scanf("ch=%c",&ch);i=IS_UPPER_CASE(ch);/*※*/printf("i=%d\n",i);return0;}、((a)>(((b)>(((c)>(d)(c):(d)))(b):(((c)>(d)(c):(d)))))(a):(((b)>(((c)>(d)(c):(d)))(b):(((c)>(d)(c):(d))))7-8、a=7aa=20a=40a=60a=80a=100a=632aaaaaa7-9、m=1n=0k=0m=2n=2k=1m=0n=0k=-17-10、i=7解析:本题考点在于函数reset()和workerover()对变量i的改变没函数的输出结果。由于没有将最新的i返回主函数,所以主函数的输#include""#defineMAX(num)'A'<=num&&num<='Z'num+=32:num/*※*/intmain(void){chara,ch;printf("pleaseinputachar:\n");scanf("%c",&a);ch=MAX(a);printf("d=%c\n",ch);return0;}解析:宏定义#defineMAX(num)'A'<=num&&num<='Z'num+=32:num是是大写字符时,令其num+=32,否则返回原值num。、#include""#defineMAX(num1,num2)num1=num1-num2;num2=num1+num2;num1=num2-num1;intmain(void){tabprintf("pleaseinputtwonumbers:\n");scanf("a=%db=%d",&a,&b);MAX(a,b);printf("a=%d,b=%d\n",a,b);return0;}解析:该方法的优势在于没有借助中间变量,通过两元素自身的变换来交换两参数的值。解析:因为如果将函数调用中的宏全部经过宏代换后(简单的字符串替换)恰好和直接利用printf()输出的格式一致。第八章数组8-1:编写函数实现将任意数列顺序进行逆序处理,并用它处理以下序#include<>#include<>voidmain(){intdataNum=0;inti;int*pArray;printf("Howmanydatadoyouwanttoprocess\n");scanf("%d",&dataNum);pArray=(int*)malloc(dataNum*sizeof(int));printf("Nowpleaseinputthedata::\n");for(i=0;i<dataNum;i++)intFibonacci(intIndex);{printf("theArray[%d]is::",i);scanf("%d",&pArray[i]);}printf("Thedatabeforeprocessis::\n");for(i=0;i<dataNum;i++){printf("%d",pArray[i]);}printf("\n");printf("Thedataprocessedis::\n");for(i=0;i<dataNum;i++){printf("%d",pArray[dataNum-i-1]);}}8-2:编写函数实现Fibonacci数列的计算,并用它来计算第32个Fibonacci数列元素.#include<>#include<>voidmain(){intindex;printf("Whichelementdoyouwanttocaculate\n");scanf("%d",&index);Fibonacci(index);}intFibonacci(intIndex){inttempA=1,tempB=1;inti;int*pArray=(int*)malloc(Index*sizeof(int));pArray[0]=tempA;pArray[1]=tempB;for(i=2;i<Index;i++){pArray[i]=pArray[i-1]+pArray[i-2];}printf("The%delementis:%d\n",Index,pArray[Index-1]);printf("Theallelementis::\n");for(i=0;i<Index;i++){printf("%d",pArray[i]);}return0;}8-4:#include<>#include<>voidmain(){charString[80];charcstemp;intindex=0,stringNum=0,dataNum=0,spaceNum=0;inti;printf("pleaseinputthestringandendwith'z'::\n");while(1){cstemp=getchar();if(cstemp=='z'||cstemp=='Z')break;String[index]=cstemp;dex}printf("thestringis:\n");for(i=0;i<index;i++){printf("%c",String[i]);}printf("\n");for(i=0;i<index;i++){if(String[i]>'a'&&String[i]<'z')stringNum++;elseif(String[i]>'A'&&String[i]<'Z')stringNum++;elseif(String[i]>'0'&&String[i]<'9')dataNum++;elseif(String[i]='\0')spaceNum++;}printf("thestringNumis%d,thedataNumis%d,thespaceNumis%d",stringNum,dataNum,spaceNum);}8-10:编写程序计算矩阵的两个对角线上元素之和;#include<>#defineN10intmain(){intarr[N][N];inti,j,n,m;intsum1=0,sum2=0,sum=0;printf("pleaseinputarr[n][n],(n>0):\n");printf("n=");scanf("%d",&n);if(n<=0)exit(1);printf("pleaseinputthevalueofmatr

温馨提示

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

评论

0/150

提交评论