吉林大学 中国大学MOOC 高级语言程序设计 第六讲:数组应用-编程题

1

矩阵重复元素检测(10分)

问题描述:编写程序判断任意给定3*3的两维整型数组中是否有相同元素。

输入:从键盘随机输入九个整数,作为数组的元素。

输出:如果数组中有相同元素,则输出“yes”;否则,输出“no”。

提示:OJ所用编译器,不支持bool类型。

样例1  输入 0 1 2 3 4 5 6 7 8   输出 no

样例2 输入 0 0 2 3 4 5 6 7 8   输出 yes

#include<stdio.h>
int main(void)
{
    int a[3][3],b[3][3],i,j,m,n,flag=0;//此题用一维数组表示更简单,但可以练习使用二维数组
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            {
            scanf("%d",*(a+i)+j);
            b[i][j]=a[i][j];
            }
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            for(m=0;m<3;m++)
                for(n=0;n<3;n++)
                    if(b[i][j]==a[m][n]&&(m!=i||n!=j))
                        flag=1;
    if(flag)
        printf("yes");
    else
        printf("no");
}

​

2

索引数组排序(10分)

问题描述:已知5个元素的整型数组 A 未排序,一个索引数组 B 保存 A 的下标。编写程序,在不改变数组A的情况下,只改变数组 B完成对A的排序,如下图所示。

输入:从键盘随机输入五个整数,作为数组A的元素。

输出:第一行输出排序后数组A的五个元素,各元素间无间隔字符;第二行输出数组B排序后的五个元素,各元素间无间隔字符。

样例   输入 10 7 5 8 4

输出 107584

42130

#include <stdio.h>
int main(void)
{
    int a[5],b[5],i,j,k,r,flag=1;
    for(i=0;i<5;i++)
    {
        scanf("%d",a+i);
        b[i]=i;
    }
    while(flag)//冒泡法将a的下标用b数组表示
    {
        flag=0;
        for(i=0;i<4;i++)
        {
            if(a[b[i]]>a[b[i+1]])
            {
                r=b[i];
                b[i]=b[i+1];
                b[i+1]=r;
                flag=1;
            }
        }
    }
    for(i=0;i<5;i++)
        printf("%d",a[i]);
    printf("\n");
    for(i=0;i<5;i++)
        printf("%d",b[i]);
    return 0;
}

3

统计学生成绩(10分)

题目内容:编写一个程序统计某班(人数不超过50人)3门课程的成绩,它们是语文、数学和英语。先输入学生人数, 然后按编号从小到大的顺序依次输入学生成绩, 最后统计每门课程全班的总成绩和平均成绩。

输入:学生人数及每个学生各科成绩(每个学生的成绩占1行)

输出:每门课程全班的总成绩和平均成绩(第1行为各科总成绩,相邻2个数据之间间隔1个空格;第2行为各科平均成绩,相邻2个数据之间间隔1个空格)。

样例

输入:

3

65   76   70

82   79   85

92   82   95

输出:

239  237  250

79 79 83

#include<stdio.h>
int main(void)//此题做法比较像打表,但由于题目只有三科,所以打表可能反而是最简单的
{
    int n,i,j,sum1=0,sum2=0,sum3=0,avg1,avg2,avg3;//avg为average的缩写
    scanf("%d",&n);//事实上此题用一维数组也不难做
    int a[n][3];//注意二维数组,左面的是行右面是列
    for(i=0;i<n;i++)
        for(j=0;j<3;j++)
            scanf("%d",&a[i][j]);
    for(j=0;j<n;j++)
    {
        sum1+=a[j][0];
        sum2+=a[j][1];
        sum3+=a[j][2];
    }
    avg1=sum1/n;
    avg2=sum2/n;
    avg3=sum3/n;
    printf("%d %d %d\n",sum1,sum2,sum3);
    printf("%d %d %d",avg1,avg2,avg3);
    return 0;
}


4

回文数(10分)

题目内容:编写一个程序判定用户输入的一个小于

的非负整数是否为“回文数”,所谓回文数是指正读反读都相同的数。

输入:一个非负整数

输出:YES或NO

样例1:  输入:125521       输出:YES

样例2:  输入:1                 输出:YES

 

#include <stdio.h>
#include <string.h>
int main(void)
{
    char num[100];
    int i,n,flag=1;
    scanf("%s",num);
    n=strlen(num);//strlen为得到字符串的长度
    for(i=n-1;i>=0;i--)
        if(num[i]!=num[n-1-i])
            flag=0;
    if(flag)
        printf("YES");
    else
        printf("NO");
    return 0;
}

5

逆序存放(10分)

题目内容:将一个由10个元素构成的int数组中的元素按逆序重新存放。

输入:10个整数

输出:按逆序重新存放后的数组元素(相邻元素之间用一个空格隔开)

样例  输入:6 8 12 11 3 5 9 16 19 24            输出:24 19 16 9 5 3 11 12 8 6

时间限制:500ms内存限制:32000kb
#include <stdio.h>
int main(void)
{
    int a[10],b[10],i,j,flag=0;
    for(i=0;i<10;i++)//事实上直接scanf("%d",&a[9-i])即可但应该不是本意
        scanf("%d",a+i);
    for(i=0;i<10;i++)
        b[9-i]=a[i];//注意是9-i
    for(i=0;i<10;i++)
    {
        if(flag)//控制空格
            printf(" ");
        printf("%d",b[i]);
        flag=1;
    }
    return 0;
}

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈驰水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值