获取每月有多少天
描述
KiKi想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。
输入描述:
多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。
输出描述:
针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。
题目分析
每个月份的天数分别是
31 天的: 1,3,5,7,8,10,12
30 天的: 4,6,9,11
其中而二月份在闰年有29天 在非闰年有28天
那这样我们就很清楚了
我们可以先写一个函数判断是不是闰年
然后按照上面的数据判断并且返回天数就好了
我们首先写一个函数判断是闰年还是非闰年
代码如下
int judge_year(int x) { if ((x%4==0 && x%100 !=0)||(x%400==0)) { return 1; } else { return 0; } }
好啦 第一步任务完成
下一步 我们创建两个变量 本别是year 和 mouth
再按照我们上面写的天数给它们设计返回值
代码如下
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int judge_year(int x) { if ((x%4==0 && x%100 !=0)||(x%400==0)) { return 1; } else { return 0; } } int main() { int year = 0; int mouth = 0; while (scanf("%d %d", &year,&mouth)!=EOF) { switch (mouth) { case 1: printf("%d", 31); break; case 2: if (judge_year(year) == 1) printf("%d", 29); else { printf("%d", 28); } break; case 3: printf("%d", 31); break; case 4: printf("%d", 30); break; case 5: printf("%d", 31); break; case 6: printf("%d", 30); break; case 7: printf("%d", 31); break; case 8: printf("%d", 31); break; case 9: printf("%d", 30); break; case 10: printf("%d", 31); break; case 11: printf("%d", 30); break; case 12: printf("%d", 31); break; } printf("\n"); } return 0; }
博主写这段代码的时候遇到了一个难点 就是不知道如何设计一个恰到好处的循环 (使用while(1)的话时间会溢出)
实际上呢 这个知识点再博主刚刚学习c语言的时候就涉及到了
使用这一行代码就可以轻松解决
while (scanf("%d %d", &year,&mouth)!=EOF)
既解决了输入的问题 又解决了循环的问题 所以说还是要多多练习 这样才能融汇贯通
判断一个数是不是字母
描述
KiKi想判断输入的字符是不是字母,请帮他编程实现。
输入描述:
多组输入,每一行输入一个字符。
输出描述:
针对每组输入,输出单独占一行,判断输入字符是否为字母,输出内容详见输出样例。
这道题在前面的博客中又讲解 这里不再赘述
转换大小写
知识点
大写字母转化成小写字母只需要加上32
核心代码如下
if (ch >= 'A' && ch <= 'Z') printf("%c\n", ch + 32); if (ch >= 'a' && ch <= 'z') printf("%c\n", ch - 32);
这里需要注意的是输入字符的区别
这里还需要注意的有两个点
1 输入字符的时候使用getchar()
记得要用括号
例如
while ((ch=getchar()) != EOF)
如果这里没有加上括号的话就会没有结果
2 虽然getchair()一次只能拿一个字符 缓存区没有被清空 但是实际上拿到下一个字符的时候并不会执行语句
所以这一道oj题 也可以不清空内存
完整代码如下
int main() { char ch; while ((ch=getchar()) != EOF) { char tmp; while ((tmp=getchar())!='\n') { ; } { if (ch >= 'A' && ch <= 'Z') printf("%c\n", ch + 32); if (ch >= 'a' && ch <= 'z') printf("%c\n", ch - 32); } } return 0; }
网购
描述
KiKi非常喜欢网购,在一家店铺他看中了一件衣服,他了解到,如果今天是“双11”(11月11日)则这件衣服打7折,“双12” (12月12日)则这件衣服打8折,如果有优惠券可以额外减50元(优惠券只能在双11或双12使用),求KiKi最终所花的钱数。
数据范围:衣服价格满足 1 \le val \le 100000 \1≤val≤100000
输入描述:
一行,四个数字,第一个数表示小明看中的衣服价格,第二和第三个整数分别表示当天的月份、当天的日期、第四个整数表示是否有优惠券(有优惠券用1表示,无优惠券用0表示)。 注:输入日期保证只有“双11”和“双12”。
输出描述:
一行,小明实际花的钱数(保留两位小数)。(提示:不要指望商家倒找你钱)
这个题目没什么难度 按照题目条件嵌套 if就可以
#include<stdio.h> int main() { // 定义所有的变量 float price; int day = 0; int month = 0; int flag = 0; float cash = 0.00f; //获取所有的变量 //scanf("%.2f &d %d %d",&prise,&mouth,&day,&flag); scanf("%f %d %d %d", &price, &month, &day, &flag); if (month==11&&day==11) { cash = 0.7 * price; if (flag==1) { cash -=50; if (cash<=0) { cash = 0; } } } if (month == 12 && day == 12) { cash = 0.8 * price; if (flag == 1) { cash -= 50; if (cash <= 0) { cash = 0; } } } if ((month != 12 && day != 12) && (month != 11 && day != 11)) { cash = price; } printf("%.2f\n", cash); return 0; }
这里唯一需要注意的点就是浮点数的使用
取值的时候使用scanf(%f)
打印的使用print(%.2f)表示打印两位小数
以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏 希望大佬们看到错误之后能够
不吝赐教 在评论区或者私信指正 博主一定及时修正
那么大家下期再见咯