广陵绝唱 发表于 2008-3-1 23:42

自学的一个“成果”。

自学了几十天了,总算弄出个对于我来说相对“大”点的东西来了。虽然它的“成果”是微乎其微的,但对于我来说,也是可以值得浮几白的了。

    呵呵,刚才弄个附件传了一下,后来自己在机器上一看,不成,因为DOS不支持中文。所以,就发个源码吧,请众位高手指教一二:
#include<stdio.h>
char hello[5][300]={{"*************************************************************\n"},
               {"您好,欢迎您来玩这个小游戏。您可以输入年、月、日或者年份、天数\n"
                "或者年份,系统为您判定它是一年中的第几天或者那年的几月几日或者\n"
                "判定它是闰年还是平年。请不要输入数字以外的字符,那样会造成不必\n"
                "要的麻烦。谢谢!\n"},
               {" 请输入年、月、日:\n"},
               {"请输入年份及天数:\n"},
               {"请输入年份:\n"} };
static int yue[2][13]={
                      {0,31,28,31,30,31,30,31,31,30,31,30,31},
                      { 0,31,29,31,30,31,30,31,31,30,31,30,31}} ;
int pr(int n)
{
        int c;
        c= n%4==0&&n%100!=0|| n%400==0;
        return c;
}
int panduan_1(int y,int r,int i)
{

        int j,n=0;
        for(j=0;j<y;j++)
            n+=yue[i][j];
        n+=r;
        return n;
}
void panduan_2(int n,int r,int i)
{
        int j=1,m=1;
        while(r>yue[i][j])
        {
                r-= yue[i][j];
                j++;
                m++;
         }
         printf("这是%d年,%d月,%d日\n",n,m,r);
}
void caidan()
{
        printf("%s\n\n",hello[0]);
        printf("请您作出选择:\n");
        printf("1.  输入年、月、日,求它是那年中的哪一天。\n"
               "2.  输入年份及天数,求它是那年中的哪月哪日。\n"
               "3.  输入年份,求它是平年或者是闰年。\n"
               "4.  退出。\n");
        printf("请输入选择:\n");
}
int main(void)
{
        int n,y,r,i,j;
        printf("%s%s\n",hello[0],hello[1]);
        do
        {
                caidan();
                scanf("\n%d",&j);
                puts(" ");
                while(j<1||j>4)
                {
                        printf("您输入的字符非法,请重新选择:\n");
                        caidan();
                        scanf("%d",&j);
                 }
        }
        while(j<0||j>5);
        while(j!=4)
        {
                switch(j)
                {
                        case 1:printf("请输入年、月、日,空格格开,enter结束输入:\n");
                                 scanf("\n %d %d %d",&n,&y,&r);
                                 puts(" ");
                                 i=pr(n);
                                 j=panduan_1(y,r,i);
                                 printf("它是%d年的第%d天\n",n,j);
                                 break;
                        case 2:printf("请输入年、天数,空格格开,enter结束输入:\n");
                                 scanf("%d %d",&n,&r);
                                 puts(" ");
                                 i=pr(n);
                                 panduan_2(n,r,i);
                                 break;
                        case 3:printf("请输入待测试的年份:\n");
                                 scanf("%d",&n);
                                 i=pr(n);
                                 if(i==0)
                                 {
                                     printf("它是平年。\n");
                                     break;
                                  }
                                 if(i==1)
                                 {
                                     printf("它是闰年。\n");
                                     break;
                                  }

                  }
                 caidan();
                 scanf("%d",&j);
         }
                 if(j==4)printf("谢谢您!再见!");



        getchar();











}

[[it] 本帖最后由 广陵绝唱 于 2008-3-1 23:47 编辑 [/it]]

随心 发表于 2008-3-1 23:51

不错,还是用TC吧。换个编译器吧。

cosdos 发表于 2008-3-2 00:54

继续努力

把代码该短些

sunkaidong 发表于 2008-3-2 09:39

不错,帮你顶一下.....继续加油

福橘之后 发表于 2008-3-2 11:15

共同学习

我把你的代码放在VC++ 6.0上运行通过,程序非常严谨,非常好!

xianshizhe111 发表于 2008-3-2 12:55

鼓励一下LZ.[em14]

广陵绝唱 发表于 2008-3-2 13:45

谢谢大家的鼓励,偶会再接再励滴。

死了都要C 发表于 2008-3-2 13:55

哇````不错哦````很少看到让看起来感觉舒服的代码```
大概看了一下```不错````至少我的感觉很好```
唯一的缺点是```没有注释````


LZ```继续加油啊!!!!!!

hangeng 发表于 2008-3-2 14:25

5#
你的VC6.0真的能通过吗?

反正在devc++不可能通过

死了都要C 发表于 2008-3-2 15:11

LS``你的DEV-CPP多少版本的``
我的4.9.9.2``我编译通过了``

小虎乐乐 发表于 2008-3-2 15:36

支持一下LZ哈!
我也是学习C语言专业的哈!
还要多多交流和学习哈!

zjh19840213 发表于 2008-4-13 11:16

广陵:(因为敬佩你,才搜索了您所有的贴子)
看到您自学了几十天就这么利害,本人也自学了一段时间(看了谭浩强<C程序设计>五六遍),还是云里雾里.就是一个排序的问题上次也问了你N多遍,没人指点的经历真的是非常痛苦的.
敢问您是否收我做个徒弟?(您千万不要谦虚.三人行必有我师)
要不,我哪天加您QQ(能否留下QQ号)

zjh19840213 发表于 2008-4-13 11:23

广陵:上次的例子
例:输入三个数,按大小顺序输出
main()
{
float a,b,c,t; /* t是代表什么? */
scanf("%f,%f,%f",&a,&b,&c);
if(a>b)
{t=a;a=b;b=t;} /* 不理解 */
if(a>c)
{t=a;a=c;c=t;} /* 不理解 */
if(b>c)
{t=b;b=c;c=t;} /* 不理解 */
printf("%5.2f,%5.2f,%5.2f",a,b,c);
}

比较大小之冒泡法原理:if a>b真,即交换上下位置,大的在下面,小的在上面,
if  a>b 为假,即不交换位置,保持原位置
以上这样理解是否正确?

yd4433 发表于 2008-4-13 11:33

不错支持下  顺便发 一下我前些天写的作业  也算是鼓励下自己把 广陵 看下我门差距咯  我可是一直拿你做比较的  比较中进步  虽然原理很简单 但是头次写这种类型的 代码   
#include<stdio.h>
#include<stdlib.h>
void spt();
void main()
{
  char        ch;   int a,m,b;                //1石头,2尖刀,3布
        do
        {
      printf("请输入(1石头,2尖刀,3布)\n");
                  scanf("%d",&a);
            m= rand()%3+1; spt(m);
                  if(a>=m) b=a-m;
            else if(a==1&&m==2) b=m/a;
           else  b=a%m;
            switch (b)
                {
        case 0: printf("饿,平了继续加油");break;
        case 1: printf("啊哦,输了,再接再力");break;
        case 2: printf("挖塞 你赢了");break;
      
                }
                printf("是否继续'y'or'n'\n");
                fflush(stdin);
                scanf("%c",&ch);
               
        }while(ch=='y');
}       
void spt(int m)
{
   
       switch (m)
                {
        case 1: printf("他出了石头O");break;
        case 2: printf("他出了尖刀O");break;
        case 3: printf("他出了布O");break;
       }

}
加油咯广陵   有个人等着超你呢

yd4433 发表于 2008-4-13 11:35

[quote][bo]以下是引用 [un]zjh19840213[/un] 在 2008-4-13 11:23 的发言:[/bo]

广陵:上次的例子
例:输入三个数,按大小顺序输出
main()
{
float a,b,c,t; /* t是代表什么? */
scanf("%f,%f,%f",&a,&b,&c);
if(a>b)
{t=a;a=b;b=t;} /* 不理解 */
if(a>c)
{t=a;a=c;c=t;} /* 不理解 */
if(b>c)
{t=b;b= ... [/quote]
等量带换 的比较排序   也就是比较排序 如果成立 等量带换

zheyalu 发表于 2008-7-8 21:31

我用的是WIN-TC
编译成功但输出的都是乱码怎么回事啊?

wz330432184 发表于 2008-7-9 00:17

~~!!

程序很好 支持下 顺便问下 怎么才能把编写出来的东西改成。TXT让他双击就能运行

独孤小梦 发表于 2008-7-9 01:20

呵呵,程序非常不错!LZ继续努力!看了很让人舒服!呵呵!

ioriliao 发表于 2008-7-9 10:42

好好努力....

菜鸟选手 发表于 2008-7-9 11:23

这是啥?
看不懂 ..

页: [1] 2

编程论坛