1、第第2章章 部分习题参考答案部分习题参考答案一、单项选择题:一、单项选择题:DABDD DAAAB BCD第1页第第3章章 部分习题参考答案部分习题参考答案一、单项选择题:一、单项选择题:CACBB CDBBB ADCCB DCCBB二、填空题:二、填空题:1.a!=b|a20&x30|x-1003.04.非非05.16.x%3=0&x%7=0 或或 x%21=0第2页三、编程题三、编程题2、#include#include void main()float a,b,c,p,s;printf(请输入三角形三边长请输入三角形三边长:);scanf(%f%f%f,&a,&b,&c);if(a+bc
2、&a+cb&b+ca)p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c);printf(三角形面积为三角形面积为:%.2fn,s);else printf(输入边长不能组成三角形输入边长不能组成三角形!n);第3章 习题第3页3、#include void main()int x,y;scanf(%d,&x);if(x-5&x0&x-5&x0&x8)y=x+1;if(x=8)y=10;if(x=8)y=10;else if(x0)y=x-1;else if(x=0)y=x;else y=x+1;第3章 习题第4页4、键盘输入一字符,大写转小写,小写转大写,其它原样输出
3、。、键盘输入一字符,大写转小写,小写转大写,其它原样输出。#include void main()char ch;scanf(%c,&ch);if(ch=A&ch=a&ch=A&ch=a&ch=z)printf(%cn,ch-32);elseprintf(%cn,ch);第3章 习题第5页8.#include void main()int year,flag=1;double money,rate,total;printf(请输入存款本金和年限请输入存款本金和年限:);scanf(%lf%d,&money,&year);if(year=1)rate=0.00215;else if(year=2
4、)rate=0.0023;else if(year=3)rate=0.00245;else if(year=5)rate=0.00275;else if(year=8)rate=0.0032;else flag=0;if(flag=1)total=money*(1+rate*12*year);printf(总金额为总金额为:%.2lfn,total);else printf(输入期限不正确输入期限不正确!n);第3章 习题第6页#include void main()int year,flag=1;double money,rate,total;printf(请输入存款本金和年限请输入存款本金
5、和年限:);scanf(%lf%d,&money,&year);switch(year)case 1:rate=0.00215;break;case 2:rate=0.0023;break;case 3:rate=0.00245;break;case 5:rate=0.00275;break;case 8:rate=0.0032;break;default:printf(输入期限不正确输入期限不正确!n);flag=0;if(flag=1)total=money*(1+rate*12*year);printf(总金额为总金额为:%.2lfn,total);第7页第第4章章 部分习题参考答案部分
6、习题参考答案一、单项选择题一、单项选择题 BCDBD BCDBB CCCCC BACDD二、编程题二、编程题2.编程输出编程输出1200之间全部能被之间全部能被3整除、且个位数为整除、且个位数为6整数。整数。方法方法2:#include void main()int i;for(i=6;i=200;i=i+10)if(i%3=0)printf(%5d,i);printf(n);方法方法1:#include void main()int i;for(i=1;i=200;i+)if(i%3=0&i%10=6)printf(%5d,i);printf(n);第8页3.编程从键盘输入编程从键盘输入k值
7、及值及k个整数,统计其中正数、零和负数个数。个整数,统计其中正数、零和负数个数。#include void main()int x,k,i,p=0,z=0,m=0;printf(请输入待输入数据请输入待输入数据个数个数:);scanf(%d,&k);printf(请输入请输入%d个整数个整数:,k);for(i=1;i0)p+;else if(x=0)z+;else m+;printf(正数、正数、0、负数个数分别为、负数个数分别为:%d,%d,%dn,p,z,m);第4章 习题第9页6.编程求编程求e=1+1/1!+1/2!+1/3!+1/n!,直到最终一项小,直到最终一项小于于10-5为止
8、。为止。#include void main()float sum,n,m,c;sum=1;n=1;m=1;c=1;while(c=1E-5)m=m*n;c=1/m;sum=sum+c;n=n+1;printf(e=%fn,sum);#include void main()int i=1;double s=1,e=1;while(1/s=1E-5)s=s*i;e=e+1/s;i+;printf(e=%lfn,e);第4章 习题第10页7.输入两个正整数输入两个正整数m和和n,求其最小公倍数。,求其最小公倍数。#include void main()int m,n,i;printf(请输入两个正
9、整数请输入两个正整数:);scanf(%d%d,&m,&n);for(i=m;i+)if(i%m=0&i%n=0)break;printf(%d,%d最小公倍数为最小公倍数为%dn,m,n,i);#include void main()int m,n,i;printf(请输入两个正整数请输入两个正整数:);scanf(%d%d,&m,&n);i=m;while(i%m!=0|i%n!=0)i+;printf(%d,%d最小公倍数为最小公倍数为%dn,m,n,i);第4章 习题第11页8.输入若干学生成绩,输入负数时表示输入结束,求全部学生最输入若干学生成绩,输入负数时表示输入结束,求全部学生最
10、高分。高分。#include void main()int cj,max=0;printf(输入成绩输入成绩,以负数,以负数结束结束:);scanf(%d,&cj);while(cj=0)if(maxcj)max=cj;scanf(%d,&cj);printf(最高分:最高分:%dn,max);#include void main()int cj,max=0;printf(输入成绩输入成绩,以负数,以负数结束结束:);while(1)scanf(%d,&cj);if(cj0)break;if(maxcj)max=cj;printf(最高分:最高分:%dn,max);第4章 习题第12页13.有
11、有36块砖,由块砖,由36人搬:男人一次搬人搬:男人一次搬4块,女人一次搬块,女人一次搬3块,块,两个小孩抬两个小孩抬1块,要求一次刚好全部搬完。问男、女、小孩各多块,要求一次刚好全部搬完。问男、女、小孩各多少人?少人?#include void main()int x,y,z;/x,y,z分分别表示男表示男,女女,小孩小孩数数 for(x=0;x9;x+)for(y=0;y12;y+)z=36-x-y;if(4*x+3*y+z/2=36&z%2=0)printf(%d%d%dn,x,y,z);第4章 习题第13页14.猴子摘桃问题。猴子摘桃问题。T10=1Tn=(Tn+1+1)*2求求T1=
12、?nyt=1,i=9开始开始i1结束结束t=(t+1)*2i=i-1输出输出t#include void main()int i,t;t=1;for(i=9;i=1;i-)t=(t+1)*2;printf(第一天桃子数量为第一天桃子数量为:%dn,t);第4章 习题第14页15.求数列求数列2/1,3/2 ,5/3,8/5,前前n项之和。项之和。#include void main()int a,b,t,i,n;double sum=0.0;printf(请输入请输入n:);scanf(%d,&n);a=2,b=1;for(i=1;i=n;i+)sum=sum+(double)a/b;t=a;
13、a=a+b;b=t;printf(sum=%fn,sum);第4章 习题第15页第第5章章 部分习题参考答案部分习题参考答案一、单项选择题一、单项选择题 BBADC BDBCC DDDDC BAACD第16页l补补1:输入:输入6个整数到数组个整数到数组a中,将其逆序输出。中,将其逆序输出。l补补2:输入:输入6个整数到数组个整数到数组a中,将其逆序存放,然后输出。中,将其逆序存放,然后输出。补补1:#include void main()int i,a6;for(i=0;i=0;i-)printf(%d ,ai);printf(n);补补2:#include void main()int i
14、,j,a6,t;printf(请输入请输入6个整数个整数:);for(i=0;i6;i+)scanf(%d,&ai);for(i=0,j=5;ij;i+,j-)t=ai;ai=aj;aj=t;printf(逆序后数据为逆序后数据为:);for(i=0;i6;i+)printf(%d ,ai);printf(n);0 1 2 3 4 5 3 7 5 2 6 1a第5章 习题第17页二、编程题二、编程题1.#include void main()int a10,i,k,sum;float ave;printf(请输入请输入10个整数个整数:);for(i=0;i10;i+)scanf(%d,&ai
15、);sum=0,k=0;for(i=0;i0)sum+=ai;k+;ave=(float)sum/k;printf(正数正数个数为个数为:%d,平均值为平均值为:%.2fn,k,ave);第5章 习题第18页2.方法一:方法一:#include void main()int a100,i,n,score;float sum,ave;i=0,sum=0;while(1)printf(请输入第请输入第%d个学生个学生成绩成绩:,i+1);scanf(%d,&score);if(score0)break;ai=score;sum+=ai;i+;n=i;ave=sum/n;printf(平均分为平均分
16、为:%.2fn,ave);printf(低于平均分成绩有低于平均分成绩有:);for(i=0;in;i+)if(aiave)printf(%d ,ai);printf(n);第5章 习题第19页2.方法二:方法二:#include void main()int a100,i=0,n,score;float sum=0,ave;printf(请输入学生成绩,以负数结束:请输入学生成绩,以负数结束:);scanf(%d,&score);while(score=0)ai=score;sum+=ai;i+;scanf(%d,&score);n=i;ave=sum/n;printf(平均分为平均分为:%
17、.2fn,ave);printf(低于平均分成绩有低于平均分成绩有:);for(i=0;in;i+)if(aiave)printf(%d ,ai);printf(n);第5章 习题第20页4.-改:改:从键盘输入一个从键盘输入一个33矩阵矩阵,求,求该矩阵主该矩阵主对角线对角线与副与副对角线上元素之和对角线上元素之和。#include void main()int a33,i,j,sum=0;printf(请输入请输入33矩阵元素矩阵元素:n);for(i=0;i3;i+)for(j=0;j3;j+)scanf(%d,&aij);if(i=j|i+j=2)sum=sum+aij;printf(
18、主副对角线元素和主副对角线元素和:%dn,sum);第5章 习题第21页5.#include#define M 3#define N 4void main()int i,j;float aMN,bM,sum;printf(请输入请输入%d%d矩阵矩阵:n,M,N);for(i=0;iM;i+)sum=0;for(j=0;jN;j+)scanf(%f,&aij);sum+=aij;bi=sum/N;printf(各行平均值为:各行平均值为:);for(i=0;iM;i+)printf(%7.2f,bi);printf(n);第5章 习题第22页8.#include#includevoid mai
19、n()char a20;int i;printf(请输入字符串:请输入字符串:);gets(a);for(i=strlen(a)-1;i=0;i-)printf(%c,ai);printf(n);第5章 习题第23页9.#include void main()char s180,s240;int i,j;printf(请输入第请输入第1个字符串个字符串:);gets(s1);printf(请输入第请输入第2个字符串个字符串:);gets(s2);i=0;while(s1i!=0)i+;j=0;while(s2j!=0)s1i=s2j;i+;j+;s1i=0;printf(连接后字符串为连接后字
20、符串为:%sn,s1);第5章 习题第24页10.#include void main()char s180,s280;int i;printf(请输入一个字符串请输入一个字符串:);gets(s2);for(i=0;s2i!=0;i+)s1i=s2i;s1i=0;printf(复制后字符串为复制后字符串为:%sn,s1);第5章 习题第25页13./冒泡法升序排序冒泡法升序排序#include#include void main()int n,i,j;char t,s80;printf(请输入字符串请输入字符串:);gets(s);n=strlen(s);for(i=0;in-1;i+)fo
21、r(j=0;jsj+1)t=sj,sj=sj+1,sj+1=t;printf(排序后字符串排序后字符串:);puts(s);/选择法升序排序选择法升序排序#include#include void main()int n,i,j,m;char t,s80;printf(请输入字符串请输入字符串:);gets(s);n=strlen(s);for(i=0;in-1;i+)m=i;for(j=i+1;jn;j+)if(sjsm)m=j;if(m!=i)t=si,si=sm,sm=t;printf(排序后字符串排序后字符串:);puts(s);第5章 习题第26页第第6章章 部分习题参考答案部分习题
22、参考答案一、单项选择题一、单项选择题 CAAAB DCBBB CADAD CDBA A 注:第注:第20小题不做要求小题不做要求第27页二、编程题二、编程题3.#includevoid main()int min(int,int,int);int a,b,c,d,e,m1,m2;printf(请输入请输入5个整数个整数:);scanf(%d%d%d%d%d,&a,&b,&c,&d,&e);m1=min(a,b,c);m2=min(m1,d,e);printf(最小值为最小值为:%dn,m2);int min(int x,int y,int z)int m;if(xy)m=x;else m=y;
23、if(zm)m=z;return m;第6章 习题第28页4.#include#includevoid main()int prime(int m);int i;for(i=2;i=100;i+)if(prime(i)printf(%5d,i);printf(n);int prime(int m)int k,n;n=(int)sqrt(m);for(k=2;k=n;k+)if(m%k=0)return 0;return 1;第6章 习题第29页5.#includeint fgcd(int m,int n)/最大条约数函数最大条约数函数 int i;i=mm?m:n;for(;i+)if(i%m
24、=0&i%n=0)return i;void main()int a,b,gy,gb;printf(请输入两个整数请输入两个整数:);scanf(%d%d,&a,&b);gy=fgcd(a,b);gb=flcd(a,b);printf(%d,%d最大条约数为最大条约数为:%dn,a,b,gy);printf(%d,%d最小公倍数为最小公倍数为:%dn,a,b,gb);第6章 习题第30页6.#includeint f(int a,int n)int i,t=0;for(i=1;i=n;i+)t=t*10+a;return t;void main()int a,n,i,s=0;printf(请输
25、入两个整数请输入两个整数a,n:);scanf(%d%d,&a,&n);for(i=1;i=n;i+)s=s+f(a,i);printf(结果为结果为:%dn,s);第6章 习题第31页8.#include#define N 6int max(int a)int i,m;m=a0;for(i=1;iN;i+)if(mai)m=ai;return m;void main()int i,bN;printf(请输入请输入%d个整数个整数:,N);for(i=0;iN;i+)scanf(%d,&bi);printf(最大数为最大数为:%dn,max(b);第6章 习题第32页9.#includevoi
26、d sort(int a,int n)int i,j,t;for(i=0;in-1;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;void main()int i,n,a100;/最多最多100个元素个元素 printf(请输入元素个数请输入元素个数:);scanf(%d,&n);printf(请输入请输入%d个元素个元素:,n);for(i=0;in;i+)scanf(%d,&ai);sort(a,n);printf(排序结果为排序结果为:);for(i=0;in;i+)printf(%d ,ai);printf(n);第6章 习题第33页12.#includei
27、nt fib(int k)int f;if(k=1)f=0;else if(k=2)f=1;else f=fib(k-1)+fib(k-2);return f;void main()int i,n;printf(请输入项数请输入项数:);scanf(%d,&n);printf(前前%d项项fibonacci数列为数列为:,n);for(i=1;i=n;i+)printf(%d ,fib(i);printf(n);第6章 习题第34页第第7章章 部分习题参考答案部分习题参考答案一、单项选择题一、单项选择题 DBCCC ACBAD CACC D DDCDC CBCAC 注:注:1525小题不做要求
28、小题不做要求二、填空题二、填空题 1.5 2.s=p+3 s=s-2 100 *(s+1)2 3.110 4.abcde a 5.malloc(sizeof(int)*11)不做要求不做要求第35页三、编程题(用指针完成)三、编程题(用指针完成)1.#includevoid swap(int*px,int*py)int t;t=*px;*px=*py;*py=t;void main()int a,b,c;printf(请输入三个整数请输入三个整数:);scanf(%d%d%d,&a,&b,&c);if(ab)swap(&a,&b);if(ac)swap(&a,&c);if(bc)swap(&b
29、,&c);printf(三个数从大到小为三个数从大到小为:%d%d%dn,a,b,c);第7章 习题第36页2.#includevoid swap(int*px,int*py)int t;t=*px;*px=*py;*py=t;void main()int a10,i;int*pmax,*pmin;/两个指针分别指向最大,最小数两个指针分别指向最大,最小数 printf(请输入请输入10个整数个整数:);for(i=0;i10;i+)scanf(%d,&ai);pmax=pmin=a;for(i=1;i10;i+)if(*pmaxai)pmin=&ai;swap(pmax,&a9);swap(
30、pmin,&a0);printf(交换后交换后10个数为个数为:);for(i=0;i10;i+)printf(%d ,ai);printf(n);第7章 习题第37页3.#includevoid main()char a100,*p=a;int flag=0;printf(请输入一个字符串请输入一个字符串:);gets(a);while(*p!=0)if(*p=k)flag=1;break;p+;if(flag=1)printf(已找到已找到!n);else printf(没找到没找到n);第7章 习题第38页5.#includevoid scat(char*s1,char*s2)char*
31、p1=s1,*p2=s2;while(*p1!=0)p1+;while(*p2!=0)*p1=*p2;p1+;p2+;*p1=0;void main()char a80,b40;printf(请输入第请输入第1个字符串个字符串:);gets(a);printf(请输入第请输入第2个字符串个字符串:);gets(b);scat(a,b);printf(b连接到连接到a后字符串为后字符串为:%sn,a);第7章 习题第39页6.#include#includevoid main()int hw(char*s);char s80;printf(请输入一个字符串请输入一个字符串:);gets(s);i
32、f(hw(s)printf(该字符串是回文该字符串是回文!n);else printf(该字符串不是回文该字符串不是回文!n);int hw(char*s)int flag=1;char*p,*q;for(p=s,q=s+strlen(s)-1;pq;p+,q-)if(*p!=*q)flag=0;break;return flag;第7章 习题第40页9.#include#includeint fun(char*s)int len,i,k,n=0;len=strlen(s);for(i=0;ilen;i+)k=si-0;n=n*10+k;return n;void main()char s10
33、;int n;printf(请请输入不输入不超出超出9个字符数字串个字符数字串:);gets(s);n=fun(s);printf(对应整数位对应整数位:%dn,n);/函数另一个方法函数另一个方法int fun(char*s)int n=0;while(*s!=0)n=n*10+*s-0;s+;return n;第7章 习题第41页10.#includeint slen(char*p)int len=0;while(*p!=0)len+;p+;return len;void main()char a80;printf(请请输入一个输入一个字符串字符串:);gets(a);printf(字符串
34、长度为字符串长度为:%dn,slen(a);第7章 习题第42页第第8章章 部分习题答案部分习题答案一、单项选择题一、单项选择题 BDABC BADDA DCDBC第第9章章 部分部分习题答案习题答案一、单项一、单项选择题选择题 DDCDD ABCCC DD AB D 注:第注:第13、14小题不做要求小题不做要求第43页二、编程题二、编程题1.2.#include#define MOD(a,b)(a)%(b)void main()int m,n,r;printf(请输入两个整数请输入两个整数:);scanf(%d%d,&m,&n);r=MOD(m,n);printf(余数为余数为:%dn,r);#include#define MAX(a,b)(a)(b)?(a):(b)void main()int x,y,z,m;printf(请输入三个整数请输入三个整数:);scanf(%d%d%d,&x,&y,&z);m=MAX(MAX(x,y),z);printf(最大值为最大值为:%dn,m);第9章 习题第44页第45页