| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 726 人关注过本帖, 1 人收藏
标题:[求助]用if 和switch语句不能解决问题。能不能把程序简单化。
只看楼主 加入收藏
qq25257758
Rank: 1
等 级:新手上路
帖 子:8
专家分:1
注 册:2011-4-19
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:16 
[求助]用if 和switch语句不能解决问题。能不能把程序简单化。
c语言入门经典(美。霍顿)习题:输入日月年,输出日月年。输出格式为:例如输入12,12,2003,输入12th,December,2003.
大家看看有我这么编程的么。
有好多错啊,有没有更好的算法。
#include<stdio.h>
int main(void)
{
     int   year;
     char month,date;
     scanf("%c%c%d",&date,&month,&year);
     if(date=='1')
        date='1st';
     if(date=='2')
        date='2nd';
     if(date=='3')
        date='3rd';
     if(date=='4')
        date='4th';
     if(date=='5')
        date='5th';
     if(date=='6')
        date='6th';
     if(date=='7')
        date='7th';
     if(date=='8')
        date='8th';
     if(date=='9')
        date='9th';
     if(date=='10')
        date='10th';
     if(date=='11')
        date='11st';
     if(date=='12')
        date='12nd';
     if(date=='13')
        date='13rd';
     if(date=='14')
        date='14th';
     if(date=='15')
        date='15th';
     if(date=='16')
        date='16th';
     if(date=='17')
        date='17th';
     if(date=='18')
        date='18th';
     if(date=='19')
        date='19th';
     if(date=='20')
        date='20th';
     if(date=='21')
        date='21st';
     if(date=='22')
        date='22nd';
     if(date=='23')
        date='23rd';
     if(date=='24')
        date='24th';
     if(date=='25')
        date='25th';
     if(date=='26')
        date='26th';
     if(date=='27')
     date='27th';
     if(date=='28')
        date='28th';
     if(date=='29')
        date='29th';
     if(date=='30')
        date='30th';
     if(date=='31')
        date='31st';
switch(month)
     {case'1':
         month='January';
     break;
     case'2':
         month='February';
     break;
     case'3':
         month='March';
     break;
     case'4':
         month='April';
     break;
     case'5':
         month='May';
     break;
     case'6':
         month='June';
     break;
     case'7':
         month='July';
     break;
     case'8':
         month='August';
     break;
     case'9':
         month='September';
     break;
     case'10':
         month='October';
     break;
     case'11':
         month='November';
     break;
     case'12':
         month='December';
     break;
     default:
         printf("input erro");
     break;
      }
     printf("%c%c%d",date,month,year);
     return 0;
}
搜索更多相关主题的帖子: c语言 经典 霍顿 
2011-04-21 17:57
defhvk
Rank: 2
等 级:论坛游民
帖 子:62
专家分:29
注 册:2011-4-8
收藏
得分:1 
用数组。
2011-04-21 18:12
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:14 
楼主很强大,拜服~~
给你写一个

程序代码:
#include <stdio.h>

int main() {
    int d, m, y;
    char * months[12] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}, 
            * s[4] = {"st", "nd", "rd", "th"};
    printf("Give me a date (dd, mm, yyyy) ");
    scanf(" %d %d %d", &d, &m, &y);
    printf("%d%s %s, %d\n", d, (d % 10 > 4) || (d % 10 == 0) || (d / 10 == 1) ? s[3] : s[d % 10 - 1], months[m - 1], y);
    return 0;
}


[ 本帖最后由 voidx 于 2011-4-21 22:31 编辑 ]
2011-04-21 18:37
gino86
Rank: 2
等 级:论坛游民
帖 子:66
专家分:77
注 册:2010-9-17
收藏
得分:0 

up

[ 本帖最后由 gino86 于 2011-4-21 21:06 编辑 ]
2011-04-21 19:10
xjzxylj
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:113
注 册:2011-4-18
收藏
得分:1 
超强大的码,先拜下,我拿过来练练手,我也在学习阶段。楼主动手意识超强啊。

淫一手湿,简单;难的是,淫一被子湿。(富有诗意,此处抄袭)
2011-04-21 19:26
xjzxylj
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:113
注 册:2011-4-18
收藏
得分:0 
这个是要我们自己把握数据范围的,现在我正写个能判断的。
    int d,m,y;
    printf("请输入日期");
    cin >> d;
    printf("请输入月份");
    cin >> m;
    printf("请输入年份");
    cin >> y;
    printf("日月年为 %d-%d-%d",d,m,y);

淫一手湿,简单;难的是,淫一被子湿。(富有诗意,此处抄袭)
2011-04-21 19:32
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
收藏
得分:1 
#include"stdio.h"
int main()
{
    char *day[12]={"st","nd","rd","th","th","th",
    "th","th","th","th","st","nd"};
    char *month[12]={"January","February","March","April","May",
    "June","July","August","September","October","November","December"};
    char *p,*pp;
    int da_y,mont_h,year;
    printf("Input:\n");
    scanf("%d%d%d",&da_y,&mont_h,&year);
    p=*(day+da_y-1);
    pp=*(month+mont_h-1);
    printf("%d%s,%s,%d",da_y,p,pp,year);
    return 0;
    }

看来我的落后了!!

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2011-04-21 19:58
唯我独魔
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:176
专家分:782
注 册:2011-4-13
收藏
得分:1 
#include<stdio.h>
int main(void)
{
    int year,month,date,d;
    char mon[12][10]={"January","February","March","April","May","June","July","August","September","October","November","December"};
    char da[4][3]={"st","nd","rd","th"};
    scanf("%d%d%d",&date,&month,&year);
    for(;date!=0&&month!=0&&year!=0;)//日月年有一个是0即停止循环输入
    {
        if(date>=11&&date<=20)
            d=4;
        else{
        d=date%10;
        if(d>3) d=4;
        }
      printf("%d%s,%s,%d\n",date,da[d-1],mon[month-1],year);
      scanf("%d%d%d",&date,&month,&year);
    }
return 0;
}
2011-04-21 20:04
xjzxylj
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:113
注 册:2011-4-18
收藏
得分:1 
#include <iostream>
using namespace std;
int a[3];
int dmy();

int _tmain(int argc, _TCHAR* argv[])
{
    int i,n;
    for(i=0;i<3;i++)
    {
        printf("请输入一个数据");
        cin >> n;
        a[i]=n;
    }
     dmy();
    return 0;
}
int dmy()
{
    int d,m,y;
    d=a[0];
    m=a[1];
    y=a[2];
    if(d<0 || d>31)
    {
        printf("日期超出范围\n");
        return 0;
    }
    if(m<0 || m>12)
    {
        printf("月份超出范围\n");
        return 0;
    }
    if(y<1000 || y>9999)
    {
        printf("年份超出范围\n");
        return 0;
    }
    cout << d << m << y << endl;
    return 0;
}
这个程序能根据你输入的数值自动返回信息并退出,如果输入不正确,即返回信息并退出;

淫一手湿,简单;难的是,淫一被子湿。(富有诗意,此处抄袭)
2011-04-21 20:07
唯我独魔
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:176
专家分:782
注 册:2011-4-13
收藏
得分:1 
顺便说下7楼的代码有误,像12 12 2003应该输出12th,December,2003,而不是12nd,December,2003
2011-04-21 20:08
快速回复:[求助]用if 和switch语句不能解决问题。能不能把程序简单化。
数据加载中...
 
   



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

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