首页 > 其他分享 >C语言练习题05

C语言练习题05

时间:2024-06-13 19:32:07浏览次数:21  
标签:练习题 arr 05 int min C语言 数组 printf include

练习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

标签:练习题,arr,05,int,min,C语言,数组,printf,include
From: https://blog.csdn.net/m0_59481131/article/details/139635949

相关文章

  • C语言练习题04
    练习1:输入一个5个元素的一维数组,实现冒泡排序。#include<stdio.h>#include<string.h>#include<stdlib.h>intmain(intargc,constchar*argv[]){ inttemp; inta[5]={0}; for(inti=0;i<5;i++) { printf("请输入一个数:\n"); scanf("%d"......
  • JAVA面向对象练习题2
    题目要求:        定义一个Student实体类,成员变量:name、age。静态成员变量:在线人数。在测试类中:创建集合,存储学生对象,每创建一个学生对象,在线人数+1,删除一个学生对象,在线人数-1定义方法完成:请给集合中存储3个学生对象,并遍历集合,并输出在线人数。定义方法完成:请判断......
  • c语言编译器的分类
    前言在上节《C语言编译和链接》中我们已经讲解了C语言编译器的概念,由于C语言的历史比较久,而且早期没有规范,整个计算机产业也都处于拓荒的年代,所以就涌现了很多款C语言编译器,它们各有特点,适用于不同的平台,本节就来给大家科普一下。我们分两部分介绍C语言的编译器,分别是......
  • C语言题目:排序问题2
    题目描述将十个数进行从大到小的顺序进行排列输入格式十个整数输出格式以从大到小的顺序输出这个十个数样例输入12345678910样例输出10987654321代码解析1.引入头文件代码首先引入了stdio.h头文件,这是C语言标准输入输出库,用于处理输入输出......
  • 【C语言】文件操作
    1.为什么需要文件操作2.文件的打开与关闭3.文件指针4.文件的打开与关闭5.fopen6.函数声明7.文件的打开方式8.函数使用9.fclose10.函数声明11.函数使用12.文件的顺序读写13.fgetc与fputc14.函数声明15.函数使用16.fgets与fputs17.函数声明18.函数使用19.fscan......
  • 10.C语言for循环和跳出循环的知识点
    C语言for循环、continue和break知识点3.13for循环3.14for的一些用法3.15continue和break的作用3.16嵌套的规律3.17—作业3.13for循环概述和while的对比#include<stdio.h>intmain(){ intdata; //for(条件附初值;判断临界点;条件改变)//判断、执行循......
  • (天源)代理 TP4056 SOP-8 1A 锂电池充电器
    产品描述TP4056是一款单节锂离子电池恒流/恒压线性充电器,采用底部带散热片的SOP8封装以及简单的外部应用电路,非常适合便携式设备应用,适合USB电源和适配器电源工作,内部采用防倒充电路,不需要外部隔离二极管。热反馈可对充电电流进行自动调节,以便在大功率操作或高......
  • 用于将字节进行base64编码或解码(C语言实现)
    V1.02024年6月13日发布于博客园目录base64.hbase64.c基本原理见代码注释!base64.h#ifndef_BASE64_H#define_BASE64_H/***@filename:base64.h*@brief:用于将字节进行base64编码或解码*@author:[email protected]*@date:2024年6......
  • zzulioj1042答案c语言
    ​(方法一:使用函数体)#include<stdio.h>#include<math.h>intt;//t输入这里的t是一个全局变量doubleturn(doublem,doublen,doublea,doublesum,doubleflag);intmain(){doublem,n,a,sum=0,flag=1;//m分子,n分母,a项数,sum和,flag变换符号scanf("%d",......
  • 动态内存管理<C语言>
    导言       在C语言学习阶段,指针、结构体和动态内存管理,是后期学习数据结构的最重要的三大知识模块,也是C语言比较难的知识模块,但是“天下无难事”,只要认真踏实的学习,也能解决,所以下文将介绍动态内存管理涉及到的一些函数以及概念。目录导言为什么存在动态内存管理......