C语言程序设计(4版)谭浩强
最近在复习C语言,把部分习题写一下。每道题由一个函数完成,仅需在main函数中调用即可
有空再把注释和解题思路写一下(基本和书上的思路一致)
第六章 数组 习题解答
6.1输出N(100)以内的所有素数(埃拉托色尼法)
//ex6.1 print all prime number between 1 to n
void prime_eratosthenes(int n)
{
int num[n];
int i,j,k;
for(i=1;i<=n;i++)
{
num[i]=i;
}
num[1]=0; //1 isn't a prime number
for(i=2;i<=n;i++)
{
for(j=2;j<=sqrt(i);j++)
{
if(num[i]!=0&&num[j]!=0)
{
if(i%j==0)
num[i]=0;
}
}
}
for(k=2;k<n;k++)
{
if(num[k]!=0)
printf("%d\t",num[k]);
}
}
6.2 选择排序法对N(10)个数进行排序
//ex6.2 sort n number using select_method
//函数参数为数组,可以改变参数数组的值,与传指针效果一样
//[error] multiple definition of `XXX(...)'是因为多个文件或同一个文件中多次定义名字相同的函数
void select_sort1(int a[],int n)
{
int i,j,min,temp=0;
for(i=0;i<=n-2;i++)
{
min=i;
for(j=i+1;j<=n-1;j++)
if(a[min]>a[j])
min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
for(i=0;i<n;i++)
printf("%d\t",a[i]);
}
6.3 求一个3X3的整数矩阵对角线元素之和
//ex6.3 calculate the Sum of the Cross-Line(SCL) of a metric
int cal_metric_MCL(int a[][N],int n)
{
int i,temp=0;
for(i=0;i<n;i++)
temp+=a[i][i];
return temp;
}
6.3-1 求一个NXN的整数矩阵对角线元素之和(变体)
//ex6.3-1 calculate the Sum of the Main-Cross-Line(MCL) of a metric
int cal_metric_SCL(int a[][N],int n)
{
int i,j,temp=0;
for(i=0;i<n;i++)
temp+=a[i][i];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i+j==n-1)
temp+=a[i][j];
if(n%2==1) temp-=a[n/2][n/2];
return temp;
}
6.4 将一个数插入已排序的数组
//ex6.4 Insert a number into a sorted List
//scanf()应用时格式不能加长度限制数字 只能用%d %f %c %s......
void insert_sorted(float a[N],float b)
{
int UP,DOWN;
int i,j;
UP=DOWN=0;
if(a[0]<a[1]) UP=1;
else if(a[0]>a[1]) DOWN=1;
if(UP)
{
printf("UP Order\n");
for(i=0;i<LEN;i++)
if(b<a[i]) break;
}
else if(DOWN)
{
printf("DOWN Order\n");
for(i=0;i<LEN;i++)
if(b>a[i]) break;
}
for(j=LEN-1;j>i;j--)
a[j]=a[j-1];
a[i]=b;
}
6.5 数组逆置(较简单没做略)
6.5 打印杨辉三角阵
//ex6.6 Print triangle_YH
void triangle_YH(int n)
{
int yh[n][n]={0};
int i,j;
for(i=0;i<n;i++)
{
yh[i][0]=1;
yh[i][i]=1;
}
for(i=2;i<n;i++)
for(j=1;j<i;j++)
yh[i][j]=yh[i-1][j]+yh[i-1][j-1];
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
printf("%d\t",yh[i][j]);
printf("\n");
}
}