| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1002 人关注过本帖
标题:[求助]各位大虾门 小妹c语言学的不好 帮忙进来看个问题
只看楼主 加入收藏
wlyxi1129
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-9-19
收藏
 问题点数:0 回复次数:14 
[求助]各位大虾门 小妹c语言学的不好 帮忙进来看个问题
各位大虾门 小妹c语言学的不好 帮忙进来看个问题

老师 叫我们编个 英文大写2位数翻译的子程序 帮忙各位编一下 并解释一下 好吗
摆脱各位了 我们 22号 早上就用 先谢谢了阿
搜索更多相关主题的帖子: 小妹 语言学 
2005-09-19 17:12
灿烂涅磐
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-9-19
收藏
得分:0 
你看置顶  这样的是要封杀的...

ps 什么 叫大写2位数 翻译... ..

2005-09-19 17:23
jackrain
Rank: 1
等 级:新手上路
帖 子:182
专家分:0
注 册:2005-9-4
收藏
得分:0 
不太明白楼主的意思。给个例子吧,比如输入什么,又应该有什么样的输出

程序和身体一样,健壮,再健壮! 我爱C++
2005-09-19 17:33
wlyxi1129
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-9-19
收藏
得分:0 
比如 输入 11 就 输出 ELEVEN  输入 61 就输出 sixty-one 注意  中间的短线
2005-09-20 13:52
gisiyang
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-9-18
收藏
得分:0 
#include "stdio.h"
#include "conio.h"
main()   
{
static char a[][10]={"ZERO","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","TEN","ELEVEN",
                     "TWELVE","THIRTEEN","FOURTEEN","FIFTEEN","SIXTEEN","SEVENTEEN","EIGHTEEN",
                     "NINETEEN"};
static char b[][8]={"","","TWENTY","THIRTY","FORTY","FIFTY","SIXTY","SEVENTY","EIGHTY","NINETY"};
int i,j,k;
while(1)
{
  clrscr();
  printf("\n      输入一个在0~99之间的数:");
  scanf("%d",&i);
  if(i<0)
    printf("                   (输入的数不能小于0!)");
  if(i>=0&&i<=19)
  printf("\n\n\n      这个数的英文是:   %s",a[i]);
  if(i>19&&i<=99)
    {
     j=i/10;
     k=i%10;
   if(k==0)
    printf("\n\n\n      这个数的英文是:   %s",b[j]);
    else
    printf("\n\n\n      这个数的英文是:   %s-%s",b[j],a[k]);
    }
  if(i>99)
    printf("                   (输入的数不能超过100!)");

printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n                ************退出请按(N),继续请按任意键************");
    if(getch()=='n')break;
}
}

[此贴子已经被作者于2005-9-22 14:34:22编辑过]



『StarCraft』
2005-09-20 16:45
哈皮
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-9-20
收藏
得分:0 
你第一個static char a[]裡面社設涉是8
2005-09-20 17:09
gisiyang
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-9-18
收藏
得分:0 
以下是引用哈皮在2005-9-20 17:09:46的发言: 你第一個static char a[]裡面社設涉是8
什么?没看懂你说的是什么。

『StarCraft』
2005-09-20 17:15
ChenMo
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:3
帖 子:481
专家分:10
注 册:2004-4-8
收藏
得分:0 

这程序有点意思. 最简单的方法就是建立一个词典表,存在一份文件中供读取。 不过这样的方法不甚实际的,对付0-99还可以,要是多的话文件可能会大的厉害, 除非是人命大的事,否则还是建议别用这方法。

比之更理想一点点的方法可以这样, 因为有些单词是可以组合出来的, 如 20 是 twenty,3 是 three, 那么 23 即 二十 —— 三 就是 twenty - three. 而有不少是不可参与组合的,如0,此外还有 10-19 那么只需要将不可组合的存起来,而可组合的如上述的 20 , 还有 30-90 ,只需要定义一个就可以了。

—— 但是这并不是最好的办法。

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

在20以后的单词变得有规律可循: 21 twenty-one 22 twenty-two 23 twenty-three 30 thirty 32 thirty-two 40 forty 50 fifty 60 sixty 70 seventy 80 eighty 90 ninety

当需要输出一个数的英文(如 23 )的时候,先取 20 的英文单词,然后取3的英文单词即可,那就是 twenty three 这样的话一个二维字符数组轻轻松松就搞定了。

要做的功夫就是定义一个二维字符数组来装好那些没有规律或者组合需要用到的英文单词, 既然范围说了是从 0-99,那么应该这样算:

(20-90)共八个十位数(twenty,thirty,forty,fifty,sixty,seventy,eighty,ninety) (1-9)共九个的英文单词(one,two,three,four,five,six,seven,eight,nine) 0 共一个 (zero) (10-19)共十个(ten,eleven,twelve,thirteen,fourteen,fifteen,sixteen,seventeen,eighteen,nineteen)

用数手指的方法算出这些单词一共是 28 个,那说明要定义一个大小为28的二维字符数组。

#define MAXLIMIT 10

char T[][MAXLIMIT] = { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety", };

花了九头牛,两只老虎的力总算把它定义出来。

到了如何搜索的问题上了, 其实也摆着了,大于0且小于21的就原样输出就OK。 大于21且小于100的,就先看十位数是多少,先取,个位数一样道理。

策划了一翻后可以开始写代码了。 #include "stdio.h" #include "conio.h" #include "stdlib.h"

/* 英文的长度,这里最长的是 Seventeen ,9 个字符*/ #define MAXLIMIT 10

int main() { int InNum; char T[][MAXLIMIT] = { "Zero", /* 0 */ "One", /* 1 */ "Two", /* 2 */ "Three", /* 3 */ "Four", /* 4 */ "Five", /* 5 */ "Six", /* 6 */ "Seven", /* 7 */ "Eight", /* 8 */ "Nine", /* 9 */ "Ten", /* 10 */ "Eleven", /* 11 */ "Twelve", /* 12 */ "Thirteen", /* 13 */ "Fourteen", /* 14 */ "Fifteen", /* 15 */ "Sixteen", /* 15 */ "Seventeen", /* 17 */ "Eighteen", /* 18 */ "Nineteen", /* 19 */ "Twenty", /* 20 */

/* 到了 30 就需要注意了, 在二维数组中要求得 30 的下标,也就是 T[21],那么应该这样算: (30/10) + 18 = 21 */ "Thirty", /* 21 */ "Forty", /* 22 */ "Fifty", /* 23 */ "Sixty", /* 24 */ "Seventy", /* 25 */ "Eighty", /* 26 */ "Ninety", /* 27 */ };

printf("Input a Number. This Number will be translated into English.\n"); scanf("%d", &InNum);

if (InNum < 0 || InNum > 99) /* 输入出错 */ { printf("\nError: Misnput!\nPress any key to exit\n"); getch(); exit(0); } if (InNum <= 20) /* 0 < InNum <= 20 ,直接输出*/ printf("[ %s ]\n", T[InNum]); else if ((InNum % 10) == 0) /*刚好是整十的,如 40 */ printf("[ %s ]\n", T[(InNum / 10) + 18]); else { printf("[ %s - %s ]\n", T[(InNum / 10) + 18], T[InNum % 10]); }

getch(); return 0; }


欢迎加入 MVC 技术讨论群(新群:90093426)
2005-09-20 19:22
乌巴
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-9-20
收藏
得分:0 
高!

2005-09-20 20:46
本人已死
Rank: 1
等 级:新手上路
威 望:1
帖 子:183
专家分:0
注 册:2005-9-20
收藏
得分:0 
楼上的楼上真高!不过小弟偶看不懂

爸爸告诉我:女人喜欢有钱的男人;妈妈告诉我:女人喜欢有貌的男人。我翻翻钱包,又照照镜子,然后我哭了
2005-09-20 21:45
快速回复:[求助]各位大虾门 小妹c语言学的不好 帮忙进来看个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016563 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved