




已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C Anyview 7-9章作业参考答案/*【习题7.010】写一函数求3个整数中最小的数。*/int min(int x, int y, int z)/* 返回3个整数x,y和z中最小的数 */ if(xy) x=y; if(xz) x=z; return x; /*【习题7.020】编写函数,求用1元、5元和10元三种纸币支付n元钱共有多少种支付法? 例如,16元可有6种支付方法: 方法 1 2 3 4 5 6 10元 0 0 0 0 1 1 5元 0 1 2 3 0 1 1元 16 11 6 1 6 1*/int change(int n) int i,j,k,m=0; for(i=0;i=n;i+) for(j=0;j=n/5;j+) for(k=0;k=n/10;k+) if(i+5*j+10*k=n) m+; return m; /*【习题7.030】先编写一个判断素数的函数。再编写一个函数将一个偶数表示为两个素数之和,并返回其中较小的素数。注:素数指只能被1和自身整除的正整数。规定0,1不是素数。*/int prime(int n) /* 判断素数,如果是素数返回1,不是素数则返回0 */ int t; if(n=1) return 0; for(t=2;t=(n/2);t+) if(n%t=0) return 0; return 1;int f(int i) /* 将偶数i表示为两个素数之和,返回其中较小的素数*/ int n;for(n=3;nstri) m=i; k=strm; for(i=m-1;i=0;i-) stri+1=stri; str0=k;/* 7.051 系统给定外部字符串s和整型数组c26(不需要自行定义)。编写程序,将字符串s中26个字母(不区分大小写)出现的次数依次统计到数组c中。例如,当s=“AbcijKaBcdEXyzuvwx”时,数组c的26个元素值依次为:2 2 2 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 2 1 1。*/void main() int i,j; for(j=0;j 8 5 2 7 8 9 7 4 1*/void invert(char aNN) int i,j;int bNN; for(i=0;iN;i+) for(j=0;jN;j+) bij=aN-1-jN-i-1; for(i=0;iN;i+)for(j=0;j 4 5 6 7 8 9 1 2 3*/void invertH(char aNN) int i,j;int bNN;for(i=0;iN;i+)for(j=0;jN;j+)bij=aN-i-1j; for(i=0;iN;i+)for(j=0;j 6 5 4 7 8 9 9 8 7*/void invertV(char aNN) int i,j;int bNN;for(i=0;iN;i+)for(j=0;jN;j+)bij=aiN-1-j; for(i=0;iN;i+)for(j=0;j 1 5 9 7 8 9 4 7 8*/void turningAnticlockwise(char aNN) int i; char t=a00; for(i=0;iN-1;i+) a0i=a0i+1; for(i=0;iN-1;i+) ai2=ai+12; for(i=0;i 6 4 5 7 8 9 9 7 8*/void turningRight(char aNN) int bNN,i,j;for(i=0;iN;i+)for(j=1;jN;j+)bi0=aiN-1,bij=aij-1; for(i=0;iN;i+) for(j=0;j 5 6 4 7 8 9 8 9 7*/void turningLeft(char aNN) int bNN,i,j;for(i=0;iN;i+)for(j=0;jN-1;j+)biN-1=ai0,bij=aij+1; for(i=0;iN;i+) for(j=0;j 1 2 3 7 8 9 4 5 6*/void turningDown(char aNN) int bNN,i,j;for(i=1;iN;i+)for(j=0;jN;j+)b0j=aN-1j,bij=ai-1j; for(i=0;iN;i+) for(j=0;j 7 8 9 7 8 9 1 2 3*/void turningUp(char aNN) int bNN,i,j;for(i=0;iN-1;i+)for(j=0;jN;j+)bN-1j=a0j,bij=ai+1j; for(i=0;iN;i+) for(j=0;jN;j+) aij=bij;/*【习题7.103】编写函数,求整数m和n的最大公约数,并作为函数的返回值。*/ int gdc(int m, int n) int a,r; if(mn) a=m,m=n,n=a; while(r=m%n)!=0) m=n;n=r; return n;/*【习题7.105】 编写函数,求整数m和n的最小公倍数,并作为函数的返回值。*/int lcm(int m, int n) int t,r,h; h=m*n; if(mn) t=m;m=n;n=t; while(r=m%n)!=0) m=n;n=r; return h/n;/*7.110 系统给定外部字符数组变量s和数组长度n(不需要自行定义)。main函数的功能是:把字符串s中所有小写字母转换为大写字母,其他字符不变。例如,当s=68abcdEFGhijkLM86时,转换后s=68ABCDEFGHIJKLM86。请仅在空缺处填入合适内容,使其实现上述功能。*/void main() int i; /* 1 */i=0; ; while(i=a & *(s+i)0 ) si= /* 2 */n%10+0 ; /* 3 */ n/=10; i+; si=0;/*7.121 系统给定外部长整型变量n和字符数组变量s(不需要自行定义)。main函数的功能是:把n的整数值转换成字符串,并保存在s中。例如,当n=20120826时,由n转换得到s=20120826。请仅在空缺处填入合适内容,使其实现上述功能。*/void main() int i=0,k; char c10; while( /* 1 */ 10*n/10!=0) ci= /* 2 */n%10 ; n/=10; i+; si-=0; k=i; while(i=0) si=/* 3 */ck-i+0; i-; /*【习题7.125】编写函数,对非负浮点数r的值的第三位小数四舍五入,返回保留2位小数的值。例如:若r的值为8.32488,则函数返回8.32;若r的值为8.32533,则返回8.33。*/float func(float r) int a,b; a=r*1000; b=a%10; if(b=10) k/=10,i+; for(j=1;j=i;j+) m=m*10; n=n-k*m; return n;/*【习题7.175】编写函数,求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。例如,若n为100时,函数返回值应为14.49138。*/float func(int n) int i;float s; for(i=0;in;i+) if(i%3=0&i%7=0) s=s+i; s=sqrt(s); return(s);/*【习题7.184】编写函数,根据公式s=1+1/(1+2)+1/(1+2+3)+1/(1+2+3+n)计算s,并作函数值返回。例如:若n的值为11时,函数的值为1.833333。*/float func(int n) int i; float j=1.0,s=1.0; for(i=2;i=n;i+) j=j+i; s=s+1/j; return (s);/*【习题7.187】编写函数,计算并输出下列级数和:1/(1*2)+1/(2*3)+1/(3*4)+ +1/(n*(n+1),并返回结果。例如,当n=10时,函数值为0.90909。*/float func(int n) int i; float x,y; for(i=1;in。例如:m=12,n=8时,运行结果为495.000000。*/float func(int m, int n) int i,j,k,l; float x=1.0,y=1.0,z=1.0; if(m=n) l=m,m=n,n=l; for(i=1;i=m;i+) x=x*i; for(j=1;j=n;j+) y=y*j; for(k=1;k=m-n;k+) z=z*k ; z=x/(z*y); return(z); /*【习题7.205】编写函数,计算并返回给定整数n除了1与自身之外的所有因子之和。例如,若n=8,则函数返回6(=2+4)。*/int func(int n) int i,j,k; for(i=1;i=0.5*n;i+) for(j=1;j=eps;i+) x=x*i; y=y*(2*i+1); z=z+x/y; z=2*z+2; return(z);/*【习题7.265】编写函数,将数组s所存字符串中下标和ASCII码均为偶数的字符,依次存入数组t中,并构成一个新串。例如,若s中的字符串值为ABCD123456,则t中的串值应为246。*/void func(char s, char t) int i,j,m=0; for(i=0;si!=0;i+) if(i%2=0)&(si%2=0) tj=si,j+; /*【习题7.275】假定字符串s中可能含有字符*。请编写函数,若字符串s的尾部连续的*多于n个,则删除多余的*。例如,若s=*A*BCDE*F*且n=4,则调用函数后,字符串s=*A*BCDE*F*;若n7,则字符串s中的内容不变。注意:函数中不得调用C语言提供的字符串函数。*/void func(char s, int n) int i,j,k,d=0,c=0,t=0;while(sd+) c+; for(i=c-1;i=0;i-) if(si=*) t+; else break; if(tn) k=t-n; sc-k=0; /*【习题7.315】编写函数,求出1到n之间(含n)能被7或11整除的所有整数并依次存入数组a中,函数值为这些数的个数。例如,若n=15,则依次存入数组a中的数为7、11和14,函数值为3。*/int func(int n, int a) int i,j=0; for(i=1;i=n;i+) if(i%7=0)|(i%11=0) aj=i,j+; return(j);/*【习题7.317】编写函数,求出1到n之间(含n)都能被c和d整除的所有整数并依次存入数组a中,函数值为这些数的个数。例如,若n=20,c=2,d=3,则依次存入数组a中的数为6、12和18,函数值为3。*/int func(int n, int c, int d, int a) int i,j; for(i=1;i=n;i+) if(i%c=0)&(i%d=0) aj=i,j+; return(j);/*【习题7.325】假设数组a存放了n个人的年龄。编写函数,用数组c统计各年龄段的人数,其中c0为0至9岁年龄段的人数,c1为10至19岁年龄段的人数,c2为20至29岁年龄段的人数,其余依此类推,c10为100岁(含100)以上年龄的人数。*/void func(int n, int a, int c) int i,b;for(i=0;i=10;i+)ci=0; for(i=0;i=100)c10+;else b=ai/10; cb+;/*【习题7.335】假设字符数组a中存放了按由小到大连续存放的字符构成的字符串(后跟一个0作为结束符)。编写函数,删去字符串中所有重复的字符(各自只保留一个),并使得保留的字符仍构成一个字符串(连续存放,0作为结束符)。函数返回a中保留的字符串长度。例如,若a中的字符串值为: AAABBCDFFFHHHKLMMM则删除重复字符之后,函数返回值为9,a中的字符串值为: ABCDFHKLM*/int func(char a) int i; /while(ai!=0) /i+; char c26;int j=1,k; c0=a0; for(i=1;ai!=0;i+) if(ai!=ai-1) cj=ai,j+; while(ck!=0) k+; for(i=0;i=k;i+) ai=ci; return(k); /*【习题7.345】假设字符数组s中存放了一行字符串,含有由小写字母组成的若干单词,单词之间由若干个空格隔开(串的开头没有空格)。编写函数,统计一行字符串中单词的个数,并作为函数值返回。*/int func(char s) int i,j; for(i=0;si!=0;i+) if(si= ) j+; j+=1; for(i=0;si!=0;i+) if(si= )&(si+1= ) ) j-; return(j);/*【习题7.355】假定字符串s中可能含有字符*。请编写函数,将字符串s中前导*全部移到字符串的尾部。例如,若s的串值为*A*BC*DEF*G*,移动后,串值应为A*BC*DEF*G*。注意:不得调用C语言提供的字符串函数。*/void func(char s) int i,j=0,k=0; char b100; for(i=0;si!=0;i+) if(si=*) k+; else break; for(i=k;si!=0;i+) bj=si; j+; for(i=0;ij+k;i+) if(ij) si=bi; else si=*; si=0; /*【习题7.513】编写函数,计算并返回数组a中头n个元素的乘积。 */long func(int a, int n) int i,s=1; for(i=0;in;i+) s=s*ai; return(s);/*【习题7.523】编写函数,计算并返回数组a中头n个元素的平方和。 */long func(int a, int n) int i,s; for(i=0;in;i+) s=s+ai*ai; return (s);/*【习题7.533】假设某班选举班长,k位候选人的号码分别为1至k,n张选票已存入数组v(每个元素值在1至k之间)。编写函数,用数组c统计各位候选人的得票(ci为i号候选人的得票数)。 */void func(int v, int n, int k, int c) int i,j; for(j=0;j=k;j+) cj=0;for(i=0;in;i+)cvi+;/*【习题7.535】假设某班选举班长,k位候选人的号码分别为1至k,n张选票已存入数组v(每个元素值在1至k之间)。编写函数,用数组c统计各位候选人的得票(ci为i号候选人的得票数),并返回得票最高的人的号码。 */int func(int v, int n, int k, int c) int i,j,max; for(i=0;i5;i+) ci=0; for(i=0;in;i+) cvi+; max=c0; for(i=1;i=k;i+) if(max0) di=n%10,i+; n=n/10; return(i);/*【习题7.565】编写函数,把长整数n的各位数字从高位到低位依次存储在数组d中,并返回n的位数。例如,若n=2579,则n的位数为4,d0.3=2,5,7,9。*/int func(long n, int d) int i,j; int a25; for(i=0;n!=0;i+) ai=n%10; n=n/10; j=i; for(i=0;ij;i+) di=aj-i-1; return j;/*【习题7.655】编写函数,用数组num统计字符串s中各元音字母(即:A、E、I、O、U)的个数。注意:不分大、小写。例如,若s=THIs is a book,则num0.4=1,0,2,2,0。*/void func(char *s, int *num)/* 功能:用数组num统计符串s中元音字母出现的个数 */ int i;num0=0, num1=0,num2=0,num3=0,num4=0; for(i=0;si!=0;i+) if(si=a)|(si=A) num0+; for(i=0;si!=0;i+) if(si=e)|(si=E) num1+; for(i=0;si!=0;i+) if(si=i)|(si=I) num2+; for(i=0;si!=0;i+) if(si=o)|(si=O) num3+; for(i=0;si!=0;i+) if(si=u)|(si=U) num4+; /*【习题7.675】假设在数组s中存放了n位学生的成绩。编写函数,用数组p统计各分数段的人数,其中p0为不足60分的人数,p1为60至69分的人数,p2为70至79分的人数,p3为80至89分的人数,p4为90至100分的人数。*/void func(int s, int n, int p) int i; for(i=0;i5;i+) pi=0; for(i=0;in;i+) if(si=60)&(si=70)&(si=80)&(si=90)&(si=100) p4+;/*【习题7.685】编写函数,从小到大依次求出能整除m的各整数,并存放在数组d中,这些除数的个数由n返回。例如,若m=20,则有6个数能整除它,依次是1,2,4,5,10,20。*/void func(int m, int d, int *n) int i,j; for(i=1;i=m;i+) if(m%i=0) dj=i, j+; *n=j;/*【习题7.755】通信时经常用到加密技术,把消息加密后再传输。编写一个用于加密消息的函数,把字符串str中的小写字母改成“(其ASCII码加上字符串key中每个字符ASCII码的平方)除以128所得的余数”作为ASCII码对应的字符,其它的字符不变,其中str称为消息原文,key称为密钥。请思考:如何解密恢复原文,这种加密方法能准确地恢复原文吗?*/void func(char *str,char *key)/* 功能:用key作为密钥对字符串str进行加密处理 */ int i,j,k; for(i=0;keyi!=0;i+) k=k+keyi*keyi; for(j=0;strj!=0;j+) if(strj= a) ) strj=(strj+k)%128;int min(int x, int y, int z)/* 返回3个整数x,y和z中最小的数 */ if(xy) x=y; if(xz) x=z; return(x); /*【习题8.011】请编写函数func(char s, char t, int n),由数组s中长度为n的字符序列构造其逆序列,并存储在数组t中。例如,由给定字符序列s=are求得逆序列t=era;由s=time求得t=emit。*/void func(char s, char t, int n) /* 数组s的前n个元素存放给定的字符序列, 数组t的前n个元素存放s的逆序列。 注意:数组的下标从0开始。*/ int i;for(i=0;in;i+)ti=sn-1-i;/*【习题8.012】请编写函数func(char*s, char *t),由字符串s构造其逆串t。例如,由给定串s=are求得逆串t=era;由s=time求得t=emit。*/void func(char *s, char *t) /* s是给定字符串的起始地址, t是求得s的逆串的起始地址*/ int i,j; for(j=0;sj!=0;j+) ; for(i=0;ij;i+)ti=sj-1-i;/*【习题8.015】对长度为n的字符串s1,除首、尾字符外,将其余字符按ASCII码降序排列,组合成一个新的字符串s2。*/void func(char *s1, char *s2, int n)/* s1为字符串的起始地址, s2为新字符串的起始地址, n为字符串的长度。 要求:s1串不能发生改变, s2串存放新的字符串。*/ int i,j; char t; n=strlen(s1); for(i=0;in;i+) *(s2+i)=*(s1+i); for(j=1;jn-2;j+) for(i=1;i=n-2-j;i+) if(*(s2+i)*(s2+i+1) t=*(s2+i); *(s2+i)=*(s2+i+1); *(s2+i+1)=t; /*【习题8.016】对字符串s1,除首、尾字符外,将其余字符按ASCII码降序排列,组合成一个新的字符串s2。*/void func(char *s1, char *s2)int n; n=strlen(s1); int i,j,k; char t; for(i=0;in;i+) s2i=s1i; s2i=0; for(i=1;in-1;i+) k=i; for(j=i+1;jn-1;j+) if(s2ks2j) k=j; t=s2i; s2i=s2k; s2k=t; /*【习题8.020】在字符串s中查找字符c,如果找到,返回字符c首次出现在字符串s中的位置指针;否则,返回空指针NULL。*/char *match(char *s, char c) /* 返回字符在串s中首次出现的位置指针 */ int i; for(i=0;si!=0;i+) if(si=c) return(s+i); return(NULL); /* 8.030 先编写一个判断素数的函数。再编写一个函数将一个 偶数表示为两个素数之和,并返回其中较小的素数。 注:素数指只能被1和自身整除的正整数。规定0,1不是素数。 */int prime(int n) /* 判断素数,如果是素数返回1,不是素数则返回0 */ int t; if(n=1) return 0; for(t=2;t=(n/2);t+) if(n%t=0) return 0; return 1;int f(int i) /* 将偶数i表示为两个素数之和,返回其中较小的素数*/ int n;for(n=3;n=i;n+)if(prime
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年验船师考试(C级船舶检验专业实务)综合试题及答案一
- 北京市门头沟区2024-2025学年八年级上学期第一次月考地理试题及答案
- 北京市门头沟区2023-2024学年九年级下学期中考适应性训练(三模)道德与法制试题含参考答案
- 2025年高级无人机植保操作员实操模拟题与理论知识点解析
- 2026届漯河市重点中学化学高一上期中统考模拟试题含解析
- 公务员英雄面试题及答案
- 2025年项目管理办公室专员招聘考试模拟题
- 江苏泰兴一中2026届化学高三第一学期期末综合测试模拟试题含解析
- 2026届新疆乌鲁木齐市高二化学第一学期期中检测试题含解析
- 2025年法律顾问招聘面试预测题与法律实务经验
- 药事管理培训课件
- 2025-2030中国电网储能行业盈利模式与投资方向可行性报告
- 2024中国高血压防治指南要点解读
- 无废工厂宣传课件
- 酒店预算培训课件
- 关于财富的课件
- 2025-2030中国汽车工程服务外包(ESO)行业现状调查与前景趋势研究报告
- 华为荣誉激励管理办法
- 2025至2030全球及中国实验室PH电极行业发展趋势分析与未来投资战略咨询研究报告
- 相控阵超声检测技术及应用
- 第四单元整本书阅读《红岩》课件 2025-2026学年统编版语文八年级上册
评论
0/150
提交评论