今天的内容相对于是对前面一部分知识的一个总结,从输入到输出再到格式控制符,没有什么新的内容,但综合性变得有点强,这样的题目对于我这样一个小白感觉挺好的,他是对一阶段的一个小总结,这样的练习确实不错!
1.题目描述
题目描述:
输入一个人的出生日期(包括年月日),将该生日中的年、月、日分别输出。
数据范围:年份满足 ,月份满足 ,日满足
输入描述:
输入只有一行,出生日期,包括年月日,年月日之间的数字没有分隔符。
输出描述:
三行,第一行为出生年份,第二行为出生月份,第三行为出生日期。输出时如果月份或天数为1位数,需要在1位数前面补0。
示例1
输入:
20130225
输出:
year=2013
month=02
date=25
备注:
通过scanf函数的%m格式控制可以指定输入域宽,输入数据域宽(列数),按此宽度截取所需数据;通过printf函数的%0格式控制符,输出数值时指定左面不使用的空位置自动填0。
2.参考代码
代码如下(示例):
#include<stdio.h>
int main()
{
int a;
scanf("%8d",&a);
int b = a/10000;
int c = (a%10000)/100;
int d = (a%10000)%100;
printf("year=%d\nmonth=%02d\ndate=%02d",b,c,d);
}
3.运行结果
4.代码解释
#include<stdio.h>
int main()
{
int a;
/*一个输出函数,这里需要注意的是格式符控制串,%8d那个8是对输入内容的
一个截取,代表取输入内容的前8个*/
scanf("%8d",&a);
//这里b的值是输入内容的前四位 即年份
int b = a/10000;
/*这里的c是a除以10000的余数在去除100,%代表的是去取余数,取得的余数
其实就是后四位,除以100得到中间两位即月份*/
int c = (a%10000)/100;
//两次取余数就得到了最后两位,即日期
int d = (a%10000)%100;
/*这个输出函数要注意的是%02d,那个%0是输出数值时指定左面不使用的空位
置自动填0。这与备注内容一样*/
printf("year=%d\nmonth=%02d\ndate=%02d",b,c,d);
}
该代码是在devc++运行的
【题目来自牛客网】