【C语言】编程初学者入门训练(8)

71. 挂科危险

  • 问题描述:KiKi想知道这学期他的学习情况,BoBo老师告诉他这学期挂的科目累计的学分,根据所挂学分,判断KiKi学习情况,10分以上:很危险(Danger++),4~9分:危险(Danger),0 ~ 3:Good。

  • 输入描述:一行,一个整数(0~30),表示KiKi挂的科目累计的学分。

  • 输出描述:一行,根据输入的挂科学分,输出相应学习情况(Danger++,Danger,Good)。

  • 示例1

    • 输入:14
    • 输出:Danger++
  • 示例2

    • 输入:9
    • 输出:Danger
  • 示例3

    • 输入:1
    • 输出:Good
  • 代码实现

#include<stdio.h>
int main()
{
    int a = 0;
    scanf("%d", &a);

    if (a >= 10)
        printf("Danger++\n");
    else if (a >= 4 && a <= 9)
        printf("Danger\n");
    else
        printf("Good\n");

    return 0;
}

72. HTTP状态码

  • 问题描述:KiKi访问网站,得到HTTP状态码,但他不知道什么含义,BoBo老师告诉他常见HTTP状态码:200(OK,请求已成功),202(Accepted,服务器已接受请求,但尚未处理。)400(Bad Request,请求参数有误),403(Forbidden,被禁止),404(Not Found,请求失败),500(Internal Server Error,服务器内部错误),502(Bad Gateway,错误网关)。

  • 输入描述:多组输入,一行,一个整数(100~600),表示HTTP状态码。

  • 输出描述:针对每组输入的HTTP状态,输出该状态码对应的含义,具体对应如下:

200-OK
202-Accepted
400-Bad Request
403-Forbidden
404-Not Found
500-Internal Server Error
502-Bad Gateway
  • 示例

    • 输入:200
    • 输出:OK
  • 代码实现

#include <stdio.h>

int main()
{
        int HTTP;
        while(scanf("%d",&HTTP) != EOF)
        {
                switch(HTTP)
                {
                        case 200:printf("OK\n");break;
                        case 202:printf("Accepted\n");break;
                        case 400:printf("Bad Request\n");break;
                        case 403:printf("Forbidden\n");break;
                        case 404:printf("Not Found\n");break;
                        case 500:printf("Internal Server Error\n");break;
                        case 502:printf("Bad Gateway\n");break;
                }
        }
        return 0;
}

73. 数字三角形

  • 问题描述:KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用数字组成的数字三角形图案。

  • 输入描述:多组输入,一个整数(3~20),表示数字三角形边的长度,即数字的数量,也表示输出行数。

  • 输出描述:针对每行输入,输出用数字组成的对应长度的数字三角形,每个数字后面有一个空格。

  • 示例1

输入:4
输出:
1
1 2
1 2 3
1 2 3 4
  • 示例2
输入:5
输出:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
  • 代码实现
#include <stdio.h>
 
int main()
{
    int n;
    while(scanf("%d",&n) != EOF)
    {
        for(int i = 1;i <= n;i++)
        {
            for(int j = 1;j <= i;j++)//i行就打印i列
            {
                printf("%d ",j);              
            }
            putchar('\n');
        }
    }
    return 0;
}

74. 公务员面试

  • 问题描述:公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分制),去掉一个最高分和一个最低分,输出每组的平均成绩。
    (注:本题有多组输入)
  • 输入描述:每一行,输入7个整数(0~100),代表7个成绩,用空格分隔。
  • 输出描述:每一行,输出去掉最高分和最低分的平均成绩,小数点后保留2位,每行输出后换行。
  • 示例
    • 输入:99 45 78 67 72 88 60
    • 输出:73.00
  • 解题思路:一边输入,一边求和,一边求最大最小值,最后求平均值。
  • 代码实现
#include <stdio.h>
int main()
{
    float n[7];
    while(scanf("%f %f %f %f %f %f %f", 
        &n[0],&n[1],&n[2],&n[3],&n[4],&n[5],&n[6]) != EOF)
    {
        int max = 0, min = 100, s = 0;
        for(int i = 0; i < 7; i++)
        {
            if(n[i] > max)
                max = n[i];
            if(n[i] < min)
                min = n[i];
            s = s+n[i];
        }
        printf("%.2f\n", (s-max-min)/5.0);
    }
    return 0;
}

75. 有序序列插入一个数

  • 问题描述:有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。

  • 输入描述

    • 第一行输入一个整数(0≤N≤50)。

    • 第二行输入N个升序排列的整数,输入用空格分隔的N个整数。

    • 第三行输入想要进行插入的一个整数。

  • 输出描述:输出为一行,N+1个有序排列的整数。

  • 示例

输入:
	5
	1 6 9 22 30
	8
输出:1 6 8 9 22 30
  • 解题思路:从后往前比较一定数字找到合适的位置,就可以插入数字了,但是如果插入的数字比所有的元素都小,那就插入到第一个位置上。
  • 代码实现
#include <stdio.h>
int main()
{
        int n,i;
        int arr[51] = {0};
        int m;//要插入的数字

        scanf("%d",&n);//输入个数

        for(i = 0;i < n;i++)//输入有序的数字
        {
                scanf("%d",&arr[i]);
        }

        scanf("%d",&m);//输入要插入的数字

        //从后往前一个一个的找,
        //找到第一个比m小的数则将m放在它后面
        for(i = n-1;i >= 0;i--)
        {
                if(m < arr[i])
                {
                        arr[i + 1] = arr[i];//将比m大的数往后移动
                }
                else
                {
                        arr[i + 1] = m;//插在比m小的数字后面
                        break;
                }
        }
        if(i < 0)//数组中所有元素都比m大
        {
                arr[0] = m;//将m放到第一个位置
        }
        for(i = 0;i < n+1;i++)
        {
                printf("%d ",arr[i]);
        }
        return 0;
}

76. 筛选法求素数

  • 问题描述:用筛选法求n以内的素数。筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0 的数即为素数。
  • 输入描述:多组输入,每行输入一个正整数(不大于100)。
  • 输出描述:针对每行输入的整数n,输出两行,
    • 第一行,输出n之内(包括n)的素数,用空格分隔,
    • 第二行,输出数组中2之后被清0 的个数。每行输出后换行。
  • 示例
输入:20
输出:2 3 5 7 11 13 17 19
	 11
  • 代码实现
#include <stdio.h>
int main()
{
        int n;
        while(scanf("%d",&n) != EOF)
        {
                int i,arr[101];
                for(i = 2;i <= n;i++)//将2到n之间的数存起来
                {
                        arr[i] = i;
                }
                int j;
                for(j = 2;j <= n;j++)//列举所有的除数:2~n
                {
                        int k;
                        //用j之后的数来除j
                        for(k = j + 1;k <= n;k++)
                        {
                                //j之后的数 % j如果等于0,则将其置为0
                                if(0 == arr[k] % j)
                                {
                                        arr[k] = 0;
                                }
                        }
                }
                int count = 0;
                //输出并记录
                for(i = 2;i <= n;i++)
                {
                        if(arr[i] != 0)//这就是筛选出来的素数
                        {
                                printf("%d ",arr[i]);
                        }
                        else    count++ ;
                }
                printf("\n%d\n",count);//在第二行打印被清零的数的个数
        }
        return 0;
}

77. 图像相似度

  • 问题描述:给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。

  • 输入描述:第一行包含两个整数m和n,表示图像的行数和列数,用单个空格隔开。1≤m≤100, 1≤n≤100。之后m行,每行n个整数0或1,表示第一幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。之后m行,每行n个整数0或1,表示第二幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。

  • 输出描述:一个实数,表示相似度(以百分比的形式给出),精确到小数点后两位。

  • 示例

输入:
	3 3
	1 0 1
	0 0 1
	1 1 0
	1 1 0
	0 0 1
	0 0 1
输出:
	44.44
  • 代码实现
#include <stdio.h>
int main()
{
        int m,n;
        int arr1[100][100] = {0};//m 和n最大取值都是100
        int arr2[100][100] = {0};
        int count = 0;//统计有多少个位置上的数相等      

        scanf("%d %d",&m,&n);
        int i,j;
        for(i = 0;i < m;i++)//m行
        {
                for(j = 0;j < n;j++)//n列
                {
                        scanf("%d",&arr1[i][j]);
                }
        }
        for(i = 0;i < m;i++)//m行
        {
                for(j = 0;j < n;j++)//n列
                {
                        scanf("%d",&arr2[i][j]);
                }
        }
        for(i = 0;i < m;i++)
        {
                for(j = 0;j < n;j++)
                {
                        if(arr1[i][j] == arr2[i][j])
                        {
                                count++ ;
                        }
                }
        }
        printf("%.2f\n",100.0 * count / (m * n));
        return 0;
}

78. 登录验证

  • 问题描述:有个软件系统登录的用户名和密码为(用户名:admin,密码:admin),用户输入用户名和密码,判断是否登录成功。
  • 输入描述:多组测试数据,每行有两个用空格分开的字符串,第一个为用户名,第二个为密码。
  • 输出描述:针对每组输入测试数据,输出为一行,一个字符串(“Login Success!”或“Login Fail!”)。
  • 示例1
    • 输入:admin admin
    • 输出:Login Success!
  • 示例2
    • 输入:admin abc
    • 输出:Login Fail!
  • 代码实现
#include <stdio.h>
#define MAX 100
#include <string.h>

int main()
{
        char name[MAX];
        char code[MAX];

        while(scanf("%s %s",&name,&code) != EOF)
        {
                if(!strcmp(name,"admin") && !strcmp(code,"admin"))
                {
                        printf("Login Success!\n");
                }
                else
                {
                        printf("Login Fail!\n");
                }
        }

        return 0;
}

79. 学好C++

  • 问题描述:C++是带类的C语言,这个“++”主要包含三部分内容:对C语言进行语法上的扩展、面向对象(封装、继承和多态),STL(即模板)。这学期你将学习C++,学好C++,其他编程语言都可以很轻松掌握。

  • 输入描述:无

  • 输出描述:I will learn C++ well!

  • 代码实现

//学好C++

#include<stdio.h>

int main()
{
        printf("I will learn C++ well!\n");
    
        return 0;
}

80. (a+b-c)*d的计算问题

  • 问题描述:这是一个非常简单的题目,意在考察你编程的基础能力。千万别想难了哦。输入为一行,包括了用空格分隔的四个整数a、b、c、d(0 < a, b, c, d < 100,000)。输出为一行,为“(a+b-c)*d”的计算结果。

  • 输入描述:输入为一行,用空格分隔的四个整数a、b、c、d(0 < a, b, c, d < 100,000)。

  • 输出描述:输出为一行,为“(a+b-c)*d”的计算结果。

  • 示例

    • 输入:1 3 2 4
    • 输出:8
  • 代码实现

#include <stdio.h>

int main()
{
        int a,b,c,d;
        scanf("%d %d %d %d",&a,&b,&c,&d);

        printf("%d\n",(a + b- c) * d);

        return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值