欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

C语言程序设计练习:第6章(第四版)改写题目的翻译方法

最编程 2024-08-11 22:14:29
...

一、例题

1.10个数组元素0~9,逆序输出

#include<stdio.h>
int main()
{
    int i = 9;
    int a[] = { 0,1,2,3,4,5,6,7,8,9 };
    for (i = 9; i >= 0; i--)
        printf("%d\t", a[i]);
    return 0;
}

2.数组求斐波那契数

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

3.10个地区的面积,由小到大顺序排序(冒泡法)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    int arr[10]; 
    int i = 0;
    int j = 0;
    for (i = 0; i < 10; i++)
        scanf("%d", &arr[i]);//9 8 7 6 5 4 3 2 1 0
    for (i = 0; i < 9; i++)
    //0 1 2 3 4 5 6 7 8 9
    //10个元素9趟冒泡排序
    {
        for (j = 0; j < 9 - i; j++)
            //一趟进行9次
            //8 7 6 5 4 3 2 1 0 9
        {
            if (arr[j] > arr[j + 1])
            {
                int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }
    for (i = 0; i < 10; i++)
    {
        printf(" %d", arr[i]);
    }
    return 0;
}

4.二维数组行列互换

#include<stdio.h>
int main()
{
    int i, j;
    int a[2][3] = { {1,2,3},{4,5,6} };
    int b[3][2];
    printf("横向数组的序列:\n");
    for (i = 0; i < 2; i++)//限制行,共2行 
    {
        for (j = 0; j < 3; j++)//限制列,共3列 
        {
            printf("%6d", a[i][j]);//输出数组元素值,宽度为6 
            b[j][i] = a[i][j];//赋值 
        }
        printf("\n");
    }

    printf("纵向数组的序列:\n");
    for (i = 0; i < 3; i++)//限制行,3行 
    {
        for (j = 0; j < 2; j++)//限制列,共2列 
        {
            printf("%6d", b[i][j]);//输出数组元素值,宽度为6 
        }
        printf("\n");
    }
    return 0;
}

5. 3*4矩阵,求最大值

#include<stdio.h>
int main()
{
    int i, j, max;
    int row = 0;
    int colum = 0;
    int a[3][4] = { {1,2,3,4},{9,8,7,6},{-10,10,-5,2} };
    max = a[0][0];
    for (i = 0; i < 3; i++)
        for (j = 0; j < 4; j++)
            if (a[i][j] > max)
            {
                max = a[i][j];
                row = i;
                colum = j;
            }
    printf("max=%d\nrow=%d\ncolum=%d\n", max,row,colum);
    return 0;
}

6.输出已知字符串

#include<stdio.h>
int main()
{
    char c[15] = { 'I',' ','a','m',' ','a',' ','s','t','u','d','e','n','t','.' };
    int i;
    for (i = 0; i < 15; i++)
        printf("%c", c[i]);
    printf("\n");
    return 0;
}

7.输出*围成菱形

#include<stdio.h>
int main() {
    char diamond[5][5] = { {' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'} };
    int i, j;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            printf("%c", diamond[i][j]);
        }
        printf("\n");
    }
    return 0;
}

8.输入一行字符,统计有多少单词

#include <stdio.h>
int main() {
    char string[81];
    int i, num = 0, word = 0;
    char c;
    gets(string);   
    for (i = 0; (c = string[i]) != '\0'; i++) 
    {  
        if (c == ' ') 
            word = 0;  
        else if (word == 0) 
        { 
            word = 1; 
            num++;   
        }
    }
    printf("There are %d words in this line.\n", num);
    return 0;
}

9.3个字符串,找出最大的

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main() {
    char str[3][20];
    char string[20];
    int i;
    for (i = 0; i < 3; i++) 
        gets(str[i]);
    if (strcmp(str[0], str[1]) > 0)
        //(strcmp(字符串1,字符串2)>0)--字符串比较
        //字符串1大于字符串2
        strcpy(string, str[0]);
       //strcpy(字符串1,字符串2),字符串2赋值给字符串1
    else
        strcpy(string, str[1]);

    if (strcmp(str[2], string) > 0)
        strcpy(string, str[2]);

    printf("%s\n", string);
    return 0;
}

二、习题

 1.用筛选法求100以内的素数

#include<stdio.h>
#include<math.h>
int main()
{
    int i, j, k = 0, a[100];

    for (i = 0; i < 100; i++)
    {
        a[i] = i + 1;           //将1~100赋值给a[0]~a[99]
    }

    a[0] = 0;                      //先把a[0]赋值为0
    for (i = 0; i < 99; i++)
    {
        for (j = i + 1; j < 100; j++)
        {
            if (a[i] != 0 && a[j] != 0)
            {
                if (a[j] % a[i] == 0)
                {
                    a[j] = 0;           //把不是素数的都赋值为0
                }
            }
        }
    }

    printf(" 筛选法求出100以内的素数为:\n");
    for (i = 0; i < 100; i++)
    {
        if (a[i] != 0)                  //选出值不为0的数,即素数
        {
            printf("%4d", a[i]);
            k++;
        }
        if (k % 10 == 0)                 //输出10个数后换行
        {
            printf("\n");
        }
    }
    printf("\n");

    return 0;
}

2.选择法10个整数排序

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() 
{
    int a[10];
    int i, j, tem;
    printf("enter 10 data: \n");
    for (i = 0; i < 10; i++) 
    {
        printf("a[%d]=", i);
        scanf("%d", &a[i]);  
    }
    printf("The orginal numbers:\n");
        for (i = 0; i < 10; i++)
        {
            printf("%5d", a[i]);
        }
    for (i = 0; i < 10; i++) 
    {    
        for (j = i + 1; j < 10; j++) 
        { 
            if (a[i] > a[j]) { 
                tem = a[i];  
                a[i] = a[j];  //将小的值赋值给 a[i]
                a[j] = tem;   //通过中间变量将大的值赋值给a[j],实现从左到右依次增大!
            }
        }
    }
    printf("\nThe sorted numbers: \n");
    for (i = 0; i < 10; i++) 
    {
        printf("%5d", a[i]);
    }
    return 0;
}

3.求一个3*3矩阵对角线元素之和

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int a[3][3], sum = 0;
    int i, j;
    printf("enter data:\n");
    for (i = 0; i < 3; i++)
        for (j = 0; j < 3; j++)
            scanf("%3d", &a[i][j]);
    for (i = 0; i < 3; i++)
        sum = sum + a[i][i];
    printf("sum=%6d\n", sum);
    return 0;
}

4.排好序的数组,插入数,进行排序

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int a[11] = { 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", a[i]);
    printf("\n");
    printf("insert data:");
    scanf("%d", &number);
    end = a[9];
    if (number > end)
        a[10] = number;
    else
    {
        for (i = 0; i < 10; i++)
        {
            if (a[i] > number)
            {
                temp1 = a[i];
                a[i] = number;
                for (j = i + 1; j < 11; j++)
                {
                    temp2 = a[j];
                    a[j] = temp1;
                    temp1 = temp2;
                }
                break;
            }
        }
    }
    printf("Now array a:\n");
    for (i = 0; i < 11; i++)
        printf("%5d", a[i]);
    printf("\n");
    return 0;
}

5.数组逆排序

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define N 5
int main()
{
    int a[N], i, temp;
    printf("enter array a:\n");
    for (i = 0; i < N; i++)
    {
        scanf("%d", &a[i]);
    }
    printf("array a:\n");
    for (i = 0; i < N; i++)
    {
        printf("%4d", a[i]);
    }
    for (i = 0; i < N / 2; i++)            
        //将对称的元素的值互换
    {
        temp = a[i];
        a[i] = a[N - i - 1];
        a[N - i - 1] = temp;
    }
    printf("\nNow,array a:\n");
    for (i = 0; i < N; i++)
    {
        printf("%4d", a[i]);
    }
    return 0;
}

6.输出10行杨辉三角形

#include <stdio.h>
#define N  10
int main()
{
    int i, j, a[N][N];
    for (i = 0; i < N; i++)
    {
        a[i][i] = 1;//00;11;22;33;44;55;66;77;88;99
        a[i][0] = 1;//00;10;20;30;40;50;60;70;80;90
    }
    for (i = 2; i < N; i++)
        for (j = 1; j <= i - 1; j++)
        {
            a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
        }
    for (i = 0; i < N; i++)
    {
        for (j = 0; j <= i; j++)
        {
            printf("%6d", a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

7.魔方阵,每行、每列以及主、副对角线上各n个元素之和都相等

3×3的魔方阵: 
    8   1   6 
    3   5   7 
    4   9   2  

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int a[15][15], 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++)
        {
            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("%5d", a[i][j]);
        printf("\n");
    }
    return 0;
}

8.二维数组鞍点,行最大,列最小

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define N 4//
#define M 5//
int main()
{
    int i, j, k, a[N][M], max, maxj, flag;
    printf("please input matrix:\n");
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < M; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
    for (i = 0; i < N; i++)
    {
        max = a[i][0];              
        maxj = 0;                    
        for (j = 0; j < M; j++)        //找出第i行中的最大数 
            if (a[i][j] > max)
            {
                max = a[i][j];         //将本行的最大数存放在max中
                maxj = j;              //将最大数所在的列号存放在maxj中
            }
        flag = 1;                   //先假设是鞍点,以flag为1代表
        for (k = 0; k < N; k++)
            if (max > a[k][maxj])     //将最大数和其同列元素相比
            {
                flag = 0;             //如果max不是同列最小,表示不是鞍点令flag1为0 
                continue;
            }
        if (flag)                  // 如果flag1为1表示是鞍点 
        {
            printf("a[%d][%d]=%d\n", i, maxj, max);   // 输出鞍点的值和所在行列号 
            break;
        }
    }
    if (!flag)                       // 如果flag为0表示鞍点不存在 
        printf("It is not exist!\n");
    return 0;
}

9.15个数从小到大排序,折半查找

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define  N 15
int main()
{
    int i, number, top, bott, mid, loca, a[N], flag = 1, sign;
    char c;
    printf("enter data:\n");
    scanf("%d", &a[0]);
    i = 1;
    while (i < N)
    {
        scanf("%d", &a[i]);
        if (a[i] >= a[i - 1])
            i++;
        else
            printf("enter this data again:\n");
    }
    printf("\n");
    for (i = 0; i < N; i++)
        printf("%5d", a[i]);
    printf("\n");
    while (flag)
    {
        printf("input number to look for:");
        scanf("%d", &number);
        sign = 0;
        top = 0;            //top是查找区间的起始位置
        bott = N - 1;         //bott是查找区间的最末位置
        if ((number < a[0]) || (number > a[N - 1]))  //要查的数不在查找区间内
            loca = -1;        // 表示找不到
        while ((!sign) && (top <= bott))
        {
            mid = (bott + top) / 2;
            if (number == a[mid])
            {
                loca = mid;
                printf("Has found %d, its position is %d\n