翁恺《C语言程序设计》例题


部分例题以及格式来自:中国大学MOOC-翁恺-C语言程序设计习题集(一) - Assassinの - 博客园 (cnblogs.com) ,代码是自己写的。


 

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

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

输入格式:

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

输出格式:

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

输入样例:

  2 3

代码:

#include<stdio.h>

int main(){
    int a,b;
    scanf("%d %d", &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);
    printf("%d / %d = %d\n", a, b, a/b);
    
    return 0;
}
02-0.c

 

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

 

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

输入格式:

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

输出格式:

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

输入样例:
  170
输出样例:
  5 6
代码:

#include<stdio.h>

int main(){
    int centimeter, foot, inch;
    float meter;
    scanf("%d", &centimeter);
    
    meter = centimeter/100.0;
    foot = meter/0.3048;
    inch = (meter/0.3048 - foot)*12;
    
    printf("%d %d\n", foot, inch);
    
    return 0;
}
02-1.c

 

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

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

输入格式:

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

输出格式:

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

输入样例:
  1120 110
输出样例:
  1310
代码:

#include<stdio.h>

int main(){
    int time, hour, minute, passmin;
    
    scanf("%d %d", &time, &passmin);
    hour = time/100;
    minute = time - hour*100;
    hour = hour + passmin/60;
    minute = minute + passmin - passmin/60*60;
    hour = hour + minute/60;
    minute = minute - minute/60*60;
    time = hour*100 + minute;
    
    printf("%d\n", time);
    
    return 0;
}
02-2.c

 

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

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

输入格式:

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

输出格式:

  输出按位逆序的数。

输入样例:

  123

输出样例:

  321

 代码:

#include<stdio.h>

int main(){
    int n, t ,s=0;
    scanf("%d",&n);
    
    while(n>0){
        t = n % 10;
        s = s*10 + t;
        n/=10;
    }
    
    printf("%d\n",s);
    
    return 0;
}
02-3.c

 

02-4. BCD解密(10)

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

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

输入格式:

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

输出格式:

  输出对应的十进制数。

输入样例:
  18
输出样例:
  12
代码:

#include<stdio.h>

int main(){
    int n, bcd, decimal;
    
    scanf("%d", &n);
    
    bcd = n/16%16*10 + n%16;
    /*题目说明了不会出现A-F
    因此表现形式上decimal等于bcd */
    decimal = bcd; 
    
    printf("%d\n", decimal);
    return 0;
}
02-4.c

 

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

中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第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>

int main(){
    int n;
    scanf("%d",&n);
    
    if(n%5==0||n%5==4){
        printf("Drying in day %d\n",n);
    } 
    else{
        printf("Fishing in day %d\n",n);
    }
    return 0;
}
03-1.c

 

03-4. 成绩转换(15)

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

  大于等于90分为A;小于90且大于等于80为B;小于80且大于等于70为C;小于70且大于等于60为D;小于60为E。
输入格式:

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

输出格式:

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

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

#include<stdio.h>

int main(){
    int score;
    scanf("%d", &score);
    
    switch(score/10){
        case 10:
            printf("A");
            break;
        case 9:
            printf("A");
            break;
        case 8:
            printf("B");
            break;
        case 7:
            printf("C");
            break;
        case 6:
            printf("D");
            break;
        default:
            printf("E");
            break;
    }
    
    return 0;
}
03-4.c

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM