第六次作业

一、实验内容        

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

代码:

#include<stdio.h>
int main()
{    int a,b,c,d,n1,n2;
     for(a=1;a<10;a++)
     for(b=0;b<10;b++)
     for(c=0;c<10;c++)
     for(d=1;d<10;d++)
     {
         if(a!=b&&a!=c&&a!=d&&b!=c&&b!=d&&c!=d)
             {
                 n1=a*1000+b*100+c*10+d;
                 n2=d*1000+c*100+b*10+a;
                 if(n1==4*n2)
                 {
                       printf("这个四位数是%d\n",n1);
                 }
             }
    }
    return 0;
} 

 

 

程序运行结果:

2.实验要求:

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

  样例: 输入123,    输出 6     June

            输入12345,输出 15   ***

代码:

#include<stdio.h>
int main()
{
    int x,m,sum=0;
    printf("请输入一个多位数:\n");
    scanf("%d",&x);
    while(x!=0)
    {
        m=x%10;
        sum=sum+m;
        x=x/10;
    }
    printf("sum=%d\n",sum);
    if(sum==1)
        printf("January\n");
    else if(sum==2)
        printf("February\n");
    else if(sum==3)
        printf("March\n");
    else if(sum==4)
        printf("April\n");
    else if(sum==5)
        printf("May\n");
    else if(sum==6)
        printf("June\n");
    else if(sum==7)
        printf("July\n");
    else if(sum==8)
        printf("August\n");
    else if(sum==9)
        printf("Septemper\n");
    else if(sum==10)
        printf("Octorber\n");
    else if(sum==11)
        printf("November\n");
    else if(sum==12)
        printf("December\n");
    else
        printf("***");
}

程序运行结果:

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 A,b,c,d,i=0;
    printf("请输入一个不超过6的正整数:\n");
    scanf("%d",&A);
    if(A>0&&A<=6)
    {
        for(b=A;b<=A+3;b++)
        for(c=A;c<=A+3;c++)
        for(d=A;d<=A+3;d++)
        {
            if(b!=c&&b!=d&&c!=d)
            {
                printf("%d",b*100+c*10+d);
                i++;
                if(i%6!=0)
                {
                    printf(" ");
                }
                else
                {
                    printf("\n");

                }
            }
        }
    }
    else
    {
        printf("error\n");
    }
    return 0;
}

程序运行结果:

4.实验要求:自动出题器

代码:

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main()
{
    int a,b,c,d1,d2,g,s1,s2,n=0;
    char op,op1='Y';
    float k;
    while(op1=='Y')
    {
        for(n=1;n<=5;n++)
        {
            srand(time(NULL));
            a=rand()%100+1;
            b=rand()%100+1;
            c=rand()%100+1;
            g=0;
            if(c>=1&&c<=25)
            {
                op='+';
                printf("%d+%d=?",a,b);
                printf("请输入你的答案:\n");
                scanf("%d",&s1);
                s2=a+b;
                if(s1==s2)
                {
                    printf("回答正确");
                    g++;
                }
                else
                {
                    printf("回答错误,正确答案是%d\n",s2);
                }
            }
            if(c>=26&&c<=50)
            {
                op='-';
                printf("%d-%d=?",a,b);
                printf("请输入你的答案:\n");
                scanf("%d",&s1);
                s2=a-b;
                if(s1==s2)
                {
                    printf("回答正确");
                    g++;
                }
                else
                {
                    printf("回答错误,正确答案是%d\n",s2);
                }
            }
            if(c>=51&&c<=75)
            {
                op='*';
                printf("%d*%d=?",a,b);
                printf("请输入你的答案:\n");
                scanf("%d",&s1);
                s2=a*b;
                if(s1==s2)
                {
                    printf("回答正确");
                    g++;
                }
                else
                {
                    printf("回答错误,正确答案是%d\n",s2);
                }
            }
            if(c>=76&&c<=100)
            {
                op='/';
                printf("%d/%d=?",a,b);
                printf("请输入商和余数:\n");
                scanf("%d%d",&s1,&d1);
                s2=a/b;
                d2=a%b;
                if(s1==s2&&d1==d2)
                {
                    printf("回答正确");
                    g++;
                }
                else
                {
                    printf("回答错误,商是%d,余数是%d\n",s2,d2);
                }
            }
        }
        k=(float)g/5;
        {
            printf("做对%d次,正确率%.2f",g,k);
        }
        printf("是否继续Y or N\n");
        scanf("%c",&op1);
    }
    return 0;
}

程序运行结果:

二、知识点总结

1.对于有些题可以先穷举后优化减少循环次数;

2.求a和b最大公约数:

法一:设i为1; 如果a和b都能被这个i整除,则记下这个i; i+1重复上一步,直到等于a或b; i为最大公约数;

法二:辗转相除法:a/b,令r为所得余数(0<=r<b)若r=0,算法结束b为答案;   互换:b→a,r→b,并返回第一步

三、实验总结

1,随机数字的表示为srand(time(NULL)); a=rand()%100+1;

2,注意循环语句中大括号的位置和各个语句的位置;

3,程序结束时大括号填齐;

4,注意每条语句后是否需要加分号;

5,注意每个赋值式子的位置。



 

posted on 2016-11-09 12:35  趁早  阅读(210)  评论(3编辑  收藏  举报