




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.85/86WORD格式可编辑C语言程序设计习题参考答案习题1一、判断题1.在计算机中,小数点和正负号都有专用部件来保存和表示。2.二进制是由0和1两个数字组成的进制方式。3.二进制数的逻辑运算是按位进行的,位与位之间没有进位和借位的关系。4.在整数的二进制表示方法中,0的原码、反码都有两种形式。5.有符号数有三种表示法:原码、反码和补码。6.常用字符的ASCII码值从小到大的排列规律是:空格、阿拉伯数字、大写英文字母、小写英文字母。解:1.F2.T3.T4.T5.T6.T二、单选题1.在计算机中,最适合进行数值加减运算的数值编码是。A.原码 B.反码 C.补码 D.移码2.已知英文小写字母m的ASCII码为十进制数109,则英文小写字母y的ASCII码为十进制数。A.112B.120C.121D.1223.关于ASCII码,在计算机中的表示方法准确地描述是。A.使用8位二进制数,最右边一位为1B.使用8位二进制数,最左边一位为1C.使用8位二进制数,最右边一位为0D.使用8位二进制数,最左边一位为04.设在机器字长4位,X=0111B,Y=1011B,则下列逻辑运算中,正确的是___________。A.X∧Y=1000B.X∨Y=1111C.X⊕Y=0011D.=10005.下列叙述中正确的是〔。A.高级语言就是机器语言B.汇编语言程序、高级语言程序都是计算机程序,但只有机器语言程序才是计算机可以直接识别并执行的程序C.C语言因为具有汇编语言的一些特性,所以是汇编语言的一种D.C源程序经过编译、连接,若正确,执行后就能得到正确的运行结果6.用C语言编写的源程序经过编译后,若没有产生编译错误,则系统将〔。A.生成可执行文件 B.生成目标文件C.输出运行结果 D.自动保存源文件7.下列叙述中不正确的是〔。A.main函数在C程序中必须有且只有一个B.C程序的执行从main函数开始,所以main函数必须放在程序最前面C.函数可以带参数,也可以不带参数。D.每个函数执行时,按函数体中语句的先后次序,依次执行每条语句解:1.C2.C3.D4.B5.B6.B7.B三、填空题1.〔87.62510=〔2=〔8=〔162.2=〔8=〔16=〔103.输入三个数,计算并输出三个数的和与三个数的乘积。程序如下:#include<stdio.h>voidmain<>{inta,b,c,s,z;printf<"Pleaseinputabc:\n">;s=a+b+c;printf<"%d\n",s>;}*4.输入三角形三条边的边长,计算并输出三角形的面积。根据三条边的边长,计算三角形面积的公式如下:程序如下:#include<stdio.h>#include<math.h>voidmain<>{doublex,y,z,s,dime;scanf<"%lf%lf%lf",&x,&y,&z>;dime=sqrt<s*<s-x>*<s-y>*<s-z>>;}解:1.1010111.101127.557.A2.11271.5612B9.B84793.718753.scanf<"%f%f%f",&a,&b,&c>;z=a*b*c;printf<"%f",z>;4.s=<x+y+2>/2;printf<"%f",dim>;四、编程题1.仿照例1.1,编程序在屏幕上显示:*****************************MerryChristmas!HappyNewYear!*****************************解:#include<stdio.h>voidmain<>{printf<"*****************************\n">;printf<"MerryChristmas!\n">;printf<"HappyNewYear!\n">;printf<"*****************************\n">;}2.仿照例1.2编程,输入一个整数,计算这个数的平方。解:#include<stdio.h>voidmain<>{inta,z; printf<"请输入一个整数:\n">;scanf<"%d",&a>;z=a*a; printf<"%d*%d=%d\n",a,a,z>;}*3.仿照例1.3编程,输入两个数后,输出其中较小值。解:#include<stdio.h>floatmin<floatx,floaty> {floatm; if<x<y>m=x;elsem=y;returnm; }voidmain<>{floata,b,c,mindata; printf<"请输入二个数:\n">;scanf<"%f%f",&a,&b>;mindata=min<a,b>; printf<"较小数:%f\n",mindata>; }*4.仿照例1.2编程,输入a、b后,输出一元一次方程ax+b=0的解。解:#include<stdio.h>voidmain<>{floata,b,x; printf<"请输入a、b:\n">;scanf<"%f%f",&a,&b>;x=-a/b; printf<"x=%f\n",x>;}*5.仿照例1.2编程,输入圆柱体的半径和高,计算并输出圆柱体的体积。解:#include<stdio.h>voidmain<>{floatr,h,s,v;printf<"Pleaseinputrandh:\n">;scanf<"%f%f",&r,&h>;v=3.14*r*r*h;printf<"V=%f\n",v>;}习题2一、判断题1.任何变量都必须要定义其类型。2.C语言的double类型数据在其数值范围内可以表示任何实数。3.C语言的任何类型数据在计算机内都是以二进制形式存储的。4.isdigit<‘5’>的结果为0。5.printf函数中格式符"%c"对应的参数只能是字符类型。6.按格式符"%d"输出float类型变量时,截断小数位取整后输出。7.在C语言程序中,ABC与abc是两个相同的变量。8.scanf函数中的格式符"%d"不能用于输入实型数据。9.格式符"%f"不能用于输入double类型数据。10.当格式符中指定宽度时,输出的信息完全取决于所指定的宽度。解:<1>T<2>F<3>T<4>F<5>F<6>F<7>F<8>T<9>T<10>F二、指出下列各项中哪些是C语言中的常量,并指出其类型10,150007–0x3dπ1e0e1o7o8‘x’‘xo’1.52e0.5sin<3>0xf16‘\a’‘\009’1.414E+22.54‘\\’‘a’+20x100h012810L解:合法的C常量有:整型常量:007–0x3d0xf1610L实型常量:1e01.414E+2字符型常量:‘x’‘\a’‘\\’三、指出下列各项中哪些是C语言中的用户标识符x_1X_2Highprintfβ3DSi/je2-e2countIntnumber$23next_sizeofIFsum_12_123#NO1:doublefor解:C的用户标识符有:x_1X_2Highe2countIntnumbernext_IFsum_12四、单项选择题1.C语言中,char型数据在内存中的存储形式是〔。A.原码B.反码C.补码 D.ASCII码2.若有定义语句"charc='\72';"则变量c〔。A.包含1个字符B.包含2个字符C.包含3个字符D.定义不合法3.C语言中的基本数据类型包括〔。A.整型、实型、逻辑型B.整型、实型、字符型C.整型、逻辑型、字符型D.整型、实型、逻辑型、字符型4.设c1、c2为字符型变量,执行语句"c1=getchar<>;c2=getchar<>;"时,从键盘输入A↙,c1和c2的值分别为〔。A.都是‘A’ B.c1是‘A’,c2未输入C.c1未输入,c2是‘A’D.c1是‘A’,c2是‘\n’5.a、b是整型变量,执行语句"scanf<"a=%d,b=%d",&a,&b>;",使a和b的值分别为1和2,正确的输入是〔。A.12B.1,2 C.a=1,b=2 D.a=1b=26.设c为字符型变量值为‘A’,a为整型变量值为97,执行语句"putchar<c>;putchar<a>;"后,输出结果为〔。A.AaB.A97 C.A9 D.aA7.已知字母A的ASCII码值为65,以下语句段的输出结果是〔。charc1='A',c2='Y';printf<"%d,%d\n",c1,c2>;A.输出格式非法,输出错误信息B.65,90C.A,Y D.65,898.若要使用输入语句"scanf<"%4d%4d%10f",&i,&j,&x>;",为i输入-10,为j输入12,为x输入345.67,则正确的输入形式是〔。A.–1012345.67↙B.–1012345.67↙9.能正确地定义符号常量的是〔。A.#definen=10 B.#definen10C.#definen10;D.#DEFINEN1010.在C语言中,int、char、short三种类型数据在内存中所占的字节数〔。A.由用户自己定义B.均为2个字节C.是任意的D.由机器字长决定解:<1>D<2>A<3>B<4>D<5>C<6>A<7>D<8>B<9>B<10>D五、填空题1.charch='$';floatx=153.4523;语句"printf<"%c%–8.2f\\n",ch,x>;"的输出结果是。解:$153.45\n2.inti=123;floatx=–1234.56789;语句"printf<"i=%5dx=%7.3f\n",i,x>;"的输出结果是。解:i=123x=-1234.5683.charc='a';inta=65;语句"putchar<c+1>;putchar<a>;"的输出结果是。解:bA4.inta=98;语句"printf<"%d,%c,%o,%x",a,a+1,a+2,a+3>;"的输出结果是。解:98,c,144,655.intk;floatf;语句"scanf<"%3d%*4d%6f",&k,&f>;"↙则k=,f=。解:k=123f=8765.46.使用pow<>函数时,程序的开头必须写一条预处理命令:。解:#include<math.h>5.填空题。<1>inti=123,j=45;函数printf<"%d,%d\n",i,j>;的输出结果是。解:123,45<2>inti=123;floatx=-45.678;语句printf<"i=%5dx=%7.4f\n",i,x>;的输出结果是。解:i=123x=-45.6780<3>floatalfa=60,pi=3习题3一、根据下列数学式,写出C的算术表达式。解:-<a2+b2>×y4的C表达式:-<a*a+b*b>*pow<y,4>的C表达式:<sqrt<2>+10*10>/<pow<tan<x>,-1>+3.141593>的C表达式:sqrt<pow<fabs<sin<x>>,3.5>>的C表达式:pow<x,6>-exp<5>的C表达式:<1.0/2*a*b+c+d>/<a+2*b-<c+d>/c/d>二、按照要求,写出下列C的表达式。1.写出int类型变量x为"奇数"的表达式。解:x%2==12.Int类型变量x、y、z,写出描述"x或y中有且仅有一个小于z"的表达式。解:x<z&&y>=z||x>=z&&y<z3.将double类型变量y保留四位小数的表达式。解:<int><y*10000+0.5>/10000.04.为变量s赋值:取变量x的符号,取变量y的绝对值。解:s=<x>=0?1:-1>*<y>=0?y:-y>5.条件"-5≤x≤3"所对应的C逻辑表达式。解:-5<=x&&x<=36.a、b是字符变量,已知a的值为大写字母、b的值为小写字母,写出判断a、b是否为同一字母<不区分大小写>的逻辑表达式解:a+32==b或b-a==32?1:07.int类型变量a、b均为两位正整数,写出判断a的个位数等于b的十位数、且b的个位数等于a的十位数的逻辑表达式。解:a%10==b/10&&a/10==b%108.写出判断某个人是否是成年人<年龄大于21>,且不是老年人<年龄大于65>的逻辑表达式。解:y>21&&y<=659.写出取变量a、b、c中最大值的条件表达式。解:<a>b?a:b>>c?<a>b?a:b>:c10.若字符变量ch为小写字母,则将其转换为对应的大写字母。解:ch=ch>='a'&&ch<='z'?ch-32:ch三、单项选择题1.设intx=3,y=4,z=5;,下列表达式中值为0的是〔。A.'x'&&'y' B. x<=yC.x||y+z&&y–z D. !<<x<y>&&!z||1>2.已知x=10,ch='A',y=0;,则表达式"x>=y&&ch<'B'&&!y"的值是〔。A.0B. 1C."假" D."真"3.判断char型变量c为数字字符的正确表达式为〔。A.'0'<=c<='9'B.'0'<=c&&c<='9'C.c>='0'||c<='9'D.c>=0&&c<=94.下列运算符中,优先级最低的是〔。A.?:B.&& C.==D.*=5.若有条件表达式"x?a++:b--",则以下表达式中〔等价于表达式x。A.x==0 B.x!=0 C.x==1 D.x!=16.有定义intk=4,a=3,b=2,c=1;,表达式"k<a?k:c<b?c:a"的值是〔。A.4B.3C.2 D.17.执行下列程序段后,变量a,b,c的值分别是〔。intx=10,y=9,a,b,c;a=<--x==y++>?--x:++y;b=x++;c=y;A.a=9,b=9,c=9 B.a=8,b=8,c=10C.a=9,b=10,c=9 D.a=1,b=11,c=108.有定义inta=9;,语句"a+=a–=a+a;"执行后,变量的值是〔。A.18 B.9 C.–18 D.–99.设x和y均为int型变量,则语句"x+=y;y=x–y;x–=y;"的功能是〔。A.把x和y按从小到大排列 B.把x和y按从大到小排列C.无确定结果 D.交换x和y中的值10.有定义doublex=1,y;,表达式"y=x+3/2"的值是〔。A.1 B.2 C.2.0 D.2.511.设有定义intx;doubley;,则下列表达式中结果为整型的是〔。A.<int>y+x B.<int>x+yC.int<y+x> D.<double>x+y12.设有整型变量x,下列说法中,错误的是〔。A."5.0"不是表达式 B."x"是表达式C."!x"是表达式 D."sqrt<x>"是表达式解:<1>D<2>B<3>B<4>D<5>B<6>D<7>B<8>C<9>D<10>C<11>A<12>A四、填空题。1.设floatx=2.5,y=4.7;inta=7;,表达式x+a%3*<int><x+y>%2/4值为。解:2.52.设intx=2,y=3;,执行语句"x*=x+y"后x的值为。解:103.设intx=17,y=5;,执行语句"x%=x–y"后x的值为。解:54.设inta=6,b=4,c=2;,表达式!<a-b>+c-1&&b-c/2的值为。解:15.设inta=2,b=4,x,y;,表达式!<x=a>||<y=b>&&!<2-3.5>的值为。解:06.判断变量a、b是否绝对值相等而符号相反的逻辑表达式为。解:a==-b7.判断变量a、b中必有且只有一个为0的逻辑表达式为。解:a*b==0&&a+b!=08.设intm=2,n=2,a=1,b=2,c=3;执行语句d=<m=a==b>&&<n=b>c>;后,m和n的值分别为。解:m为0,n为29.设inta=2;,表达式"a%2!=0"的值为。解:010.设charc='y';,表达式"c>='a'&&c<='z'||c>='A'&&c<='Z'"的值为。解:111.写出与代数式<x+2>ex+2对应的C表达式。解:<x+2>*exp<x+2>12.设inta=2;执行语句a=3*5,a*4;后a的值为。解:15五、写出下列程序的输出结果。1.#include<stdio.h>voidmain<>{unsignedk,n;scanf<"%u",&n>;//输入数据为:69k=n%10*10+n/10;printf<"n=%dk=%d\n",n,k>;}解:n=69k=962.#include<stdio.h>voidmain<>{intx=2,y=3;x*=y+4;printf<"%d,%d\n",x,y>;x/=y=5;printf<"%d,%d\n",x,y>;x-=y%2;printf<"%d,%d\n",x,y>;}解:14,32,51,53.#include<stdio.h>voidmain<>{inta,b;a=8;b=7;a=<a--==b++>?a%3:a/3;printf<"a=%db=%d\n",a,b>;}解:a=2b=8六、程序填空题。1.以下程序输入三个整数值给a,b,c,程序把b中的值给a,把c中的值给b,把a中的值给c,交换后输出a、b、c的值。例如输入123,输出a=2b=3c=1。#include<stdio.h>voidmain<>{inta,b,c,①;printf<"Entera,b,c:">;scanf<"%d%d%d",②>;③;a=b;b=c;④;printf<"a=%db=%dc=%d\n",a,b,c>;}解:①t②&a,&b,&c③t=a④c=t2.以下程序不借助任何变量把a、b中的值进行交换。#include<stdio.h>voidmain<>{inta,b;printf<"Inputa,b:">;scanf<"%d%d",①>;a+=②;b=a-③;a-=④;printf<"a=%db=%d\n",a,b>;}解:①&a,&b②b③b④b七、编程题。1.输入3个字符后,按各字符ASCII码从小到大的顺序输出这些字符。解:#include<stdio.h>voidmain<>{charc1,c2,c3,t,min,mid,max;c1=getchar<>;c2=getchar<>;c3=getchar<>;min=<t=c1<c2?c1:c2><c3?t:c3;max=<t=c1>c2?c1:c2>>c3?t:c3;mid=c1+c2+c3-min-max;putchar<min>;putchar<mid>;putchar<max>;}2.输入两点坐标〔x1,y1、〔x2,y2,计算并输出两点间的距离。解:#include<stdio.h>#include<math.h>voidmain<>{doublex1,y1,x2,y2,d;printf<"请输入两点坐标<x1,y1>,<x2,y2>\n">;scanf<"<%lf,%lf>,<%lf,%lf>",&x1,&y1,&x2,&y2>;d=sqrt<<x1-x2>*<x1-x2>+<y1-y2>*<y1-y2>>;printf<"两点间距离=%f\n",d>;}3.编写程序,计算球体积并输出它的值。要求输入半径值,计算结果保留三位小数。解:#include<stdio.h>#include<math.h>#definePI3.1415926voidmain<>{doubler,gv;printf<"请输入半径值:\n">;scanf<"%lf",&r>;gv=4.0/3*PI*pow<r,3>;printf<"半径为%f的球的体积为:%.3f\n",r,gv>;}4.输入三角形的底和高,求三角形面积。解:#include<stdio.h>#definePI3.14159voidmain<>{doublea,h,s;printf<"请输入三角形的底,高\n">;scanf<"%lf,%lf",&a,&h>;s=a*h/2;printf<"三角形面积=%f\n",s>;}5.编写程序,输入一个实数后输出该数的绝对值。解:#include<stdio.h>voidmain<>{doublex,y;printf<"请输入一个实数\n">;scanf<"%lf",&x>;y=x>=0?x:-x;printf<"|%g|=%g\n",x,y>;}6.输入梯形的上底、下底和高,求梯形面积。解:#include<stdio.h>voidmain<>{doublea,b,h,s;printf<"请输入梯形的上底,下底,高\n">;scanf<"%lf,%lf,%lf",&a,&b,&h>;s=<a+b>*h/2;printf<"梯形面积=%f\n",s>;}7.输入矩形的边长,求矩形面积。解:#include<stdio.h>voidmain<>{doublea,b,s;printf<"请输入矩形的长,宽\n">;scanf<"%lf,%lf",&a,&b>;s=a*b;printf<"矩形面积=%f\n",s>;}8.已知等差数列的第一项为a,公差为d,求前n项之和,a、d、n由键盘输入。解:#include<stdio.h>voidmain<>{inta,d,n,sum;printf<"请输入等差数列的首项公差项数\n">;scanf<"%d%d%d",&a,&d,&n>;sum=a*n+n*<n-1>*d/2;printf<"sum=%d\n",sum>;}9.编写程序,将d天h小时m分钟换算成分钟,输入d、h、m,输出换算结果。解:#include<stdio.h>voidmain<>{intd,h,m,t;printf<"请输入天小时分钟\n">;scanf<"%d%d%d",&d,&h,&m>;t=d*24*60+h*60+m;printf<"%d天%d小时%d分钟=%d分钟\n",d,h,m,t>;}10.编写程序,求出给定半径r的圆以及内接正n边形的面积,输出计算结果。r和n的值由键盘输入。解:#include<stdio.h>#include<math.h>#definePI3.14159voidmain<>{doubler,s1,s2;intn;printf<"Inputrn\n">;scanf<"%lf%d",&r,&n>;s1=PI*r*r;s2=n/2.0*r*r*sin<2*PI/n>;printf<"圆面积=%f,正内接%d边形面积=%f\n",s1,s2>;}习题4一、单项选择题1.下列语句将小写字母转换为大写字母,其中正确的是〔。A.if<ch>='a'&ch<='z'>ch=ch-32; B.if<ch>='a'&&ch<='z'>ch=ch-32;C.ch=<ch>='a'&&ch<='z'>?ch-32:''; D.ch=<ch>'a'&&ch<'z'>?ch-32:ch;2.下列各语句中,能够将变量u、s中最大值赋给变量t的是〔。A.if<u>s>t=u;t=s;B.t=s;if<u>s>t=u;C.if<u>s>t=s;elset=u D.t=u;if<u>s>t=s;3.假设变量x、k都已定义,下列语句片段中,无语法错误的是〔。A.switch<x>{casex>=90:putchar<'A'>;casex<60:putchar<'E'>;}B.switch<x>{case1+2:k='A';defualt:k='E';case2*4:k='B';}C.switch<x>{case2+x:k=x-2;case3*x:k=x+3;default:k=0;}D.switch<x>{case3.5:k=0.5*x;case7.8:k=8*x;default:k=0;}*4.与语句while<!s>中的条件等价的是〔。A.s==0 B.s!=0C.s==1 D.s=05.下列语句中,哪一个可以输出26个大写英文字母〔。A.for<a='A';a<='Z';printf<"%c",++a>>; B.for<a='A';a<'Z';a++>printf<"%c",a>;C.for<a='A';a<='Z';printf<"%c",a++>>;D.for<a='A';a<'Z';printf<"%c",++a>>;6.判断下面的while循环体的执行次数〔。i=0;k=10;while<i=8>i=k––;A.8次B.10次 C.2次D.无数次解:<1>B<2>B<3>B<4>A<5>C<6>D二、写出下列程序的输出结果1.#include<stdio.h>voidmain<>{ charx; intn=0,k=0; while<<x=getchar<>>!='#'>{ //运行时输入:athefthethethere# switch<x>{case't':k++;break;case'h':if<k==1>k++;break;case'e':if<k==2>k++;break;default:k=0;}if<k==3>n++; }printf<"%d\n",n>;}解:3*2.#include<stdio.h>voidmain<>{intk=0;charc='A';do{switch<c++>{case'A':k++;break;case'B':k--;case'C':k+=2;break;case'D':k=k%2;break;case'E':k=k*10;break;default:k=k/3;}k++; }while<c<'G'>;printf<"k=%d\n",k>;}解:k=8*3.#include<stdio.h>#include<ctype.h>voidmain<>{ chara,b,x;inti; do x=getchar<>;//运行时输入:2abcD while<isupper<x>==0>; for<a='A';a<=x;a++>{ for<b='A';b<'A'+x-a;b++> putchar<''>; for<i=1;i<=2*<a-'A'>+1;i++> putchar<a>;putchar<'\n'>;}}注:isupper<x>是判断x是否大写字母的函数,如果x是大写字母函数值为1否则为0。解:ABBBCCCCCDDDDDDD4.#include<stdio.h>voidmain<>{inti,n; scanf<"%d",&n>;//输入2520i=2;while<n>1>if<n%i==0>{printf<"%d\t",i>;n/=i;}elsei++;printf<"\n">;}解:2223357三、填空题1.求1~10的乘积,写作:for<,i=1;i<=10;++i>s*=i;解:s=12.下面程序段执行后,x、y的值分别为。y=1;x=5;while<x>{ x--;y++;}解:x、y分别为0和6*3.输入若干个以问号结束的字符,同时输出这串字符〔不包括问号;while<!='?'>putchar<ch>;解:<ch=getchar<>>//注意外面的这对括号不能少*4.有以下程序片段:s=1.0;for<k=1;k<=n;k++>s+=1.0/<k*<k+1>>;printf<"%f\n",s>;填空,使下程序段与上程序段功能完全相同。s=0.0;;k=0;do{s+=d;;d=1.0/<k*<k+1>>;}while<>;printf<"%f\n",s>;解:d=1k++k<=n5.下列程序输出6~10000之间的亲密数对,填空将程序补充完整。若a、b是亲密数对,则a的因子和等于b,b的因子和等于a,且a不等于b。#include<stdio.h>voidmain<>{inta,b,c,i;for<a=6;a<=10000;a++>{b=1;for<i=2;i<=a/2;i++>if<>b+=i;for<i=2;i<=b/2;i++> if<b%i==0>c+=i;if<&&a!=b> printf<"%d%d\n",a,b>;}}解:a%i==0c=1;c==ann6.计算2+22+222+2222+…+22+…+2的和。nn#include<stdio.h>voidmain<>{ints=1,t=1,a,n;scanf<"%d"&n>;for<inti=2;i<=n;i++>{t=t*10+1;}printf<"SUM=%d\n",s>;}解:a=2;s+=t;s*=a;四、编程题1.输入一个实数,输出它的平方根值,如果输入数小于0,则输出"Thenumberiserror!"的提示。解:#include<stdio.h>#include<math.h>voidmain<>{doublea,x;printf<"Inputdata:\n">;scanf<"%lf",&a>;if<a>=0>{ x=sqrt<a>; printf<"%g的平方根值为%g\n",a,x>; } else printf<"Thenumberiserror!\n">;}2.用if语句编程序,输入x后按下式计算y值,并输出结果。x+2*x2+100≤x≤8y=x-3*x3-9x<0或x>8解:#include<stdio.h>voidmain<>{doublex,y;printf<"Inputx:\n">;scanf<"%lf",&x>;if<x>=0&&x<=8> y=x+2*x*x+10;elsey=x-3*x*x*x-10; printf<"x=%f,y=%f\n",x,y>;}if结构解:#include<stdio.h>voidmain<>{doublet;printf<"Inputscore:\n">;scanf<"%lf",&t>;if<t>=90&&t<=100> putchar<‘A’>;elseif<t>=80&&t<90> putchar<‘B’>;elseif<t>=70&&t<80> putchar<‘C’>;elseif<t>=60&&t<70> putchar<‘D’>;elseif<t>=0&&t<60> putchar<‘E’>;else printf<"error!\n">;}switch结构解:#include<stdio.h>voidmain<>{doublet;printf<"Inputscore:\n">;scanf<"%lf",&t>;switch<<int><t/10>>{ case10: case9:putchar<‘A’>;break; case8:putchar<‘B’>;break;case7:putchar<‘C’>;break;case6:putchar<‘D’>;break;case5:case4:case3:case2:case1:case0:putchar<‘E’>;break; default:printf<"error!\n">; }}4.输入x、y,计算f<x,y>的函数值。f<x,y>定义如下:解:#include<stdio.h>voidmain<>{doublex,y,f;printf<"Inputxy:\n">;scanf<"%lf%lf",&x,&y>;if<x>=0&&y>=0>f=x*x+y*y;elseif<x<0&&y<0> f=x*x-y*y;elseif<x>=0&&y<0> f=x+y;elseif<x<0&&y>=0> f=x-y;printf<"f<%f,%f>=%f\n",x,y,f>;}5.输入三角形的三条边长a、b、c,计算并输出三角形的面积。要求判断输入的三条边a、b、c三个数是否能构成三角,如果不能构成三角形,则输出提示信息告诉用户。根据三条边的边长,计算三角形面积的公式如下:解:#include<stdio.h>#include<math.h>voidmain<>{doublea,b,c,s,area;printf<"Inputabc:\n">;scanf<"%lf%lf%lf",&a,&b,&c>;if<a+b>c&&a+c>b&&b+c>a>{ s=<a+b+c>/2; area=sqrt<s*<s-a>*<s-b>*<s-c>>; printf<"area=%.3f\n",area>; }else printf<"线段%f,%f,%f不能构成三角形\n",a,b,c>;}6.输入1~7,输出对应的星期一~星期天。解:#include<stdio.h>voidmain<>{ints;printf<"Inputs<1~7>:\n">;scanf<"%d",&s>;switch<s>{ case1:printf<"星期一\n">;break; case2:printf<"星期二\n">;break;case3:printf<"星期三\n">;break;case4:printf<"星期四\n">;break;case5:printf<"星期五\n">;break;case6:printf<"星期六\n">;break;case7:printf<"星期天\n">;break; default:printf<"Thesiserror!\n">; }}7.输入年、月、日,输出是该年的第几天。解:#include<stdio.h>voidmain<>{inty,m,d,days;printf<"Input年月日:\n">;scanf<"%d%d%d",&y,&m,&d>; days=d;switch<m>{ case12:days+=30; case11:days+=31;case10:days+=30;case9:days+=31;case8:days+=31;case7:days+=30;case6:days+=31;case5:days+=30;case4:days+=31;case3:if<y%4==0&&y%100!=0||y%400==0> days+=29; elsedays+=28;case2:days+=31; } printf<"%d月%d日是%d年的第%d天\n",m,d,y,days>;}8.输入n和相应的n个数,输出它们中所有奇数的乘积。解:#include<stdio.h>voidmain<>{intn,i,t,x;printf<"请输入n:\n">;scanf<"%d",&n>;printf<"请输入%d个数:\n",n>;for<i=1,t=1;i<=n;i++>{ scanf<"%d",&x>; if<x%2==1> t*=x; } printf<"%d\n",t>;}9.输入一个正整数,求它们所有数字之和。解:#include<stdio.h>voidmain<>{inta,sum=0;printf<"请输入一个正整数:\n">;scanf<"%d",&a>; a=a>=0?a:-a;while<a!=0>{ sum+=a%10; a/=10; } printf<"%d\n",sum>;}10.输入n和相应的n个数,统计输入的数中负数、零及正数的个数。解:#include<stdio.h>voidmain<>{intn,i,t,s,k; doublex; t=s=k=0;printf<"请输入n:\n">;scanf<"%d",&n>;printf<"请输入%d个数:\n",n>;for<i=1;i<=n;i++>{ scanf<"%lf",&x>; if<x>0> t++; elseif<x<0> s++; elsek++; } printf<"负数:%d\t零:%d\t正数:%d\n",s,k,t>;}11.输入10个学生的成绩,输出最低分数。解:#include<stdio.h>voidmain<>{inti; doublescore,min;printf<"请输入10个学生成绩:\n">; scanf<"%lf",&score>; min=score;//给min赋初值for<i=1;i<10;i++>{ scanf<"%lf",&score>; if<min>score> min=score; } printf<"min=%g\n",min>;}或解:#include<stdio.h>voidmain<>{inti; doublescore,min;printf<"请输入10个学生成绩:\n">; for<i=1;i<=10;i++>{ scanf<"%lf",&score>; if<i==1> min=score; if<min>score> min=score; } printf<"min=%g\n",min>;}12.青年歌手大奖赛中,10个评委给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分。计算并输出选手张三的得分。〔注:如果最高分或最低分有多个相同时,去掉其中一个解:#include<stdio.h>voidmain<>{inti; doublescore,min,max,sum,aver;printf<"请输入10个评委给张三的评分:\n">; scanf<"%lf",&score>; min=max=sum=score;for<i=1;i<10;i++>{ scanf<"%lf",&score>; if<min>score> min=score;if<max<score> max=score; sum+=score; } aver=<sum-max-min>/8; printf<"张三得分:%g\n",aver>;}或解:#include<stdio.h>voidmain<>{inti; doublescore,min,max,sum=0,aver;printf<"请输入10个评委给张三的评分:\n">; for<i=1;i<=10;i++>{ scanf<"%lf",&score>; if<i==1> max=min=score; if<min>score> min=score;if<max<score> max=score; sum+=score; } aver=<sum-max-min>/8; printf<"张三得分:%g\n",aver>;}13.用循环语句输出26个大写字母及它们的ASCII码值。解:#include<stdio.h>voidmain<>{charc; for<c=’A’;c<=’Z’;c++>printf<"%c\t%d\n",c,c>;}或解:#include<stdio.h>voidmain<>{charch='A';while<ch<='Z'>{printf<"<%c,%d>\n",ch,ch>;ch++;}}14.输出所有的"水仙花数",水仙花数是指一个三位数,其各位数字的立方和等于其本身,如:153=13+53+33。解:#include<stdio.h>voidmain<>{intx,a,b,c;printf<"水仙花数:\n">; for<x=100;x<1000;x++>{ a=x/100; b=x%100/10; c=x%10;if<x==a*a*a+b*b*b+c*c*c> printf<"%d\t",x>; } printf<"\n">;}15.求算式40项的和。解:#include<stdio.h>voidmain<>{inti; doublesum=0,flag=1;for<i=1;i<=40;i++>{ sum+=flag/i; flag=-1*flag;//或flag=-flag } printf<"sum=%g\n",sum>;}16.输出一张华氏与摄氏温度对照表,将华氏温度从30°~40°F之间的每度转换对应的摄氏温度输出。张华氏转化为摄氏温解:#include<stdio.h>voidmain<>{doublef,c; for<f=30;f<=40;f++>{ c=5.0/9*<f-32>; printf<"%g\t%g\n",f,c>; } }*17.求数列的和。设数列的首项为81,以后各项为前一项的平方根〔如81,9,3,1.732,…,求前20项和。解:#include<stdio.h>#include<math.h>voidmain<>{inti; doublesum=0,a=81; for<i=1;i<=20;i++>{ sum+=a; a=sqrt<a>;//下一项为前一项的平方根 } printf<"sum=%g\n",sum>;}18.输出一个如下的乘法口诀表。1×1=11×2=22×2=41×3=32×3=63×3=9………1×9=92×9=183×9=27………9×9=81解:#include<stdio.h>voidmain<>{inti,j; for<i=1;i<=9;i++>{for<j=1;j<=i;j++> printf<"%d*%d=%d\t",j,i,i*j>; printf<"\n">;}}*19.猴子吃桃子。第1天猴子吃掉桃子总数一半多一个,第2天又将剩余的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第十天准备吃的时候只剩下一个桃子。请问第1天开始吃的时候桃子的总数。//递推公式x=2*<x+1>解:#include<stdio.h>voidmain<>{intn,x;x=1;//第10天的挑子数for<n=9;n>=1;n-->{x=2*<x+1>;//计算第n天的桃子数}printf<"第1天吃前挑子总数=%d\n",x>;}*20.用循环体编程序,分别输出如下两个图形,如图4.15所示。*左图解:#include<stdio.h>voidmain<>{inti,j;for<i=1;i<=4;i++>{for<j=1;j<=8-2*i;j++>putchar<''>;for<j=1;j<=2*i-1;j++>printf<"%c",'*'>;putchar<'\n'>;}}右图解:#include<stdio.h>voidmain<>{inti,j;for<i=1;i<=4;i++>//图上半部分{for<j=1;j<=8-2*i;j++>putchar<''>;for<j=1;j<=2*i-1;j++>printf<"%c",'*'>;putchar<'\n'>;}for<i=3;i>=0;i-->//图下半部分{for<j=1;j<=8-2*i;j++>putchar<''>; for<j=1;j<=2*i-1;j++>printf<"%c",'*'>;putchar<'\n'>;}}21.输入正整数a、b,输出a、b之间所有素数之和。解:#include<stdio.h>voidmain<>{inti,j,a,b,sum=0;printf<"请输入ab<a≤b>\n">;scanf<"%d%d",&a,&b>;for<i=a;i<=b;i++>{for<j=2;j<=i/2;j++> if<i%j==0>break;//此时可判定i不是素数 if<j>i/2&&i!=1>sum+=i;//满足此条件表示除1和自身外,其它数均不能整除i} printf<"%d至%d之间的素数和=%d\n",a,b,sum>;}或解:#include<stdio.h>voidmain<>{inti,j,a,b,sum=0,flag;printf<"请输入ab<a≤b>\n">;scanf<"%d%d",&a,&b>;for<i=a;i<=b;i++>{flag=1;//要判别当前i是否素数,先将标志变量赋值为1for<j=2;j<=i/2;j++> if<i%j==0>{flag=0;break;}//此时可判定i不是素数,退出循环 if<flag==1&&i!=1> sum+=i;//满足此条件表示除1和自身外,其它数均不能整除i} printf<"%d至%d之间的素数和=%d\n",a,b,sum>;}*22.当x为–2,–1.5,–1,…,1.5,2时,求函数f〔x=x2–3.14x–6的解所取的最大值、最小值。解:#include<stdio.h>voidmain<>{doublex,y,max,min;max=min=<-2>*<-2>-3.14*<-2>-6;//f<-2>作为max、min的初始值for<x=-1.5;x<=2;x+=0.5>{y=x*x-3.14159*x-6;if<y>max>max=y;elseif<y<min>min=y;}printf<"max=%f,min=%f\n",max,min>;}*23.当n取值在–39~40范围内时,判断表达式n2+n+41的值是否都是素数。解:#include<stdio.h>#include<math.h>voidmain<>{inti,j,y,count=0;for<i=-39;i<=40;i++>{y=i*i+i+41;for<j=2;j<=sqrt<y>;j++>if<y%j==0> {printf<"当i为%d时,y=%d,结论不成立!\n",i,y>;count++;break;} }if<count!=0>printf<"共有%d个i值,使结论不成立!\n",count>; elseprintf<"结论成立,都是素数!\n">;}*24.用区间对分法求x2+xsinx–5=0在区间[0,5]内的一个实根〔设ε=10–5。[说明〔1c=<a+b>/2。〔2若|f<c>|<ε或|b-a|<ε,则输出c作为近似解,并终止程序执行。〔3如果f〔a·f〔c<0,则b=c;否则a=c,再次执行第〔1步。解:#include<stdio.h>#include<math.h>voidmain<>{floata,b,c;a=0;b=5;//初始化区间a、b值do{c=<a+b>/2;//计算a、b区间的中值if<<a*a+a*sin<a>-5>*<c*c+c*sin<c>-5><0> b=c;//以c代替区间b值 elsea=c;//以c代替区间a值}while<fabs<c*c+c*sin<c>-5>>=1e-5&&fabs<b-a>>=1e-5>;printf<"%f\n",c>;}习题5一、单项选择题1.下列叙述中,正确的叙述项是〔。A.定义函数时,必须要有形参B.函数中可以没有return语句,也可以有多条return语句C.函数f可以用f<f<x>>形式调用,这种调用形式是递归调用D.函数必须有返回值2.下列叙述中,不正确的叙述项是〔。A.函数调用时,形参变量只有在被调用时才被创建〔分配存储单元ADVANCEB.函数调用时,实参可以是常量、变量或表达式C.定义变量时,省略对变量的存储类别定义,则变量是自动型变量D.语句return<a,b>;则函数可以返回两个值3.传值调用的特点是〔。A.实参传给形参变量的数据是地址B.在函数中形参变量值改变后,不改变实参变量的值C.在函数中形参变量值改变后,实参变量的值随之也改变D.实参必须是变量4.如果在函数中定义一个变量,有关该变量作用域正确的是〔。A.只在该函数中有效 B.在该文件中有效C.在本程序中有效D.为非法变量5.根据下面函数print的定义,选出调用函数print<5378>的值是〔。voidprint<longn>{if<n==0>return;else{print<n/10>;printf<"%d",n%10>;return;}}A.5378B.8735C.3578D.8753*6.根据下面函数f,选出f<f<3>>的值是〔。intf<intx>{staticintk=0;x=x+k;k--;returnx;}A.5B.3 C.2 D.4解:<1>B<2>D<3>B<4>A<5>A<6>C二、写出下列程序的输出结果*1.#include<stdio.h>intf1<int,int>,f11<int>;voidf2<int>;voidmain<>{inti,j;for<i=0;i<5;i++>{f2<<5-i>*3>;for<j=0;j<=i;j++>printf<"%3d",f1<i,j>>;putchar<'\n'>;}}intf1<intm,intn>{returnf11<m>/f11<n>/f11<m-n>;}intf11<intk>{if<k<=1>return1;returnk*f11<k-1>;}voidf2<intn>{for<inti=1;i<=n;i++>putchar<''>;}解:111121133114641*2.#include<stdio.h>intf<intm,intn>{if<m%n==0>returnn;elsereturnf<n,m%n>;}voidmain<>{printf<"%d\n",f<840,48>>;}解:243.#include<stdio.h>voidfun<inta,intb,intc,intadd,intmult>{add=a+b+c;mult=a*b*c;printf<"add=%dmult=%d\n",add,mult>;}voidmain<>{intx,y;x=y=0;fun<9,12,-4,x,y>;printf<"add=%dmult=%d\n",x,y>;}解:add=17mult=-432add=0mult=04.#include<stdio.h>intadd,mult;voidfun<inta,intb,intc,>{add=a+b+c;mult=a*b*c;printf<"add=%dmult=%d\n",add,mult>;}voidmain<>{fun<9,12,-4>;printf<"add=%dmult=%d\n",add,mult>;}解:add=17mult=-432add=17mult=-4325.#include<stdio.h>inta;voidmain<>{inti;voidfun<>;for<i=1;i<=4;i++>{a++;printf<"Inmain:a=%4d",a>;fun<>;}}voidfun<>{inta=0;a++;printf<"Infun:a=%d\n",a>;}解:Inmain:a=1Infun:a=1Inmain:a=2Infun:a=1Inmain:a=3Infun:a=1Inmain:a=4Infun:a=16.#include<stdio.h>voidmain<>{intx=2,i;intf<intx>;for<i=0;i<3;i++>printf<"%4d",f<x>>;}intf<intx>{inty=0;staticz=0;y++;z++;return<x+y+z>;}解:456三、程序填空题1.输入若干个正整数,判断每个数从高位到低位各位数字是否按值从小到大排列。其中input〔返回输入的数据,且保证输入的数据是一个正整数。fun1〔函数是判断正整数n是否按数字从小到大排列。#include<stdio.h>intinput<>;intfun1<intm>;voidmain<>{intn;if<fun1<n>==1>printf<"%d中各位数字按是从小到大排列\n",n>;}intinput<>{intn;printf<"请输入n:\n">;scanf<"%d",&n>; if<n>0>; do{printf<"n必须正整数,请重新输入n:\n">;scanf<"%d",&n>; }while<n<0>;returnn; }intfun1<>{intk;k=m%10;while<m!=0>if<m/10%10>k>return0;else{k=m%10;}return1;}解:n=input<>;returnnintmm=m/102.输入一个末尾数非0的正整数,输出它的逆序数。其中,input是数据输入函数,reverse是数据逆序函数。#include<stdio.h>longinput<>;longreverse<longn>;voidmain<>{intn;n=input<>;printf<"逆序数是:%d\n",>;}longinput<>{longn;printf<"请输入n:\n">;scanf<"%d",&n>; if<>returnn; do{printf<"n必须正整数,且末尾数非0,请重新输入n:\n">; }while<n<0||n%10==0>;returnn; }longreverse<longn>{longk=0;while<n>{n/=10;}returnk;}解:reverse<n>n>0&&n%10!=0scanf<"%d",&n>k=k*10+n%10五、编程题1.输入一个x,输出下面分段函数f<x>的值。要求将分段函数的计算定义成函数。解:#include<stdio.h>intf<doublex>//函数定义{inty=0;if<x>0> y=1;elseif<x==0>y=0;elsey=-1;returny;}voidmain<>{doublex;inty;scanf<"%lf",&x>;y=f<x>;//函数调用printf<"f<%g>=%d\n",x,y>;}2.输入一个正整数,输出该数的各个数字之和。要求编写函数,计算整数的各个数字之和。解:#include<stdio.h>intsum<inta>{ints=0;while<a!=0>{s+=a%10;a=a/10;}returns;}voidmain<>{intx;scanf<"%d",&x>;printf<"%d\n",sum<x>>;}3.编写函数,判断一个正整数a是否为完数,如果是完数,函数返回值为1;否则为0。〔完数:一个数的所有因子之和等于该本身,如6、28都是完数;6=1+2+3;28=1+2+4+7+14。解:#include<stdio.h>intwanshu<intn>{inti,a=0;for<i=1;i<=n/2;i++> if<n%i==0>a+=i;if<a==n>return1;elsereturn0;}voidmain<>{intn;scanf<"%d",&n>;if<wanshu<n>==1>printf<"%d是完数\n",n>;elseprintf<"%d不是完数\n",n>;}4.输入三个数,输出它们的最小值。要求定义一个函数,返回两个数的最小值。解:#include<stdio.h>doublemin<doublex,doubley>{if<x<y>returnx;elsereturny;}voidma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江专用2025版高考地理大三轮复习5选择题专练五
- 四年级语文上册第七单元26那片绿绿的爬山虎拓展阅读母亲肖复兴素材鲁教版
- 广东省廉江市实验学校高中政治2.2价格变动的影响练一练必修1
- 北京专版2024年中考生物复习主题十降地生活课时训练28降地生活
- 江苏专版2024中考道德与法治复习方案第一部分七上第01课时成长的节拍提分训练
- 跨文化商务沟通与行政礼仪
- 阅读开启智慧之门的关键
- 超声科诊断技术的教育与实践
- 广西2025年02月广西崇左市左江治旱工程管理中心招考2名工作人员笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 猫寄养协议合同范本
- 机房建设验收报告
- 环境岩土工程学课件-东南大学-潘华良境岩土工程学概论-9大环境岩土工程问题
- 公路养护的档案管理-公路养护档案的内容及分类
- 武汉大学《819宏微观经济学》知识板块归纳与重点名词解释大全
- 脊柱内镜应用与进展
- 学校食品安全会议记录内容
- 中国古代文物赏析
- 2022年江苏省录用公务员笔试《公安专业科目》试题(网友回忆版)
- 光伏电站螺旋地桩承载力计算软件
- 医用耗材配送服务方案
- 风力发电场建设项目初步(概要)设计
评论
0/150
提交评论