C语言每日一练——day_4
引言
针对初学者,每日练习几个题,快速上手C语言。第四天。(连续更新中)
采用在线OJ的形式
什么是在线OJ?
在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中用来测试参赛程序的在线系统,也可以用于平时的练习。
详细内容可以看一下这篇博客:关于C/C++语言的初学者在哪刷题,怎么刷题-CSDN博客https://blog.csdn.net/2401_88433210/article/details/146056171?spm=1011.2415.3001.10575&sharefrom=mp_manage_link
1. 时间转换
点进去直接做题:
时间转换_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/c4ae7bcac7f9491b8be82ee516a94899?tpId=107&&tqId=33304&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#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://www.nowcoder.com/practice/0fa5132c156b434da4347ad051c4be22?tpId=107&&tqId=33305&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#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://www.nowcoder.com/practice/c7721f3a1b1a47a783974453e82cadbb?tpId=107&&tqId=33311&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking
参考代码:
#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://www.nowcoder.com/practice/20e59d0f388448c68f581b9d3ca66049?tpId=107&&tqId=33312&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#include<stdio.h>
int main()
{
puts("I lost my cellphone!");
return 0;
}
解析:不会的话.......回家把孩子 (开个玩笑)。
5. 输出学生信息
点进去直接做题:
输出学生信息_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/8e94458049eb4e838f711bbd1be0045e?tpId=107&&tqId=33313&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#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://www.nowcoder.com/practice/6187581174ac48278ca3bccf8d534897?tpId=107&&tqId=33315&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#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://www.nowcoder.com/practice/5d7dfd405e5f4e4fbfdff6862c46b751?tpId=107&&tqId=33318&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
代码一:
#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://www.nowcoder.com/practice/cd052308a1c44a88ad00255f312c3e14?tpId=107&&tqId=33320&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
//代码一:自己亲自实现排序 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)https://www.nowcoder.com/practice/45a30e3ef51040ed8a7674984d6d1553?tpId=107&&tqId=33321&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking参考代码:
#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; }
解析:
本题的解法很多,但本质都是一样的就是代码写的不一样,可以扩展自己的思维多写写。