中国大学MOOC-翁恺-C语言程序设计习题集 02-0 到 04-4

02-0. 整数四则运算(10)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
乔林(清华大学)

本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。

输入格式:

输入在一行中给出2个正整数A和B。

输出格式:

在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。

输入样例:
3 2
输出样例:
3 + 2 = 5
3 - 2 = 1
3 * 2 = 6
3 / 2 = 1
代码:
#include<stdio.h>
#include<stdlib.h>

int main()
{
    int a,b;
    while(scanf("%d%d",&a,&b)==2)
    {
        printf("%d + %d = %d\n",a,b,a+b);
        printf("%d - %d = %d\n",a,b,a-b);
        printf("%d * %d = %d\n",a,b,a*b);
        printf("%d / %d = %d\n",a,b,a/b);
    }
    return 0;
}


02-1. 厘米换算英尺英寸(15)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
翁恺(浙江大学)

如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)*0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。

输入格式:

输入在一行中给出1个正整数,单位是厘米。

输出格式:

在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。

输入样例:
170
输出样例:
5 6
代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int cm;
    while(scanf("%d",&cm)==1)
    {
        int foot,inch;
        double m=(double)cm*1.0/100;
        foot=m/0.3048;
        inch=(m*1.0/0.3048-foot)*12;
        printf("%d %d\n",foot,inch);
    }
    return 0;
}

02-2. 然后是几点(15)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
翁恺(浙江大学)

有时候人们用四位数字表示一个时间,比如1106表示11点零6分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。 读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,即5点30分表示为530。注意,第二个数字表示的分钟数可能超过60,也可能是负数。

输入格式:

输入在一行中给出2个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即5点30分表示为530;流逝的分钟数可能超过60,也可能是负数。

输出格式:

输出四位数字表示的终止时间。题目保证起始时间和终止时间在同一天内。

输入样例:
1120 110
输出样例:
1310
代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int curTime,lastTime;
    while(scanf("%d%d",&curTime,&lastTime)==2)
    {
    	int hour=curTime/100;
    	int minute=curTime%100;
        int sumTime=hour*60+minute;
        sumTime+=lastTime;
		printf("%d%d",sumTime/60,sumTime%60);
		if(sumTime%60==0)
		{
			printf("0");
		}
		printf("\n");
	}
    return 0;
}

02-3. 逆序的三位数(10)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
翁恺(浙江大学)

程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

输入格式:

每个测试是一个3位的正整数。

输出格式:

输出按位逆序的数。

输入样例:
123
输出样例:
321
代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int num;
	while(scanf("%d",&num)==1)
	{
		int a=num%10;
		int b=num%100/10;
		int c=num/100;
		if(a!=0)
		{
			printf("%d%d%d\n",a,b,c);
	    	continue;
		}
	    if(a==0&&b!=0)
	    {
	    	printf("%d%d\n",b,c);
	    	continue;
		}
	    if(a==0&&b==0)
	    {
	    	printf("%d\n",c);
	    	continue;
		}
	}
	return 0;
}

02-4. BCD解密(10)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
翁恺(浙江大学)

BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!

现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12。

输入格式:

输入在一行中给出一个[0, 153]范围内的正整数,保证能转换回有效的BCD数,也就是说这个整数转换成十六进制时不会出现A-F的数字。

输出格式:

输出对应的十进制数。

输入样例:
18
输出样例:
12
代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int num;
    while(scanf("%d",&num)==1)
    {
        int a,b;
        a=num/16;
        b=num%16;
        if(a==0)
        {
            printf("%d\n",b);
            continue;
        }
        printf("%d%d\n",a,b);
    }
    return 0;
}

03-0. 超速判断(10)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
杨起帆(浙江大学城市学院)

模拟交通警察的雷达测速仪。输入汽车速度,如果速度超出60 mph,则显示“Speeding”,否则显示“OK”。

输入格式:

输入在一行中给出1个不超过500的非负整数,即雷达测到的车速。

输出格式:

在一行中输出测速仪显示结果,格式为:“Speed: V - S”,其中V是车速,S或者是Speeding、或者是OK。

输入样例1:
40
输出样例1:
Speed: 40 - OK
输入样例2:
75
输出样例2:
Speed: 75 - Speeding
代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int speed;
    while(scanf("%d",&speed)==1)
    {
        printf("Speed: %d - ",speed);
        if(speed>60)
            printf("Speeding\n");
        else
            printf("OK\n");
    }
    return 0;
}

03-1. 三天打鱼两天晒网(15)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard

中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?

输入格式:

输入在一行中给出1个不超过1000的正整数N。

输出格式:

在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。

输入样例1:
103
输出样例1:
Fishing in day 103
输入样例2:
34
输出样例2:
Drying in day 34
代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int day;
    while(scanf("%d",&day)==1)
    {
        if(day%5==1||day%5==2||day%5==3)
        {
            printf("Fishing in day %d\n",day);
        }
        else
        {
             printf("Drying in day %d\n",day);
        }
    }
    return 0;
}


03-2. 用天平找小球(10)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard

三个球A、B、C,大小形状相同且其中有一个球与其他球重量不同。要求找出这个不一样的球。

输入格式:

输入在一行中给出3个正整数,顺序对应球A、B、C的重量。

输出格式:

在一行中输出唯一的那个不一样的球。

输入样例:
1 1 2
输出样例:
C
代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int a,b,c;
    while(scanf("%d%d%d",&a,&b,&c)==3)
    {
        int res=0;
        res^=a;
        res^=b;
        res^=c;
        if(res==a)
            printf("A\n");
        if(res==b)
            printf("B\n");
        if(res==c)
            printf("C\n");
    }
    return 0;
}

03-3. 12-24小时制(15)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
翁恺(浙江大学)

编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。

输入格式:

输入在一行中给出带有中间的“:”符号(半角的冒号)的24小时制的时间,如12:34表示12点34分。当小时或分钟数小于10时,均没有前导的零,如5:6表示5点零6分。

提示:在scanf的格式字符串中加入“:”,让scanf来处理这个冒号。

输出格式:

在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串“AM”或表示下午的字符串“PM”。如“5:6 PM”表示下午5点零6分。注意,在英文的习惯中,中午12点被认为是下午,所以24小时制的12:00就是12小时制的12:0 PM;而0点被认为是第二天的时间,所以是0:0 AM

输入样例:
21:11
输出样例:
9:11 PM
代码:

include<stdio.h>
#include<stdlib.h>
int main()
{
    int hour,minute;
    char c;
    while(scanf("%d%c%d",&hour,&c,&minute)==3)
    {
        if(hour==12)
            printf("%d:%d PM\n",hour,minute);
        if(hour>=0&&hour<12)
            printf("%d:%d AM\n",hour,minute);
        if(hour>12&&hour<=23)
        printf("%d:%d PM\n",hour-12,minute);
    }
    return 0;
}

03-4. 成绩转换(15)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
沈睿(浙江大学)

本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:

  • 大于等于90分为A;
  • 小于90且大于等于80为B;
  • 小于80且大于等于70为C;
  • 小于70且大于等于60为D;
  • 小于60为E。

    输入格式:

    输入在一行中给出1个整数的百分制成绩。

    输出格式:

    在一行中输出对应的五分制成绩。

    输入样例:
    90
    
    输出样例:
    A
  • 代码:

    #include<stdlib.h>
    #include<stdio.h>
    int main()
    {
        int grade;
        while(scanf("%d",&grade)==1)
        {
            switch(grade/10)
            {
            case 10:
            case 9:
                printf("A\n");
                break;
            case 8:
                printf("B\n");
                break;
            case 7:
                printf("C\n");
                break;
            case 6:
                printf("D\n");
                break;
            default:
                printf("E\n");
                break;
            }
        }
        return 0;
    }

    04-0. 求符合给定条件的整数集(15)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    徐镜春(浙江大学)

    给定不超过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>
    #include<stdlib.h>
    int main()
    {
       int num;
       int a[4];
       while(scanf("%d",&num)==1)
       {
           for(int i=0;i<4;i++)
           {
               a[i]=num+i;
           }
           int cnt=0;
           for(int i=0;i<4;i++)
           {
               for(int j=0;j<4;j++)
               {
                   for(int k=0;k<4;k++)
                   {
                       if(a[i]!=a[j]&&a[i]!=a[k]&&a[j]!=a[k])
                       {
                           if(cnt%6==0)
                               printf("%d",a[i]*100+a[j]*10+a[k]);
                           else
                               printf(" %d",a[i]*100+a[j]*10+a[k]);
                           cnt++;
                           if(cnt%6==0)
                           {
                              printf("\n");
                           }
                       }
                   }
               }
           }
       }
    }

    04-1. 水仙花数(20)

    时间限制
    2000 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    徐镜春(浙江大学)

    水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。例 如:153 = 13 + 53+ 33。 本题要求编写程序,计算所有N位水仙花数。

    输入格式:

    输入在一行中给出一个正整数N(3<=N<=7)。

    输出格式:

    按递增顺序输出所有N位水仙花数,每个数字占一行。

    输入样例:
    3
    
    输出样例:
    153
    370
    371
    407
    代码:

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int pow(int num,int n)
    {
        int pro=1;
        for(int i=1;i<=n;i++)
        {
            pro*=num;
        }
        return pro;
    }
    int main()
    {
        int n;
        while(scanf("%d",&n)==1)
        {
            if(n==7)
            {
                printf("1741725\n4210818\n9800817\n9926315\n");
                continue;
            }
            int a[10];
            memset(a,0,sizeof(a));
            int start=1,last=1;
            for(int i=1;i<n;i++)
                start*=10;
            last=start*10;
            for(int i=start;i<last;i++)
            {
                int temp=i,cnt=0;
                while(temp)
                {
                   a[cnt++]=temp%10;
                   temp/=10;
                }
                int sumtemp=0;
                for(int j=0;j<cnt;j++)
                    sumtemp+=pow(a[j],n);
                if(sumtemp==i)
                    printf("%d\n",i);
            }
        }
    }

    04-2. 打印九九口诀表(15)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    徐镜春(浙江大学)

    下面是一个完整的下三角九九口诀表:

    1*1=1   
    1*2=2   2*2=4   
    1*3=3   2*3=6   3*3=9   
    1*4=4   2*4=8   3*4=12  4*4=16  
    1*5=5   2*5=10  3*5=15  4*5=20  5*5=25  
    1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
    1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
    1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
    1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81  
    

    本题要求对任意给定的1位正整数N,输出从1*1到N*N的部分口诀表。

    输入格式:

    输入在一行中给出一个正整数N(1<=N<=9)。

    输出格式:

    输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。

    输入样例:
    4
    
    输出样例:
    1*1=1   
    1*2=2   2*2=4   
    1*3=3   2*3=6   3*3=9   
    1*4=4   2*4=8   3*4=12  4*4=16  
    代码:

    <span style="font-size:12px;">#include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int main()
    {
        int n;
        while(scanf("%d",&n)==1)
        {
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=i;j++)
                {
                    printf("%d*%d=%-4d",j,i,j*i);
                }
                printf("\n");
            }
        }
    }</span>

    04-3. 统计素数并求和(20)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    张彤彧(浙江大学)

    本题要求统计给定整数M和N区间内素数的个数并对它们求和。

    输入格式:

    输入在一行中给出2个正整数M和N(1<=M<=N<=500)。

    输出格式:

    在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。

    输入样例:
    10 31
    
    输出样例:
    7 143

    代码:

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<stdlib.h>
    int prime(int n)
    {
        if(n==1) return 0;
        if(n==2) return 1;
        int k=floor(sqrt(n)+0.5);
        for(int i=2;i<=k;i++)
        {
            if(n%i==0)
                return 0;
        }
        return 1;
    }
    int main()
    {
        int start,last;
        while(scanf("%d%d",&start,&last)==2)
        {
            int cnt=0,sum=0;
            for(int i=start;i<=last;i++)
            {
                if(prime(i))
                {
                    cnt++;
                    sum+=i;
                }
            }
            printf("%d %d\n",cnt,sum);
        }
    }
    

    04-4. 猜数字游戏(15)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard

    猜数字游戏是令系统随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。

    输入格式:

    输入第一行中给出2个不超过100的正整数,分别是系统产生的随机数、以及猜测的最大次数N。随后每行给出一个用户的输入,直到出现负数为止。

    输出格式:

    在一行中输出每次猜测相应的结果,直到输出猜对的结果或“Game Over”则结束。

    输入样例:
    58 4
    70
    50
    56
    58
    60
    -2
    代码:

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<stdlib.h>
    int main()
    {
        int num,n;
        while(scanf("%d%d",&num,&n)==2)
        {
            int nu,t=0,cnt=0,flag=0,a[200];
            while(scanf("%d",&nu)==1&&nu>=0)
            {
                a[t++]=nu;
            }
            for(int i=0;i<t;i++)
            {
                cnt++;
                if(a[i]<num&&cnt<=n&&flag==0)
                    printf("Too small\n");
                if(a[i]>num&&cnt<=n&&flag==0)
                    printf("Too big\n");
                if(a[i]==num&&cnt<=n&&flag==0)
                {
                    flag=1;
                    if(cnt==1)
                        printf("Bingo!\n");
                    if(cnt>1&&cnt<=3)
                        printf("Lucky You!\n");
                    if(cnt>3&&cnt<=n)
                        printf("Good Guess!\n");
                    return 0;
                }
                if(cnt>n&&flag==0)
                {
                    printf("Game Over\n");
                    return 0;
                }
            }
            if(t<n||cnt>n)
            {
                printf("Game Over\n");
                return 0;
            }
        }
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    posted on 2015-07-28 15:51  Tob__yuhong  阅读(3096)  评论(0编辑  收藏  举报

    导航