目录

-C语言每日一练day_4

C语言每日一练——day_4

引言

针对初学者,每日练习几个题,快速上手C语言。第四天。(连续更新中)

采用在线OJ的形式

什么是在线OJ?

在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中用来测试参赛程序的在线系统,也可以用于平时的练习。

详细内容可以看一下这篇博客: [关于C/C++语言的初学者在哪刷题,怎么刷题-CSDN博客

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “关于C/C++语言的初学者在哪刷题,怎么刷题-CSDN博客”)

1. 时间转换

点进去直接做题:

[时间转换_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “时间转换_牛客题霸_牛客网 (nowcoder.com)”) 参考代码:

#include<stdio.h>
int main()
{
    int seconds, h, m, s;
    scanf ("%d",&seconds);

    h=seconds/3600;

    m=(seconds%3600)/60;

    s=(seconds%3600)%60;
    
    printf("%d %d %d",h,m,s);
}

解析:非常简单的一道找规律的题,注意格式的要求

2.总成绩和平均分计算

点进去直接做题:

[总成绩和平均分计算_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “总成绩和平均分计算_牛客题霸_牛客网 (nowcoder.com)”) 参考代码:

#include<stdio.h>
int main() {
    //三科成绩
    double score[3] = {0};
    //输入
    scanf("%lf %lf %lf", &score[0], &score[1], &score[2]);
    //计算
    double sum = score[0] + score[1] + score[2] ;
    double avg = sum / 3.0;
    //输出
    printf("%.2lf %.2lf", sum, avg);
    return 0;
}

解析:非常简单的一道题,不会说明前几天的题,你没有好好做。

这个题也可以用for循环边读边计算,自己可以尝试尝试,不懂的评论区里留言

3. KiKi和酸奶

点进去直接做题: [KiKi和酸奶_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “KiKi和酸奶_牛客题霸_牛客网 (nowcoder.com)”)

参考代码:

#include <stdio.h>
 int main()
 {
 int n = 0;
 int h = 0;
 int m = 0;
 while(scanf("%d %d %d", &n, &h, &m) != EOF)
    {
        if(m%h>0)
        printf("%d\n", n-m/h-1);
        else
        printf("%d\n", n-m/h);
    }

    return 0;
 }

解析:

1. 注意多组输入

2. 如果h分钟喝一瓶酸奶,那么m分钟喝汽水的瓶数就是h/m瓶,但是如果m%h有余数,就说明又打 开了一瓶,只是没来得及喝完,那么位打开的就少一瓶。

4. 发布信息

点进去直接做题

[发布信息_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “发布信息_牛客题霸_牛客网 (nowcoder.com)”) 参考代码:

#include<stdio.h>
int main()
{
    puts("I lost my cellphone!");
    return 0;
}

解析:不会的话…….回家把孩子 (开个玩笑)。

5. 输出学生信息

点进去直接做题:

[输出学生信息_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “输出学生信息_牛客题霸_牛客网 (nowcoder.com)”) 参考代码:

#include <stdio.h>

int main(){
     
    printf("Name    Age    Gender\n");//注意四个空格 和换行
    printf("---------------------\n");
    printf("Jack    18     man\n");//注意五个空格 对齐

    return 0;
}

解析:和上面题一样,主要是锻炼大家的速度和细节(得多写)。

6. 进制A+B

点进去直接做题

[进制A+B_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “进制A+B_牛客题霸_牛客网 (nowcoder.com)”) 参考代码:

#include<stdio.h>
int main(void)
{
    int a,b,result;
    scanf("%x %o",&a,&b);//注意怎么输入十六进制和八进制
    result=a+b;
    printf("%d",result);
    return 0;
}

解析:

**1. 首先要理解十进制、十六进制、八进制 只是一种数据的表示形式,

不是数据的存储形式。**

2. 不同格式的数据的输出在C语言中有不同的格式指定,比如: %x是十六进制格式,%o就是八进制格式。

3. 不同进制的数据存放都整形变量中都是整形值,直接计算就行,计算交给计算机。

7. 网购

点进去直接做题:

[网购_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “网购_牛客题霸_牛客网 (nowcoder.com)”) 参考代码:


代码一:
#include<stdio.h>
 
int main(){
    //获取输入
    double price;
    int m,d,c; //month,day,coupon
    scanf("%lf%d%d%d",&price,&m,&d,&c);
     
    //计算价格并输出
    if(m == 11 && d == 11){ //双十一
        //打七折后再计算是否有优惠券
        price = (price * 0.7) - (50 * c);  // c为0则50*0=0,c为1则50*1=1
         
    } else if(m == 12 && d == 12){ //双十二
        //打八折后与上面同理
        price = (price * 0.8) - (50 * c);
    }
    //输出最后价格
    printf("%.2lf\n",(price > 0 ? price : 0.0));
       
    return 0;
}

代码二:
#include<stdio.h>
 
int main()
{
    double price = 0.0;
    int month = 0;
    int day = 0;
    int flag = 0;
 
    scanf("%lf %d %d %d", &price, &month, &day, &flag);
    if (month == 11 && day == 11)
    {
            price = price * 0.7 - 50.0*flag;
    }
    else if (month == 12 && day == 12)
    {
            price = price * 0.8 - 50*flag;
    }
    if (price < 0)
    {
        printf("0.00\n");
    }
    else
    {
        printf("%.2lf\n", price);
    }
 
    return 0;
}

解析:

把题目意思搞懂,很简单的一道题,注意细节

8.争夺前五名

直接点进去做题

[争夺前五名_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “争夺前五名_牛客题霸_牛客网 (nowcoder.com)”) 参考代码:

//代码一:自己亲自实现排序
int main() {
    int n, temp;
    scanf("%d", &n);
    int m[n];
    for (int i = 0; i < n; i++) {
        scanf("%d ", &m[i]);
    }
    //冒泡排序
    for (int j = 0; j < n; j++) {
        for (int k = 0; k < n; k++) {
            if (m[j] > m[k]) {
                temp = m[j];
                m[j] = m[k];
                m[k] = temp;
            }
        }
    }
    printf("%d %d %d %d %d", m[0], m[1], m[2], m[3], m[4]);
    return 0;
}

//代码二:使用库函数qsoort

 #include <stdio.h>
 
 int cmp_int(const void* e1, const void*e2)//比较函数
 {
 	return *(int*)e1 - *(int*)e2;
 }
 
 int main()
 {
 	int n = 0;
 	int score[40] = {0};
 	scanf("%d", &n);
 	int i = 0;
 	for(i=0; i<n; i++)
    {
 		scanf("%d", &score[i]);
    }
 	//对所有数字排序
	int j = 0;

	//使用库函数排序
	qsort(score, n, 4, cmp_int);

	for(i=0; i<5; i++)
    {
 		printf("%d ", score[--n]);
    }
 return 0;
 }

解析:

1. 要学会使用C语言库函数提供qsort函数。

void qort(void* arr[], int len, int n, int cmp);
//解释:要排列数组的起始地址,数组的长度,一个元素对应的字节,一个比较函数

2. 或者自己实现一个简单的整形数组排序代码。

冒泡排序的动图:(看着代码想,在脑子里模拟一下)

https://i-blog.csdnimg.cn/direct/0413a77a3d1b49a6993fd640bc3bc3c2.gif

9. 竞选社长

点进去直接做题:

[竞选社长_牛客题霸_牛客网 (nowcoder.com)

https://csdnimg.cn/release/blog_editor_html/release2.3.8/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=P1C7 “竞选社长_牛客题霸_牛客网 (nowcoder.com)”) 参考代码:

#include<stdio.h>
int main(void)
{
    char s;
    int coutA=0,coutB=0;
    while((s=getchar())!='0')//关键是要看输入符号结束的设定
    {
        if(s=='A')
            coutA++;
        else
            coutB++;
    }
    if(coutA>coutB)
        printf("A");
    else if(coutA<coutB)
        printf("B");
    else
        printf("E");
    return 0;
}

解析:

本题的解法很多,但本质都是一样的就是代码写的不一样,可以扩展自己的思维多写写。