C语言程序设计第四版第六章答案谭浩强.doc

上传人:wux****ua 文档编号:8930523 上传时间:2020-04-02 格式:DOC 页数:13 大小:77KB
返回 下载 相关 举报
C语言程序设计第四版第六章答案谭浩强.doc_第1页
第1页 / 共13页
C语言程序设计第四版第六章答案谭浩强.doc_第2页
第2页 / 共13页
C语言程序设计第四版第六章答案谭浩强.doc_第3页
第3页 / 共13页
点击查看更多>>
资源描述
1、 用筛选法求100之内的素数。解:#include #include int main()int i,j,n,a101; for (i=1;i=100;i+) ai=i; a1=0; for (i=2;isqrt(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(%5d,ai); n+; if(n=10) printf(n); n=0; printf(n); return 0;2、 用选择法对10整数排序。解:#include 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); printf(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;jaj) min=j; temp=ai; ai=amin; amin=temp; printf(nThe sorted numbers:n); for (i=1;i=10;i+) printf(%5d,ai); printf(n); return 0; 3、 求一个33的整型矩阵对角线元素之和。解:#include int main()int a33,sum=0;int i,j; printf(enter data:n); for (i=0;i3;i+) for (j=0;j3;j+) scanf(%3d,&aij); for (i=0;i3;i+) sum=sum+aii; printf(sum=%6dn,sum); return 0;4、 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。解:#include 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;iend) a10=number; else for (i=0;inumber) temp1=ai;ai=number;for (j=i+1;j11;j+) temp2=aj; aj=temp1; temp1=temp2; break; printf(Now array a:n); for (i=0;i11;i+) printf(%5d,ai); printf(n); 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;iN;i+) scanf(%d,&ai);printf(arry a:n);for(i=0;iN;i+) printf(%4d,ai);for(i=0;iN/2;i+) temp=ai; ai=aN-i-1; aN-i-1=temp; printf(nNow,arry a:n);for(i=0;iN;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.hvoid main() int i,j,n=0,a3131=0; while(n30) /*最多可输出30行*/ printf(请输入杨辉三角形的行数:); scanf(%d,&n); for(i=0;in;i+) ai0=1; /*第一列全置为一*/ for(i=1;in;i+) for(j=1;j=i;j+) aij=ai-1j-1+ai-1j; /*每个数是上面两数之和*/ for(i=0;in;i+) /*输出杨辉三角*/ for(j=0;j=i;j+) printf(%5d,aij); printf(n); 7、 输出“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为 8 1 6 3 5 7 4 9 2解:#include 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=n/2+1; a1j=1; for (k=2;k=n*n;k+) i=i-1; j=j+1; if (in) i=i+2; j=j-1; else if (in) 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、 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。解:#include #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;iN;i+) /* 输入数组 */ for (j=0;jM;j+) scanf(%d,&aij); for (i=0;iN;i+) max=ai0; /* 开始时假设ai0最大 */ maxj=0; /* 将列号0赋给maxj保存 */ for (j=0;jmax) max=aij; /* 将本行的最大数存放在max中 */ maxj=j; /* 将最大数所在的列号存放在maxj中 */ flag=1; /* 先假设是鞍点,以flag为1代表 */ for (k=0;kakmaxj) /* 将最大数和其同列元素相比 */ flag=0; /* 如果max不是同列最小,表示不是鞍点令flag1为0 */ continue; if(flag) /* 如果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 #define N 15int main() int i,number,top,bott,mid,loca,aN,flag=1,sign; char c; printf(enter data:n); scanf(%d,&a0); i=1; while(i=ai-1) i+; else printf(enter this data again:n); printf(n); for (i=0;iN;i+) printf(%5d,ai); printf(n); while(flag) printf(input number to look for:); scanf(%d,&number); sign=0; top=0; /top是查找区间的起始位置 bott=N-1; /bott是查找区间的最末位置 if (numberaN-1) /要查的数不在查找区间内 loca=-1; / 表示找不到 while (!sign) & (top=bott) mid=(bott+top)/2; if (number=amid) loca=mid; printf(Has found %d, its position is %dn,number,loca+1); sign=1; else if (numberamid) 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|c=n) flag=0; return 0; 10、 有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。解:#include stdio.hvoid main() int i,j,upp,low,dig,spa,oth;char text380;upp=low=dig=spa=oth=0;for(i=0;i3;i+) printf(please input line %d:n,i+1); gets(texti); for(j=0;j=A&textij=a&textij=0&textij=9) dig+; else if (textij= ) spa+; else oth+; printf(nupper case:%dn,upp); printf(lower case:%dn,low); printf(digit :%dn,dig); printf(space :%dn,spa); printf(other :%dn,oth); 11、 输出以下图案:* * * * * * * * * * * * * * * * * * * * * * *解:#include int main() char a5=*,*,*,*,*; int i,j,k; char space= ; for (i=0;i5;i+) printf(n); printf( ); for (j=1;j=i;j+) printf(%c,space); for (k=0;k5;k+) printf(%c,ak); printf(n); return 0;12、 有一行电文,已按下面规律译成密码:A Z a zB Y b yC X c x. . . .即第1个字母变成第26个字母,第i个字母变成第(26i+1)个字母,非字母字符不变。要求编程序将密码译回原文,并输出密码和原文。解: (1)#include 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) & (chj=a) & (chj=z) tranj=219-chj; else tranj=chj; j+; n=j; printf(noriginal text:); for (j=0;jn;j+) putchar(tranj); printf(n); return 0; (2)#include int main() int j,n; char ch80; printf(input cipher code:n); gets(ch); printf(ncipher code:%sn,ch); j=0; while (chj!=0) if (chj=A) & (chj=a) & (chj=z) chj=219-chj; else chj=chj; j+; n=j; printf(original text:); for (j=0;jn;j+) putchar(chj); printf(n); return 0; 13、 编一程序,将两个字符串连接起来,不要用strcat函数。解:#include 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、 编一个程序,将两个字符串s1和s2比较,若s1s2,输出一个正数;若s1=s2,输出0;若s1s2,输出一个负数。不要用strcpy函数。两个字符串用gets函数读入。输出的正数或负数的绝对值应是相比较的两个字符串相应的ASCII码的差值。例如,“A”与“C”相比,由于“A”“C”,应输出负数,同时由于A和C的ASCII码差值为2,因此应输出“-2”。同理:“And”“Aid”比较,根据第2个字符比较结果,“n”比“i”大5,因此应输出“5”。解:#include int main() int i,resu; char s1100,s2100; printf(input string1:); gets(s1); printf(ninput string2:); gets(s2); i=0; while (s1i=s2i) & (s1i!=0)i+; if (s1i=0 & s2i=0) resu=0; else resu=s1i-s2i; printf(nresult:%d.n,resu); return 0; 15、 编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中。不用strcpy函数。复制时,/0后面的字符不复制。解:#include#includemain()int i;char str1100,str2100;printf(input string 2:);scanf(%s,str2); for(i=0;i=strlen(str2);i+)str1i=str2i;printf(str1:%sn,str1);
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!