10 C程序设计基础习题集
解答: #include
if(t>=90) x='A'; switch((int)t/10) {
else if(t>=80) x='B'; case 9: case 10: x='A'; break; else if(t>=70) x='C'; case 8: x='B'; break; else if(t>=60) x='D'; case 7: x='C'; break; else x='E'; case 6: x='D'; break; printf(\ } } ⑶ 输入10个学生的成绩,输出最低分数和最高分数。 解答: #include
{ int x,max=0,min=101,i; for(i=1;i<=10;i++) {
scanf(\ if(x printf(\ } ⑷ 按公式 1+1/1!+1/2!+1/3!+...+1/n!+... 计算e的值,要求误差小于给定的ε。 解答: #include { float s=2,eps,t=1; int i=2; scanf(\ while(t>=eps) { t/=i++; s+=t; } printf(\ } ⑸ 统计输入的若干个数中负数、零及正数的个数(输入^z控制循环结束)。 解答: #include { float x; int zs=0,lin=0,fs=0; while(scanf(\ if(x>0) zs++; else if(x<0) fs++; else lin++; printf(\正数%d个,零%d个,负数%d个\\n\ } ⑹ 输入k,利用下列迭代公式计算k的近似值,要求计算结果具14位有效位数。 2xn?1?xn?(k/xn?xn)/3 解答: #include 1/3 程序设计基础习题集 11 #include { int k; double x,x0; scanf(\ while(1) { x0=x; x=x0+(k/(x0*x0)-x0)/3; if(fabs(x-x0)<1e-14) { printf(\ } } ⑺ 编程,输入n后,计算下列表达式的值。 1?2?3?4?...n?1?n 解答: #include { int i,n; float y=0; scanf(\ for(i=n;i>=1;i--) y=sqrt(i+y); printf(\ } ⑻ 编程,输入x、n后,计算下列表达式的值。 a0?a1x?a2x2?a3x3???anxn 解答: #include { float x,y,a; int i,n; scanf(\ for(i=0; i<=n; i++) { scanf(\ printf(\ } ⑼ 当x为-2、-1.5、...、1.5、2时,求f(x)=x-3.14·x-6所取最大值、最小值。 解答: #include { float x,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; else if(y printf(\ } ⑽ 编程,输入两个正整数x和y,求它们的最大公约数和最小公倍数。 解答: #include 2 12 C程序设计基础习题集 void main() { int x,y,a; scanf(\ while(a%y!=0) a+=x; printf(\最小公倍数%d,最大公约数%d\\n\ } ⑾ 编程,输出1~5000之间的同构数(就是出现在其平方数右边的那些数,如 5、6、25均为同构数)。 解答: #include for(k=1;k<=5000;k++) { n=log10(k)+1; if((k*k-k)%(int)pow(10,n)==0) printf(\ } } ⑿ 参照例25编程,输出下列形式的九九乘法表。 解答: #include printf(\ putchar('\\n'); for(i=1;i<10;i++) { printf(\ for(j=1;j<10;j++) printf(\ putchar('\\n'); } } ⒀ 当n取值在-39~40范围内时,判断表达式 n+n+41 的值是否都是素数。 解答: #include 2 程序设计基础习题集 13 #include 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\else printf(\ } } ⒁ 参照例24题编程,用梯形公式求下列定积分。 3?11?x3dx 解答: #include { float a,b,h,s; int i,n; scanf(\ h=(b-a)/n; x=a; s=0.5*(sqrt(1+a*a*a)+sqrt(1+b*b*b)); for(i=1;i ⒂ 用区间对分法求 x+x·sinx-5=0 在区间[0,5]内的一个实根(设ε=10)。 【说明】在[a,b]区间连续的函数f(x),若满足条件f(a)·f(b)<0,则必有a<ξ ① c←(a+b)/2; ② |f(c)|<ε或 |b-a|<ε则输出c作为近似解并终止程序执行; ③ 如果f(a)·f(c)<0则 b←c 否则 a←c,再次执行第⑴步。 解答: #include { float a,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; else a=c; } while(fabs(c*c+c*sin(c)-5)>=1e-5 && fabs(b-a)>=1e-5); printf(\ } 2 -5 习 题 五 1.判断下列各个叙述的正确与否。 14 C程序设计基础习题集 ⑴ 函数的类型标识符缺省类型为void【√】 ⑵ 函数中不可以没有return语句【╳】 ⑶ 传值调用的形参只有在被调用时才被创建(分配存储单元)【√】 ⑷ 传值调用时,实参不限于变量名,而可以是表达式【√】 ⑸ 被定义为前向调用的函数,不必再声明其函数原型【√】 ⑹ 函数f可以用f(f(x))形式调用,f是递归函数【╳】 2.写出下列程序的输出结果。 程序⑴ #include void prn(int a,int b,int c,int max,int min) { max=(max=a>b?a:b)>c?max:c; min=(min=a printf(\ } void main() { int x,y; x=y=0; prn(19,23,-4,x,y); printf(\ } 输出结果为 max=23 min=-4 max=0 min=0 程序⑵ #include void main() { printf(\ 输出结果为 24 程序⑶ #include int f1(int,int),f11(int); void f2(int); void main() { int i,j; for(i=0;i<5;i++) { f2((5-i)*3); for(j=0;j<=i;j++) printf(\ putchar('\\n'); } } int f1(int m,int n) { return f11(m)/f11(n)/f11(m-n); } int f11(int k)