C语言练习题05

练习1:使用二维数组计算杨辉三角

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    int m,i,j;
    printf("请输入你所要打印的杨辉三角的列数:\n");
    scanf("%d",&m);
    putchar(10);
    int arr[100][100]={0};
    for (int i=0;i<m;i++){
        arr[i][0]=1;
        for(int j=0;j<=i;j++){
                if(i == j){
                    arr[i][j]=1;
                }
                if(i>=2 && j>=1){
                   arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
                }
        }
    }

    for (int i=0;i<m;i++){
        for (int j=0;j<=i;j++){
            printf("%d ",arr[i][j]);
        }
        putchar(10);
    }                                                              
    return 0;
}

练习2:输入一个n个元素的一维数组,计算最大的和,最大差(不允许使用排序)

        最大和:第一大值+第二大值

        最大差:第一大值-最小值

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
    int n;
    printf("请输入数组的长度: ");
    scanf("%d", &n);

    int arr[n];

    printf("请输入数组元素: ");
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    int max1 = arr[0], max2 = arr[0], min = arr[0];

    for (int i = 1; i < n; i++) {
        if (arr[i] > max1) {
            max2 = max1;
            max1 = arr[i];
        } else if (arr[i] > max2 && arr[i] != max1) {
            max2 = arr[i];
        }

        if (arra[i] < min) {
            min = arra[i];
        }
    }

    int max_sum = max1 + max2;
    int max_diff = max1 - min;

    printf("最大和为: %d\n", max_sum);
    printf("最大差为: %d\n", max_diff);

    return 0;
}

练习3:输入一个m行n列的二维数组,计算第二小值

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
    int rows, cols;
    printf("请输入二维数组的行数:\n");
    scanf("%d", &rows);
    printf("请输入二维数组的列数:\n");
    scanf("%d", &cols);

    int arr[rows][cols];
    printf("请输入这个数组:\n");
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            scanf("%d", &arr[i][j]);
        }
    }

    int min = arr[0][0];
    int second_min = arr[0][0];

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            if (arr[i][j] < min) {
                second_min = min;
                min = arr[i][j];
            } else if (arr[i][j] != min && (second_min == min || arr[i][j] < second_min)) {
                second_min = arr[i][j];
            }
        }
    }

    printf("本数组中第二小的数值为:%d\n", second_min);
    return 0;
}                                                                                                 

练习4:输入n个元素的一维数组,输入查找的key值

        如果key出现一次,则输出对应的下标

        如果key没有出现,则提示不存在

        如果key出现多次,则提示出现多次

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
    int n, key;
    printf("请输入数组的长度: ");
    scanf("%d", &n);
    
    int arr[n];

    printf("请输入数组元素: ");
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    printf("请输入要查找的 key 值: ");
    scanf("%d", &key);

    int count = 0;
    for (int i = 0; i < n; i++) {
        if (arr[i] == key) {
            if (count == 0) {
                printf("Key 值 %d 出现的位置: %d\n", key, i);
                count++;
            } else {
                printf("Key 值 %d 出现多次\n");
                return 0;
            }
        }
    }

    if (count == 0) {
        printf("Key 值 %d 不存在\n");
    }

    return 0;
}

练习5:输入一个m行n列的二维数组,输出每一行的和,以及每一列的和

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    int i,j;
    int line_sum,column_sum;
    printf("请输入二维数组的行数:\n");
    scanf("%d",&i);
    printf("请输入二维数组的列数:\n");
    scanf("%d",&j);

    int arr[i][j];
    printf("请输入这个数组:\n");
    for(int m=0;m<i;m++){
        for(int n=0;n<j;n++){
            scanf("%d",&arr[m][n]);
        }
    }

    for (int m=0;m<i;m++){
        line_sum = 0;
        for(int n=0;n<j;n++){
            line_sum+=arr[m][n];
        }
        printf("第%d行的累加和为:%d\n",m+1,line_sum);
    }
    putchar(10);                                                         
    for (int n=0;n<j;n++){
        column_sum = 0;
        for (int m=0;m<i;m++){
            column_sum+=arr[m][n];
        }
        printf("第%d列的累加和为:%d\n",n+1,column_sum);
    }
    return 0;
}

练习6:输入一个m行n列的二维数组,输出正对角线和反对角线的差

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    int i,j;
    int sum=0,rsum=0,diff;
    printf("请输入二维数组的行数:\n");
    scanf("%d",&i);
    printf("请输入二维数组的列数:\n");
    scanf("%d",&j);

    int arr[i][j];
    printf("请输入这个数组:\n");
    for(int m=0;m<i;m++){
        for(int n=0;n<j;n++){
            scanf("%d",&arr[m][n]);
        }
    }
                                                          
    for (int m=0;m<i;m++){
        sum+=arr[m][m];
        rsum+=arr[m][j-m-1];
    }
    diff = sum - rsum;
    printf("正对角线与反对角线的差为:%d\n",diff);
    return 0;
}
                                                        

练习7:输入一个2行3列的二维数组,请实现转置(行列转换)

1 2 3              1 4

4 5 6 ---->      2 5

                      3 6

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    int arr[2][3]={0};
    int r_arr[3][2]={0};
    int t;
    printf("请输入一个2行3列的二维数组:\n");
    for(int i=0;i<2;i++){
        for(int j=0;j<3;j++){
                scanf("%d",&arr[i][j]);
                r_arr[j][i]=arr[i][j];
        }
    }
    printf("转置后的数组为:\n");
    for(int i=0;i<3;i++){
        for(int j=0;j<2;j++){
            printf("%d ",r_arr[i][j]);
        }
        putchar(10);
    }
    return 0;
}                                               

练习8:设float a= 2,b = 4,c =3; C语言表达式(1/2)+(a+b)*c的计算结果是:

答:18.000000

练习9:下述程序执行后的输出结果是:

main()

{

        int x = 'f';

        printf("%c\n",'a'+(x-'a'+1));

}

答:g

练习10:执行语句"k = 7 >> 1;"后,变量k的当前值是:

答:3

练习11:若有宏定义:#define MOD(x,y) x%y

则执行以下语句后的输出结果是:

int a=10, b=94;

printf("%d\n",MOD(b,a+4));

答:8

练习12:下列程序段运行后,x的值是:

int a = 1;b = 2;x = 0;

if(!(--a))x--;

if(!b)x=7;else ++x;

答:0

  • 15
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值