您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页C语言程序设计(第三版)习题库答案

C语言程序设计(第三版)习题库答案

来源:意榕旅游网
C语言程序设计(第三版)习题库

1、设圆半径r=,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。 #include <> main(){

float r,h,C1,Sa,Sb,Va,Vb; scanf(__”%f”__,&r); scanf(”%d”,__&h_);; C1=2**r; Sa=*r*r; Sb=4*Sa;

Va=4**r*r*r/3; Vb=Sa*h;

printf(___”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f”,Cl,Sa,Sb,Va,Vb); }

2、输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9 输出要求有文字说明,取位2小数。 #include <> main(){

float F,c;

scanf(\"%f\

____c=5*(F-32)/9______; printf(\"c=%.2f\ }

x1x3、有一函数:y2x11x10 写一程序,输入x值,输出y值。

3x11x10#include <> main(){ int x,y;

printf(\"输入x:\"); scanf(\"%d\

if(x<1) { /* x<1 */ y=x;

printf(\"x=%3d, y=x=%d\\n\

} else if (____x<10_______){ /* 1≤x-10 */ _____y=2*x-1_______;

printf(\"x=%3d, y=2*x-1=%d\\n\ } else{ /* x≥10 */ y=3*x-11;

printf(\"x=%3d, y=3*x-11=%d\\n\ main() {

int x,y;

scanf(\"%d\ if(x<1) { y=x;}

else if(x>=1 && x<10) { y=2*x-1;} else

{ y=3*x-11;} printf(\"%d\ }# include \"\" main() {

int x,y;

scanf(\"%d\ if(x<1) { y=x;}

else if(x>=1 && x<10) { y=2*x-1;} else

{ y=3*x-11;} printf(\"%d\\n\ }# include \"\" main() {

int x,y;

scanf(\"%d\ if(x<1) { y=x;}

else if(x>=1 && x<10) { y=2*x-1;} else

{ y=3*x-11;} printf(\"%d\ }scanf(\"%d\ if(x<1) { y=x;}

else if(x>=1 && x<10) { y=2*x-1;} else

{ y=3*x-11;} # include \"\" main() {

int x,y;

scanf(\"%d\

if(x<1) y=x;

else if(x>=1 && x<10) y=2*x-1; else

y=3*x-11; printf(\"%d\ },y); } }

4、给定一个不多于5位的正整数,要求:① 求它是几位数;②按逆序打印出各位数字。例如原数为321,应输出123。 #include <> main(){

long int num,m=0; int i=0; scanf(\"%ld\ while(num>0){

i++; /*统计长度*/ m=m*10+num%10; num =num/10; }

printf(\"数字长度为:%d\ printf(\"逆序数字为:%d\\n\ }

5、以下程序实现的功能:求三个数的最大值

#include<> main(){ int a,b,c,max; scanf(\"%d %d %d\ if(a>b){ if(a>c) max=a; else max=c; } else{ if(b>c) max=b; else max=c; } printf(\"max= %d\ }

#include <> main(){ int x,y,z,t=0;

}

scanf(\"%d %d %d\ if(x>y)

{t=y;y=x;x=t;} if(x>z)

{t=z;z=x;x=t;} if(y>z)

{t=z;z=y;y=t;} printf(\"%d\\n\

6、输入两个正整数m和n,求其最大公约数和最小公倍数。 /*枚举法*/ #include<> main(){

long m,n,i=1,j,s;

scanf(\"%ld,%ld\ for(;i<=m&&i<=n;i++){

if(m%i==0&&n%i==0) s=i; }

if(m>=n)j=m; else j=n;

for(;!(j%m==0&&j%n==0);j++); printf(\"s=%ld,j=%ld\\n\ }

#include <> main(){ int a,b,k,temp,i,p; scanf(\"%d,%d\ if(a>b) temp=b; else temp=a; for(i=2;i<=temp;i++) { if(a%i==0 && b%i==0) k=i; } printf(\"%d\\n\ p=a*b/k;

printf(\"%d\\n\

}

/*辗转相除*/ #include<> main(){

int m,n,k,j,p,r=1;

scanf(\"%d,%d\ k= m>nm:n; j= m>n n:m; do{

r=k%j; k=j; j=r;

}while(r!=0);

printf(\"%d,%d\ }

/*反复减法*/ #include<> main(){

int m,n,k,j,p,r=1;

scanf(\"%d,%d\ k= m>n m:n; j= m>nn:m; do{ p=k-j;

if(j>p){ k=j; j=p;} else k=p; }while(p!=0);

printf(\"%d,%d\ }

7、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 #include\"\" main(){

char c;int i=0,j=0,k=0,l=0; while((c=getchar())!=’\\n’) {

if(c>=’A’&&c<=’Z’||c>=’a’&&c<=’z’)

i++; 数求的值,直到最后一项的绝对值小于10-6为止。求绝对值的函数为fabs()。 #__include<>__ #include<> main(){

int i=1,flag=1;

double sum=,s; do{

s=(2*i-1)__; sum+=s*flag; i++;

__flag=-flag__;

}while(__fabs(s)>1e-6__);/**/ printf(\"pi=%f\ }

11、有一分数序列:2/1,3/2,5/3, 求出这个数列的前20项之和。 #include<> #define N 20 main(){ int i=1;

double x=1,y=2, sum=0; while(__i<=20__) { sum=sum+__y/x__; y = ___x+y__; x = __y-x__; i++; }

printf(\"%f\\n\ }

12、一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米第10次反弹多高 #include <> main(){ int i,n=10;

double h=100,s=100; for(i=2;i<=n;i++){

h*=;

s=__s+h*2__; }

printf(\"s=%f,h=%f\\n\ }

13、猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。 #include <> #define N 10 main(){

int i=1,sum=1; while(i++sum=__(sum+1)*2__; printf(\"sum=%d\\n\ }

14、用迭代法求 。求平方根的迭代公式为: 要求前后两次求出的得差的绝对值少于。 #include <> #include <> main(){

float x0,x1,a; scanf(\"%f\ x1=a/2; do{

x0=x1;

x1=__(x0+a/x0)/2__; } while(__x1>1e-5__); printf(\"%g\\n\ }

15、用牛顿迭代法求方程2x34x23x60在附近的根。 #include <> #include __<>__

#define f(x) 2*x*x*x-4*x*x+3*x-6 main(){

double x,y;x=; do{

y = f(x);

x = x - y/(6*x*x-8*x+3); } while(fabs(y)>1e-6); printf(\"x=%.3f\\n\ }

3216、用二分法求方程2x4x3x60在(-10,10)之间的根

#include <> #include <>

#define f(x) 2x*x*x-4*x*x+3*x-6 main(){

double x1=-10,x2=10,x,y; do{

x=(x1+x2)/2; y=f(x);

if(y<0) x1=x; else x2=x;

}while(fabs(y)>1e-6); printf(\"x=%g\\n\ }

17、以下程序的功能是:输入一个百分制成绩,输出一个五级制成绩等级。例如 输入75,输出 C。请完成填空 #include<>

main(){ int score;

scanf(\"__%d__\ switch(__score/10__){ case 1:case 2:case 3:case 4:case 5: printf(“grade E\\n”); ___break__; case 6: printf(“grade D\\n”);break; case 7: printf(“grade C\\n”);break; case 8: printf(“grade B\\n”);break; case 9: printf(“grade A\\n”);break;

__default__:printf(\"Error input!\\n\"); } }

18、该程序功能:对x=1,2,...,10,求f(x)=x*x-5*x+sin(x)的最大值。 #include <> #include <>

#define f(x) x*x-5*x+sin(x) void main(){

int x; float max; __max=f(1)__; for(x=2;x<=10;x++)

__if(max19、程序功能:输入整数a和b的值,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。 #include<> main(){ int a,b,s;

scanf(\"%d%d\ s=__a*a+b*b__;

if(s>100) printf(\"%d\ else printf(\"%d\ }

20、有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,以下程序统计卖完所需的天数。 #include <> main(){

int day,x1,x2; day=0;x1=1020; while(__x1>0__){

x2=__x1/2-2__; x1=x2; day++} printf(“day=%d”,day); }

21、找出整数的所有因子 #include <> main(){ int i,x;

scanf(“%d”,&x); i=1;

for ( ; __i<=x/2__;){

if (x%i==0) printf(%d”,i); i++; }

22、统计用数字0-9可以组成多少个各位上的数字没有重复的3位偶数。 #include <> main(){

int n=0,i,j,k;

for (i = 1;i <= 9;i++)

for (k = 0;k <= 8; __k+=2__) if (k != i)

for (j = 0;j <= 9;j++)

if (__j!=i&&j!=k__) n++; printf(“n=%d\\n”,n); }

23、用100元换成1、2、5元的所有兑换方案。 #include <> main() {

int i,j,k,l=0;

for (i = 0; i<=20;i++) for (j =0; j<=50; j++) { k= __(100-i-2*j)/5__; if (__i+j*2+k*5==100__){

printf(“%2d %2d %2d”,i,j,k); l = l + 1;

if (l%5==0) printf(“\\n”); } } }

24、输出1-100之间满足每位数的乘积大于每位数的和的数 #include <> main() {

int n,k=1,s=0,m;

for (n=1; n<=100; n++) { k=1; s=0; __m=n__;

while (__m>0__) {

k *=m%10; s+=m%10; ___m/=10__; }

if (k>s) printf(“%d”,n); }

25、从3个红球、5个白球、6个黑球中任意取出8个球,且其中必须有白球,输出所有可能的方案。 #include <> main() { int i,j,k;

for (i=0;i<=3;i++)

for (__j=1__; j<=5;j++) {

k = 8 – i – j; if (__k>=0__)

printf(“%3d %3d %3d\\n”,i,j,k); } }

26、以下程序的功能是:判断一个四位数是否满足这样的条件:它的9倍刚好是它的反序数。反序数是指整数各个位上的数字逆序所形成的整数。请完成程序的填空。 #include<> main(){ int i,a,b,c,d,m; for(i=1000;;i++){ a=__i%10__; b=i/10%10; c=i/100%10; d=i/1000; m=__a*1000+b*100+c*10+d__; if(___m==i*9__) __break__; } printf(\"i=%d\ }

27、以下程序完成两整数的交换。 #include <> main(){ int a,b;

printf(“请依次输入a,b的值:”); scanf(“%d,%d”, __&a,&b__); a=a+b; __b=a-b__; __a=a-b__;

printf(“交换后:a=%d,b=%d”,a,b); }

28、以下程序的功能是判断输入的年份是否为闰年,若是则输出”yes”,否则输出”No”。 #include <> main(){

int year;

scanf(“%d”,&year);

if (__year%400==0||year%4==0&&year%100!=0__) printf(“yes”); else printf(“No”); }

29、以下程序利用冒泡排序法对输入的10个数进行排序。 #include <> #define N 10 void main() { int a[N]; int i,j,t;

printf(″input 10 numbers :\\n″); for (i=0;iscanf(\"%d\",__&a[i]__); printf(\"\\n\"); for(j=0;jfor(i=0;i<__N-j-1__;i++) if (__a[i]>a[i+1]__) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; }

printf(″the sorted numbers :\\n″); for(i=0;iprintf(″%d ″,a[i]); printf(″\\n″); }

30、用筛法求100之内的素数。筛法素数的思想是:1、取最小的数2,并声明它是素数,同时筛去它及它的倍数。2、取未筛去数中最小的数,并声明它是素数,同时筛去它及它的倍数。3、重复步骤2至筛中无数,得到所有的素数。 #include <>

#define M 100 n″,num); }

39、输出10行的杨辉三角形。 1 1 1 1 2 1 1 3 3 1 ……

#include <> #define N 10 main(){

int i,n,k,a[N]={1};

printf(“%5d\\n”,a[0]); for(i=1;ifor(j=i;j>=1;j--) a[j]= __a[j]+a[j-1]__; for(j=0; __j<=i__;j++) printf(“%5d”,a[j]); printf(“\\n”); } }

40、以下程序的功能是:从键盘输入一个整数n(n≤10)和n个整数,存入数组a中,先依次输出各个数组元素的值,然后找出最大值,并输出。 #include<> main(){ int a[10],n,i,j, __max__ ;

printf(\"输入 n=\"); scanf(\"%d\

printf(\"输入各数组元素:\"); for(i=0;iif(a[i]>max) __max=a[i]__ ;

printf(\"最大值:%d\\n\

}

41、以下程序实现的功能是:将字符串s中所有的字符c删除。请完成程序填充 #include<> #include<> main(){

char s[80]; int i,j; gets(s);

for(i=j=0; __s[i]!=’\\0’__;i++) if(s[i]!='c'){ s[j]=s[i]; __j++__; }

s[j]='\\0'; puts(s); }

42、以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出,请完成程序填充。

#include<> #define N 10 main(){ int n,k;

float score,sum,ave; for(n=1;n<=N;n++){ __sum=0__;

for(k=1;k<=4;k++){

scanf(\"%f\ __sum+=score__; }

__sum/=4__;

printf(\"NO.%d:%f\\n\ } }

43、本程序的功能是:输入一串字符,将字符串中的字符反序输出。 #include <> #include <> main(){

int i,j,k; char str[80]; gets(str);

for(i=0,j=__n-1__;iputs(__str__); }

44、求方程ax2+bx+c=0 的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。 #include <> #include <>

void doubleRoots(double a,double b,double c){ double x1,x2,delta; delta=__b*b-4*a*c__; x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a);

printf(\"Equation has two different roots:\\n\"); printf(\"x1=%g,x2=%g\ }

void SingleRoot(double a,double b,double c){ double x1; x1= __-b/2/a__;

printf(\"Equation has two equal roots:\\n\"); printf(\"x1=x2=%g\ }

void NoRoot(void){

printf(\"No real root found for the equation\\n\"); }

main(){

double a,b,c,delta;

scanf(\"%lf%lf%lf\ delta=b*b-4*a*c;

if(delta>0) __doubleRoots(a,b,c)__; else if(delta<0) _NoRoot()__;

else __SingleRoot(a,b,c)__; }

45、写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。 #include <> #include <>

void IsPrime(__int n__){ int i;

int k=sqrt(n);

for(i=2; __i<=k__;i++) if(n%i==0) break;

if(i>=k+1) printf(\"%dis Prime number\\n\ else printf(\"%d is not Prime number\\n\ }

main(){ int n;

scanf(\"%d\ IsPrime(__n__); }

46、用牛顿迭代法求根。方程为ax3+bx2+cx+d=0,系数a,b,c,d由主函数输入。求x在1附近的一个实根。求出后由主函数输出。 #include <> #include <>

double EquationRoot(double a,double b,double c,double d){ double x,y; x=1; do{

y=a*x*x*x+b*x*x+c*x+d; x=x-y/(3*a*x*x+2*b*x+c); }while(__fabs(y)>1e-6__); return __x__; }

main(){

double a,b,c,d,x;

scanf(\"%lf %lf %lf %lf\ x=__EquationRoot(a,b,c,d)__;

printf(\"x=%g\ }

47、输入10个学生5门课的成绩,分别用函数求:①每个学生平均分;②每门课的平均分;③找出最高分所对应的学生和课程;④求平均分方差:一学生的平均分。 #include <> #define M 5 #define N 10

void EachStudentEverageMark(float a[][],int m,int n){

/*求每个学生的平均分。m-学生数,n-课程数*/ int i,j; float sum;

for(i=0;ifor(j=0;jprintf(\"average mark of the %dth stu is%g\\n\ } }

void EachCourseEverageMark(__float a[][]__,int m,int n){ /* 每门课的平均分 */ int i,j; float sum;

for(i=0;ifor(j=0;jprintf(\"average mark of the %dth stu is%g\\n\ } }

void MaxScore(float a[][],int m,int n){ /* 找出最高分所对应的学生和课程*/ int i,j,s,t;

float max=a[0][0];s=0,t=0; for(i=0;ifor(j=0;jxi212x(),其中xi为innt = __j__;

} }

printf(\"the %dth course and the %dth stu has the max\\n\ }

void AverageVariance(float a[][],int m,int n){ /* 求平均分方差 */

float delta,ave,avesq=0,avesum=0; int i,j;

for(i=0;ifor(j=0;jave/=n;

avesq+=ave*ave;

avesum+=ave; }

delta=__avesq/n-avesum*avesum/n/n__;

printf(\"variance of the%dth stu is %g\\n\ }

main(){

float a[M][N]; int i,j;

for(i=0;iscanf(\"%f\

EachStudentEverageMark(a,M,N); EachCourseEverageMark(a,M,N); MaxScore(a,M,N);

AverageVariance(a,M,N); }

48、写几个函数:①输个职工的姓名和职工号;②按职工号由小到大顺序排序,姓名顺序也随之调整;③要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。 #include <>

int num[100]; //职工号

char name[100][100]; //职工姓名 int count=0;

void informationInput(void){ //职工信息输入 int i,n;

printf(\"how many do you want to input:\\n\"); scanf(\"%d\

printf(\"please enter the name and numbers:\\n\");

for(i=count;icount+=n; }

void sorting(){ //按职工号进行排序 int i,j,t;

char str[100];

for(i=0;ifor(j=0;jnum[j+1]){ t=num[j];

strcpy(str, __name[j]__); num[j]=num[j+1];

strcpy(name[j], __name[j+1]__); num[j+1]=t;

strcpy(name[j+1],str); } } }

void search(int nb){ //用职工号找出该职工的姓名 int low,high,mid; low=0;high=count-1; do{

mid=(low+high)/2; if(num[mid]>nb) high=mid-1; else if(num[mid]}while(__low<=high__);

if(low>high)printf(\"employee not exist\\n\"); else printf(\"%s is found\\n\

}

main(){ int k;

informationInput(); sorting();

printf(\"num to find:\"); scanf(\"%d\ search(k);

}

49、写一函数,输入一个十六进制数,输出相应的十进制数。 #include <>

int HexToDecimal(char* hex){ int len,i,dec;

if(hex==NULL) return 0; len=strlen(hex);

for(i=0,dec=0;iif(hex[i]>='0'&&hex[i]<='9')

dec=__dec*16+(hex[i]-48)__; else if(hex[i]>='a'&&hex[i]<='f') dec=__dec*16+hex[i]-‘a’+10__; else if(hex[i]>='A'&&hex[i]<='F')

dec=__ dec*16+hex[i]-‘A’+10___; }

return dec; }

main(){

char hex[100]; gets(hex);

printf(\"hex to decimal is %d\ }

50、将一个整数n转换成字符串。例如,输入486,应输出字符串\"486\"。n的位数不确定,可以是任意位数的整数。 #include <>

void DigitToString(int n){ int i=0,j;

char ch[80]={'\\0'},t; while(n){

ch[i++]=__n%10+’0’__; n/=10; }

for(j=0;j<__i/2__;j++){/*order inverse*/ t=ch[j];

ch[j]=ch[i-j-1]; ch[i-j-1]=t; }

printf(\"%s\ }

main(){ int k;

scanf(\"%d\ DigitToString(k); }

51、给出年、月、日,计算该日是该年的第几天。 #include <>

int find(int y,int m,int d){ int leap=0,i,s,days=0;

if(y%400==0||__y%4==0&&y%100!=0__) leap=1; for(i=1;iif(i==2) s=2-leap; else s=0; if(i<8)

days=days+__30__+i%2-s; else

days+=30+(__i%2__); }

days+=d; return days; }

main(){

int year,month,date;

scanf(\"%d%d%d\

printf(\"the%dth day in this year\ }

52、有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。 #define N 7 #include <>

void shift(int p[],int n,int m){ int i,j,t;

for(i=0;i=0;j--) p[j+1]=p[j]; p[0]= __t__; } }

main(){

int a[N],k,i;

printf(\"please enter the numbers:\\n\"); for(i=0;iprintf(\"how much steps want to shift:\\n\"); scanf(\"%d\ __shift__ (a,N,k);

for(i=0;i53、有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退

出圈子,问最后留下的是原来的第几号的那位。 #include <> #define N 7

void f(int a[],int n,int k){ int i,j=0,m=n;

/*j-报数,每次以k为基数循环移动,m 是桌上留下的人数*/ for(i=0;m!=1;i++){

if(i==n) i=0;/*数组指针循环移动*/ if(__a[i]!=0__){ j++;

if(j==k+1) j=1; if(__j==k__){ m--; a[i]=0; } } } }

main(){

int a[N]; int i,k=4;

for(i=0;ifor(i=0;iif(a[i]) printf(\"the last number is%d\ }

54、写一函数,求一个字符串的长度。在主函数中输入字符串,并输出其长度。 #include <>

int strlength(char* str){ int i,len=0;

if(str==NULL) return __0__;

for(i=0; __str[i]!=’\\0’__;i++) len++; return __len__; }

main(){

char ch[]=\"chinease\";

printf(\"string length=%d\ }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务