目标:将输入的数字年龄翻译成英文
方法:一
可以使用if语句,编写每一个数字都有输出一个英文的代码如:
if(i=1){
printf("Your age is one\n");
}
不过这种方法比较麻烦,不好操作。因此我们就应该思考如何简化程序,很显然需要插入数组,那么该如何操作呢,再接着往下看吧。
方法:二
不想要操作方法一那么复杂的程序,那么就让我们用数组来试一试吧,首先我们要先思考如何来让1对应one,让11对应eleven。
先来简单一点的 如何让用户输入一个数字1 来对应数组中的one吧!
我们想要让1 2 3 分别对应数组中的one two three ,那么我肯定要把这些英文放到一个数组里(这里只考虑1-9的情况)那么这里的数组代码我就直接给大家写出来吧:
char* gewei[] = {"one","two","three","four","five","six","seven","eight","nine"};
那让我们来试一试完整的程序是如何执行的吧:
现在的问题是我们输入的是6,但它给我们显示的结果是seven,因此问题就出现了,要解决这个问题就要了解字符串中这个one到底是从1开始还是从0开始,可能这时候大家都明白了,在gewei[ ]中的这个[ ]中应该是输入的是age-1,这样就能保证用户输入1的时候对应的就是one,正确的程序再给大家写一遍吧:
#include<stdio.h>
int main(){
int age = 0;
//数组:数字对应的英文
char* gewei[] = {"one","two","three","four","five","six","seven","eight","nine"};
//用户输入年龄
printf("请输入你的年龄:");
scanf("%d",&age);
//开始对应数组里的字符串
char *name;//保存每次取出的字符串
name = gewei[age-1];
printf("Your age is %s\n",name);
return 0;
}
写到这里,再想一想10-19是不是这样呢,显然也是的,但当我们写到20-29呢,30-39呢,是不是一想头就大了,但先别急,先喝口开水冷静冷静,仔细分析一波,21是twenty-one、31是thirty-one,这样规律是不是很容易就发现了,我们需要编一个
char* shiwei[]= {"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninty"};
这样的数组出来 在和我们前面写的数组进行链接是不是就可以了,那好那我们先把这个放到一边,先不说它,回头来看10-19这一组,因为没有什么规律,所以完全可以按照第一组的方法来编,这里呢我就直接把代码写出来吧,但需要注意的是我们这个时候需要一个数字来帮我们找是第几项,因此最好的方法呢就是取余,代码呢就写好了:
//保存10-19
char* temp[]= {"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};
//获取个位数
int index = age % 10;
name = temp[index];//这里的name呢已经在前面定义过了
接下来就让我们看看剩下需要我们做的吧:
1.我们输入的是一个两位数,因此就需要对应数组shiwei[ ]和数组gewei[ ]。
2.当我们输入的是20+时 这时应该从twenty开始 30+的时候就应该是从thirty开始,因此我们需要定义一个变量s来使2与twenty对应,3与thirty对应。
3.保证了十位数字对应后,我们还需要对应个位数字,此时我们在引入一个变量g保证第一组数组的对应。
好了,大致上我们已经被思路捋顺了,现在让我们放到程序里操作试试:
//保存个位数
char* gewei[] = {"one","two","three","four","five","six","seven","eight","nine"};
//保存十位
char* shiwei[]= {"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninty"};
//获取个位数
int g = age % 10;
//获取十位数
int s = age / 10;
//取出对应的单词
char* sString = shiwei[s];
char* gString = gewei[g];
printf("Your age is %s-%s\n",sString,gString);
好了写到这里,问题又来了,当我们输入20的时候会发现这时候十位对应的是forty,但我们想要的是twenty,好吧,细心一点我们会发现这个问题之前已经提过了 所以就需要把这个char* sString = shiwei[s]; 改成char* sString = shiwei[s-2]; 那么问题又来了,此时的g为0啊,但它对应的是one,那么我们就需要在数组gewei[ ]中改一下数据:
char* gewei[] = {"","one","two","three","four","five","six","seven","eight","nine"};
这样是不是就可以实现了,需要注意的是,这样改,我们求第一组的时候的gewei[age-1]中age就可以不用减一了。
最终的代码结果为:
#include<stdio.h>
int main(){
int age = 0;
//保存个位数
char* gewei[] = {"","one","two","three","four","five","six","seven","eight","nine"};
//保存10-19
char* temp[]= {"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};
//保存十位
char* shiwei[]= {"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninty"};
printf("请输入年龄:");
scanf("%d",&age);
char *name;//保存每次取出的字符串
if(age < 10){
name = gewei[age];
}else if(age >= 10 && age <= 19){
//获取个位数
int index = age % 10;
name = temp[index];
}else{
//获取个位数
int g = age % 10;
//获取十位数
int s = age / 10;
//取出对应的单词
char* sString = shiwei[s-2];
char* gString = gewei[g];
printf("Your age is %s-%s\n",sString,gString);
//程序还未运行完毕就提前结束
return 0;
}
printf("Your age is %s\n",name);
return 0;
}
自我感悟
编写代码时,一定要有清晰的思路,逻辑要完善,编写带有数组的代码时,一定要了解到数组的使用规则;仔细分析每一个步骤,尽量使代码更加简洁规范,总之,编码不易,秃头肯定也是迟早的事了。。