下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
..PAGEPAGE53/49第一章C语言程序设计概述-习题答案1算法的描述有哪些基本方法?答1、自然语言2、专用工具2C语言程序的基本结构是怎样的?举一个例子说明。答1、C语言程序由函数构成;2、"/*"与"*/"之间的容构成C语言程序的注释部分;3、用预处理命令#include、#define4C5main<数指定实际所需要做的工作。3C语言有什么特点?答1、具有结构语言的特点,程序之间很容易实现段的共享;2、主要结构成分为函数,函数可以在程序中被定义完成独立的任务,独立地编译代码,以实现程序的模块化;3、运算符丰富,包含的围很广;4、数据类型丰富;5、允许直接访问物理地址,即可直接对硬件进行损伤,实现汇编语言的大部分功能;6、限制不太严格,程序设计自由度大,这样使C语言能够减少对程序员的束缚;7、生成的目标代码质量,程序执行效率高,同时C语言编写的程序的可移植性好。4★指出合法与不合法的标识符命名。答AB12--√leed_3-- a*b2--× 8stu--× D.K.Jon--× EF3_3--√ PAS--√ if--× XYZ43K2--√ AVE#XY--× _762--√ #_DT5--× 5TurboC答F2:源文件存盘 F10:调用主菜单 F4:程序运行到光标所在行〔用于调试程序 Ctrl+F9:译并成可执行文件 Alt+F5:将窗口切换到DOS下,查看程序运行结果。6说明下列TurboC方式下输入并运行下列程序,记录下运行结果。①main<>{printf<"********************\n">;printf<" welcomeyou printf<" verygood \n>;printf<"********************\n">;}②main<>{ inta,b,c,t;printf<"pleaseinputthreenumbers;">;scanf<"%d,%d,%d",&a,&b,&c>;/*St=max<max<a,b>,c>;printf<"maxnumberis:%d\n",t>;}intmax<intx,inty>{intz;if<x>y>z=x;elsez=y;return<z>;}答运行结果:********************welcomevery********************运行结果:pleaseinputthreenumbers;3,1,4/*左侧下划线容为键盘输入*/maxnumberis:47一个C程序是由若干个函数构成的,其中有且只能有一个___函数。答main<>8在TurboC环境下进行程序调试时,可以使用Run下拉菜单的___命令或按___键转到用户屏幕查看程序运行结果。答1、Userscreen2、Alt+F59★C语言对标识符与关键字有些什么规定?答1、标识符用来表示函数、类型及变量的名称,它是由字母、下划线和数字组成,但必须用字母或下划线开头。2、关键字是一种语言中规定具有特定含义的标识符,其不能作为变量或函数名来使用,用户只能根据系统的规定使用它们。10C源程序输入后是如何进行保存的?答是以C为扩展名保存的纯文本文件。第二章C语言程序的基本数据类型与表达式-习题答案1★指出下列常数中哪些是符合C语法规定的。答'\'--× '101'--× "\"--× e3--× 019--√ 0x1e--√"ab\n"--√ 1.e5--× <2+3>e<4-2>--× 5.2e2.5--×2请找出下列程序中的错误,改正后写出程序运行结果。①voidmain<>{intx=7AVER=<x+y+z>/3printf<"AVER=%d\n",aver>;}②voidmain<>{ charc1='a';c2='b';c3='c';inta=3.5,b='A'printf<"a=%db=\'\"end\n",a,b>;printf<"a%cb%c\bc%c\tabc\n",c1,c2,c3>;}答main<>{intx,y=5,z=5,aver;x=7;aver=<x+y+z>/3;printf<"AVER=%d\n",aver>;}运行结果:AVER=5②main<>{ charc1='a',c2='b',inta=3,b='A';printf<"a=%d,b=\'%c\'\"end\"\n",a,b>;printf<"a%cb%c\bc%c\tabc\n",c1,c2,c3>;}运行结果:a=3,b='A'"end"aabcc abc3写出下列赋值的结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的空格填上赋值后的数据〔实数保留到小数点后两位。int99-1char'h'unsignedint66float55.78longint68答int99104665568-1char'c''h''B''7''D'unsigned9910466556865535float99.00104.0066.0055.7868.00-1.00long99104665568-14★写出程序运行结果。①voidmain<>{inti,j;i=8,j=10;printf<"%d,%d,%d,%d\n",i,j,++i,j++>;}②main<>{ inta=1,b=2,c=30;;printf<"%d,%d,%d,%d\n",a=b=c,a=b==c,a==<b=c>,a==<b==c>>;}注意:a=b=c,a=b==c之间应为逗号,教材有误答9,11,9,1030,1,0,0③voidmain<>{inta=10,b=20,c=30,d;d=++a<=10||b-->=20||c++;printf<"%d,%d,%d,%d\n",a,b,c,d>;}答运行结果:11,19,30,15★写出下面表达式的值〔设a=10,b=4,c=5,d=1,x=2.5,y=3.5。⑴a%=<b%=3>⑵n++,a+=a-=a*=a⑶<float><a+c>/2+<int>x%<int>y⑷a*=b+c⑸++a-c+b++⑹++a-c+++b⑺a<b?x:'A'⑻b++==c⑼a+b,18+<b=4>*3,<a/b,a%b>⑽x+a%3*<int><x+y>%2/4+sizeof<int>⑾a<b?a:c<d?c:d⑿b++==c⒀a*=b=c=2⒁a=b==c答⑴0⑵0⑶9.500000⑷90⑸10⑹10⑺'A'⑻2⑼4.5⑽1⑾0⑿20⒀06下列每组表达式中,被执行后结果完全等价的是哪些〔设a、b、m是已被赋值的整型变量?①m=<a=4,4*5>与m=a=4,4*5②<float><a/b>与<float>a/b③<int>a+b与<int><a+b>④m%=2+a*3m=m%2+a*3⑤m=1+<a=2>+<b=3>与a=2,b=3,m=1+a+b答①前面是赋值表达式,而后面的是一个逗号表达式,所以一定不同;a/bfloatafloatb③因为a、b均为整数,其前后两个表达式的计算结果是一致的。mm后即不再相同。⑤前后表达式的计算结果应该是一致的:a=2,b=3,m=67条件表达式x>0?x:-x的功能是什么?答xxx-xx,Cfabs<x>即可完成此功能,该函数包含在math.h8用一个条件表达式描述从a、b、c中找出最大都赋给max.答max=a><b>c?b:c>?a:<b>c?b:c>;9★若x为int型变量,则执行以下语句后x的值为〔 。x=6;x+=x-=x*x;A.36 B.-60 C.60 D.-24答B.10★若有以下类型说明语句:charw; intx; floaty; double则表达式w*x+z-y的结果为〔 类型。A.float B.char C.int D.double答D.第三章顺序结构程序设计-习题答案1kfloatscanf<"%d",&k>,k___。答%d&k4float2★a=1234,b=12,c=34,则执行"printf<"|%3d%3d%-3d|\n",a,b,c>;"后的输出是___。答|12341234|分析如下:①%3d33,3,则按实际长度输出,不受限制。②%-3d3,出。3★设有"inta=255,b=8;",则"printf<"%x,%o\n",a,b>;"输出是___。答ff,10①如果"printf<"%X,%o\n",a,b>;"FF,10饰符的限制,如果是"%x"则输出小写,如果是"%X"则输出大写。0x0X,则以上输出语句应改"printf<"%#x,%o\n",a,b>;"为或"printf<"%#X,%o\n",a,b>;"4★以下程序输出的结果是___。main<>{}答1,3,1
inta1=1,a2=0,a3=2;printf<"%d,%d,%d\n",a1,a1+a2+a3,a3-a1>;5printf%5s,555,则按___输出;如果字符串长度小于5,则按___输出。答①实际②左端补空格6★已定义变量如下:inta1,a2;charc1,c2;a1、a2、c1c2___。答scanf<"%d,%d,%c,%c",&a1,&a2,&c1,&c2>;7输入两个整型变量a、b的值,输出下列算式以及运算结果___。a+b、a-b、a*b、a/b、<float>a/b、a%b每个算式占一行。如a=10,b=5,a+b输出为:10+5=15答设inta=10,b=5;以下为输出语句及结果:①printf<"%d+%d=%d\n",a,b,a+b>; 10+5=15②printf<"%d-%d=%d\n",a,b,a-b>; 10-5=5③printf<"%d*%d=%d\n",a,b,a*b>; 10*5=50④printf<"%d/%d=%d\n",a,b,a/b>; 10/5=2⑤printf<"%<float>d/%d=%f\n",a,b,<float>a/b>; <float>10/5=2.000000⑥printf<"%d%%%d=%d\n",a,b,a%b>; 10%5=08★输入一个非负数,计算以这个数为半径的圆周长和面积。答#definePI3.1415926main<>{floatr,l,area;printf<"Inputapositive:">;scanf<"%f",&r>;l=2*PI*r;area=PI*r*r;printf<"l=%f\tarea=%f\n",l,area>;}9输入任意一个3位数,将其各位数字反序输出〔例如输入123,输出321。答main<>{intx,y;printf<"Inputanumber<100-999>:">;scanf<"%d",&x>;y=100*<x%10>+10*<x/10%10>+x/100; /*注意分析此处算法printf<"%d>%d\n",x,y>;}103YES,NOTif答main<>{intx,y,z,oddcount=0;/*奇数数计数变量*/printf<"Inputx,y,z:">;scanf<"%d,%d,%d",&x,&y,&z>;x%2==1?oddcount++:0;y%2==1?oddcount++:0;z%2==1?oddcount++:0;oddcount==2?printf<"YES">:printf<"NOT">;}11ASCII3ASCII答本题考查同学们对字符类型数据的认识,如果在ASCII围则即可以显示为字符,又可以显示为整数值;无论是否能够显示为字符,字符类型数据是可能参与数值运算的,切记。main<>{charc;printf<"Inputcharacter:">;scanf<"%c",&c>;printf<"%c >%d\n",c-1,c-1>;printf<"%c >%d\n",c,c>;printf<"%c>%d\n",c +1,c+1>;getch<>; /*真难得结束并返回到编辑环境*/}12★输入三角形的边长,求三角形面积〔面积=sqrt<s<s-a><s-b><s-c>>,s=<a+b+c>/2。答#include"math.h" /*sqrt<>,所以需要包含数学头文件main<>{floata,b,c,s,area;intok=0;printf<"Inputa,b,c:">;scanf<"%f,%f,%f",&a,&b,&c>;a+b>c?ok++:0; /*3a+c>b?ok++:0;b+c>a?ok++:0;ok==3?<s=<a+b+c>/2,area=sqrt<s*<s-a>*<s-b>*<s-c>>,printf<"area=%f",area>>:printf<"error">;getch<>;}第四章选择结构程序设计-习题答案1★设x、t均为int型变量,则执行语句"x=10;t=x&&x>10;"后,t的值为___。答02★假定所有变量均已正确定义,则程序段:inta=0,y=10;if<a=0>y--;elseif<a>0>y++;elsey+=y;运行后y的值是___;答203★能表述20<x<30或x<-100的C语言表达式是___。答x>20&&x<30||+x<-1004★若有定义语句"inta=25,b=14,c=19;",则以下语句执行结果是___。if<a<=25&&b<=2&&c>printf<"***a+b=%d,a-b=%d***\n",a+b,a-b>;elseprintf<"***a=%d,b=%d,c=%d***\n",a,b,c>;答***a=25,b=14,c=19***5★假定i和j为int型变量,则执行以下语句后i的值是___。inti=1;switch<i>{case1:{for<j=0;j<9;j++>i+=j;break;}case2:{for<j=1;j<10;j++>i+=j;break;}case3:i++;}答37分析:执行了case1:和case3:中的代码。同时case1:语句中的{ }是可以取消的。6★以下两条if语句可合并成一条if语句,即___。if<a<=b>x=1;elsey=2;if<a>b>printf<"***y=%d\n",y>;elseprintf<"***x=%d\n",x>;答if<a<=b>printf<"***x=%d\n",x=1>;elseprintf<"***y=%d\n",y=2>;7★输入两个字符,若这两个字符的序号〔ASCII码之差为偶数,则输出它们的后继字符,否则输出它们的前驱字符。答main<>{chara,b;printf<"Inputtwochatactera,b:">;scanf<"%c,%c",&a,&b>;if<<a-b>/2==0>printf<"%c,%c",a+1,b+1>;elseprintf<"%c,%c",a-1,b-1>;}8★输入整数a和b,如果a能被b整除,就输出算式和商,否则输出算式、整数商和余数。答main<>{inta,b;printf<"Inputtwointegernumbersa,b:">;scanf<"%d,%d",&a,&b>;if<b!=0&&a%b==0>printf<"%d/%d=%d",a,b,a/b>;else}
printf<"%d/%d=%d. %d",a,b,a/b,a%b>;9输入某个点A的平面坐标<x,y>,判断〔输出A点是在圆、圆外还是在圆周上,其中圆心坐标为<2,2>,半径为1。答include"math.h"main<>{floatx,y,d;printf<"Inputx,y:">;scanf<"%f,%f",&x,&y>;d=sqrt<<x-2>*<x-2>+<y-2>*<y-2>>;if<d>1>printf<"outside">;elseif<d<1>printf<"inside">;elseprintf<"inside">;}10★输入年号和月份,输出这一年该月的天数〔一个年份,先判断是否闰年。答main<>{inty,m,d,f;printf<"Inputyearandmonthy-m:">;scanf<"%d-%d",&y,&m>;f=<y%4==0&&y/100!=0||y/400==0>;if<m==2>d=28+f;/*2f=1,d29elsed=31-<m==4>+<m==6>+<m==9>+<m==11>;/*m==4时其值为1,则本月为30天,典型算法,重要啊*/printf<"%d-%dis%ddays.\n",y,m,d>;}11★请将以下语句改写成switch语句〔a>0。if<a<30>m=1;elseif<a<40>m=2;elseif<a<50>m=3;elseif<a<60>m=4;elsem=5答switch<a/10>{case1:case2:case3:m=1;break;case4:m=2;break;case5:m=3;break;case6:m=4;break;default:m=5;}12有一函数x-1 -5<x<0y= x x=0x+1 0<x<8编写一程序,要求输入x的值,输出yif语句,嵌套的if语句,switch句编写。答使用不嵌套的if语句程序如下:main<>{}
floatx,y;printf<"Inputx:">;scanf<"%f",&x>;if<x>-5&&x<0>y=x-1;if<x==0>y=0;if<x>0&&x<8>y=x+1;printf<"y=%f\n",y>;使用嵌套的if语句程序如下:main<>{}main<>
floatx,y;scanf<"%f",&x>;if<x>-5&&x<8>if<x<0>y=x-1;elseelsey=x+1;printf<"y=%f\n",y>;floatx,y;scanf<"%f",&x>;if<x<8>if<x>0>y=x+1;elseelseif<x>-5>y=x-1;printf<"y=%f\n",y>;}使用多分支语句程序如下:main<>{
floatx,y;intm;printf<"Inputx:">;scanf<"%f",&x>;if<x>-5&&x<8>if<x<0>m=-1;elseif<x==0>m=0:elsem=1;switch<m>{case-1:y=x-1;break;case 0:y=0;break;case }printf<"y=%f\n",y>;}以下为假设对int类型的变量进行处理,但毕竟不算完美main<>{}
intx,y;printf<"Inputx:">;scanf<"%d",&x>;switch<x>{case-4:case-3:case-2:case-1:y=x-1;break;case0:y=0;break;case1:case2:case3:case4:case5:case6:case7:y=x+1;break;}printf<"y=%d\n",y>;第五章循环结构程序设计-习题答案1★输入n个整数,求这n个数之中的偶数平均值,并输出。答main<>{intn,i,x,sum=0,count=0;printf<"Inputn:">;scanf<"%d",&n>;for<i=0;i<n;i++>{printf<"Input[%d]:",i+1>;scanf<"%d",&x>;if<x%2==0>{sum+=x;count++;}}printf<"Averageis:%f\n",<float>sum/count>;getch<>;}2★输入一串字符,直到输入一个星号〔*为止,统计〔输出其中的字母个数和数字字符个数。答#include"stdio.h"main<>{charch;intcharcnt=0,numcnt=0;while<<ch=getchar<>>!='*'>{if<ch>='a'&&ch<='z'||ch>='A'&&ch<='Z'>charcnt++;if<ch>='0'&&ch<='9'>numcnt++;}printf<"Charactersnumber:%d\nDigitsnumber:%d\n",charcnt,numcnt>;getch<>;}3★从键盘输入一个正整数n,计算该数的各位数字之和并输出。例如,输入数是5246,则计算5+2+4+6=17答#include"stdio.h"main<>{intn,i,sum=0,count=0;printf<"Inputn:">;scanf<"%d",&n>;while<<n/10>!=0>{count++;sum+=n%10;printf<"%d+",n%10>;n/=10;}printf<"=%d",sum+n>;getch<>;}4★输入一个字符串,将其中的大写字母改为小写字母,小写字母改为大写字母,然后输出。答#include"stdio.h"main<>{charch;printf<"Inputstring:">;while<<ch=getchar<>>!='\n'>{if<ch>='a'&&ch<='z'>printf<"%c",ch-32>;if<ch>='A'&&ch<='Z'>printf<"%c",ch+32>;}getch<>;}520002004.5%,那么多少年后该县年工业总产值将超500亿元。答main<>{floatx=200;intn=0;do{x*=<1+0.045>;n++;}while<x<500>;printf<"n=%d",n>;getch<>;}6★输出1~999中能被3整除,而且至少有一位数字是5的所有数字。答main<>{intx,y,flag;for<x=1;x<1000;x++>{flag=0;y=x;if<y%3==0>/*余数为0说明该数能够被3整除*/{while<y%10!=0>{5*/
if<y%10==5>flag=1;/*依个位、十位、百位顺序判断是否余y/=10;}if<flag==1>printf<"%d\t",x>;}}getch<>;}72132每步跨5阶,则最后剩4阶每步跨6阶,则最后剩5阶每步跨7阶,最后正好1阶。答main<>{intx=0,flag=0;while<1>{x++;if<x%2==1>if<x%3==2>if<x%5==4>if<x%6==5>if<x%7==0>{printf<"%d",x>;break;}}getch<>;}8输入一个3位数,判断是否是一个"水仙花数"。水仙花数是指3位数的各位数字的立方和等于这个3位数本身。例如,153=1*1*1+5*5*5+3*3*3答main<>{intx,a,b,c;printf<"Inputnumber:">;scanf<"%d",&x>;a=x/100;/*axb=x/10%10;/*bxc=x%10;/*cxif<a*a*a+b*b*b+c*c*c==x>{}else
printf<"%d=%d*%d*%d+%d*%d*%d+%d*%d*%d\n",x,a,a,a,b,b,b,c,c,c>;printf<"YES">;printf<"NOT">;getch<>;}9nn2/1,3/2,5/3,8/5,...。答main<>{inti,n=10;floatf1=1,f2=2,f,sum=0;for<i=0;i<n;i++>{sum+=f2/f1;f=f1+f2;f1=f2;f2=f;}printf<"total=%d\nsum=%f",n,sum>;getch<>;}10输入一个正整数,各输出n行的正〔倒三角形宝塔图案。答main<>{intn,i,j;printf<"Inputn:">;scanf<"%d",&n>;for<i=0;i<n;i++>{for<j=i+1;j<n;j++>printf<"">;for<j=0;j<2*i+1;j++>printf<"*">;printf<"\n">;}for<i=0;i<n-1;i++>{for<j=0;j<i+1;j++>printf<"">;for<j=2*i-1;j<n+1;j++>printf<"*">;printf<"\n">;}getch<>;}11★输出九九乘法表。答main<>{inti,j;for<i=1;i<=9;i++>{for<j=1;j<=i;j++>printf<"%d*%d=%-3d",j,i,i*j>;printf<"\n">;}getch<>;}12输入一串字符,直到输入一个星号为止,统计〔输出其中的正整数和负整数个数以及所有正整数的平均值和所有负整数的平均值。答#include"stdio.h"#include"math.h"main<>{charch;intx=0,y=1,f=0,pcnt=0,ncnt=0;floatpsum=0,nsum=0;while<<ch=getchar<>>!='*'>{if<ch=='-'>{if<x!=0>{if<f==1>{}else{}
x=-x;nsum+=x;ncnt++;psum+=x;pcnt++;printf<"%d\n",x>;}f=1;x=0;y=1;continue;}elseif<ch>='0'&&ch<='9'>{}else{
x=10*x+ch-'0';y=10*y;if<x!=0&&10*x<y>f=0;continue;if<x!=0>{if<f==1>{}else{}
x=-x;nsum+=x;ncnt++;psum+=x;pcnt++;printf<"%d\n",x>;}f=0;x=0;y=1;continue;}}if<x!=0>{if<f==1>{}else{}
x=-x;nsum+=x;ncnt++;psum+=x;pcnt++;printf<"%d\n",x>;}printf<"\n \n">;printf<"Plus:\n">;printf<"Count=%d\n",pcnt>;printf<"Average=%f\n",psum/pcnt>;printf<" \n">;printf<"Negative:\n">;printf<"Count=%d\n",pcnt>;printf<"Average=%f\n",nsum/ncnt>;getch<>;}13,6286=1+2+3,28=1+2+4+7+14。输出3位数中所有的完数。答main<>{intk1,k2,k3,k4,k5,k6,k7,k8,k9,k10;inti,a,n,s;for<a=100;a<=999;a++>{n=0;/*n累计因子的个数*/s=a;/*sfor<i=1;i<a;i++>if<a%i==0>/*iaia*/{n++;/*找到一个因子*/s=s-i;/*减去已找到的因子*/switch<n>/*将找到的因子赋绐k1,k2,...*/{case1:k1=i;break;case2:k2=i;break;case3:k3=i;break;case4:k4=i;break;case5:k5=i;break;case6:k6=i;break;case7:k7=i;break;case8:k8=i;break;case9:k9=i;break;case10:k10=i;break;}}if<s==0>/*已经找到全部因子*/{printf<"%dItsfactorsare",a>;if<n1>printf<"%d,%d",k1,k2>;/*n>1a2*/if<n>2>printf<",%d",k3>;if*/if<n>3>printf<",%d",k4>;if<n>4>printf<",%d",k5>;if<n>5>printf<",%d",k6>;if<n>6>printf<",%d",k7>;if<n>7>printf<",%d",k8>;if<n>8>printf<",%d",k9>;if<n>9>printf<",%d",k10>;printf<"\n">;}}getch<>;}14e1e-6e=1+1/1!+1/2!+1/3!...+1/n!答main<>{inti;doublee=0,t=1;for<i=1;t>0.000001;i++>{for<j=1;j<=i;j++>t*=j;t=1/t;e+=t;}printf<"e=%f\n",e>;getch<>;}152x3-4x2+3x=0<-10,10>a、b,f<a>、f<b>异号,说明在区间<a,b>f[<a+b>/2],f<a><0,f<b>0,a<bf[<a+b>/2]<0,则在区间<<a+b>/2,b>有零点,按上述方法再求该区间中点的函f<x>以求得零点的近似值,该值即是方程的根。答#include"math.h"main<>{doublex,fx,fa,fb,a=-10,b=10,z=0.0001;fa=2*a*a*a-4*a*a+3*a;fb=2*b*b*b-4*b*b+3*b;if<fa*fb<0>{do{x=<a+b>/2;fx=2*x*x*x-4*x*x+3*x;if<fx<0>{}else{}
a=x;fa=2*a*a*a-4*a*a+3*a;b=x;fb=2*b*b*b-4*b*b+3*b;}while<fabs<fa-fb>>z>;printf<"Therootis:%lf\n",x>;}getch<>;}第六章函数与编译预处理-习题答案1★写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。答main<>{unsignedintm,n,p,q;for<;;>{printf<"m,n=">;scanf<"%d,%d",&m,&n>;if<m<0||n<0>{printf<"Theend.\n">;break;}p=funp<m,n>;q=funq<m,n>;printf<"p<%d,%d>=%d\nq<%d,%d>=%d\n",m,n,p,m,n,q>;}}intfunp<intm,intn>{inti;if<m>n>{i=m;m=n;n=i;}for<i=m;i>0;i-->if<m%i==0&&n%i==0>return<i>;}intfunq<intm,intn>{inti;if<m<n>{i=m;m=n;n=i;}for<i=m;i<=m*n;i+=m>if<i%n==0>return<i>;}2★编写一个函数,由参数传入一个字符串,统计此字串中字母、数字和其他字符的个数,在主函数中输入字符串并显示统计结果。答未制作函数,主要利用了选择语句结构:#include"stdio.h"main<>{inti,c,zm=0,sz=0,kg=0,qt=0;printf<"Inputastring:">;while<<c=getchar<>>!='\n'>if<c==''>kg++;elseif<c>47&&c<58>sz++;elseif<c>='A'&&c<='Z'||c>='a'&&c<='z'>zm++;elseqt++;printf<"am=%d,sz=%d,kg=%d,qt=%d\n",zm,sz,kg,qt>;}制作函数,利用函数调用:#include"stdio.h"intanalys<charch>;main<>{inti,zm=0,sz=0,qt=0,c;printf<"Inputastring:">;while<<c=getchar<>>!='\n'>{i=analys<c>;switch<i>{casecase1:2:zm++;break;sz++;break;case3:qt++;}}printf<"zm=%d,sz=%d,qt=%d\n",zm,sz,qt>;}intanalys<charch>{if<ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'>return1;if<ch>47&&ch<58>return2;return3;}358n,在主函数中调用判断水仙花数的函数,找出n以所有的水仙花数。[输入一个3位数,判断是否是一个"水仙花数"。水仙花数是指3位数的各位数字的立方和等于这个3位数本身。例如,153=1*1*1+5*5*5+3*3*3]答main<>{intx,i,f;printf<"Inputnumber:">;scanf<"%d",&x>;for<i=0;i<=x;i++>{f=0;f=fun<i>;if<f==1>printf<"%d\t",i>;}getch<>;}intfun<intx>{inta=x/100;b=x/10%10;c=x%10;if<a*a*a+b*b*b+c*c*c==x>return1;elsereturn0;}4★定义一个宏,实现将两个数互换,并写出程序,输入两个数作为使用参数,并显示结果。答#definef<a,b><a=a+b,b=a-b,a=a-b>main<>{intx,y;printf<"Inputscanf<"%d,%d",&x,&y>;printf<"%d,%d",x,y>;f<x,y>;printf<"<-->%d,%d\n",x,y>;getch<>;}5已知二阶Fibonacci数列:0 n=0Fib<n>= 1 n=1Fib<n-1>+Fib<n-2> Fib<n>。答main<>{inti,n;printf<"Inputn:">;scanf<"%d",&n>;for<i=0;i<=n;i++>printf<"%d\t",fib<i>>;getch<>;}intfib<intn>{if<n==0>return0;elseif<n==1>return1;elsereturn<fib<n-1>+fib<n-2>>;}6定义函数求F=<n+m>!+n!,m、n均为任意正整数。要求使用递归调用。答longintf<intx>;main<>{inti,m,n;longintsum;printf<"Inputm,n:">;scanf<"%d,%d",&m,&n>;sum=f<n+m>+f<n>;printf<"%ld",sum>;getch<>;}longintf<intx>{inti,j;if<x==0||x==1>return1;elsereturn<x*f<x-1>>;}7★定义一个函数完成第5章第11题的功能。[输出九九乘法表。]答main<>{}fun<>{
fun<>;getch<>;inti,j;for<i=1;i<=9;i++>{for<j=1;j<=i;j++>printf<"%d*%d=%-3d",j,i,i*j>;printf<"\n">;}}8如果有两个数,每一个数的所有约数〔除了它本身以外的和正好等于对方,则称这两个数为互满数,30000现。答main<>{intx,y;for<x=1;x<30000;x++>{for<y=1;y<x;y++>{if<facsum<x>==y&&facsum<y>==x>{printf<"<%d,%d>\t",x,y>;}}}getch<>;}facsum<intn>{inti,sum=0;for<i=1;i<n;i++>{if<n%i==0>sum+=i;}returnsum;}9编写以下函数:①输入职工的和职工号;②按职工号由小到大排序,顺序也随之调整;③输入一答10★设计程序完成下列计算。已经:y=f<x,n>/<f<x+2.3,n>+f<x-3.2,n+3>>其中:f<x,n>=1-x2/2!+x4/4-...+<-1>n•x2n/<2n>!<n≥0>当:x=5.6,n=7时,求:y要求通过嵌套调用完成计算。答#include<stdio.h>floatf<floatx,intn>;floatf1<floatx,intm>;floatf2<intm>;main<>{}
floatx=5.6,y;intn=7,i;y=1+f<x,n>/<f<x+2.3,n>+f<x-3.2,n+3>>;printf<"y=%f\n\n",y>;floatf<floatx,intn>{floatsum=0.0;inti;for<i=1;i<=n;i++>{sum+=f1<-1,i>*f1<x,2*i>/f2<2*i>;}returnsum;}floatf1<floatx,intm>{inti;floaty=1.0;for<i=1;i<=m;i++>{y*=x;}returny;}floatf2<intm>{inti;floaty=1;for<i=1;i<=m;i++>{y*=i;}returny;}第七章数 组-习题答案1★以下各题中,选择一个正确的答案。1、能正确对一维数组a中所有元素进行初始化的是< >。A.inta[5]={} B.inta[]={0}C.inta[5]=0,0,0,0,0a[5]={0}D.int2、有说明intk=3,a[10];则下列可以正确引用数组元素的表达式是< >。A.a[k] B.a[10]C.a[1,3]D.a[3*5]3、有定义intd[][3]={1,2,3,4,5,6};执行语句printf<"%c",d[1][0]+'A'>;结果是<>。A.AB.BC.DD.E4、有定义charc='A',ch[20]={'a','b','c','\0','d','\0'};printf<"%s",ch>;结果是<>。A.'abc' B.abc C.abcd D.abc\0d5、对数组进行初始化charcarr[]={'s','t','u','d','e','n','t'},barr[]="student";正确的是< >。A.carr与barr长度相同 B.carr比barr长C.carr与barr相同 D.carr比barr短答1、BD 2、A 3、D 4、B 5、D2★阅读下列程序,写出程序的执行结果。1、#include<stdio.h>#include<string.h>voidmain<>{inti,j,temp,d[4][4]={{1,2,3,4},{5,6,7,8},{4,3,2,1},{1,2,3,4}};for<i=0;i<4;i++>for<j=0;j<i;j++>if<d[i][j]>d[j][i]>d[j][i]=d[i][j];for<i=0;i<4;i++>{printf<"\n">;for<j=0;j<4;j++>if<j>=i>printf<"%6d",d[i][j]>;else printf<"%c",''>;}}23291#include<stdio.h>voidmain<>{inti,d,m,n;chars[8];scanf<"%d",&n>;i=0; /*ido{m=n/8; d=n%8; s[i]='0'+d; i++; n=m;}while<n!=0>;for<i--;i>=0;i-->putchar<s[i]>; /*反向输出字符*/}答1、1 5 4 46 7 82 342、63333★程序填空。在___处填写合适的语句,完善下列程序:1、从键盘输入一个数,将其插入到一个升序数组中,保持数组仍然按升序排列。#include<stdio.h>voidmain<>{intdata,temp,k;staticinta[9]={-10,2,4,8,10,15,25,50};printf<"\nEnteradata:">;scanf<"%d",&data>; ① ;for<k=8; ② ;k-->if<a[k]<a[k-1]>{ ③ a[k]=a[k-1];a[k-1]=temp;}else ④ for<k=0; ⑤ ;k++>printf<"%7d",a[k]>;}2、从键盘输入一串英文字符〔不含空格与其他字符,统计每个字符的个数,并输出字母及相应的个数。#include<string.h>#include<stdio.h> /*本行代码教材中应该加上,因为程序中有putchar<>voidmain<>{inti=0,c[52]={0},m=0;charstr[80];printf<"Inputastring:">;scanf< ① ,str>;while<str[i]>{if<str[i]>='A'&& ② if<str[i]>='a'&&str[i]<='z'> ③ ;i++;}for<i=0;i<26;i++>if<c[i]{if<m%8==0>putchar<'\n'>;m++;printf<"%c:%-d",i+'A',c[i]>;}for<i=0;i<26;i++>if<c[i+26]>{if<m%8==0>putchar<'\n'>;m++;printf<"%c:%-d", ④ ,c[i+26]>;}}答1、①a[8]=data ②k>=1 ③temp=a[k] ④break ⑤k<=82、①"%s" ②str[i]<='Z' ③c[str[i]-'a'+26]++ ④i+'A'4★求一组成绩的平均分数以及高于平均分的成绩,设给定的成绩为90,85,92,77,80,62。答main<>{intscore[6]={90,85,92,77,80,62};inti,sum=0;floataver;for<i=0;i<6;i++>sum+=score[i];aver=sum/6.0;printf<"\nAverage:%f\n",aver>;printf<"Highscore:">;for<i=0;i<6;i++>if<score[i]>aver>printf<"%d\t",score[i]>;}5★编写程序,输入一组整数,将它们排序后由小到大输出。10层循环选定的元素下一个元素开始选取,依次与外层循环选定的元素进行比较,将小者放入外层循环选定的元素中。答#defineN10main<>{inta[N],i,j,t;for<i=0;i<N;i++> /*提示并为数组元素赋值*/{printf<"\nInputa[%d]:",i>;scanf<"%d",&a[i]>;}for<i=0;i<N;i++> /*外层选定待比较元素位置*/{for<j=i+1;j<N;j++>/*选定后续需要比较之元素位置*/{if<a[i]>a[j]>{t=a[i];a[i]=a[j];a[j]=t;}}printf<"%d\t",a[i]>;/*输出已更新为较小值之外层选定元素*/}}6从键盘输入一个4×4整数矩阵,以主对角线<\>为对称轴,将左下角元素中较大元素代替右上角对应元素,将右上角<含对角线元素>输出。[提示]a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[3][0]a[3][1]a[3][2]a[3][3]答#defineM4main<>{inta;inti,j,k,t;printf<"Inputintegernumber:\n">;for<i=0;i<M;i++> /*用两层循环为二维数组元素赋值*/for<j=0;j<M;j++>{printf<"a[%d][%d]=",i,j>;scanf<"%d",&a[i][j]>;}for<i=0;i<M;i++> /*用两层循环将数组以矩阵形式在屏幕输出*/{for<j=0;j<M;j++>{printf<"%d\t",a[i][j]>;}printf<"\n">;}printf<"\n">; /*分隔线*/for<i=0;i<M;i++> /*选定矩阵待处理的当前行{for<j=0;j<M;j++>/*将左下角元素中较大元素代替右上角对应元素*/{if<a[j][i]>a[i][j]>{t=a[j][i];a[j][i]=a[i][j];a[i][j]=t;}}for<j=i;j<M;j++> /*将函对角线的右上角元素输出*//*本循环为将第i行第i列开始的右侧元素输出*/{printf<"%d\t",a[i][j]>;}printf<"\n">;for<k=0;k<i+1;k++>printf<"\t">;/*保证显示数据正确位置*/}getch<>;}a[0][0]=1a[0][1]=2a[0][2]=3a[0][3]=4a[1][0]=5a[1][1]=6a[1][2]=7a[1][3]=8a[2][0]=9a[2][1]=10a[2][2]=11a[2][3]=12a[3][0]=13a[3][1]=14a[3][2]=15a[3][3]=161 2345 6789 10111213 1415161 5913610141115167通过键盘给3×4的二维数组输入数据,然后分别按行和按列输出数组元素。答#defineM3#defineN4main<>{inta[N],i,j;printf<"Inputintegernumber:\n">;for<i=0;i<M;i++> /*外层选定数组元素左维for<j=0;j<N;j++>/*层选定数组元素右维*/{printf<"a[%d][%d]=",i,j>; /*提示输出元素位置*/scanf<"%d",&a[i][j]>; /*为指定元素赋值*/}printf<"\nOutbyrow:\n">; /*按行输出数组元素值for<i=0;i<M;i++>for<j=0;j<N;j++>printf<"%d",a[i][j]>;printf<"\nOutbycollum:\n">; /*按列输出数组元素值for<i=0;i<N;i++>for<j=0;j<M;j++>printf<"%d",a[j][i]>;getch<>;}[运行结果]Inputintegera[0][0]=1a[0][1]=2a[0][2]=3a[0][3]=4a[1][0]=5a[1][1]=6a[1][2]=7a[1][3]=8a[2][0]=9a[2][1]=10a[2][2]=11a[2][3]=12Outbyrow:123456789101112Outbycollum:1592610371148128编写程序,将两个字符串连接起来,不要使用strcat函数。答#include"string.h"main<>{charstr1[80],str2[80];inti=0,l1;printf<"Inputstr1:">;gets<str1>; /*scanf<"%s",str1>;fflush<stdin>;函数语句printf<"Inputstr2:">;gets<str2>;l1=strlen<str1>; /*计算字符串1的长度*/while<str2[i]>{str1[l1+i]=str2[i];i++;}str1[l1+i]='\0'; /*字符串连接后,不能忘记追加一个字符串结束符*/puts<str1>; :printf<"%s",str1>;*/getch<>;}9输入一行字符串,统计该字符串中字符对ab的个数。答#include"string.h"main<>{charstr[80];intprintf<"Inputstring:">;gets<str>;while<str[i]>{if<str[i]=='a'&&str[i+1]=='b'>{count++;i+=2; /*如果在当前ii越过b个字母*/}elsei++; /*如果在当前i的位置未找到,则i指向下一个字母*/}printf<"%d",count>;getch<>;}10从键盘输入10个字符串,找出一个最长的字符串。答#include"string.h"main<>{charstr[10][80]; /*79inti,len,k[10],n=0,max=0;printf<"Input10strings:\n">;for<i=0;i<10;i++>/*向str数组输入10个字符串*/{置<行>*/位置<行}
printf<"String%d=",i+1>;gets<str[i]>;len=strlen<str[i]>; /*计算输入之字符串之长度*/if<len>max>{max=len;n=0;k[n]=i;}elseif<len==max>k[++n]=i; /*与已记录最大长度相同时,记录其在数组中if<n==0> /*此时说明只有一个最大长度字符串,是str[k[0]*/{printf<"ThelongeststringisString%d:",k[0]+1>;/*输出其序号*/puts<str[k[0]]>;}else /*此时说明有不止一个最大长度字符串时需要处理的复合语句*/{printf<"Notonlyone!\n">;for<i=0;i<=n;i++> /*分别输出各序号、字符串*/{printf<"TheseareString%d:",k[i]+1>;puts<str[k[i]]>;}}getch<>;}11已知数组a中有m个按升序排列的元素,数组b中有n个按降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。[提示]将a中的元素最大值与b中元素最大值相比,将最大值存入c数组中,然后调整c、a或b元素指针<地址>,依次重复前序工作,即可。答#defineM3#defineN7main<>{inti=0,j=0,n=0,c[M+N],a[3]={10,27,543},b[7]={300,210,173,96,55,34,13};intmaxa,maxb;do{maxa=a[M-i-1];maxb=b[j];if<maxa>maxb>{元素位置*/元素位置*/
}else{}
c[n++]=maxa;/*将a中最大元素赋值给c数组当前元素,并调整c新i++; /*调整a中元素位置*/c[n++]=maxb;将a中最大元素赋值给c数组当前元素,并调整cj++; /*调整b中元素位置*/printf<"%d",c[n-1]>;/*打印输出c中新赋值元素数据*/}while<n<M+N>; /*未为数组c赋值结束时继续以上步骤--执行循环体getch<>;}第八章指 针-习题答案1★选择题。1、若函数f定义如下:voidf<char*d,char*s>;{while<*d++=*s++>;}函数f的功能是< >。A.串比较 B.串复制 C.求串长 D.串反2、有定义intarr[10]={0,1,2,3,4,5,6,7,8,9},*p,i=2;若执行语句:p=arr;pritnf<"%d",*<p+i>>;输出结果为< >。A.0 B.2 C.3 D.1★3、有定义inttd[][3]={1,2,3,4,5,6};以下几种方法中,不能正确表示i行j列元素的是< >。A.td[i][j] B.*<td[i]+j> C.*<*<td+i>+j> D.*<td+i-j>本题不要求掌握答1、B 2、B 3、D2★写出下列程序的运行结果。1、voidmain<>{inta,*p1,*p2;a=10;p1=&a;p2=p1;printf<"TheValueis%d||%d||%d\n",a,*p1,*p2>;*p1=11;printf<"TheValueis%d||%d||%d\n",a,*p1,*p2>;}2、若输入字符串program时,写出下列程序输出结果:#include<stdio.h>voidmain<>{charstr[80];voidprochar<char*st,charch>;scanf<"%s",str>;prochar<str,'r'>;puts<str>;}voidprochar<char*str,charch>{char*p;for<p=str;*p!='\0';p++>if<*p==ch>{*str=*p;<*str>++;str++;}*str='\0';}答1、TheValueis10||10||10TheValueis11||11||112、ss3★填空题1、下面程序完成从键盘输入两个字符串a和b,再将a和b的对应位置字符中的较大者存放在数组c中,填空完善该程序。#include<stdio.h>#include<string.h>voidmain<>{intk=0;chara[80],b[80],c[80]={'\0'},*p,*q;p=a;q=b;gets<a>;gets<b>;while< ① {if< ② >c[k]=*p;elsec[k]=*q;p++; ③ ;k++;} /*本题教材有误,少了此处的右大括号if<*p!=0>strcat<c,p>;elsestrcat<c,q>;puts<c>;}2、以下程序从键盘输入10个不相同的数到数组a中,再输入一个数到x中,在a中查找与x值相同的元素所在的位置,填空完善该程序。。#include<stdio.h>voidmain<>{inta[11],x,i;printf<"Input10integers:\n">;for<i=1; ① ;i++>scanf<"%d", ② printf<"Inputx:">;scanf<"%d",&x>;*a=x;i=10;while<x!=*<a+i>> ③ if< ④ >printf<"%6d'spositionis:%3d\n",x,i>;elseprintf<"%6dNotbefound!\n",x>; /*beebe,case*/}答1、①*p!='\0'&&*q!='\0'②*p>*q ③q++2、①i<11 ②&a[i] ③i--; ④i>04编写函数fun,例如,程序执行时输入字符串为turbocandborlandc++,从键盘输入字符n,则输出后变为cadborladc++。如果输入的字符在字符串中不存在,则字符串照原样输出。[提示]答#include"string.h"main<>{chars[80],*pstr=s,chdel;printf<"Inputsourcestring:">;gets<pstr>;printf<"Characteryouwantdelete:">;scanf<"%c",&chdel>;fun<pstr,chdel>;printf<"Afterdeleted:">;puts<pstr>;getch<>;}intfun<char*s,charch>{inti,j;for<i=0,j=0;s[i];i++>if<s[i]!=ch>s[j++]=s[i];s[j]=0;}5编程将从键盘输入的每个单词的第一个字母转换为大写字母,输入时各单词必须用空格隔开,用[提示]。答[解法一]#include"stdio.h"intfun<charmain<>{inti=0;charch,str[80];printf<"Inputstringendby.:\n">;while<<ch=getchar<>>!='.'>str[i++]=ch;str[i++]='.';fun<str>;puts<str>;getch<>;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45164-2024熔模铸件缺陷分类及命名
- 二零二五年度百货商场停车场管理合同样本3篇
- 二零二五版员工股权激励与管理合同模板3篇
- 二零二五年防盗门研发、生产、销售一体化合作协议3篇
- 2024版家具经销商合作协议范本
- 二零二五年度音乐器材行业标准制定与执行合同3篇
- 2024版云计算服务租赁合同
- 二零二五版个人子女教育还借款合同3篇
- 2024版前期物业服务管理协议
- 二零二五版体育健身器材研发与销售合同3篇
- 内镜下粘膜剥离术(ESD)护理要点及健康教育课件
- 2024年民族宗教理论政策知识竞赛考试题库及答案
- 项目七电子商务消费者权益保护的法律法规
- 品质经理工作总结
- 供电抢修述职报告
- 集成电路设计工艺节点演进趋势
- 新型电力系统简介演示
- 特种设备行业团队建设工作方案
- 眼内炎患者护理查房课件
- 肯德基经营策略分析报告总结
- 买卖合同签订和履行风险控制
评论
0/150
提交评论