C语言程序设计第四版第六章答案_谭浩强_第1页
C语言程序设计第四版第六章答案_谭浩强_第2页
C语言程序设计第四版第六章答案_谭浩强_第3页
C语言程序设计第四版第六章答案_谭浩强_第4页
C语言程序设计第四版第六章答案_谭浩强_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1、 用筛选法求100之内的素数。解:#include <stdio.h>#include <math.h>int main()int i,j,n,a101; for (i=1;i<=100;i+) ai=i; a1=0; for (i=2;i<sqrt(100);i+) for (j=i+1;j<=100;j+) if(ai!=0 && aj!=0) if (aj%ai=0) aj=0; printf("n"); for (i=2,n=0;i<=100;i+) if(ai!=0) printf("%

2、5d",ai); n+; if(n=10) printf("n"); n=0; printf("n"); return 0;2、 用选择法对10整数排序。解:#include <stdio.h>int main()int i,j,min,temp,a11; printf("enter data:n"); for (i=1;i<=10;i+) printf("a%d=",i); scanf("%d",&ai); printf("n"); pr

3、intf("The orginal numbers:n"); for (i=1;i<=10;i+) printf("%5d",ai); printf("n"); for (i=1;i<=9;i+) min=i; for (j=i+1;j<=10;j+)if (amin>aj) min=j; temp=ai; ai=amin; amin=temp; printf("nThe sorted numbers:n"); for (i=1;i<=10;i+) printf("%5d&q

4、uot;,ai); printf("n"); return 0; 3、 求一个3×3的整型矩阵对角线元素之和。解:#include <stdio.h>int main()int a33,sum=0;int i,j; printf("enter data:n"); for (i=0;i<3;i+) for (j=0;j<3;j+) scanf("%3d",&aij); for (i=0;i<3;i+) sum=sum+aii; printf("sum=%6dn",sum

5、); return 0;4、 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。解:#include <stdio.h>int main() int a11=1,4,6,9,13,16,19,28,40,100; int temp1,temp2,number,end,i,j; printf("array a:n"); for (i=0;i<10;i+) printf("%5d",ai); printf("n"); printf("insert data:"); scanf(&

6、quot;%d",&number); end=a9; if (number>end) a10=number; else for (i=0;i<10;i+) if (ai>number) temp1=ai;ai=number;for (j=i+1;j<11;j+) temp2=aj; aj=temp1; temp1=temp2; break; printf("Now array a:n"); for (i=0;i<11;i+) printf("%5d",ai); printf("n");

7、return 0; 5、 将一个数组中的值按逆序重新存放。例如,原来顺序为8、6、5、4、1。要求改为1、4、5、6、8。解:#include "stdio.h"#define N 5void main() int aN,i,temp;printf("enter arry a:n");for(i=0;i<N;i+) scanf("%d",&ai);printf("arry a:n");for(i=0;i<N;i+) printf("%4d",ai);for(i=0;i<

8、N/2;i+) temp=ai; ai=aN-i-1; aN-i-1=temp; printf("nNow,arry a:n");for(i=0;i<N;i+) printf("%4d",ai);printf("n");6、 输出以下的杨辉三角形(要求输出10行)。 1 1 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1解:#include "stdio.h"void main() int i,j,n=0,a3131=0; while(n<1|n>30) /*最多可输出30

9、行*/ printf("请输入杨辉三角形的行数:"); scanf("%d",&n); for(i=0;i<n;i+) ai0=1; /*第一列全置为一*/ for(i=1;i<n;i+) for(j=1;j<=i;j+) aij=ai-1j-1+ai-1j; /*每个数是上面两数之和*/ for(i=0;i<n;i+) /*输出杨辉三角*/ for(j=0;j<=i;j+) printf("%5d",aij); printf("n"); 7、 输出“魔方阵”。所谓魔方阵是指这

10、样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为 8 1 6 3 5 7 4 9 2解:#include <stdio.h>int main() int a1515,i,j,k,p,n; p=1; while(p=1) printf("enter n(n=1-15):"); scanf("%d",&n); if (n!=0) && (n<=15) && (n%2!=0) p=0; for (i=1;i<=n;i+) for (j=1;j<=n;j+) aij=0; j

11、=n/2+1; a1j=1; for (k=2;k<=n*n;k+) i=i-1; j=j+1; if (i<1) && (j>n) i=i+2; j=j-1; else if (i<1) i=n; if (j>n) j=1; if (aij=0) aij=k; else i=i+2; j=j-1; aij=k; for (i=1;i<=n;i+) for (j=1;j<=n;j+) printf("%5d",aij); printf("n"); return 0; 8、 找出一个二维数组中的鞍点

12、,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。解:#include <stdio.h>#define N 4#define M 5 /* 数组为4行5列 */int main() int i,j,k,aNM,max,maxj,flag; printf("please input matrix:n"); for (i=0;i<N;i+) /* 输入数组 */ for (j=0;j<M;j+) scanf("%d",&aij); for (i=0;i<N;i+) max=ai0; /* 开始时假设ai0最

13、大 */ maxj=0; /* 将列号0赋给maxj保存 */ for (j=0;j<M;j+) /* 找出第i行中的最大数 */ if (aij>max) max=aij; /* 将本行的最大数存放在max中 */ maxj=j; /* 将最大数所在的列号存放在maxj中 */ flag=1; /* 先假设是鞍点,以flag为1代表 */ for (k=0;k<N;k+) if (max>akmaxj) /* 将最大数和其同列元素相比 */ flag=0; /* 如果max不是同列最小,表示不是鞍点令flag1为0 */ continue; if(flag) /* 如

14、果flag1为1表示是鞍点 */printf("a%d%d=%dn",i,maxj,max); /* 输出鞍点的值和所在行列号 */ break; if(!flag) /* 如果flag为0表示鞍点不存在 */ printf("It is not exist!n"); return 0; 9、 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。解:#include <stdio.h>#define N 15int main() int i,number,

15、top,bott,mid,loca,aN,flag=1,sign; char c; printf("enter data:n"); scanf("%d",&a0); i=1; while(i<N) scanf("%d",&ai); if (ai>=ai-1) i+; else printf("enter this data again:n"); printf("n"); for (i=0;i<N;i+) printf("%5d",ai); p

16、rintf("n"); while(flag) printf("input number to look for:"); scanf("%d",&number); sign=0; top=0; /top是查找区间的起始位置 bott=N-1; /bott是查找区间的最末位置 if (number<a0)|(number>aN-1) /要查的数不在查找区间内 loca=-1; / 表示找不到 while (!sign) && (top<=bott) mid=(bott+top)/2; if (n

17、umber=amid) loca=mid; printf("Has found %d, its position is %dn",number,loca+1); sign=1; else if (number<amid) bott=mid-1; else top=mid+1; if(!sign|loca=-1) printf("cannot find %d.n",number); printf("continu or not(Y/N)?"); scanf(" %c",&c); if (c='N

18、'|c='n') flag=0; return 0; 10、 有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。解:#include "stdio.h"void main() int i,j,upp,low,dig,spa,oth;char text380;upp=low=dig=spa=oth=0;for(i=0;i<3;i+) printf("please input line %d:n",i+1); gets(texti); for(j=0;j<8

19、0&&textij!=0;j+) if (textij>='A'&&textij<='Z') upp+; else if (textij>='a'&&textij<='z') low+; else if (textij>='0'&&textij<='9') dig+; else if (textij=' ') spa+; else oth+; printf("nupper c

20、ase:%dn",upp); printf("lower case:%dn",low); printf("digit :%dn",dig); printf("space :%dn",spa); printf("other :%dn",oth); 11、 输出以下图案:* * * * * * * * * * * * * * * * * * * * * * *解:#include <stdio.h>int main() char a5='*','*','*&

21、#39;,'*','*' int i,j,k; char space=' ' for (i=0;i<5;i+) printf("n"); printf(" "); for (j=1;j<=i;j+) printf("%c",space); for (k=0;k<5;k+) printf("%c",ak); printf("n"); return 0;12、 有一行电文,已按下面规律译成密码:A Z a zB Y b yC X c

22、x. . . .即第1个字母变成第26个字母,第i个字母变成第(26i+1)个字母,非字母字符不变。要求编程序将密码译回原文,并输出密码和原文。解: (1)#include <stdio.h>int main() int j,n; char ch80,tran80; printf("input cipher code:"); gets(ch); printf("ncipher code :%s",ch); j=0; while (chj!='0') if (chj>='A') && (ch

23、j<='Z') tranj=155-chj; else if (chj>='a') && (chj<='z') tranj=219-chj; else tranj=chj; j+; n=j; printf("noriginal text:"); for (j=0;j<n;j+) putchar(tranj); printf("n"); return 0; (2)#include <stdio.h>int main() int j,n; char ch80;

24、 printf("input cipher code:n"); gets(ch); printf("ncipher code:%sn",ch); j=0; while (chj!='0') if (chj>='A') && (chj<='Z') chj=155-chj; else if (chj>='a') && (chj<='z') chj=219-chj; else chj=chj; j+; n=j; printf(

25、"original text:"); for (j=0;j<n;j+) putchar(chj); printf("n"); return 0; 13、 编一程序,将两个字符串连接起来,不要用strcat函数。解:#include <stdio.h>int main() char s180,s240; int i=0,j=0; printf("input string1:"); scanf("%s",s1); printf("input string2:"); scanf("%s",s2); while (s1i!='0') i+; while(s2j!='0') s1i+=s2j+; s1i='0' printf("nThe new string is:%sn",s1); return 0; 14、 编一个程序,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论