SCAUoj实验7_数组的应用_堂前习题&&堂上练习

一、堂前习题

1.由键盘输入10个整数,倒序输出。
输入样例
70
5
14
20
19
2
99
67
13
66
输出样例
66
13
67
99
2
19
20
14
5
70

代码如下(示例):

#include <stdio.h>
int main()
{
    int arr[10]={0},i = 0;
    int sz = sizeof(arr)/sizeof(arr[0]);
    for(i=0;i<10;i++)
    {
        scanf("%d",&arr[i]);
    }
    for(i=0;i<sz/2;i++)
    {
        while(i<sz-1)
      {
        int temp = 0;
        temp = arr[i];
        arr[i] = arr[sz-1];
        arr[sz-1] = temp;
        i++;
        sz--;
      }
    }
    for(i=0;i<10;i++)
    {
        printf("%d\n",arr[i]);
    }
    return 0;
}

上面是正经解法,下面我们看看不太正经的解法:你会发现下面的解法根本就没有涉及任何交换之类的操作,只是输入了10个数,然后倒着输出来。可以理解成这是从题目的结果思考解题方法,作为答案提交上去是不会有任何问题的,因为你确实得到了答案,并且采用了特别简单的方法。但是话说回来我不觉得这对形成良好的编程逻辑有什么帮助。(比赛或者考试真的可以用这种的,只要能得到答案就好了,平时练习还是不太建议,个人观点)

#include<stdio.h>
int main ()
{
    int a[10],i;
    for(i=0;i<10;i++)//循环输入
        scanf("%d",&a[i]);
    for(i=9;i>=0;i--)//循环输出
        printf("%d\n",a[i]);
    return 0;
}

2.由键盘输入一个3*4的矩阵,要求输出它的转置矩阵。
输入格式 3行4列的矩阵,数与数之间由一个空格分隔
输出格式 4行3列的矩阵,数与数之间由一个空格分隔
输入样例
1 6 9 3
1 1 0 2
1 9 8 9
输出样例
1 1 1
6 1 9
9 0 8
3 2 9

代码如下(示例):

#include<stdio.h>
int main()
{
    int i = 0,j = 0,arr1[3][4],arr2[4][3];//再开一个数组
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            scanf("%d",&arr1[i][j]);
        }
    }
    for(i=0;i<4;i++)
    {
        for(j=0;j<3;j++)
        {
            arr2[i][j] = arr1[j][i];//转置矩阵就是行都变成列
            printf("%d ",arr2[i][j]);
        }
        printf("\n");
    }
    return 0;
}

二、堂上练习

1.由键盘输入10个数,用“冒泡法”对10个数从小到大排序,代码如下,请填充完整。
#include “stdio.h”
main()
{ int a[10], i, j, t;
for(i=0;i<10;i++)
scanf(“%d”,) ;
for(
)
{ for(j=0;j<;j++)
if (
)
{_______________________}
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
输入样例
70 5 14 20 19 2 99 67 13 66
输出样例
2 5 13 14 19 20 66 67 70 99

代码如下(示例):

#include "stdio.h"
main(){
   int a[10], i, j, t;
   for(i=0;i<10;i++)
      scanf("%d",&a[i]);
   for(i=0;i<9;i++)
   {
        for(j=0;j<9-i;j++)
        //小的数放最前
        if(a[j]>a[j+1])
        {
            t=a[j];
            a[j]=a[j+1];
            a[j+1]=t;
        }
   }
   for(i=0;i<10;i++)
      printf("%d ",a[i]);
}

2.由键盘输入20个整数,统计不同数字的个数。
输入样例
70 5 14 22 19 2 99 67 13 66 5 93 44 38 22 11 39 22 33 11
输出样例
16(因为5有1个重复数字,11有1个重复数字,22有2个重复数字)

代码如下(示例):

#include<stdio.h>
int main()
{
    int a[20],i,t,p=0;
    for(i=0;i<20;i++)
    {
        scanf("%d",&a[i]);
        //输入数与它前面前面的数一一对比
        for(t=0;t<i;t++)//划重点!!!
        {
            if(a[t] == a[i])//发现有相同的就跳出
                break;
        }
        if(t == i)//若上面跳出了,t是不等于i的。
        //若没有跳出,则上面的t++已经等于i了
            p++;
    }
    printf("%d\n",p);
    return 0;
}

或者

#include <stdio.h>
int main()
{
    int arr[20] = {0};
    int i = 0,j = 0,n = 20;
    for(i = 0;i<20;i++)
    {
        scanf("%d",&arr[i]);
    }
    for(i = 0;i<19;i++)
    {
        for(j = i + 1;j<20;j++)
        {
            if(arr[i] == arr[j])
            {
                n--;
                break;//记得哦
            }
        }
    }
    printf("%d",n);
    return 0;
}

3.由键盘输入一个3*4(3行4列)的数字矩阵,其中任意两个数字均不相同。要求输出该数字矩阵中的鞍点(即在矩阵行中最大,列中最小的数)。
若没有鞍点,输出“NO”字样。
输入样例
87 90 110 98
70 97 210 65
99 45 120 30
输出样例
110

代码如下(示例):

#include <stdio.h>
int main()
{
    int arr[3][4] = {0},i = 0,j = 0,t = 0,x = 0,m = 0;
    for(i = 0;i<3;i++)
    {
        for(j = 0;j<4;j++)
        {
            scanf("%d",&arr[i][j]);
        }
    }
    for(i = 0;i<3;i++)
    {
        m = arr[i][0];
        for(j = 1;j<4;j++)
        {
            if(arr[i][j]>m)
            {
                m = arr[i][j];
                t = j;
            }
        }
        for(x = 0;x<3;x++)
        {
            if(m > arr[x][t])
            {
                break;
            }
        }
        if(x == 3)
        {
            printf("%d",arr[i][t]);
            return 0;
        }
    }
    if(i == 3 && j == 4)
    {
        printf("NO");
    }
    return 0;
}

高精度加法在下一篇

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值