c语言报时助手

报时助手

问题描述
  给定当前的时间,请用英文的读法将它读出来。
  时间用时h和分m表示,在英文的读法中,读一个时间的方法是:
  如果m为0,则将时读出来,然后加上“o’clock”,如3:00读作“three o’clock”。
  如果m不为0,则将时读出来,然后将分读出来,如5:30读作“five thirty”。
  时和分的读法使用的是英文数字的读法,其中0~20读作:
  0:zero, 1: one, 2:two, 3:three, 4:four, 5:five, 6:six, 7:seven, 8:eight, 9:nine, 10:ten, 11:eleven, 12:twelve, 13:thirteen, 14:fourteen, 15:fifteen, 16:sixteen, 17:seventeen, 18:eighteen, 19:nineteen, 20:twenty。
  30读作thirty,40读作forty,50读作fifty。
  对于大于20小于60的数字,首先读整十的数,然后再加上个位数。如31首先读30再加1的读法,读作“thirty one”。
  按上面的规则21:54读作“twenty one fifty four”,9:07读作“nine seven”,0:15读作“zero fifteen”。
输入格式
  输入包含两个非负整数h和m,表示时间的时和分。非零的数字前没有前导0。h小于24,m小于60。
输出格式
  输出时间时刻的英文。
样例输入
0 15
样例输出
zero fifteen

问题分析:

对于时间读数问题,需要考虑的细节有一下几个:

0,设置两个数组,分别用来存储 0-20,以及 整十(20,30,40,50) 的英文
1,是否是整点数
2,时钟数是否超过 20
3,分钟数是否超过 20 
4,整十 数组第一个 和 第二个 数据元素为 " "," ",这样 在大于 20 的分割下 输出 比较方便

代码演示(已验证):

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) 
{
	int h, m,s,t,k;	// h,m 输入 s--b[]数组输出的位置 t-a[] 数组输出的时间读数尾数的位数

	char a[21][21] = { "zero", "one", "two","three","four","five","six","seven","eight", "nine","ten", "eleven", "twelve",
						"thirteen", "fourteen","fifteen","sixteen","seventeen", "eighteen", "nineteen","twenty"};
	char b[10][10] = { " "," ","twenty", "thirty", "forty", "fifty"};	// dingyi " " 方便输出

	scanf("%d%d",&h, &m);
	s = m / 10;
	t = m % 10;
	k = h % 20;
	if (m == 0)
	{
		if(h<=20)
			printf("%s o'clock", a[h]);	// 整点时钟数的读数输出
		else
		{
			printf("twenty");
			if(k!=0)
				printf("%s",a[k]);
		}
	}
	else
	{
		if(h<=20)
			printf("%s ", a[h]);	//时钟数的读数输出
		else
		{
			printf("twenty ");
			if(k!=0)
				printf("%s ",a[k]);
		}
	//	printf("%s ", a[h]);	// 输出 时钟数
		
		if (m >= 0 && m <= 20)	// m 分钟数小于20 的情况下  直接从数组a[]中输出 
		{
			printf("%s ", a[m]);
			return 0;
		}
		if (m > 20 && m < 60)	// 分钟数 分成两部分输出  five fifty - one
		{
			printf("%s ",b[s]);		// 分钟数第一部分输出	fifty
	
			if (t != 0)
			{
				printf("%s", a[t]);	// 分钟数第二部分输出   one
				return 0;
			}

			if (t == 0)	 // 分钟数 整十情况下 结束输出 
				return 0;
		}
	}

	return 0;
}

泡泡:

对于时间读数来说,分析数值大小的情况尤为重要,这样在输出时就比较方便,ok,收工。

猜你喜欢

转载自blog.csdn.net/qq_42124842/article/details/90726732
今日推荐