第四版第7章《C程序设计》的课后答案大家找到了吗?以下是小编为大家整理推荐关于《C程序设计》谭浩强第四版第7章课后答案,希望对大家有所帮助。
《C程序设计》谭浩强第四版第7章课后答案【1】
7.1 用筛法求之内的素数。
main()
{ int i,j,a[100];
for(i=2;i<100;i++)
{ a[i]=i;
for(j=2;j<=i;j++)
{if(j
if(a[i]%j==0)
break;
if(a[i]-j==0)
printf("%5d",a[i]);
}
}
printf("\n");
}
或
#include"math.h"
main()
{static int i,j,k,a[98];
for(i=2;i<100;i++)
{a[i]=i;k=sqrt(i);
for(j=2;j<=a[i];j++)
if(j
break;
if(j>=k+1)
printf("%5d",a[i]);
}
printf("\n");
}
7.2用选择法对10个整数从小到大排序。
main()
{ int i,j,a[10],t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=1;j<10;j++)
for(i=0;i<=9-j;i++)
if(a[i]>a[i+1])
{t=a[i+1];a[i+1]=a[i];a[i]=t;}
for(i=0;i<10;i++)
printf("%5d",a[i]);
}
或
main()
{static int a[10],i,j,k,t;
for(i=1;i<11;i++)
scanf("%d",&a[i]);
for(j=1;j<10;j++)
for(i=1;i<=10-j;j++)
if (a[i]>a[i+1])
{t=a[i+1];a[i+1]=a[i];a[i]=t;}
for(i=1;i<11;i++)
printf("%d",a[i]);
printf("\n");
}
7.3求一个3×3矩阵对角线元素之和。
main()
{int i=0,j=0,a[3][3],s1,s2;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
s1=a[0][0]+a[1][1]+a[2][2];
s2=a[0][2]+a[1][1]+a[2][0];
printf("s1=%d,s2=%d\n",s1,s2);
}
或
main()
{
static int i,j,s1,s2,a[3][3];
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
scanf("%d",&a[i][j]);
s1=a[1][1]+a[2][2]+a[3][3];
s2=a[1][3]+a[2][2]+a[3][1];
printf("%d,%d\n",s1,s2);
}
7.4已有一个已排好的数组今输入一个数要求按原来排序的规律将它插入数组中。
main()
{ static int a[10]={1,7,8,17,23,24,59,62,101};int i,j,t;
scanf("%d",&a[9]);
for(i=9;i>0;i--)
if(a[i]
{t=a[i-1];a[i-1]=a[i];a[i]=t;}
for(i=0;i<10;i++)
printf("%5d",a[i]);printf("\n");
}
或
main()
{
static int a[5]={1,4,5,6,7};
int i,t,b;
scanf("%d",&b);
for(i=0;i<5;i++)
{if(b<=a[i])
{t=a[i];a[i]=b;b=t;}
printf("%d ",a[i]);}
printf("%d",b);
}
7.5将一个数组的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:1,4,5,6,8。
main()
{ int i,b[10];
for(i=0;i<10;i++)
scanf("%d",&b[i]);
for(i=9;i>-1;i--)
printf("%5d",b[i]);
printf("\n");}
《C程序设计》谭浩强第四版第7章课后答案【2】
7.6打印出以下杨辉三角形(要求打印出10行)。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
∶
∶
main()
{ static int m,n,k,b[15][15];
b[0][1]=1;
for(m=1;m<15;m++)
{for(n=1;n<=m;n++)
{ b[m][n]=b[m-1][n-1]+b[m-1][n];
printf("%-5d",b[m][n]);}printf("\n");
}
}
}
或
main()
{ int i,j,n,k,a[10][10];
static a[][1]={{1},{1},{1},{1},{1},{1},{1},{1},{1},{1}};
a[1][1]=1;
for(k=2,k<11;k++)
for(i=2;i<=k;i++)
for(j=2;j<=i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(k=1;k<11;k++)
for(i=1;i<=k;i++)
for(j=1;j<=i;j++)
printf("%d",a[i][j]);
}
7.7 打印“魔方阵”,所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为
8 1 6
3 5 7
4 9 2
要求打印出由1~n2的自然数构成的魔方阵。
解:
#include
main()
{ int a[16][16],i,i,k,p,m,n;
p=1;
while(p==1) /*要求阶数为1~15的商数*/
{ 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++) a[i][j]=0;
j=n/2+1; /*建立魔方阵*/
a[1][j]=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(a[i][j]==0) a[i][j]=k;
else
{ i=i+2;
j=j-1;
a[i][j]=k;
}
}
for(i=1;i<=n;i++) /*输出魔方阵*/
{ for(j=1;j<=n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
7.8找出一个二位数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。
main()
{int a[5][5],b[5],c[5],d[5][5],k=0,l=0;int i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&d[i][j]);
for(i=0;i<5;i++)
for(j=0;j<5;j++,a[i][j]=d[i][j]);
for(i=0,k=0;i<5;i++,k++)
for(j=0;j<4;j++)
{if(a[i][j]>=a[i][j+1])
b[k]=a[i][j+1]=a[i][j];
else
b[k]=a[i][j+1];
}
for(j=0,l=0;j<5;j++,l++)
for(i=0;i<4;i++)
{if(a[i][j]<=a[i+1][j])
c[l]=a[i+1][j]=a[i][j];
else
c[l]=a[i+1][j];
}
for(i=0,k=0;i<5;i++,k++)
for(j=0,l=0;j<5;j++,l++)
if(d[i][j]-b[k]==0)
{if(d[i][j]-c[l]==0)
printf("d[%d][%d]=%d\n",i,j,d[i][j]);
else
printf("d[%d][%d]=%d isnot andi\n",i,j,d[i][j]);
}
}
7.9有个15数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数组中第几个元素的值。如果该数不在数组中,则打印出"无此数"
#include"math.h"
main()
{static int i,j,m,a[15]={1,4,9,13,21,34,55,89,144,233,377,570,671,703,812};
scanf("%d",&m);
for(j=0;j<15;j++)
printf("%4d",a[j]);
printf("\n");
i=7;
while(fabs(i-7)<8)
{if(m
{if(a[i]-m==0)
{printf("it is at (%d)\n",i+1);break;}i--;}
else if(m>a[7])
{if(a[i]-m==0)
{printf("it is at (%d)\n",i+1);break;}i++;}
else
printf("8\n");
}
if(fabs(i-7)-8==0)
printf("There is not\n");
}
7.10有一篇文章,共有3行文字,每行有个80字符。要求分别统计出其中英文大写字母、小写字母、空格以及其它字符的个数。
main()
{int i,j=0,k=0,l=0,m=0,n=0;char str0[301],str1[100],str2[100],str3[100];
gets(str1);gets(str2);gets(str3);
strcat(str0,str1);strcat(str0,str2);strcat(str0,str3);
for(i=0;str0[i]!=’\0’;i++)
{if(str0[i]>=65&&str0[i]<=90) j++;
else if(str0[i]>=97&&str0[i]<=122) k++;
else if(str0[i]>=48&&str0[i]<=57) l++;
else if(str0[i]==32) m++;
else n++;}
printf("Daxie Xiaoxie Shuzi Kongge Qita\n");
printf("%5d %7d %5d %6d %4d\n",j,k,l,m,n);
}
《C程序设计》谭浩强第四版第7章课后答案【3】
7.11打印以下图案
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
main()
{int i,j,k;char a[5][5];
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
{a[i][j]=’*’;printf("%c",a[i][j]);}
printf("\n");
for(k=1;k<=i+1;k++)
printf("\40");}
printf("\n");
}
7.12有一行电文译文下面规律译成密码:
A->Z a->z
B->Y b->y
C->X c->x
…
即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。非字母字符不变,要求编程序将密码回原文,并打印出密码和原文。
main()
{ int i;char str1[100],str2[100];
gets(str1);
for(i=0;str1[i]!=’\0’;i++)
if(str1[i]>=65&&str1[i]<=90)
str2[i]=155-str1[i];
else if(str1[i]>=97&&str1[i]<=122)
str2[i]=219-str1[i];
else
str2[i]=str1[i];
printf("%s\n%s\n",str1,str2);
}
7.13编一程序,将两个字符串连接起来,不要strcat函数。
main()
{ int i,j;char str1[100],str2[100],str3[201];
gets(str1);
gets(str2);
for(i=0;str1[i]!=’\0’;i++)
str3[i]=str1[i];
for(j=0;str2[j]!=’\0’;j++)
str3[j+i]=str2[j];
printf("%s\n%s\n%s\n",str1,str2,str3);
}
7.14编一个程序,将两个字符串S1和S2比较,如果S1>S2,输出一个正数;S1=S2,输出0;S1
#include
#include
main()
{ int i,resu;
char s1[100],s2[100];
printf("\n input string1:");
gets(s1);
printf("\n Input string2:");
gets(s2);
i=0;
while(s1[i]==s2[i]&&s1[i]!=’\0’) i++;
if(s1[i]==’\0’&&s2[i]==’0’) resu=0;
else resu=s1[i]-s2[i];
printf("\n result:%d\n",resu);
}
7.15 编写一个程序,将字符数组s2中的全部字符拷贝到字符数组s1中,不用strcpy函数。拷贝时,’\0’也要拷贝过去,’\0’后面的字符不拷贝。
解:
#include "stdio.h"
main()
{ char s1[80],s2[80];
int i;
printf("Input s2:");
scanf("%s",s2);
for(i=0;i
s1[i]=s2[i];
printf("s1:%s\n",s1);
}
猜你感兴趣:
4.《C程序设计》谭浩强 第四版第7章课后答案 清华大学出版社
5.《C程序设计》谭浩强 第四版第6章课后答案 清华大学出版社