C语言 习题 (MOOC)


C语言 习题

1.逆序的三位数

  • 程序每次读入一个正三位数,然后输出逆序的数字。注意,当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
  • 提示:用%10可以得到个位数,用/100可以得到百位数...。将这样得到的三个数字合起来:百位100+十位10+个位,就得到了结果。
  • 注意:除了题目要求的输出,不能输出任何其他内容,比如输入时的提示,输出时的说明等等都不能。这道题目要求输出逆序的数字,程序就只能输出这个数字,除此之外任何内容都不能输出。*
  • 输入格式:

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

  • 输出格式:

输出逆序的数。

  • 输入样例:

123

  • 输出样例:

321

#include<stdio.h>

int main()
{
    int num =0;
    scanf("%d", &num);
    
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    
    a = num % 10;    //取出个位数
    b = num/ 10 % 10;    //取出十位数
    c = num / 100;    //取出百位数
    d = a * 100 + b * 10 + c;
    
    printf("%d", d);
    
    return 0;
}

2.时间换算

  • 题目内容:

UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8。现在,你的程序要读入一个整数,表示BJT的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果小时不是0而分小于10分,需要保留十位上的0;如果小时是0而分小于10分的,则不需要保留十位上的0。如1124表示11点24分,而905表示9点5分,36表示0点36分,7表示0点7分。

有效的输入范围是0到2359,即你的程序不可能从测试服务器读到0到2359以外的输入数据。

你的程序要输出这个时间对应的UTC时间,输出的格式和输入的相同,即输出一个整数,表示UTC的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果小时不是0而分小于10分,需要保留十位上的0;如果小时是0而分小于10分的,则不需要保留十位上的0。

提醒:要小心跨日的换算。

  • 输入格式:

一个整数,表示BJT的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果小时不是0而分小于10分,需要保留十位上的0;如果小时是0而分小于10分的,则不需要保留十位上的0。

  • 输出格式:

一个整数,表示UTC的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果小时不是0而分小于10分,需要保留十位上的0;如果小时是0而分小于10分的,则不需要保留十位上的0。

  • 输入样例:

803

  • 输出样例:

3

#include<stdio.h>

int main()
{
    int a;
    scanf("%d",&a);
    if(a<0||a>2359)
        return 0;
    if(a>=800)
    {
        if(a==800)
            printf("0");
        else{
                if(a>800&&a<859)
                {
                    printf("%d",a%100);
                }
                else
                {
                    //用例应该是810-2359
                    if(a%100>10)
                        printf("%d%d",(a/100)-8,a%100);
                    else
                        printf("%d0%d",(a/100)-8,a%100);
                }
        }    
    }
    else
    {
        if(a%100>10)
        {
             printf("%d%d",(a/100)+16,a%100);
        }
        else
        {
           printf("%d0%d",(a/100)+16,a%100);
        }
    }
    return 0;
}

3.分队列

  • 题目内容:

班级第一次列队,通常老师会让同学按身高排成一列,然后1、2报数,喊到1的同学向前一 步,就这样,队伍就变成两列了。假设现在一个班级有n个同学,并且他们已经按身高排成 了一列,同学按身高从1到n编号,你能告诉我最后哪些编号的同学站在了第一列么?

  • 输入格式:

输入一个正整数n,表示班级的人数。

  • 输出格式:

按顺序输出所有在第一列的同学对应的编号,每两个编号之间用一个空格隔开,最后一个编号后面没有空格。

  • 输入样例:

11

  • 输出样例:

1 3 5 7 9 11

#include <stdio.h>
int main()
{
    int n,i=1;
    scanf("%d",&n);
    
    if(n>=1){
        for(i=1;i<=n;i++){
            if(i>1&&i%2==1){
                    printf(" %d", i);
                }else if(i==1){
            printf("%d",i);
            }
        }
    }

    return 0;
}

4.奇偶个数

  • 题目内容:

你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。

  • 输入格式:

一系列正整数,整数的范围是(0,100000)。如果输入-1则表示输入结束。

  • 输出格式:

两个整数,第一个整数表示读入数据中的奇数的个数,第二个整数表示读入数据中的偶数的个数。两个整数之间以空格分隔。

  • 输入样例:

9 3 4 2 5 7 -1

  • 输出样例:

4 2

#include <stdio.h>

int main() {
    int num, j, o;
    j = 0;
    o = 0;
    while(scanf("%d", &num)) {
        if(num == -1) {
            break;
        }
        else if(num%2 == 0) {
            o++;
        }
        else
        {
            j++;
        }
    }
    printf("%d %d", j, o);
    return 0;
}

5.数字特征值

#include <stdio.h>
int main()
{
    int count,x;
    //x是整数右边的
    int t,b=1,z=1;
    //t二进制数,b是二进制位数,刚开始b初始值为1,因为2的0次方为1.z整数位数
    int sum=0;
    scanf("%d",&count);
    for(;count!=0;z++)
    {
        x=count%10;
        count=count/10;
        if((z+x)%2==0)
        {
            t=1;
        }
        else
        {
            t=0;
        }
        sum=sum+t*b;
        b=b*2;
    }
    printf("%d",sum);
    return 0;
}

6.素数和

  • 题目内容:

我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。

现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。

  • 输入格式:

两个整数,第一个表示n,第二个表示m。

  • 输出格式:

一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。

  • 输入样例:

2 4

  • 输出样例:

15

#include <stdio.h>

int main() {
    int x,y;
    scanf("%d %d",&x,&y);
    int i;
    int j;
  
    int cnt=0;
    int sum=0;

    for(j=2;cnt<y;j++){
          int isprime=1;
        for(i=2;i<j;i++){
            if(j%i==0){
                isprime=0;
                break;
            }
        }
        if(isprime==1){
            cnt++;
        }
        if(cnt>=x&&isprime==1){
            sum+=j;
        }
    }    
    
    printf("%d",sum);
   
    return 0;
    
}

7.念整数

  • 题目内容:

你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。

如输入1234,则输出:yi er san si

注意,每个字的拼音之间有一个空格,但是最后的字后面没有空格。当遇到负数时,在输出的开头加上“fu”,如-2341输出为:fu er san si yi

  • 输入格式:

一个整数,范围是[-100000,100000]。

  • 输出格式:

表示这个整数的每一位数字的汉语拼音,每一位数字的拼音之间以空格分隔,末尾没有空格。

  • 输入样例:

-30

输出样例:

fu san ling

#include<stdio.h>
#include<math.h>
int main ()
{
    int x;
    int a;
    scanf("%d",&x);
    int t=abs(x);
    int mask=1;
    
    while(t>9)
    //如果输入t>0 则会多跑一轮 
    {
        t/=10;
        mask*=10;
    }
    if(x<0){                    
        printf("fu ");                    
    }                    
        a=abs(x);                    
      do
        {
        int d=a/mask;
        
         switch(d)
         {
             case 1:
                 printf("yi");
                 break;
             case 2:
                printf("er");
                break;
            case 3:
                printf("san");
                break;
            case 4:
                printf("si");
                break;
            case 5:
                printf("wu");
                break;
            case 6:
                printf("liu");
                break;
            case 7:
                printf("qi");
                break;
            case 8:
                printf("ba");
                break;
            case 9:
                printf("jiu");
                break;
            case 0:
                printf("lin");
                break;                        
         }
         
          if(a>9)
          //最后一位数一定小于等于9  
              {
                  printf(" ");//这样可以使前面的拼音带空格而最后的拼音不带空格 
            }    
        
         a%=mask;
         mask/=10;
          
        }
        while(a>=0);
         
        printf("\n");
            
}

声明:三二一的一的二|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - C语言 习题 (MOOC)


三二一的一的二