-C语言每日一练day_4
C语言每日一练——day_4
引言
针对初学者,每日练习几个题,快速上手C语言。第四天。(连续更新中)
采用在线OJ的形式
什么是在线OJ?
在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中用来测试参赛程序的在线系统,也可以用于平时的练习。
详细内容可以看一下这篇博客: [关于C/C++语言的初学者在哪刷题,怎么刷题-CSDN博客
“关于C/C++语言的初学者在哪刷题,怎么刷题-CSDN博客”)
1. 时间转换
点进去直接做题:
[时间转换_牛客题霸_牛客网 (nowcoder.com)
“时间转换_牛客题霸_牛客网 (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)
“总成绩和平均分计算_牛客题霸_牛客网 (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)
“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)
“发布信息_牛客题霸_牛客网 (nowcoder.com)”)
参考代码:
#include<stdio.h>
int main()
{
puts("I lost my cellphone!");
return 0;
}
解析:不会的话…….回家把孩子 (开个玩笑)。
5. 输出学生信息
点进去直接做题:
[输出学生信息_牛客题霸_牛客网 (nowcoder.com)
“输出学生信息_牛客题霸_牛客网 (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)
“进制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)
“网购_牛客题霸_牛客网 (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)
“争夺前五名_牛客题霸_牛客网 (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. 或者自己实现一个简单的整形数组排序代码。
冒泡排序的动图:(看着代码想,在脑子里模拟一下)
9. 竞选社长
点进去直接做题:
[竞选社长_牛客题霸_牛客网 (nowcoder.com)
“竞选社长_牛客题霸_牛客网 (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; }
解析:
本题的解法很多,但本质都是一样的就是代码写的不一样,可以扩展自己的思维多写写。