【手把手带你刷好题】--C语言基础编程题(四)

🔥个人主页:@草莓熊Lotso

🎬作者简介:C++研发方向学习者

📖个人专栏: 《C语言》 《数据结构与算法》《C语言刷题集》

⭐️人生格言:生活是默默的坚持,毅力是永久的享受。 

前言:本篇博客是刷题集中的第四篇,题目都是一些比较基础的IO型题目,适合C语言初学者。特别声明一下,这里提供的答案和思路都并非唯一,仅供参考。 


目录

1.时间转换

2.总成绩和平均分计算

3. KiKi喝酸奶 

4.发布信息

5.输出学生信息

6.计算平均成绩   

7.进制A+B

8.网购 

9.争夺前五名


1.时间转换

题目链接:时间转换_牛客题霸_牛客网

 题目描述:

题目示例: 

代码演示: 

#include <stdio.h>

int main() 
{
    int seconds=0;
    scanf("%d",&seconds);
    int h=seconds/3600;
    int temp=seconds%3600;
    int m=temp/60;
    int s=temp%60;
    printf("%d %d %d",h,m,s);
    return 0;
}

题目解析: 

  • 这题我这里先利用seconds除3600得到小时数
  • 再用seconds%3600得到剩余的用temp存起来,再把它除60就是分钟,%60就是秒

2.总成绩和平均分计算

题目链接:总成绩和平均分计算_牛客笔试题_牛客网

题目描述:

 题目示例:

代码演示: 

#include <stdio.h>

int main() 
{
    double sub_one=0.0;
    double sub_two=0.0;
    double sub_three=0.0;
    scanf("%lf %lf %lf",&sub_one,&sub_two,&sub_three);
    double sum=sub_one+sub_two+sub_three;
    double aver=sum/3.0;
    printf("%.2f %.2f",sum,aver);
    return 0;
}

优化后代码:

#include <stdio.h>
int main() {
       int i = 0;
       float sum = 0.0;
       float avg = 0.0;
       float score = 0.0;
       for (i = 0; i < 3; i++)
          {
               scanf("%f", &score);
               sum += score;
         
    }
       avg=sum / 3.0;
       printf("%.2f %.2f\n", sum, avg);
       return 0;
}

题目解析:

  • 我们通过对比两个代码可以发现,在输入的过程中就可以把成绩加起来,不需要等到输入完后再加,最后求平均分直接除3.0就行了
  • 然后这题用floa类型t和double类型都可以

3. KiKi喝酸奶 

题目链接:KiKi和酸奶_牛客题霸_牛客网

题目描述: 

题目示例: 

代码演示: 

#include <stdio.h>

int main() 
{
   int n=0;
   int h=0;
   int m=0;
   while(scanf("%d %d %d",&n,&h,&m)!=EOF)
   {
    int sum=m/h;
    if(m%h==0)
    {
        printf("%d",n-sum);
    }
    else {
        printf("%d",n-(sum+1));
    }

   }

    return 0;
}

题目解析: 

  • 根据题意定义了一个sum变量等于m/h,表示我m分钟喝了多少瓶,这时候就需要分情况讨论了
  • 如果m%h刚好为0就表示没有多打开的,如果不为0就证明打开了一瓶,只不过没有喝完,所以后面求剩的时候就得多减个1

4.发布信息

题目链接:发布信息__牛客网

题目描述: 

代码演示: 

#include <stdio.h>

int main() 
{
    printf("I lost my cellphone!");
    return 0;
}

题目解析: 

  • 这题可以说是太简单了,直接打印就行,就没啥好说的了

5.输出学生信息

题目链接:输出学生信息_牛客笔试题_牛客网

题目描述:

代码演示: 

#include <stdio.h>

int main() 
{
    printf("Name    Age    Gender\n");
    printf("---------------------\n");
    printf("Jack    18     man\n");
    return 0;
}

题目解析:

  • 这题也很简单,直接按照题目所给要求打印就行了,注意格式控制

6.计算平均成绩   

题目链接:计算平均成绩__牛客网

题目描述:

 题目描述:

代码演示: 

#include <stdio.h>

int main() 
{
    int input=0;
    int sum=0;
    for (int i=0;i<5;i++) 
    {
        scanf("%d",&input);
        sum+=input;
    }
    double ave=sum/5.0;
    printf("%.1f",ave);

    return 0;
}

题目解析: 

  • 这题我们可以发现恨上面有一题十分类似,直接在输入的时候加起来,最后再单独求平均数就可以了

7.进制A+B

题目链接:进制A+B_牛客题霸_牛客网

题目描述: 

 题目示例:

代码演示: 

#include <stdio.h>

int main() 
{
    int a=0;
    int b=0;
    scanf("%x %o",&a,&b);
    int sum=a+b;
    printf("%d",sum);
    return 0;
}

题目解析:

  • 首先要理解十进制、十六进制、八进制只是一种数据的表示形式,不是数据的存储形式
  • 不同格式的数据的输出在C语言中有不同的格式指定,比如:%x是十六进制格式,%o就是八进制格式
  • 不同进制的数据存放都整形变量中都是整形值,直接计算就行

8.网购 

题目链接:网购_牛客题霸_牛客网

题目描述:

 题目示例:

代码演示: 

#include <stdio.h>

int main() 
{
    double price=0.0;
    int m=0;
    int d=0;
    int discount=0;
    scanf("%lf %d %d %d",&price,&m,&d,&discount);
    if(m==11&&d==11)
    {
        price=price*0.7;
        if(discount==1)
        {
            price=price-50;
        }
    }
    if(m==12&&d==12)
    {
        price=price*0.8;
        if(discount==1)
        {
            price=price-50;
        }
    }
    if(price<0.0)
    {
        price=0.0;
    }
        printf("%.2lf",price);
    return 0;
}
#include <stdio.h>

int main() 
{
    double price=0.0;
    int m=0;
    int d=0;
    int discount=0;
    scanf("%lf %d %d %d",&price,&m,&d,&discount);
    if(m==11&&d==11)
    {
        price=price*0.7;
    }
    if(m==12&&d==12)
    {
        price=price*0.8;
    }
    price-=discount*50;
    if(price<0.0)
    {
        price=0.0;
    }
        printf("%.2lf",price);
    return 0;
}

题目解析: 

  • 上述两种方法都是可以的,这题只要按照题目要求给定折扣就可以了,然后第二种方法的话更加简略一点,大家可以自己对比起来看看;
  • 注意如果最后价格算出来小于0肯定是不行的,直接让它等于0就可以

9.争夺前五名

题目链接:争夺前五名_牛客题霸_牛客网

题目描述: 

题目示例: 

代码演示: 

--这题我会给三种方式,我个人更喜欢第三种,然后第二种是对第一种的优化,具体优化了啥注意看注释

方法1:这里是直接求的降序,正着打印就行,其实也可以升序后逆着打印,这里就不演示了

#include <stdio.h>
#include<stdlib.h>

int int_cmp(const void* p1, const void* p2) {
    return ((*(int*)p2) - (*(int*)p1));
}
int main() {
    int n = 0;
    int arr[50] = {0};
    scanf("%d\n", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d ", &arr[i]);
    }
    for(int i=0;i<n-1;i++)
    {
        for(int j=1;j<n-i;j++)
        {
            if(arr[j-1]<arr[j])
            {
                int temp=arr[j-1];
                arr[j-1]=arr[j];
                arr[j]=temp;
            }
        }
    }
    for (int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

方法2:如果在其中一趟的时候已经有序,就不用比了直接跳出

#include <stdio.h>
#include<stdlib.h>

int int_cmp(const void* p1, const void* p2) {
    return ((*(int*)p2) - (*(int*)p1));
}
int main() {
    int n = 0;
    int arr[50] = {0};
    scanf("%d\n", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d ", &arr[i]);
    }
    for(int i=0;i<n-1;i++)
    {
        int flag=1;//假设有序
        for(int j=1;j<n-i;j++)
        {
            if(arr[j-1]<arr[j])
            {
                int temp=arr[j-1];
                arr[j-1]=arr[j];
                arr[j]=temp;
                flag=0;//只要交换过就证明还是无序的
            }
        }
        if(flag==1)
        {
            break;//这一趟已经有序了,跳出循环
        }
    }
    for (int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

方法3:直接用库函数qsort进行排序

#include <stdio.h>
#include<stdlib.h>

int int_cmp(const void*p1,const void*p2)
{
    return((*(int*)p2)-(*(int*)p1));//降序用p2-p1
}
int main() {
    int n=0;
    int arr[50]={0};
    scanf("%d\n",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d ",&arr[i]);
    }
    qsort(arr,n,4,int_cmp);
    for(int i=0;i<5;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

题目解析:

  • 本题以上三种方法都可以,如果会用qsort函数可以直接用,不会的话也可以自己来实现冒泡排序,自己实现的话建议使用第二种这种优化过的。
  • 如果想要学习qsort函数的可以点击下面的链接看看这篇博客

【C语言指针超详解(五)】--回调函数,qsort函数的理解和使用,qsort函数的模拟实现


往期回顾:

【手把手带你刷好题】--C语言基础编程题(一)

【手把手带你刷好题】--C语言基础编程题(二)

【手把手带你刷好题】--C语言基础编程题(三)

结语: 本篇文章就到此结束了,C语言刷题集专栏中的第四篇的题目就会比之前几篇困难一些了,涉及到了更过的知识点以及一些方法的应用,后面的难度肯定也是会递增的,但其实也都是比较基础的编程题,非常适合刚学完C语言的朋友们拿来练手,提升自己的代码能力。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值