SCAU程序设计在线实训平台_实验_高级语言程序设计_教材习题_第六章

写在前面:

本系列博客所有代码均为个人学习记录。并非标准例程,也不是最优解。遇到问题多点思考、少点借鉴,才能向前冲冲冲!

1、插入数据(题目编号:18052):

描述:

已经有一个按升序排列的数组,编写程序输入一个整数x,把x插入到数组中,使数组仍然保持升序。
数组如下:
2 3 5 7 11 13 17 23 29 31 34 71 79 97 103

#include <stdio.h>
int a[16]={2, 3, 5, 7, 11, 13, 17, 23, 29, 31, 34, 71, 79, 97, 103};
void display()
{
    int i;
    for(i=0; i<16; i++) printf("%d ", a[i]);
}
int main()
{
_______________________
    display();
    return 0;
}
输入格式:

输入一个整数x

输出格式:

输出更新后的数组元素

输入样例:

5

代码实现(参考):
#include <stdio.h>
int a[16]={2, 3, 5, 7, 11, 13, 17, 23, 29, 31, 34, 71, 79, 97, 103};
void display()
{
    int i;
    for(i=0; i<16; i++) printf("%d ", a[i]);
}
int main()
{   
    int i,n;
    scanf("%d",&n);
    for(i=15;i>=0;i--){
        a[i+1]=a[i];        //可以思考为什么倒着来
        if(a[i-1]<=n)break;
    }
    a[i]=n;
    display();
    return 0;
}
系统标程(参考):
$block1$
    int n,i;
    scanf("%d", &n);
    for(i=14; i>=0; i--)
        if(a[i]>n) a[i+1]=a[i];
        else break;
    a[i+1]=n;
$end1$

2、大于平均分(题目编号:18053):

描述:

输入10个整数,计算它们的平均值,并统计有多少个数比平均值大。

输入格式:

10个整数

输出格式:

比平均值大的数的个数

输入样例:

0 1 2 3 4 5 6 7 8 9

输出样例:

5

代码实现(参考):
#include <stdio.h>
int a[10]={0};

int main()
{
    int count=0;
    double sun=0;
    for(int i=0;i<10;i++){
        scanf("%d",&a[i]);
    }

    for(int i=0;i<10;i++){
        sun+=a[i];
    }

    for(int i=0;i<10;i++){
        if(a[i]>sun/10.0)count++;
    }
    printf("%d",count);
    return 0;
}

3、输出不同的数(题目编号:18054):

描述:

输入10个整数,输出其中不同的数,即如果一个数出现了多次,只输出一次。

输出格式:

依次输出不同的数字(一行一个,从上到下依次输出先出现的数)

输入样例:

1 2 1 3 3 2 4 5 5 9

输出样例:

1
2
3
4
5
9

代码实现(参考):
#include <stdio.h>
int a[10]={0};
int main()
{
    double sun=0;
    for(int i=0;i<10;i++){
        scanf("%d",&a[i]);
    }

    for(int i=0;i<10;i++){
        int flag=1;
        for(int j=0;j<i;j++){
            if(a[i]==a[j])flag=0;
        }
        if(flag)printf("%d\n",a[i]);
    }
    return 0;
}
系统标程(参考):

标程的思路更加简洁,值得学习

#include"stdio.h"
main()
{   int a[20];
    int i,t,p=0;
    for(i=0;i<10;i++)
    {   scanf("%d",&a[i]);
        for(t=0;t<i;t++)
            if(a[t]==a[i])break;
        if(t==i)
          printf("%d\n", a[i]);
    }
} 

4、主对角线上的元素之和(题目编号:18055):

描述:

输入一个3行4列的整数矩阵,计算并输出主对角线上的元素之和

输入格式:

3行4列整数矩阵

输出格式:

主对角线上的元素之和

输入样例:

1 2 3 4
5 6 7 8
9 10 11 12

输出样例:

18

提示:

1、6和11

代码实现(参考):
#include <stdio.h>
int a[12];
int main()
{
    int sun=0;
    for(int i=0;i<12;i++){
        scanf("%d",&a[i]);
    }
    sun = a[0]+a[5]+a[10];		//这题我直接迷惑
    printf("%d",sun);
    return 0;
}

没有标程就离谱

5、找矩阵中的鞍点(题目编号:1051):

描述:

由键盘输入一个3*4(3行4列)的矩阵,输出矩阵中的鞍点(即在矩阵行中最大,列中最小的数)。
若没有鞍点,输出“NO”字样。

输入样例:

87 90 110 98
70 97 210 65
98 45 120 30

输出样例:

110

代码实现(参考):
#include <stdio.h>
int a[3][4];
int main()
{
    //输入
    for(int i=0;i<3;i++){
        for(int j=0;j<4;j++){
            scanf("%d",&a[i][j]);
        }
    }

    int flag,i,maxCol;

    for(i=0;i<3;i++){
        maxCol=0;
        for(int j=1;j<4;j++){
            if(a[i][j]>a[i][maxCol])maxCol=j;
        }
        flag=1;
        for(int j=0;j<3;j++){
            if(a[i][maxCol]>a[j][maxCol]&&j!=i)flag=0;
        }
        if(flag){
            printf("%d",a[i][maxCol]);
            return 0;
        }

    }

    printf("NO");
    return 0;

}

没写出来,抄标程的

6、字母统计(题目编号:18056):

描述:

输入三行字符串(每行以换行回车为结束符),每行不超过80个字符。统计并输出其有多少个大写字母。

输入格式:

三行字符串

输出格式:

大写字母个数

输入样例:

A-1 123
ABC abc
G

输出样例:

5

代码实现(参考):
#include <stdio.h>

int main(){
    int i,j,count=0;
    char ch;
    for (i=1; i<=3; i++){
        for (j=1; j<=80; j++){
            ch=getchar();
            if (ch>='A'&&ch<='Z')count++;
            if (ch == '\n')break;
        }
    }
    printf ("%d",count);
}

7、回文串(题目编号:1145):

描述:

读入一行字符串(不多于80个字符,以回车结束),判断该字符串是否为回文串(即从左向右拼写与从右向左拼写是一样的),是则输出Y,不是则输出N。

输入格式:

一行字符串

输出格式:

是则输出Y,不是则输出N

输入样例:

abba

输出样例:

Y

提示:

input:
abcba
output:
Y


input:
abc
output:
N

系统标程(参考):
#include "stdio.h"
#include "string.h"
main()
{ 
	int i, j;
    char buf[100];
    scanf("%s",buf);
    for(i=0, j=strlen(buf)-1;i<j; i++, j--)
        if(buf[i]!=buf[j]) break;
   if(i>=j)
        printf("Y");
    else
        printf("N");
}

回文串是真的做了无数遍

8、ASCII码值之和的差(题目编号:18057):

描述:

输入两个字符串s1和s2(每个串占一行,以换行回车符结束),计算两个字符串的所有字符的ASCII码值之和的差。

输入格式:

两行字符,第行字符不超过80个字符

输出格式:

ASCII码值之和的差

输入样例:

234
123

输出样例:

3

代码实现(参考):
#include <stdio.h>
int main(){
    int ascii1=0,ascii2=0;
    for (int j=0; j<=80; j++){
        char ch;
        ch=getchar();
        ascii1+=ch;
        if (ch == '\n')break;
    }
    for (int j=0; j<=80; j++){
        char ch;
        ch=getchar();
        ascii2+=ch;
        if (ch == '\n')break;
    }
    printf ("%d",ascii1-ascii2);
}
系统标程:
#include <stdio.h>
int sum(char *s)
{
    int t=0,i=0;
    while(s[i]!='\0')
        t+=s[i++];
    return t;
}
int main()
{
    char s1[81],s2[82];
    gets(s1);
    gets(s2);
    printf("%d", sum(s1)-sum(s2));
   return 0;
}

标程运用了指针、值得学习

本文加入了标程的对比

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值