第六次作业

实验1:有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数。

#include<stdio.h>
int main()
{
    int a,b,c,d,i,sum;
    for(i=1000;i<=9999;i++)
    {
        a=i/1000;
        b=i/100%10;
        c=i/10%10;
        d=i%10;
        sum=d*1000+c*100+b*10+a;
        if(i==sum*4&&a!=b&&a!=c&&a!=d&&b!=c&&b!=d&&b!=d)
        {
            printf("%d",i);
        }
    }
    return 0;
}

实验2:输入任意一个多位的数字,求各位数字之和。如果在【1,12】之内,则输出与和数字对应的月份的英文名称,否则输出***。

  样例: 输入123,    输出 6     June

            输入12345,输出 15   ***

#include<stdio.h>
int main()
{
    int number,a,sum=0;
    printf("请输入任意一个多位的数字。\n");
    scanf("%d",&number);
    while(number<0)
    {
        printf("输入错误,请重新输入。\n");
        scanf("%d",&number);
    }
    while(1)
    {
        if(number==0)
        {
            break;
        }
        a=number%10;
        sum=sum+a;
        number=number/10;
    } 
    switch(sum)
    {
        case 1:printf("%d   January",sum);break;
        case 2:printf("%d   February",sum);break;
        case 3:printf("%d   March",sum);break;
        case 4:printf("%d   April",sum);break;
        case 5:printf("%d   May",sum);break;
        case 6:printf("%d   Jun",sum);break;
        case 7:printf("%d   July",sum);break;
        case 8:printf("%d   August",sum);break;
        case 9:printf("%d   September",sum);break;
        case 10:printf("%d   October",sum);break;
        case 11:printf("%d   November",sum);break;
        case 12:printf("%d   December",sum);break;
        default:printf("%d   ***",sum);break;
    }
    return 0;
}

实验3:给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。

   输入格式:输入在一行中给出A。

   输出格式:输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。

   输入样例:2

   输出样例:234  235  243  245  253  254

                  324  325  342  345  352  354

                  423  425  432  435  452  453

                  523  524  532  534  542  543

#include<stdio.h>
int main()
{
    int number,i,a,b,c,n,d;
    printf("输入一个不超过6的正整数。\n");
    scanf("%d",&number);
    while(number<=0||number>6)
    {
        printf("输入错误,请重新输入。\n");
        scanf("%d",&number);
    }
    n=number;
    for(i=1;i<=4;i++,n++)
    {    
        d=1;
        for(a=n*100;a<=n*100+99;a++)    
        {
            b=a%100/10;
            c=a%10;
            if((b==number||b==number+1||b==number+2||b==number+3)&&(c==number||c==number+1||c==number+2||c==number+3)&&b!=c&&c!=n&&b!=n)
            {
                printf("%d",a);
                if(d!=6)
                printf(" ");
                d++;
            }
        }
        printf("\n");
    }
    return 0;
} 

实验4.:万年历

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int year,year1,month,sum,sum1,sum2,i,n,zong,h;
    printf("请输入年份个月份,用空格分开。\n");
    scanf("%d%d",&year,&month);
    while(year<1900||month<1||month>12)
    {
        printf("数据错误,请重新输入。\n");
        scanf("%d%d",&year,&month);
    }
    sum1=0;
    sum2=0;
    year1=year;
    for(year1=year1-1;year1>=1900;year1--)
    {
        if(year1%4==0&&year1%100!=0||year1%400==0)
        {
            sum1=sum1+366;
        }
        else
        {
            sum1=sum1+365;
        }
    }
    
    for(i=1;i<month;i++)
    {
        if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
        {
            sum2=sum2+31;
        }
        else if(i==4||i==6||i==9||i==11)
        {
            sum2=sum2+30;
        }
        else if(i==2)
        {
            if(year%4==0&&year%100!=0||year%400==0)
            {
                sum2=sum2+29;
            }
            else
            {
                sum2=sum2+28;
            }
        }
    }       
    sum=sum1+sum2;
    system("cls");
    printf("%d年%d月\n",year,month);
    printf("星期日:星期一:星期二:星期三:星期四:星期五:星期六\n");
    switch(sum%7)
        {
    /*1*/   case 0:printf("\t");h=2;break;
            case 1:printf("\t\t");h=3;break;
            case 2:printf("\t\t\t");h=4;break;
            case 3:printf("\t\t\t\t");h=5;break;
            case 4:printf("\t\t\t\t\t");h=6;break;
            case 5:printf("\t\t\t\t\t\t");h=7;break;
            case 6:h=1;break;
        } 
    if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
    {
        zong=31;
    }        
    else if(month==4||month==6||month==9||month==11)
    {
        zong=30;
    }
    else if(month==2)    
    {
        if(year%4==0&&year%100!=0||year%400==0)
        {
            zong=29;
        }
        
        else 
        {
            zong=28;
        }
    }
    for(n=1;n<=zong;n++,h++)
    {
        printf("  %2d    ",n);
        if(h%7==0)
        {
        printf("\n");        
        }
    }
    return 0;            
}

附加题

  有16根火柴,可以拼出多少个形如“A+B=C”的等式,A、B、C是用火柴棍拼出的整数,且为一位数,输出该等式形式。

 注意:  1. 加号与等号各自需要两根火柴棍    2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0) 3. 16根火柴棍必须全部用上

  用火柴棍拼数字0-9的拼法如图所示: 

              

#include<stdio.h>
int main()
{
    int a,b,c,A,B,C;
    for(a=0;a<=9;a++)
    for(b=0;b<=9;b++)
    for(c=0;c<=9;c++)
    {
        switch(a)
        {
            case 0:A=6;break;
            case 1:A=2;break;
            case 2:A=5;break;
            case 3:A=5;break;
            case 4:A=4;break;
            case 5:A=5;break;
            case 6:A=6;break;
            case 7:A=3;break;
            case 8:A=7;break;
            case 9:A=6;break;
        }
        switch(b)
        {
            case 0:B=6;break;
            case 1:B=2;break;
            case 2:B=5;break;
            case 3:B=5;break;
            case 4:B=4;break;
            case 5:B=5;break;
            case 6:B=6;break;
            case 7:B=3;break;
            case 8:B=7;break;
            case 9:B=6;break;
        }
        switch(c)
        {
            case 0:C=6;break;
            case 1:C=2;break;
            case 2:C=5;break;
            case 3:C=5;break;
            case 4:C=4;break;
            case 5:C=5;break;
            case 6:C=6;break;
            case 7:C=3;break;
            case 8:C=7;break;
            case 9:C=6;break;
        }
        if(c==a+b&&A+B+C==12&&a!=b)
        {
            printf("%d+%d=%d\n",a,b,c);
        }
    }
    return 0;
}

知识点总结:

1.选择结构和循环结构中条件非零便是真。

2.用循环求倒序数:

sum=0;

while(a!=0)    

{                             

b=a%10;                   

sum=sum*10+b;       

a=a/10;                     

}

3.  实数比较不用直接用!=或==,要用做差如if(fabs(a-1.2)<1e-6)  。

4.平方根函数:sqrt();清缓存函数:fflush(stdin);清屏函数:system("cls");

5.表达式1?表达式2:表达式3   (如果表达式一成立,执行表达式二,否则执行表达式三)

6.循环体,要找适合的情况,根据特点选择使用哪个更适合,在循环体中分清break,和continue的区别。  

7.求阶乘时因数值可能过大,应定义为实数型,输出格式:%.0f  。

8.对一个数去掉最后一位/10,得到最后一位%10;

9.输入一串字符的经典用法:while((ch=getchar())!='\n');               

试验总结:

1.循环嵌套时一定注意变量的使用,尽量不要在两个循环体中使用同一个变量,或者注意初赋值。

2.出现了优先级问题时,适当使用()解决。

3.一定不能将等于写成赋值。

 

posted @ 2016-11-09 19:02  T.X  阅读(473)  评论(4编辑  收藏  举报