【C语言程序设计】实验 8
创始人
2024-04-21 14:46:10

目录

1. 整数排序

2. 二维数组按每行数据之和升序 

3. 字符串排序

4. 二维数组各行元素之和

5. 二位整数数组交换两行 

6. 插入排序 

7. 10进制转2进制,8进制和16进制数(数组)


 

1. 整数排序

【问题描述】从键盘输入n(0

【输入形式】先输入n,接着输入n个整数,空格分开
【输出形式】n个排序后的整数,空格分开

【样例输入】

10

6 9 8 7 4 5 1 2 6 8
【样例输出】9 8 8 7 6 6 5 4 2 1
【样例说明】10个整数6 9 8 7 4 5 1 2 6 8 从大到排序后的结果是 9 8 8 7 6 6 5 4 2 1

#include
int main(){
    int n,i,j,t;
    int a[22];
    scanf("%d",&n);
    for(i=0;i
        scanf("%d",&a[i]);
    }
    for(i=0;i
        for(j=i+1;j
            if(a[i]
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
        }
    }
    for(i=0;i
        printf("%d ",a[i]);
    }
    return 0;

2. 二维数组按每行数据之和升序 

【问题描述】将一个4*4二维整数数组按每行数据之和升序排列后输出。(注:计算机二级考试下午试题)

【输入形式】分行输入4个整数,空格分开

【输出形式】按每行数据之和升序排列后分行输出4个整数,空格分开

【样例输入】

2 2 3 4

9 10 11 12

1 3 5 7

5 10 1 20

【样例输出】

2 2 3 4

1 3 5 7

5 10 1 20

9 10 11 12

【样例说明】输入的二维数组各行的和为11,42,16,36,按升序得11,16,36,42,对应的数组输出就是:

2 2 3 4

1 3 5 7

5 10 1 20

9 10 11 12

提示:

定义数组时多定义一列int a[4][5] 放每行的数据之和。c2d1a81e44734ffabe22ff14dbea662e.png 

将第5列排序,交换第5列二个数时同时交换二行。

#include
int main(){
    int a[4][5];
    int i,j,k,t;
    for(i=0;i<4;i++){
        for(j=0;j<4;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<4;i++){
        a[i][4]=0;
        for(j=0;j<4;j++){
            a[i][4]+=a[i][j];
        }
    }
    for(i=0;i<4;i++){
        for(j=i;j<4;j++){
            if(a[i][4]>a[j][4]){
                for(k=0;k<5;k++){
                    t=a[i][k];
                    a[i][k]=a[j][k];
                    a[j][k]=t;                    
                }
            }
        }
    }
    for(i=0;i<4;i++){
        for(j=0;j<4;j++){
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

3. 字符串排序

【问题描述】从键盘输入5个字符串,按字典排序从小到大输出。
【输入形式】分5行输入5个字符串。

【输出形式】分5行输出从小到大排序后的5个字符串。

【样例输入】

dh

325fd

fdgh

lkutyt

pstr

【样例输出】

325fd

dh

fdgh

lkutyt

pstr

#include
#include
int main(){
    char s[5][100],c[100];
    int i,j;
    for(i=0;i<5;i++){
        scanf("%s",&s[i]);
    }
    for(i=0;i<5;i++){
        for(j=i;j<5;j++){
            if(strcmp(s[i],s[j])>0){
                strcpy(c,s[i]);
                strcpy(s[i],s[j]);
                strcpy(s[j],c);
            }
        }
    }
    for(i=0;i<5;i++){
        printf("%s\n",s[i]);
    }

4. 二维数组各行元素之和

【问题描述】从键盘输入一个m行n列的二维整数数组(1

【输入形式】先输入二维数组的行数与列数,空格分开,接着输入m行n列个整数,空格分开。

【输出形式】输出各行元素之和放在第n列,各列元素之和放在第m行之后的矩阵,空格分开。

【样例1输入】

2 2

1 2

3 0

【样例1输出】

1 2 3

3 0 3

4 2 6

【样例1说明】原始数组是2行2列,第一行之和1+2=3,第2行之和3+0=3,第1列之和1+3=4,第2列之和2+0=2,全部元素之和为6.

【样例2输入】

4 3

1 2 3

4 5 6

7 8 9

6 7 8

【样例2输出】

1 2 3 6

4 5 6 15

7 8 9 24

6 7 8 21

18 22 26 66

【样例2说明】原始数组是4行3列,第一行之和1+2+3=6,第2行之和4+5+6=15,... ,第1列之和1+4+7+6=18,第2列之和2+5+8+7=22,……,全部元素之和为66.

#include
int main(){
    int a[10][10];
    int i,j,m,n,s,sum=0;
    scanf("%d %d",&m,&n);
    for(i=0;i
        for(j=0;j
            scanf("%d",&a[i][j]);
            sum+=a[i][j];
        }
    }
    a[m][n]=sum;
    for(i=0;i
        s=0;
        for(j=0;j
            s+=a[i][j];
        }
        a[i][n]=s;
    }
    for(i=0;i
        s=0;
        for(j=0;j
            s+=a[j][i];
        }
        a[m][i]=s;
    }
    for(i=0;i<=m;i++){
        for(j=0;j<=n;j++){
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    return 0;

5. 二位整数数组交换两行 

【问题描述】定义一个2行5列的二维整数数组,从键盘上输入2行5列10个整数,将数组第1行与第2行交换后输出。

【输入形式】分二行输入10个整数,空格分开。
【输出形式】分二行输入10个整数,空格分开。

【样例输入】

1 2 3 4 5

6 7 8 9 10

【样例输出】

6 7 8 9 10

1 2 3 4 5

#include
int main(){
    int a[3][6];
    int i,j;
    for(i=0;i<2;i++){
        for(j=0;j<5;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(i=1;i>=0;i--){
        for(j=0;j<5;j++){
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    return 0;

6. 插入排序 

【问题描述】键盘输入10个整数,将这10个数按从小到大插入排序。

【输入形式】键盘输入10个整数,空格分开。

【输出形式】10个从小到大整数,空格分开。

【样例输入】3 6 9 8 7 4 5 6 1 0
【样例输出】0 1 3 4 5 6 6 7 8 9

#include
int main(){
    int a[11];
    int i,j,t;
    for(i=1;i<=10;i++){
        scanf("%d",&a[i]);
    }
    for(i=2;i<=10;i++){
        a[0]=a[i];
        j=i-1;
        while(j>0&&a[0]
            a[j+1]=a[j];
            --j;
        }
        a[j+1]=a[0];
    }
    for(i=1;i<=10;i++){
        printf("%d ",a[i]);
    }
    return 0;

7. 10进制转2进制,8进制和16进制数(数组)

【问题描述】从键盘输入一个10进制正整数,将它转换成2进制数,8进制和16进制数。
【输入形式】一个不超过10位的10进制正整数

【输出形式】输出上面10进制数的2进制数,8进制数和16进制数,逗号“,”分开

【样例1输入】31

【样例1输出】11111,37,1F

【样例2输入】123456789

【样例2输出】111010110111100110100010101,726746425,75BCD156c0962477911494b82281c6015860596.png 

2348的2进制为100100101100
 2348的8进制为4454
2348的16进制为92C

10进制正整数n转换成m进制数方法:用m去除n,余数放数组a[]中,商放n,直到n=0为止。再逆序输出a[]。

如2348 除2分别得余数 001101001001001,逆序输出就得到二进制数。

2348转16进制,除以16,商146,余12(C),146除以16,商9余2,9除以16,商0余9,逆序后,2348的16进制为92C。

可以这样理解,要求2348的16进制,先求商146的16进制,得92,再加上余数C,得92C为2348的16进制。

#include
int main()
{
    int a[33],b[3]={2,8,16},i,j=0,x,y;
    scanf("%d",&x);
    y=x;
    while(j<3)
    {
        x=y; 
        i=0;
        while (x)
        {
            a[i]=x%b[j]; 
            x/=b[j];
            i++;
        }
        --i;
        while (i>=0)
        {
            printf("%c",a[i]>9?a[i]-10+'A':a[i]+'0');   
            i--;
        }
        if(j<2)printf(",");
        j++;
    }
    printf("\n");
    return 1;

 

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...