C语言程序设计(第四版)谭浩强版 课后答案 第六章

风中凌乱的猪头 / 2023-05-15 / 原文

1、筛选法:可以先到网上看看定义在写算法

#include<stdio.h>
int main(){
    int a[100];
    int i,j;
    for(i=0;i<100;i++){
        a[i]=i+1;
    }
    a[0] = 0;
    for(i=0;i<100;i++){
        for(j=i+1;j<100;j++){
           if(a[i]!=0&&a[j]!=0){
                if(a[j]%a[i]==0){
                    a[j]=0;
                }
           }
        }
    }
    printf("the prime number of 1-100 are:\n");
    for(i=0,j=0;i<100;i++){
        if(a[i]!=0){
            printf("%d  ",a[i]);
            j++;
            if(j==5){
                j=0;
                printf("\n");
            }
        }
    }
    return 0;
}

2、选择排序(从小到大),每次选择一个最小的出来

#include<stdio.h>
int main(){
    int a[10];
    int i,j,min,temp;
    printf("please input 10 numbers:");
    for(i=0;i<10;i++){
        scanf("%d",&a[i]);
    }
    for(i=0;i<10;i++){
        min=a[i];
        for(j=i+1;j<10;j++){
            if(min>a[j]){
                temp=min;
                min=a[j];
                a[j]=temp;
            }
        }
        a[i]=min;
    }
     for(i=0;i<10;i++){
        printf("%d  ",a[i]);
    }
    printf("\n");
    return 0;
}

3、此处代码没有做输出,直接复制,若需输入则可以做一个双层循环

#include<stdio.h>
int main(){
    int a[3][3] = {{1,2,3},{1,2,3},{1,2,3}};
    int i,j,sum = 0;
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            if(j==i){
                sum+=a[i][j];
            }
        }
    }
    printf("the diagoline sum is:%d\n",sum);
    return 0;
}

4、插入如何往后移,从最后一个一个往后拿最简单,但是这个程序插入的数是最大时,运行错误,索性直接把最大的情况,单独拿出来描述。

#include<stdio.h>
int main(){
    int a[100];
    int n,x,i,j;
    printf("how many number you want enter:");
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }

    printf("please input the number you want insert:");
    scanf("%d",&x);
    if (x>a[n-1]){
        a[n]=x;
    }
    else{
         for(i=0;i<n;i++){
            if(a[i]>x){
              for(j=n;j>i;j--){
                    a[j]=a[j-1];     
             }
             a[i]=x;
             break;
            }
         }
    }
    for(i=0;i<=n;i++){
        printf("%d ",a[i]);
    }
    printf("\n");
    return 0;
}

5、将一组有序数逆序输出

#include<stdio.h>
int main(){
    int a[100];
    int t,n,i,j;
    printf("how many number you want enter:");
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for(i=0,j=n-1;i<=n/2;i++){
        t = a[i];
        a[i]=a[j];
        a[j]=t;
        j--;
    }
    for(i=0;i<n;i++){
        printf("%d ",a[i]);
    }
    printf("\n");
}

6、输出杨辉三角

#include<stdio.h>
int main(){
    int a[10][10]={0};
    a[0][0]=1;
    a[1][0]=1;
    a[1][1]=1;
    int i,j;
    for(i=2;i<10;i++){
        a[i][0]=1;
        a[i][i]=1;
        for(j=1;j<i;j++){
            a[i][j]=a[i-1][j-1]+a[i-1][j];
        }
    }
    for(i=0;i<10;i++){
        for(j=0;j<10;j++){
            if(a[i][j]!=0){
                printf("%d ",a[i][j]);
            }
        }
        printf("\n");
    }
    return 0;
}

7、

(1)将1放在第1行中间一列。

(2) 从2开始直到n×n止各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5 在4的上一行后一列)。

(3)如果上一数的行数为1,则下一个数的行数为n(指最下一行)。例如,1在第1行,则⒉应放在最下一行,列数同样加1。

(4) 当上一个数的列数为n时,下一个数的列数应为1,行数减1。例如,2在第3行最后一列,则3应放在第2行第1列。

(5) 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。例如,按上面的规定,4应该放在第1行第2列,但该位置已被1占据,所以4就放在3的下面.由于6是第1行第3列(即最后一列),故7放在6下面。

按此方法可以得到任何阶的魔方阵。

#include<stdio.h>
int main(){
    int a[20][20];
        int n,i,j,k;
        printf("please input the order:");
        scanf("%d",&n);
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                a[i][j]=0;
            }
        }
        //先找1存放的位置
        i=0;
        j=n/2;
        a[i][j]=1;

        for(k=2;k<=n*n;k++){
            i=i-1;
            j=j+1;
            if((i<0)&&(j==n)){
                i=i+2;
                j=j-1;
            }else{
                if(i<0) 
                    i=n-1;
                if(j==n)
                    j=0;
            }
            if(a[i][j]==0){
                a[i][j]=k;
            }else{
                i = i+2;
                j=j-1;
                a[i][j]=k;
            }
        }
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                printf("%5d",a[i][j]);
            }
            printf("\n");
        }
        return 0;

}