版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C程序设计复习题集目录一、C语言程序设计习题参考答案…………………1二、C语言程序设计复习题=1\*GB1⒈单项选择题…………………41=2\*GB1⒉填空题…………………45=3\*GB1⒊写输出结果题…………………46=4\*GB1⒋程序填空题…………………53=5\*GB1⒌编程题……………………61三、C语言程序设计复习题答案=1\*GB1⒈单项选择题……………………62=2\*GB1⒉填空题……………………63=3\*GB1⒊写输出结果题……………………63=4\*GB1⒋程序填空题……………………64=5\*GB1⒌编程题(参考)……………………65四、C语言程序设计模拟试卷、参考答案=1\*GB1⒈试卷一……………74=2\*GB1⒉试卷二……………77浙江工业大学计算中心编印
C程序设计习题参考答案习题一1.填空题=1\*GB2⑴计算机程序设计语言按其发展可分为三类,即机器语言、汇编语言和高级语言。=2\*GB2⑵C程序是由函数构成的,一个C程序中至少包含1个main函数。因此,函数是C程序的基本单位。=3\*GB2⑶C程序注释是由/*和*/所界定的文字信息组成的。=4\*GB2⑷函数体一般包括函数首行和函数体。=5\*GB2⑸在任何C程序中都必须且只能有一个主函数,主函数名必须为main。2.判断下列各个叙述的正确与否=1\*GB2⑴C程序的执行总是从该程序的main函数开始,在main函数最后结束【√】=2\*GB2⑵C程序的注释部分可以出现在程序中任何位置,它对程序的编译和运行不起任何作用,但可以增加程序的可读性【√】=3\*GB2⑶由“/*”与“*/”界定的注释必须在同一行【╳】=4\*GB2⑷通过了编译、连接的程序就是正确的程序【╳】=5\*GB2⑸有计算结果输出的程序一定是正确的程序【╳】=6\*GB2⑹编译错误是语法错误,运行结果错误是逻辑错误【√】=7\*GB2⑺编译时在信息窗口出现包含“error”的信息,说明程序存在警告性错误【╳】=8\*GB2⑻源程序每次修改后,都必须重新编译、连接【√】3.简答题=1\*GB2⑴算法的含义、特点是什么?解答:算法是解题方法的精确描述。有穷性、确定性、有多或零个输入、有1或多个输出、有效性。=2\*GB2⑵写出一个C程序的基本结构。由编译预处理命令、注释、1个main和若干个自定义函数构成,函数格式如下:函数类型函数名(类型标识符形参,类型标识符形参,...){类型声明语句;执行语句部分;}=3\*GB2⑶写出在你使用的计算机系统上,进入C环境以及运行、调试程序的简要步骤。=4\*GB2⑷输入x后计算其正弦值的源程序如下。编译信息是否表示有致命性错误?应如何修改?解答:致命性错误为第6行函数sin未声明,应加入编译预处理命令#include<math.h>4.编程题=1\*GB2⑴请上机调试、运行本章课本上C语言程序例题4~6(注释部分可以不必输)=2\*GB2⑵仿照例6编程,输入两个变量后,输出其中较大的值。#include<stdio.h>voidmain(){inta,b;printf("请输入A,B的值:\n");scanf("%d%d",&a,&b);if(a>b)printf("%d\n",a);elseprintf("%d\n",b);}=3\*GB2⑶仿照例题编程,输入圆柱体的半径和高,计算并输出圆柱体的体积。#include<stdio.h>voidmain(){floatr,h,v;printf("请输入半径、高的值:\n");scanf("%f%f",&r,&h);v=r*r*3.141593*h;printf("%f\n",v);}习题二1.将下列程序上机运行,写出你所使用的C语言处理系统中short、int以及long类型数据的字长和数值范围。#include<stdio.h>voidmain(){printf("short类型数据的字长为:%d\n",sizeof(short));printf("int类型数据的字长为:%d\n",sizeof(int));printf("long类型数据的字长为:%d\n",sizeof(long));}解答:VC++环境下,分别为2、4、42.仿照题1编程,测试float、double类型数据的字长。#include<stdio.h>voidmain(){printf("float类型数据的字长为:%d\n",sizeof(float));printf("double类型数据的字长为:%d\n",sizeof(double));}3.判断下列各个叙述的正确与否。=1\*GB2⑴C的long类型数据可以表示任何整数【╳】=2\*GB2⑵任何变量都必须要声明其类型【√】=3\*GB2⑶C的任何类型数据在计算机内都是以二进制形式存储的【√】=4\*GB2⑷scanf函数中的格式符“%d”不能用于输入实型数据【√】=5\*GB2⑸格式符中指定宽度时,从缓冲区中读入的字符数完全取决于所指定的宽度【√】=6\*GB2⑹按格式符“%d”输出float类型变量时,截断小数位取整后输出【╳】=7\*GB2⑺按格式符“%6.3f”输出i(i=123.45)时,输出结果为23.450【╳】=8\*GB2⑻scanf函数中的格式符“%f”能用于输入double类型数据【╳】4.指出下列各项中那些是C的常量,对合法的C常量请同时指出其类型。10,150007-0x3dπ1e0e1o7o8'x''xo'1.52e0.5sin(3)0xf16"X"'\007'1.414E+22.54'\\''a'解:007整型,-0x3d整型,1e0实型,'x'字符型,0xf16整型,"X"字符串'\007'字符型,1.414E+2实型,2.54实型,'\\'字符型,'a'字符型5.指出下列各项中那些是C的标识符(可作变量名)。x_1X_2Highprintfβ3DSi/je2-e2countIntnumber$23next_解:x_1、X_2、High、e2、count、Int、number、next_6.根据条件,写出下列各题的输出结果。=1\*GB2⑴inti=234,j=567;函数printf("%d%d\n",i,j)的输出结果是234567。=2\*GB2⑵inti=234;floatx=-513.624;函数printf("i=%5dx=%7.4f\n",i,x)的输出结果是i=234x=-513.6240。=3\*GB2⑶floatalfa=60,pi=3.1415926535626;函数printf("sin(%3.0f*%f/180)\n",alfa,pi)的输出结果是sin(60*3.141592/180)。=4\*GB2⑷charch='$',floatx=153.45;函数printf("%c%-8.2f\\n",ch,x)的输出结果是$153.45\n。=5\*GB2⑸intd=27;函数printf("%-5d,%-5o,%-5x\n",d,d,d)的输出结果是27,34,1b。=6\*GB2⑹floatx1=13.24,x2=-78.32;函数printf("x(%d)=%.2fx(%d)=%.2f\n",1,x1,2,x2)的输出结果是x(1)=13.24x(2)=-78.327.根据下列条件写出变量i1(int类型)、c1(char类型)、f1(float类型)、d1(double类型)的当前值。=1\*GB2⑴执行scanf("%d%c%f%lf",&i1,&c1,&f1,&d1)时输入52$9.173.1415926535后。i1为52,c1为'$',f1为9.17,d1为3.1415926535=2\*GB2⑵执行scanf("%d$%c%f%lf",&i1,&c1,&f1,&d1)时输入52$9.173.1415926535后。i1为52,c1为'9',f1为0.17,d1为3下列源程序输入x、y后,输出x的y次方。运行时无编译、连接错误,但输入不同格式的两组数据输出结果却不同,哪一组是对的?请说明原因。解答:第1组输入数据错误,因为格式串中有“,”所以键盘输入数据x、y之间也一定以逗号为间隔符。9.写出下列程序运行时输入345的输出结果。#include<stdio.h>#include<math.h>输出结果:边长为3.00,4.00,5.00的三角形面积为6.00voidmain(){floata1,a2,a3,s,d;scanf("%f%f%f",&a1,&a2,&a3);s=(a1+a2+a3)/2;s=sqrt(s*(s-a1)*(s-a2)*(s-a3));printf("边长为%.2f,%.2f,%.2f的三角形面积为:%-10.3f\n",a1,a2,a3,s);}10.编程题=1\*GB2⑴编程,用getchar函数接收2个字符,用putchar函数输出这2个字符。解答:#include<stdio.h>voidmain(){charx;x=getchar();putchar(x);x=getchar();putchar(x);}=2\*GB2⑵编程,用scanf函数输入1个10进制整数、1个单精度浮点数、1个双精度浮点数,并通过printf函数把输入的3个数分别输出。解答:#include<stdio.h>voidmain(){intk;floatx;doubled;scanf("%d%f%lf",&k,&x,&d);printf("%d,%f,%f\n",k,x,d);}=3\*GB2⑶编程,输入1个整数,然后分别以8进制、10进制、16进制形式输出该数。解答:#include<stdio.h>voidmain(){intx;scanf("%d",&x);printf("%d,%o,%x\n",x,x,x);}习题三1.根据下列数学式,写出C的算术表达式。解答:-(a*a+pow(b,3))*pow(y,4)(sqrt(2)+100)/(atan(x)+3.141593)(5+b)/((a+6)/(b+5)-c*d)2.按照要求写出下列C的表达式。=1\*GB2⑴数学式(x+1)e2X所对应的C算术表达式。=2\*GB2⑵将double类型变量x的整数部分与y的小数部分相加的算术表达式。=3\*GB2⑶将非零实型变量x四舍五入到小数点后2位的算术表达式。=4\*GB2⑷为变量s赋值:取变量x的符号,取变量y的绝对值。=5\*GB2⑸条件“-5≤x≤3”所对应的C逻辑表达式。=6\*GB2⑹a、b是字符变量,已知a的值为大写字母、b的值为小写字母,写出判断a、b是否为同一字母的逻辑表达式=7\*GB2⑺int类型变量a、b均为两位正整数,写出判断a的个位数等于b的十位数、且b的个位数等于a的十位数的逻辑表达式。=8\*GB2⑻计算变量a、b中较小值的条件表达式。=9\*GB2⑼判断变量ch是英文字母的表达式;=10\*GB2⑽若字符变量ch的值为大写字母,则重新赋值为对应的小写字母。解答:=1\*GB2⑴(x+1)*exp(2*x)=2\*GB2⑵(int)x+y-(int)y=3\*GB2⑶(int)(x*100+fabs(x)/x*0.5)/100.0=4\*GB2⑷s=fabs(y)*x/fabs(x)=5\*GB2⑸-5<=x&&x<=3=6\*GB2⑹b-a=='a'-'A'=7\*GB2⑺a%10==b/10&&b%10==a/10=8\*GB2⑻a<b?a:b=9\*GB2⑼isalpha(ch)=10\*GB2⑽ch=isupper(ch)?ch:ch+'a'-'A'3.声明“intk=12;floatx=9.5;doubled=2.7;charzf='B';”,写出下列表达式值。=1\*GB2⑴(int)x%k*d=2\*GB2⑵k+5.6<x<d=3\*GB2⑶10==9+1=4\*GB2⑷!k&&x>d=5\*GB2⑸zf='B'=6\*GB2⑹zf=='B'解答:=1\*GB2⑴24.3,=2\*GB2⑵1,=3\*GB2⑶1,=4\*GB2⑷0,=5\*GB2⑸'B',=6\*GB2⑹14.填空题=1\*GB2⑴声明“floatx=2.5,y=4.7;inta=7;”,表达式x+a%3*(int)(x+y)%2/4值为2.5。=2\*GB2⑵设整型变量a、b值分别为10与20,计算c=(a%2==0)?a:b后,c的值为10。=3\*GB2⑶设整型变量d的值为7,表达式“3<d<5”的值为1(3<d为1、1<5为1)。=4\*GB2⑷已知ch是字符变量。如果ch是小写英文字母,则把它改成大写英文字母,写作:if(islower或ch>='A'&&ch<='z')ch=ch-32;=5\*GB2⑸下列程序的输出结果是(0.00,1)。#include<stdio.h>voidmain() {inty;doubled=3.4,x;x=(y=d/2.0)/2;printf("(%0.2f,%d)",x,y);}=6\*GB2⑹判断a、b是否绝对值相等而符号相反的逻辑表达式为a==-b。=7\*GB2⑺判断变量a、b中必有且只有一个为0的逻辑表达式为a*b==0&&a+b!=0。=8\*GB2⑻c初值为3,计算赋值表达式“a=5+(c+=6)”后表达式值、a、c的值依次为14、14、9。=9\*GB2⑼求解赋值表达式“a=(b=10)%(c=6)”后,表达式值、a、b、c的值依次为4、4、10、6。=10\*GB2⑽求解逗号表达式“x=a=3,6*a”后,表达式值、x、a的值依次为18、3、3。=11\*GB2⑾若a=13、b=25、c=-17,表达式“((y=(a<b)?a:b)<c)?y:c的值为-17。=12\*GB2⑿若s='d',执行语句“s=(s>='a'&&s<='z')?s-32:s;”后字符变量s的值为'D'。5.写出下列程序的输出结果。程序=1\*GB2⑴#include<stdio.h>voidmain(){unsignedk,n;scanf("%u",&n);k=n%10*10+n/10;printf("n=%dk=%d\n",n,k);}运行时输入数据为:6972输出结果为:n=69k=96程序=2\*GB2⑵#include<stdio.h>voidmain(){intx=40,y=4,z=4;x=y==z;printf("%d%d%d\n",x,y,z);x=x==(y=z);printf("%d%d%d\n",x,y,z);}输出结果为:144044程序=3\*GB2⑶#include<stdio.h>voidmain(){intx,y,z;x=y=2;z=3;y=x++-1;printf("%d\t%d\t%d\t",x,y,z);y=--z+1;printf("%d\t%d\t%d\n",x,y,z);x=y=z=0;++x&&++y||++z;printf("%d\t%d\t%d\t",x,y,z);--x&&++y&&++z;printf("%d\t%d\t%d\n",x,y,z);}输出结果为:3133321100106.编程,输入长方形的长和宽,求长方形的面积和周长并输出。解答:#include<stdio.h>voidmain(){floata,b,x,y;scanf("%f%f",&a,&b);x=a*b;y=2*(a+b);printf("面积=%.4f周长=%.4f\n",x,y);}7.编程,输入3个字符后,按各字符ASCII码从小到大的顺序输出这些字符。解答:#include<stdio.h>voidmain(){chara,b,c,x,y,z;scanf("%c%c%c",&a,&b,&c);x=(x=a<b?a:b)<c?x:c;z=(z=a>b?a:b)>c?z:c;y=a+b+c-x-z;printf("%c%c%c\n",x,y,z);}8.编程,输入3个整数,要求按绝对值从小到大输出它们的值。解答:#include<stdio.h>#include<math.h>//也可以用题7的做法voidmain(){intx,y,z,a;scanf("%d%d%d",&x,&y,&z);if(fabs(x)>fabs(y)){a=x;x=y;y=a;}if(fabs(x)>fabs(z)){a=x;x=z;z=a;}if(fabs(y)>fabs(z)){a=y;y=z;z=a;}printf("%d\t%d\t%d\n",x,y,z);}9.编程,输入3个数,计算这三个数的平均值,并求出与平均值最接近的值。解答:#include<stdio.h>#include<math.h>voidmain(){floata,b,c,v,x;scanf("%f%f%f",&a,&b,&c);v=(a+b+c)/3;x=a;if(fabs(b-v)<fabs(x-v))x=b;if(fabs(c-v)<fabs(x-v))x=c;printf("%f\n",x);}10.编程,输入1个3位正整数,输出其个位、十位、百位反序的数(如123反序数为321)。解答:#include<stdio.h>voidmain(){intn,m;scanf("%d",&n);m=n%10*100+n%100/10*10+n/100;printf("%d\t%d\n",n,m);}习题四1.填空题=1\*GB2⑴求1至100的和,写作for(s=0,i=1;i<=100;++i)s+=i;=2\*GB2⑵执行程序段“y=1;x=5;while(x--);y++;”后,y的值为2。=3\*GB2⑶顺序输出26个大写英文字母的循环结构,写作for(ch='A';ch<='Z';ch++)putchar(ch);=4\*GB2⑷输入若干个以问号结束的字符,同时输出这串字符(不包括问号),写作while((ch=getchar())!='?')putchar(ch);=5\*GB2⑸循环程序段“k=5;for(;k<0;k--);”执行后,k的值为5。2.改写下列程序段,去掉continue语句,使结构更为合理。=1\*GB2⑴while(A){解答:while(A)if(!B)C;if(B)continue;C;}=2\*GB2⑵do{解答:while(A){B;C;}if(!A)continue;elseB;C;}while(A);3.写出下列程序的输出结果程序=1\*GB2⑴#include<stdio.h>voidmain(){charx;intn=0,k=0;while((x=getchar())!='.'){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);}运行时输入:atheasdfthethethere.输出结果:3程序=2\*GB2⑵#include<stdio.h>输出结果:A#include<ctype.h>BBBvoidmain()CCCCC{chara,b,x;inti;DDDDDDDwhile(!isupper(x=getchar()));EEEEEEEEEfor(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')}}运行时输入:35dffE4.程序填空题,根据下列各题题意,将程序补充完整。=1\*GB2⑴下列程序在输入m后求n使n!≤m≤(n+1)!(例如输入726,应输出n=6)#include<stdio.h>voidmain(){intm,n,jc=1;scanf("%d",&m);for(n=2;jc<=m;n++)jc=jc*n;printf("n=%d\n",n-2);}=2\*GB2⑵下列程序输出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(a%i==0)b+=i;c=1;for(i=2;i<=b/2;i++)if(b%i==0)c+=i;if(c==a&&a!=b)printf("%d%d\n",a,b);}}5.根据下列各小题题意编程。=1\*GB2⑴编程,输入x后按下式计算y值并输出。解答:#include<stdio.h>#include<math.h>voidmain(){floatx,y;scanf("%f",&x);if(x>=0&&x<=1)y=x+sin(x);elsey=x+sin(x);printf("%f\n",y);}=2\*GB2⑵输入一个百分制的成绩t后,按下式输出它的等级,要求分别写作if结构和switch结构。等级为:90~100为A,80~89为B,70~79为C,60~69为D,0~59为E。解答:#include<stdio.h>voidmain(){intt;charx;scanf("%d",&t);if(t>=90)x='A';switch((int)t/10){elseif(t>=80)x='B';case9:case10:x='A';break;elseif(t>=70)x='C';case8:x='B';break;elseif(t>=60)x='D';case7:x='C';break;elsex='E';case6:x='D';break;printf("%c\n",x);default:x='E';break;}}=3\*GB2⑶输入10个学生的成绩,输出最低分数和最高分数。解答:#include<stdio.h>voidmain(){intx,max=0,min=101,i;for(i=1;i<=10;i++){scanf("%f",&x);if(x>max)max=x;if(x<min)min=x;}printf("%f\n",y);}=4\*GB2⑷按公式1+1/1!+1/2!+1/3!+...+1/n!+...计算e的值,要求误差小于给定的ε。解答:#include<stdio.h>voidmain(){floats=2,eps,t=1;inti=2;scanf("%f",&eps);while(t>=eps){t/=i++;s+=t;}printf("%f\n",s);}=5\*GB2⑸统计输入的若干个数中负数、零及正数的个数(输入^z控制循环结束)。解答:#include<stdio.h>voidmain(){floatx;intzs=0,lin=0,fs=0;while(scanf("%f",&x)!=EOF)if(x>0)zs++;elseif(x<0)fs++;elselin++;printf("正数%d个,零%d个,负数%d个\n",zs,lin,fs);}=6\*GB2⑹输入k,利用下列迭代公式计算k1/3的近似值,要求计算结果具14位有效位数。解答:#include<stdio.h>#include<math.h>voidmain(){intk;doublex,x0;scanf("%d",&k);x=1;while(1){x0=x;x=x0+(k/(x0*x0)-x0)/3;if(fabs(x-x0)<1e-14){printf("k=%d,x=%.14f\n",k,x);break;}}}=7\*GB2⑺编程,输入n后,计算下列表达式的值。解答:#include<stdio.h>#include<math.h>voidmain(){inti,n;floaty=0;scanf("%d",&n);for(i=n;i>=1;i--)y=sqrt(i+y);printf("%f\n",y);}=8\*GB2⑻编程,输入x、n后,计算下列表达式的值。解答:#include<stdio.h>voidmain(){floatx,y,a;inti,n;scanf("%f%d",&x,&n);y=0;for(i=0;i<=n;i++){scanf("%f",&a);y=y*x+a;}printf("y=%.6f\n",y);}=9\*GB2⑼当x为-2、-1.5、...、1.5、2时,求f(x)=x2-3.14·x-6所取最大值、最小值。解答:#include<stdio.h>voidmain(){floatx,y,max,min;x=-2;max=min=x*x-3.14159*x-6;for(x=-1.5;x<=2;x=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);}=10\*GB2⑽编程,输入两个正整数x和y,求它们的最大公约数和最小公倍数。解答:#include<stdio.h>voidmain(){intx,y,a;scanf("%d%d",&x,&y);a=x;while(a%y!=0)a+=x;printf("最小公倍数%d,最大公约数%d\n",a,x*y/a);}=11\*GB2⑾编程,输出1~5000之间的同构数(就是出现在其平方数右边的那些数,如5、6、25均为同构数)。解答:#include<stdio.h>#include<math.h>voidmain(){intk,kk,n;for(k=1;k<=5000;k++){n=log10(k)+1;if((k*k-k)%(int)pow(10,n)==0)printf("%d,%d\n",k,k*k);}}=12\*GB2⑿参照例25编程,输出下列形式的九九乘法表。解答:#include<stdio.h>voidmain(){inti,j;printf("");for(i=1;i<10;i++)printf("(%d)",i);putchar('\n');for(i=1;i<10;i++){ printf("(%d)",i); for(j=1;j<10;j++)printf("%4d",i*j); putchar('\n');}}=13\*GB2⒀当n取值在-39~40范围内时,判断表达式n2+n+41的值是否都是素数。解答:#include<stdio.h>#include<math.h>voidmain(){inti,j,y;for(i=-39;i<=40;i++){y=i*i+i+41;for(j=3;j<=sqrt(y);j+=2)if(y%j==0)break;if(j<=sqrt(y))printf("结论不成立!\n");elseprintf("%d\t%d\n",i,y);}}=14\*GB2⒁参照例24题编程,用梯形公式求下列定积分。解答:#include<stdio.h>#include<math.h>voidmain(){floata,b,h,s;inti,n;scanf("%f%f%f",&a,&b,&n);h=(b-a)/n;x=a;s=0.5*(sqrt(1+a*a*a)+sqrt(1+b*b*b));for(i=1;i<n;i++){x=x+h;s+=sqrt(1+x*x*x);}printf("%.10f\n",s*h);}=15\*GB2⒂用区间对分法求x2+x·sinx-5=0在区间[0,5]内的一个实根(设ε=10-5)。【说明】在[a,b]区间连续的函数f(x),若满足条件f(a)·f(b)<0,则必有a<ξ<b使得f(ξ)=0。求f(x)=0在[a,b]内一个实根的区间对分法基本步骤如下:=1\*GB3①c←(a+b)/2;=2\*GB3②|f(c)|<ε或|b-a|<ε则输出c作为近似解并终止程序执行;③如果f(a)·f(c)<0则b←c否则a←c,再次执行第=1\*GB2⑴步。解答:#include<stdio.h>#include<math.h>voidmain(){floata,b,c;a=0;b=5;do{c=(a+b)/2;if((a*a+a*sin(a)-5)*(c*c+c*sin(c)-5)<0)b=c;elsea=c;}while(fabs(c*c+c*sin(c)-5)>=1e-5&&fabs(b-a)>=1e-5);printf("%f\n",c);}习题五1.判断下列各个叙述的正确与否。=1\*GB2⑴函数的类型标识符缺省类型为void【√】=2\*GB2⑵函数中不可以没有return语句【╳】=3\*GB2⑶传值调用的形参只有在被调用时才被创建(分配存储单元)【√】=4\*GB2⑷传值调用时,实参不限于变量名,而可以是表达式【√】=5\*GB2⑸被定义为前向调用的函数,不必再声明其函数原型【√】=6\*GB2⑹函数f可以用f(f(x))形式调用,f是递归函数【╳】2.写出下列程序的输出结果。程序=1\*GB2⑴#include<stdio.h>voidprn(inta,intb,intc,intmax,intmin){max=(max=a>b?a:b)>c?max:c;min=(min=a<b?a:b)<c?min:c;printf("max=%dmin=%d\n",max,min);}voidmain(){intx,y;x=y=0;prn(19,23,-4,x,y);printf("max=%dmin=%d\n",x,y);}输出结果为max=23min=-4max=0min=0程序=2\*GB2⑵#include<stdio.h>intf(intm,intn){if(m%n==0)returnn;elsereturnf(n,m%n);}voidmain(){printf("%d\n",f(840,48));}输出结果为24程序=3\*GB2⑶#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('');}输出结果为1111211331146413.根据下列各题题意填空,将程序补充完整。=1\*GB2⑴输入若干个正整数,判断每个数从高位到低位各位数字是否按值从小到大排列。#include<stdio.h>intfun1(int);voidmain(){intn;while(scanf("%d",&n),n>0)if(fun1(n))printf("%d中各位数字按从小到大排列\n",n);}intfun1(intm){intk;k=m%10;while(m)if(m/10%10>k)return0;else{m=m/10;k=m%10;}return1;}=2\*GB2⑵函数f10_2可以显示形参变量所对应的二进制形式。下列程序的两行显示结果分别为“1011”、“100011”。#include<stdio.h>voidf10_2(intn) {if(n==0)return; else{ f10_2(n/2); printf("%d",n%2); } }voidmain(){f10_2(11);putchar('\n'); f10_2(35);putchar('\n');}4.根据下列各小题题意编程。=1\*GB2⑴编制函数,返回三个变量中的最大值。解答:floatf(floata,floatb,floatc){floatmax;max=(max=a>b?a:b)>c?max:c;returnmax;}=2\*GB2⑵编制函数,判断一个整数a是否是区间[1,b]之间的素数。解答:intf(inta,intb){inti;if(a>b||a<2)return0;for(i=2;i<=sqrt(a);i++)if(a%i==0)return0;return1;}=3\*GB2⑶编写函数,其返回值为整数n从右边开始的第k位数字的值。如digit(231456,3)返回4,digit(1456,5)返回0。解答:intf(intn,intk){inti;for(i=1;i<k;i++)n=n/10returnn%10;}=4\*GB2⑷输出1~1000之间的所有完数。要求自定义一个函数,功能是判断某个正整数是否为完数,如果是完数,函数返回值为1,否则为0(一个数的所有因子之和等于该本身,该数就是完数。如6、28都是完数;6=1+2+3;28=1+2+4+7+14)。解答:#include<stdio.h>intf(intn){inti,y=1;for(i=2;i<=n/2;i++)if(n%i==0)y=y+i;if(y==n)return1;elsereturn0;}voidmain(}{inti;for(i=1;i<=1000;i++)if(f(i))printf("%d\n",i);}=5\*GB2⑸定义函数,形参为两个int类型变量,功能是显示这两个数的最大公约数和最小公倍数。解答:voidf(intx,inty){inta=x;while(a%y!=0)a+=x;printf("最小公倍数%d,最大公约数%d\n",a,x*y/a);}=6\*GB2⑹多项式p(n,x)定义如下,编写递归函数求该多项式的值。解答:doublep(intn,doublex){if(n==0)return1;elseif(n==1)returnx;elsereturn((2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x))/n;}习题六1.单项选择题=1\*GB2⑴程序中调用了库函数exit,必须包含头文件【D】A、math.hB、string.hC、ctype.hD、stdlib.h=2\*GB2⑵程序中调用了库函数strcmp,必须包含头文件【B】A、math.hB、string.hC、ctype.hD、stdlib.h=3\*GB2⑶下列宏定义命令中,哪一个格式是正确的【C】A、#definepi=3.14159;B、definepi=3.14159C、#definepi3.14159D、#definepi(3.14159);=4\*GB2⑷定义带参数的宏计算两个表达式的乘积,下列定义中正确的是【C】A、#definemuit(u,v)u*vB、#definemuit(u,v)u*v;C、#definemuit(u,v)(u)*(v)D、#definemuit(u,v)=(u)*(v)=5\*GB2⑸宏定义为“#definediv(a,b)a/b”,对语句“printf("div(a,b)=%d\n",div(x+5,y-5));”作宏替换后为【A】A、printf("div(a,b)=%d\n",x+5/y-5);B、printf("a/b=%d\n",x+5/y-5);C、printf("a/b=%d\n",(x+5)/(y-5));D、printf("div(a,b)=%d\n",(x+5)/(y-5));2.填空题=1\*GB2⑴定义一个带参数的宏,若变量中的字符为大写字母则转换成小写字母#defineutol(ch)ch=ch>='A'&&ch<='Z'?ch+'a'-'A':ch=2\*GB2⑵定义一个带参数的宏,将两个参数的值交换#defineswap(a,b){doublet;t=a;a=b;b=t;}=3\*GB2⑶函数f定义如下,执行语句“m=f(5);”后,m的值应为8。intf(intk){if(k==0||k==1)return1;elsereturnf(k-1)+f(k-2);}=4\*GB2⑷函数f定义如下,执行语句“sum=f(3)+f(3);”后,sum的值应为6。intf(intm){staticinti=0;ints=0;for(;i<=m;i++)s+=i;returns;}=5\*GB2⑸对下列函数f,f(f(4))的值是5。intf(intx){staticintk=0;x+=k++;returnx;}3.写出下列程序的输出结果程序=1\*GB2⑴#include<stdio.h>#defineSx=y=z#defineP3(x,y,z)printf("x=%d\ty=%d\tz=%d\n",x,y,z)voidmain(){intx,y,z;S=1;++x||++y||++z;P3(x,y,z);S=1;++x&&++y||++z;P3(x,y,z);S=-1;++x||++y&&++z;P3(x,y,z);S=-1;++x&&++y&&++z;P3(x,y,z);}输出结果为x=2y=1z=1x=2y=2z=1x=0y=0z=-1x=0y=-1z=-1程序=2\*GB2⑵#include<stdio.h>intfunc1(){staticints=1;s+=2;returns;}intfunc2(){ints=1;s+=2;returns;}voidmain(){inti; for(i=0;i<2;i++)printf("func1=%d",func1());printf("\n");for(i=0;i<2;i++)printf("func2=%d",func2());}输出结果为func1=3func1=5func2=3func2=3程序=3\*GB2⑶#include<stdio.h>inti=1,reset(),next(int),last(int),New(int);voidmain(){inti,j;i=reset();for(j=1;j<=3;j++){printf("i=%d,j=%d\n",i,j);printf("next(%d)=%d\n",i,next(i));printf("last(%d)=%d\n",i,last(i));printf("new(%d+%d)=%d\n",i,j,New(i+j));}}intreset()输出结果为i=1,j=1{returni;}next(1)=1intnext(intj)last(1)=10{returnj=i++;}new(1+1)=12intlast(intj)i=1,j=3{staticinti=10;next(1)=2returnj=i--;last(1)=9}new(1+2)=13intNew(inti)i=1,j=3{intj=10;next(1)=3returni=j+=i;last(1)=8}new(1+3)=144.根据下列各小题题意编程。=1\*GB2⑴编程,输入3个数后输出其中绝对值最小的数。要求定义带参数的宏,计算两个数中绝对值最小的数。解答:#include<stdio.h>#include<math.h>#definemin(a,b)fabs(a)<fabs(b)?a:bvoidmain(){floata1,a2,a3,x;scanf("%f%f%f",&a1,&a2,&a3);x=min(a1,a2);x=min(x,a3);printf("%f\n",x);}=2\*GB2⑵编程,用梯形公式求函数f(x)=x2-sin-1x在[0,1]区间的定积分,要求用带参数的宏定义函数f(x)的计算公式。解答:#include<stdio.h>#include<math.h>#definef(x)(x)*(x)-asin(x)voidmain(){doublex=0,y=0;for(inti=1;i<=10;i++){y=y+(f(x)+f(x+0.1))/20;x=x+0.1;}printf("%f\n",y);}习题七1.单项选择题=1\*GB2⑴下列数组声明语句中,正确的是【C】A、inta[]={1,2,,4,5};B、chara[5]={A,B,C,D,E};C、inta[5]={1,2};D、chara[5]="Hello";=2\*GB2⑵数组声明语句为“inta[6];”,输入数组所有元素的语句应为【B】A、scanf("%d%d%d%d%d%d",a[6]);B、for(inti=0;i<6;i++)scanf("%d",a+i);C、for(inti=0;i<6;i++)scanf("%d",*a+i);D、for(inti=0;i<6;i++)scanf("%d",a[i]);=3\*GB2⑶数组声明语句为“floata[3][4];”,引用第3行第1列的元素写作【A】A、**(a+2)B、*(*a+2)C、a[3][1]D、*(a[3]+1)=4\*GB2⑷初始化多维数组的语句中,可以缺省的是【B】A、最后1个下标界B、第1个下标界C、第2个下标界D、以上都不对=5\*GB2⑸数组声明为“inty[4][3];”,表达式“*(y+2)+2-*y”的值为【D】A、10B、20C、16=6\*GB2⑹数组声明为“charstr1[20]="Borland",str2[]="C++5.0";”,调用函数“strcpy(str1,str2);”后,字符串str1的串长是【C】A、13B、15C、6=7\*GB2⑺数组声明为“charstr1[20]="Borland",str2[]="C++5.0";”,调用函数“strcat(str1,str2);”后,字符串str1的串长是【A】A、13B、15C、6=8\*GB2⑻表达式“strcmp("Windows98","Windows95")”的值为【C】A、0B、3C、12.填空题。=1\*GB2⑴未初始化的int类型数组,其各元素的值是0。=2\*GB2⑵初始化时没有被赋值的字符类型数组元素,它们的值为'\0'。=3\*GB2⑶数组声明为“inta[6];”,数组元素a[1]是否又可以写作“*(a++)”?原因是不可以,数组名(地址常量)不可改变。=4\*GB2⑷引用二维数组a第i行、j列的元素(i、j为0表示第1行、第1列),可以写作*(*(a+i-1)+j-1)或a[i-1][j-1]。=5\*GB2⑸数组声明为“inta[6][6];”,表达式“*a+i”是指第1行第i+1个元素的地址、“*(a+i)”是指第i+1行第1个元素的地址、“**a”又是指a[0][0]。=6\*GB2⑹数组声明为“floatx[7][5];”,若x[6][4]是内存中从x[0][0]数起的第35个元素,则x[4][4]是第25个元素。=7\*GB2⑺声明“charstr1[20]="Borlandc++5.0"后,使字符串str1为"Borland"的赋值表达式,应为str1[7]='\0'。=8\*GB2⑻将包括空格在内的6个字符串输入到字符数组a[6][20]中,输入语句可以写作for(i=0;i<6;i++)gets(a[i]);。3.按照下列各题题意编程。=1\*GB2⑴输入平面上凸10边形各点x、y坐标,计算并输出各点之间距离之和。解答:#include<stdio.h>#include<math.h>voidmain(){floatx[10],y[10],s=0;inti;for(i=0;i<10;i++)scanf("%f%f",&x[i],&y[i]);for(i=0;i<9;i++)for(j=i+1;j<10;j++)s+=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));printf("s=%f\n",s);}=2\*GB2⑵编程,计算多项式a0+a1x+a2x2+a3x3+...+an-1xn-1的和(n≤30)。解答:#include<stdio.h>voidmain(){floata[30],x,y;inti,n,t;scanf("%d%f",&n,&x);for(i=0;i<n;i++)scanf("%f",&a[i]);y=a[0];t=1;for(i=1;i<n;i++){t*=x;y+=a[i]*t;}
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东松山职业技术学院《文献检索与利用》2023-2024学年第一学期期末试卷
- 广东生态工程职业学院《海洋生物资源调查》2023-2024学年第一学期期末试卷
- 广东青年职业学院《基础医学概论Ⅱ3(病理学)》2023-2024学年第一学期期末试卷
- 七年级上册《5.2.1 解一元一次方程 合并同类项》课件与作业
- 广东南华工商职业学院《飞机装配技术》2023-2024学年第一学期期末试卷
- 广东岭南职业技术学院《素描(1)》2023-2024学年第一学期期末试卷
- 会计年终工作总结
- 2025年人教版七年级数学寒假复习 专题01 有理数(6重点串讲+15考点提升+过关检测)
- 【全程复习方略】2020年高考化学课时提升作业(三十一)-11.1-脂肪烃(人教版-四川专供)
- 【状元之路】2020-2021学年高中数学人教B版必修3双基限时练12
- 医疗器械的检查与包装讲解课件
- 高频焊接操作技术规范
- 环氧树脂固化
- GB_T4897-2015刨花板(高清版)
- 公路工程竣工验收办法
- 毕业设计(论文)安徽汽车产业的现状分析及发展战略研究
- 帆软BIFineBI技术白皮书
- 绞车斜巷提升能力计算及绞车选型核算方法
- 6_背景调查表
- 毕业设计(论文)矿泉水瓶吹塑模设计
- 在离退休老干部迎新春座谈会上的讲话(通用)
评论
0/150
提交评论