广工C Anyview 参考答案.docx
- 文档编号:24317881
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:81
- 大小:32.05KB
广工C Anyview 参考答案.docx
《广工C Anyview 参考答案.docx》由会员分享,可在线阅读,更多相关《广工C Anyview 参考答案.docx(81页珍藏版)》请在冰豆网上搜索。
广工CAnyview参考答案
CAnyview7-9章作业参考答案
/**********
【习题7.010】写一函数求3个整数中最小的数。
**********/
intmin(intx,inty,intz)
/*返回3个整数x,y和z中最小的数*/
{
if(x>y)
x=y;
if(x>z)
x=z;
returnx;
}
/**********
【习题7.020】编写函数,求用1元、5元和10元三种纸币
支付n元钱共有多少种支付法?
例如,16元可有6种支付方法:
方法123456
10元000011
5元012301
1元16116161
**********/
intchange(intn)
{
inti,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++;
returnm;
}
/**********
【习题7.030】先编写一个判断素数的函数。
再编写一个函数
将一个偶数表示为两个素数之和,并返回其中较小的素数。
注:
素数指只能被1和自身整除的正整数。
规定0,1不是素数。
**********/
intprime(intn)
/*判断素数,如果是素数返回1,不是素数则返回0*/
{intt;
if(n==1)
return0;
for(t=2;t<=(n/2);t++)
if(n%t==0)
return0;
return1;
}
intf(inti)
/*将偶数i表示为两个素数之和,返回其中较小的素数*/
{intn;
for(n=3;n<=i;n++)
if(prime(i-n)&&prime(n))
returnn;
}
/**********
【习题7.050】编写函数,将字符串中ASCII码最小的字符
放在第一个字符位置,其余字符依次往后移。
**********/
voidfunc(char*str)
/*将字符串str中ASCII码最小的字符放在第一个*/
/*字符位置,其余字符依次往后移。
*/
{
inti=1,m=0,k;
for(m=0,i=1;str[i]!
='\0';i++)
{
if(str[m]>str[i])
m=i;
}k=str[m];
for(i=m-1;i>=0;i--)
str[i+1]=str[i];
str[0]=k;
}
/**********
7.051系统给定外部字符串s和整型数组c[26](不需
要自行定义)。
编写程序,将字符串s中26个字母(不
区分大小写)出现的次数依次统计到数组c中。
例如,
当s=“AbcijKaBcdEXyzuvwx”时,数组c的26个元素
值依次为:
222110001110000000
00111211。
**********/
voidmain()
{
inti,j;
for(j=0;j<26;j++)
{
c[j]=0;
for(i=0;s[i]!
='\0';i++)
if(s[i]=='A'+j||s[i]=='a'+j)
c[j]++;
}
}
/**********
【习题7.060】编写函数将一个nxn的二维数组按“次对角线”翻转。
例如:
翻转前的数组翻转后的数组
123963
456--->852
789741
**********/
voidinvert(chara[N][N])
{inti,j;
intb[N][N];
for(i=0;i for(j=0;j b[i][j]=a[N-1-j][N-i-1]; for(i=0;i for(j=0;j a[i][j]=b[i][j]; } /********** 【习题7.064】编写函数将一个NxN的二维数组“水平”翻转。 例如: 翻转前的数组翻转后的数组 123789 456--->456 789123 **********/ voidinvertH(chara[N][N]) {inti,j; intb[N][N]; for(i=0;i for(j=0;j b[i][j]=a[N-i-1][j]; for(i=0;i for(j=0;j a[i][j]=b[i][j]; } /********** 【习题7.065】编写函数将一个NxN的二维数组“垂直”翻转。 例如: 翻转前的数组翻转后的数组 123321 456--->654 789987 **********/ voidinvertV(chara[N][N]) { inti,j; intb[N][N]; for(i=0;i for(j=0;j b[i][j]=a[i][N-1-j]; for(i=0;i for(j=0;j a[i][j]=b[i][j]; } /********** 【习题7.068】编写函数将一个NxN的二维数组的 周边元素“逆时针”轮转1位。 例如: 轮转前的数组轮转后的数组 123236 456--->159 789478 **********/ voidturningAnticlockwise(chara[N][N]) {inti; chart=a[0][0]; for(i=0;i a[0][i]=a[0][i+1]; for(i=0;i a[i][2]=a[i+1][2]; for(i=0;i a[2][2-i]=a[2][2-i-1]; a[2][0]=a[1][0]; a[1][0]=t; } /********** 【习题7.072】编写函数将一个NxN的二维数组a的元素 按行向右轮转1位。 例如: 轮转前的数组轮转后的数组 123312 456--->645 789978 **********/ voidturningRight(chara[N][N]) {intb[N][N],i,j; for(i=0;i for(j=1;j b[i][0]=a[i][N-1], b[i][j]=a[i][j-1]; for(i=0;i for(j=0;j a[i][j]=b[i][j]; } /********** 【习题7.075】编写函数将一个NxN的二维数组a的元素 按行向左轮转1位。 例如: 轮转前的数组轮转后的数组 123231 456--->564 789897 **********/ voidturningLeft(chara[N][N]) {intb[N][N],i,j; for(i=0;i for(j=0;j b[i][N-1]=a[i][0], b[i][j]=a[i][j+1]; for(i=0;i for(j=0;j a[i][j]=b[i][j]; } /********** 【习题7.082】编写函数将一个NxN的二维数组a的元素 按列向下轮转1位。 例如: 轮转前的数组轮转后的数组 123789 456--->123 789456 **********/ voidturningDown(chara[N][N]) { intb[N][N],i,j; for(i=1;i for(j=0;j b[0][j]=a[N-1][j], b[i][j]=a[i-1][j]; for(i=0;i for(j=0;j a[i][j]=b[i][j]; } /********** 【习题7.085】编写函数将一个NxN的二维数组a的元素 按列向上轮转1位。 例如: 轮转前的数组轮转后的数组 123456 456--->789 789123 **********/ voidturningUp(chara[N][N]) { intb[N][N],i,j; for(i=0;i for(j=0;j b[N-1][j]=a[0][j], b[i][j]=a[i+1][j]; for(i=0;i for(j=0;j a[i][j]=b[i][j]; } /********** 【习题7.103】编写函数,求整数m和n的最大公约数, 并作为函数的返回值。 **********/ intgdc(intm,intn) { inta,r; if(m a=m,m=n,n=a; while((r=m%n)! =0) { m=n;n=r; } returnn; } /********** 【习题7.105】编写函数,求整数m和n的最小公倍数, 并作为函数的返回值。 **********/ intlcm(intm,intn) { intt,r,h; h=m*n; if(m {t=m;m=n;n=t;} while((r=m%n)! =0) { m=n;n=r; } returnh/n; } /********** 7.110系统给定外部字符数组变量s和数组长度n(不需要自行 定义)。 main函数的功能是: 把字符串s中所有小写字母转换为 大写字母,其他字符不变。 例如,当s="68abcdEFGhijkLM86" 时,转换后s="68ABCDEFGHIJKLM86"。 请仅在空缺处填入合适内容,使其实现上述功能。 **********/ voidmain() { inti; /***1***/i=0;; while(i { if(*(s+i)>='a'&&*(s+i)<='z') *(s+i)=/***2***/*(s+i)-32; /***3***/i++; } } /********** 【习题7.115】编写函数,将两个两位数的正整数a、b合并形成 一个整数c且作为函数值返回。 合并的方式是: 将a的十位和个位 数分别作为c的千位和十位数,b的十位和个位数分别作为c的百位 和个位数。 例如,若a=45,b=12,则该函数返回值为4152。 **********/ intfunc(inta,intb) {intc; c=a/10*1000+a%10*10+b/10*100+b%10; returnc; } /********** 7.120系统给定外部长整型变量n和字符数组变量s(不需要自行 定义)。 main函数的功能是: 把n的整数值转换成字符串,并逆序 保存在s中。 例如,当n=20120826时,由n转换得到s="62802102"。 请仅在空缺处填入合适内容,使其实现上述功能。 **********/ voidmain() { inti=0; while(/***1***/n>0) { s[i]=/***2***/n%10+'0'; /***3***/n/=10; i++; } s[i]='\0'; } /********** 7.121系统给定外部长整型变量n和字符数组变量s(不需要自行 定义)。 main函数的功能是: 把n的整数值转换成字符串,并保存 在s中。 例如,当n=20120826时,由n转换得到s="20120826"。 请仅在空缺处填入合适内容,使其实现上述功能。 **********/ voidmain() { inti=0,k; charc[10]; while(/***1***/10*n/10! =0) { c[i]=/***2***/n%10; n/=10; i++; } s[i--]='\0'; k=i; while(i>=0) { s[i]=/***3***/c[k-i]+'0'; i--; } } /********** 【习题7.125】编写函数,对非负浮点数r的值的第三位小数四舍五入, 返回保留2位小数的值。 例如: 若r的值为8.32488,则函数返回8.32; 若r的值为8.32533,则返回8.33。 **********/ floatfunc(floatr) {inta,b; a=r*1000; b=a%10; if(b<5) r=(a-b)*0.001; else r=(a-b+10)*0.001; returnr; } /********** 【习题7.135】假设n是一个k(k≥2)位的正整数,编写函数, 求出由n的低k-1位构成的数并作为函数值返回。 例如: 若n值 为5923,则函数返回923;若n值为923,则函数返回23。 **********/ intfunc(intn) { inti,j,k=n,m=1; while(k>=10) k/=10,i++; for(j=1;j<=i;j++) m=m*10; n=n-k*m; returnn; } /********** 【习题7.175】编写函数,求n以内(不包括n)同时能被3与7 整除的所有自然数之和的平方根,并作为函数值返回。 例如, 若n为100时,函数返回值应为14.49138。 **********/ floatfunc(intn) { inti;floats; for(i=0;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。 **********/ floatfunc(intn) { inti; floatj=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。 **********/ floatfunc(intn) { inti; floatx,y; for(i=1;i<=n;i++) {x=i*(i+1); y=y+1/x; } return(y); } /********** 【习题7.195】编写函数,求m! /(n! (m-n)! )的值,结果由函数值 返回。 m与n为两个正整数且要求m>n。 例如: m=12,n=8时,运行 结果为495.000000。 **********/ floatfunc(intm,intn) { inti,j,k,l; floatx=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)。 **********/ intfunc(intn) { inti,j,k; for(i=1;i<=0.5*n;i++) for(j=1;j<=n;j++) if(i*j==n) k=k+i+j; k=k-1-n; k=k/2; return(k); } /********** 【习题7.255】编写函数,根据以下公式返回π的值 π/2=1+1! /3+2! /(3*5)+...+n! /(3*5*7*...*(2*n+1)) 要求满足精度eps,即一旦有小于eps的项值加入后停止迭代。 例如,若精度eps=0.0005,则返回值为3.141106。 **********/ floatfunc(floateps) { inti; floatx=1,y=1,z; for(i=1;(x/y)>=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。 **********/ voidfunc(chars[],chart[]) { inti,j,m=0; for(i=0;s[i]! =0;i++) if((i%2==0)&&(s[i]%2==0)) t[j]=s[i],j++; } /********** 【习题7.275】假定字符串s中可能含有字符'*'。 请编写函数, 若字符串s的尾部连续的'*'多于n个,则删除多余的'*'。 例如, 若s="*****A*BCDE**F*******"且n=4,则调用函数后,字符串 s="****A*BCDE**F****";若n≥7,则字符串s中的内容不变。 注意: 函数中不得调用C语言提供的字符串函数。 **********/ voidfunc(chars[],intn) { inti,j,k,d=0,c=0,t=0; while(s[d++]) c++; for(i=c-1;i>=0;i--) {if(s[i]=='*') t++; elsebreak;} if(t>n) {k=t-n; s[c-k]='\0';} } /********** 【习题7.315】编写函数,求出1到n之间(含n)能被7或11整除的 所有整数并依次存入数组a中,函数值为这些数的个数。 例如, 若n=15,则依次存入数组a中的数为7、11和14,函数值为3。 **********/ intfunc(intn,inta[]) { inti,j=0; for(i=1;i<=n;i++) if((i%7==0)||(i%11==0)) a[j]=i,j++; return(j); } /********** 【习题7.317】编写函数,求出1到n之间(含n)都能被c和d整除 的所有整数并依次存入数组a中,函数值为这些数的个数。 例如, 若n=20,c=2,d=3,则依次存入数组a中的数为6、12和18,函 数值为3。 **********/ intfunc(intn,intc,intd,inta[]) { inti,j; for(i=1;i<=n;i++) if((i%c==0)&&(i%d==0)) a[j]=i,j++; return(j); } /********** 【习题7.325】假设数组a存放了n个人的年龄。 编写函数,用 数组c统计各年龄段的人数,其中c[0]为0至9岁年龄段的人数, c[1]为10至19岁年龄段的人数,c[2]为20至29岁年龄段的人 数,其余依此类推,c[10]为100岁(含100)以上年龄的人数。 **********/ voidfunc(intn,inta[],intc[]) { inti,b; for(i=0;i<=10;i++) c[i]=0; for(i=0;i {if(a[i]>=100) c[10]++; else{ b=a[i]/10; c[b]++; }} } /********** 【习题7.335】假设字符数组a中存放了按由小到大连续存放的 字符构成的字符串(后跟一个'\0'作为结束符)。 编写函数, 删去字符串中所有重复的字符(各自只保留一个),并使得保 留的字符仍构成一个字符串(连续存放,'\0'作为结束符)。 函数返回a中保留的字符串长度。 例如,若a中的字符串值为: AAABBCDFFFHHHKLMMM 则删除重复字符之后,函数返回值为9,a中的字符串值为: ABCDFHKLM **********/ intfunc(chara[]) { inti; //while(a[i]! ='\0') //i++; charc[26];intj=1,k; c[0]=a[0]; for(i=1;a[i]! ='\0';i++) if(a[i]! =a[i-1]) c[j]=a[i],j++; while(c[k]! ='\0') k++; for(i=0;i<=k;i++) a[i]=c[i]; return(k); } /********** 【习题7.345】假设字符数组s中存放了一行字符串,含有由小写 字母组成的若干单词,单词之间由若干个空格隔开(串的开头没 有空格)。 编写函数,统计一行字符串中单词的个数,并作为函 数值返回。 **********/ intfunc(char
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 广工C Anyview 参考答案