C语言语法练习20题(变量、输入输出、表达式与顺序语句)

题目1:A + B

  • 题目链接

  • 输入两个整数,求这两个整数的和是多少。

输入格式

输入两个整数A, B,用空格隔开。

输出格式

输出一个整数,表示这两个数的和。

数据范围

0 ≤ A, B ≤ 10^8

输入样例
3 4
输出样例
7

解答(C语言实现):

#include <stdio.h>

int main() {
    int A, B;
    
    // 从标准输入读取两个整数
    scanf("%d %d", &A, &B);
    
    // 计算并输出它们的和
    printf("%d\n", A + B);
    
    return 0;
}

解释:

  1. 使用 scanf 函数从输入中读取两个整数 AB
  2. 通过 A + B 计算它们的和。
  3. 使用 printf 输出计算结果。

题目2:差

  • 题目链接

  • 读取四个整数 A, B, C, D,并计算 (A×B−C×D) 的值。

输入格式

输入共四行,第一行包含整数 A,第二行包含整数 B,第三行包含整数 C,第四行包含整数 D。

输出格式

输出格式为 DIFERENCA = X,其中 X(A×B−C×D) 的结果。

数据范围

-10000 ≤ A, B, C, D ≤ 10000

输入样例:
5
6
7
8
输出样例:
DIFERENCA = -26

解答(C语言实现):

#include <stdio.h>

int main() {
    int A, B, C, D;
    
    // 读取四个整数
    scanf("%d", &A);
    scanf("%d", &B);
    scanf("%d", &C);
    scanf("%d", &D);
    
    // 计算 (A×B−C×D) 的结果
    int result = (A * B) - (C * D);
    
    // 输出结果
    printf("DIFERENCA = %d\n", result);
    
    return 0;
}

解释:

  1. 使用 scanf 分别读取四个整数 A, B, C, D
  2. 计算 (A * B - C * D) 的值,并存储在 result 变量中。
  3. 使用 printf 按照题目要求的格式输出结果,DIFERENCA = result

题目3:圆的面积

  • 题目链接

  • 计算圆的面积的公式定义为 A = π R 2 A = \pi R^2 A=πR2

请利用这个公式计算所给圆的面积,其中 π \pi π 的取值为 3.14159。

输入格式

输入包含一个浮点数,为圆的半径 ( R )。

输出格式

输出格式为 A = X,其中 ( X ) 为圆的面积,用浮点数表示,保留四位小数。

数据范围

( 0 < R < 10000.00 )

输入样例:
2.00
输出样例:
A=12.5664

解答(C语言实现):

#include <stdio.h>

int main() {
    double R;
    const double PI = 3.14159;
    
    // 读取圆的半径
    scanf("%lf", &R);
    
    // 计算圆的面积
    double area = PI * R * R;
    
    // 输出圆的面积,保留四位小数
    printf("A=%.4lf\n", area);
    
    return 0;
}

解释:

  1. scanf 读取输入的浮点数作为圆的半径 R R R
  2. 使用公式 A = π R 2 A = \pi R^2 A=πR2 计算圆的面积,其中 π \pi π 的值为 3.14159。
  3. printf 按要求输出结果,保留四位小数,格式为 A=XX

题目4:平均数1

  • 题目链接

  • 读取两个浮点数 A 和 B 的值,对应于两个学生的成绩。

请你计算学生的平均分,其中 A 的成绩的权重为 3.5,B 的成绩的权重为 7.5。

输入格式

输入占两行,每行包含一个浮点数,第一行表示 A,第二行表示 B。

输出格式

输出格式为 MEDIA = X,其中 X 为平均分,结果保留五位小数。

数据范围

0 ≤ A, B ≤ 10.0

输入样例:
5.0
7.1
输出样例:
MEDIA = 6.43182

解答(C语言实现):

#include <stdio.h>

int main() {
    double A, B;
    const double weightA = 3.5;
    const double weightB = 7.5;
    
    // 读取两个浮点数
    scanf("%lf", &A);
    scanf("%lf", &B);
    
    // 计算加权平均分
    double media = (A * weightA + B * weightB) / (weightA + weightB);
    
    // 输出平均分,保留五位小数
    printf("MEDIA = %.5lf\n", media);
    
    return 0;
}

解释:

  1. scanf 用来读取两个浮点数 A 和 B,分别表示两个学生的成绩。
  2. 计算加权平均数公式: MEDIA = A × 3.5 + B × 7.5 3.5 + 7.5 \text{MEDIA} = \frac{A \times 3.5 + B \times 7.5}{3.5 + 7.5} MEDIA=3.5+7.5A×3.5+B×7.5
  3. 使用 printf 按照要求输出平均分,结果保留五位小数,格式为 MEDIA = XX.XXXXX

题目5:工资

  • 题目链接

  • 请编写一个程序,可以读取一名员工的员工编号,本月工作总时长(小时)以及时薪,并输出他的工资条,工资条中包括员工编号和员工月收入。

输入格式

输入包含两个整数和一个浮点数,分别代表员工编号,工作时长以及时薪。每个数占一行。

输出格式

输出共两行,第一行格式为 NUMBER = X,其中 X 为员工编号。
第二行格式为 SALARY = U$ Y,其中 Y 为该员工月收入,保留两位小数。

数据范围

1 ≤ 员工编号 ≤ 100
1 ≤ 总工作时长 ≤ 200
1 ≤ 时薪 ≤ 50

输入样例:
25
100
5.50
输出样例:
NUMBER = 25
SALARY = U$ 550.00

解答(C语言实现):

#include <stdio.h>

int main() {
    int employeeNumber, hoursWorked;
    double hourlyRate;
    
    // 读取员工编号、工作时长和时薪
    scanf("%d", &employeeNumber);
    scanf("%d", &hoursWorked);
    scanf("%lf", &hourlyRate);
    
    // 计算工资
    double salary = hoursWorked * hourlyRate;
    
    // 输出员工编号和工资,工资保留两位小数
    printf("NUMBER = %d\n", employeeNumber);
    printf("SALARY = U$ %.2lf\n", salary);
    
    return 0;
}

解释:

  1. 使用 scanf 读取三个输入:员工编号(整数)、工作时长(整数)以及时薪(浮点数)。
  2. 通过 hoursWorked * hourlyRate 计算员工的工资。
  3. 使用 printf 输出员工编号和工资,工资格式为 SALARY = U$ XX.XX,保留两位小数。

题目6:油耗

  • 题目链接

  • 给定一个汽车行驶的总路程(km)和消耗的油量(l),请你求出汽车每消耗 1 升汽油可行驶多少公里路程。

输入格式

输入共两行,第一行包含整数 X,表示行驶总路程。
第二行包含保留一位小数的浮点数 Y,表示消耗的油量。

输出格式

输出格式为 M km/l,其中 M 为计算结果,保留三位小数。

数据范围

1 ≤ X , Y ≤ 1 0 9 1 ≤ X, Y ≤ 10^9 1X,Y109

输入样例:
500
35.0
输出样例:
14.286 km/l

解答(C语言实现):

#include <stdio.h>

int main() {
    int X;
    double Y;
    
    // 读取总路程 X 和消耗的油量 Y
    scanf("%d", &X);
    scanf("%lf", &Y);
    
    // 计算每升油行驶的公里数
    double consumption = X / Y;
    
    // 输出结果,保留三位小数
    printf("%.3lf km/l\n", consumption);
    
    return 0;
}

解释:

  1. 使用 scanf 读取汽车行驶的总路程 X 和消耗的油量 Y
  2. 通过 X / Y 计算每升汽油行驶的公里数。
  3. 使用 printf 输出结果,保留三位小数,格式为 XX.XXX km/l

题目7:两点间的距离

  • 题目链接

  • 给定两个点 P1 和 P2,其中 P1 的坐标为 (x1, y1),P2 的坐标为 (x2, y2),请你计算两点间的距离是多少。

距离公式为: distance = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 \text{distance} = \sqrt{(x2 - x1)^2 + (y2 - y1)^2} distance=(x2x1)2+(y2y1)2

输入格式

输入共两行,每行包含两个双精度浮点数 $ x_i, y_i $,表示其中一个点的坐标。输入数值均保留一位小数。

输出格式

输出你的结果,保留四位小数。

数据范围

− 1 0 9 ≤ x i , y i ≤ 1 0 9 -10^9 \leq x_i, y_i \leq 10^9 109xi,yi109

输入样例:
1.0 7.0
5.0 9.0
输出样例:
4.4721

解答(C语言实现):

#include <stdio.h>
#include <math.h>

int main() {
    double x1, y1, x2, y2;
    
    // 读取点 P1 和 P2 的坐标
    scanf("%lf %lf", &x1, &y1);
    scanf("%lf %lf", &x2, &y2);
    
    // 计算两点间的距离
    double distance = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
    
    // 输出结果,保留四位小数
    printf("%.4lf\n", distance);
    
    return 0;
}

解释:

  1. 使用 scanf 读取两点的坐标 ( (x1, y1) ) 和 ( (x2, y2) )。
  2. 使用距离公式 distance = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 \text{distance} = \sqrt{(x2 - x1)^2 + (y2 - y1)^2} distance=(x2x1)2+(y2y1)2 计算两点间的距离。
  3. 使用 printf 输出结果,保留四位小数。

题目8:钞票

  • 题目链接

  • 你需要读取一个整数值并将其分解为多张钞票的和,钞票的面额包括 100, 50, 20, 10, 5, 2, 1。所使用的钞票数量要求尽可能少。

输入格式

输入一个整数 N

输出格式

输出读取数值以及每种面值钞票的需求数量,格式参照输出样例。

数据范围

0 < N < 1000000

输入样例:
576
输出样例:
576
5 nota(s) de R$ 100,00
1 nota(s) de R$ 50,00
1 nota(s) de R$ 20,00
0 nota(s) de R$ 10,00
1 nota(s) de R$ 5,00
0 nota(s) de R$ 2,00
1 nota(s) de R$ 1,00

解答(C语言实现):

#include <stdio.h>

int main() {
    int N;
    
    // 读取输入的整数 N
    scanf("%d", &N);
    
    // 输出读取的数值
    printf("%d\n", N);
    
    // 定义钞票的面额
    int denominations[] = {100, 50, 20, 10, 5, 2, 1};
    
    // 逐一计算每种面额需要的钞票数量
    for (int i = 0; i < 7; i++) {
        int count = N / denominations[i];  // 计算当前面额的钞票数量
        printf("%d nota(s) de R$ %d,00\n", count, denominations[i]);
        N = N % denominations[i];  // 更新剩余的金额
    }
    
    return 0;
}

解释:

  1. 使用 scanf 读取一个整数 N
  2. 定义一个数组 denominations 来存储所有可能的钞票面值。
  3. 通过循环计算每种面值钞票的数量 count,然后输出每种钞票的数量。
  4. 每次计算完某个面额的钞票数量后,更新剩余的金额 N,继续计算下一种面额的钞票数量。
  5. 输出格式严格按照题目要求,确保每个面值的输出都在新的一行。

题目9:时间转换

  • 题目链接

  • 读取一个整数值,它是工厂中某个事件的持续时间(以秒为单位),请将其转换为小时:分钟:秒来表示。

输入格式

输入一个整数 N,表示时间的秒数。

输出格式

输出转换后的时间表示,格式为 hours:minutes:seconds

数据范围

1 ≤ N ≤ 1000000

输入样例:
556
输出样例:
0:9:16

解答(C语言实现):

#include <stdio.h>

int main() {
    int N;
    
    // 读取输入的秒数
    scanf("%d", &N);
    
    // 计算小时、分钟和秒
    int hours = N / 3600;
    N = N % 3600;
    int minutes = N / 60;
    int seconds = N % 60;
    
    // 输出转换后的时间
    printf("%d:%d:%d\n", hours, minutes, seconds);
    
    return 0;
}

解释:

  1. 使用 scanf 读取一个整数 N,表示事件持续的秒数。
  2. 通过 N / 3600 计算小时数,之后用 N % 3600 更新剩余的秒数。
  3. N / 60 计算分钟数,接着用 N % 60 得到剩余的秒数。
  4. 最终输出 hours:minutes:seconds 格式的时间表示。

题目10:简单乘积

  • 题目链接

  • 读取两个整数值,计算它们的乘积并将结果存储在名为 PROD 的变量中。

输入格式

共两行,每行包含一个整数。

输出格式

输出格式为 PROD = X,其中 X 为乘积结果。

数据范围

输入的两个整数的绝对值均不超过 10000。

输入样例:
3
9
输出样例:
PROD = 27

解答(C语言实现):

#include <stdio.h>

int main() {
    int A, B;
    
    // 读取两个整数
    scanf("%d", &A);
    scanf("%d", &B);
    
    // 计算乘积并存储在变量 PROD 中
    int PROD = A * B;
    
    // 输出结果
    printf("PROD = %d\n", PROD);
    
    return 0;
}

解释:

  1. 使用 scanf 读取两个整数 AB
  2. 通过 A * B 计算它们的乘积,并将结果存储在变量 PROD 中。
  3. 使用 printf 输出格式化结果,格式为 PROD = X,其中 X 为乘积的值。

题目11:简单计算

  • 题目链接

  • 给定你两个产品的产品编号、产品数量以及产品单价,请你计算买下两种产品一共需要花费多少钱。

输入格式

输入共两行。
每行包含两个整数和一个浮点数,分别表示产品编号、产品数量和产品单价。

输出格式

输出格式为 VALOR A PAGAR: R$ X,其中 X 为产品总价值,保留两位小数。

数据范围

1 ≤ 产品编号, 产品数量 ≤ 10000
1.00 ≤ 产品单价 ≤ 10000.00

输入样例:
12 1 5.30
16 2 5.10
输出样例:
VALOR A PAGAR: R$ 15.50

解答(C语言实现):

#include <stdio.h>

int main() {
    int code1, code2, quantity1, quantity2;
    double price1, price2;
    
    // 读取第一个产品的编号、数量和单价
    scanf("%d %d %lf", &code1, &quantity1, &price1);
    
    // 读取第二个产品的编号、数量和单价
    scanf("%d %d %lf", &code2, &quantity2, &price2);
    
    // 计算总价格
    double total = (quantity1 * price1) + (quantity2 * price2);
    
    // 输出结果,保留两位小数
    printf("VALOR A PAGAR: R$ %.2lf\n", total);
    
    return 0;
}

解释:

  1. 使用 scanf 读取每个产品的编号、数量和单价。
  2. 计算总价值:第一个产品的总价为 quantity1 * price1,第二个产品的总价为 quantity2 * price2,然后将两者相加得到总价值。
  3. 使用 printf 按要求格式化输出结果,保留两位小数。

题目12:球的体积

  • 题目链接

  • 给定一个球体的半径 ( R ),请计算球体的体积。

  • 计算球体体积的公式为: V = 4 3 × π × R 3 V = \frac{4}{3} \times \pi \times R^3 V=34×π×R3

  • 其中 $ \pi $ 取 3.14159。

输入格式

输入一个整数 ( R )。

输出格式

输出格式为 VOLUME = X,其中 $ X $ 为球体的体积,结果保留三位小数。

数据范围

1 ≤ $ R $ ≤ 2000

输入样例:
3
输出样例:
VOLUME = 113.097

解答(C语言实现):

#include <stdio.h>
#include <math.h>

int main() {
    int R;
    const double PI = 3.14159;
    
    // 读取球体半径
    scanf("%d", &R);
    
    // 计算球体的体积,公式 V = (4/3.0) * PI * R^3
    double volume = (4.0 / 3.0) * PI * pow(R, 3);
    
    // 输出球体的体积,保留三位小数
    printf("VOLUME = %.3lf\n", volume);
    
    return 0;
}

解释:

  1. 使用 scanf 读取球体的半径 R R R
  2. 计算球体体积的公式为 V = 4 3 × π × R 3 V = \frac{4}{3} \times \pi \times R^3 V=34×π×R3,这里 $ \frac{4}{3.0} $ 用来避免整除的错误。
  3. 使用 pow 函数计算 R 3 R^3 R3
  4. 使用 printf 按格式输出体积,保留三位小数。

题目13:面积

  • 题目链接

  • 给定三个浮点数 A,B 和 C,计算以下几何图形的面积:

    1. 底边为 A,高为 C 的三角形。
    2. 半径为 C 的圆(π=3.14159)。
    3. 底边为 A 和 B,高为 C 的梯形。
    4. 边长为 B 的正方形。
    5. 边长为 A 和 B 的长方形。
输入格式

输入共一行,包含三个浮点数 A,B,C,保留一位小数。

输出格式

输出共五行,形式如下所示:

  1. TRIANGULO: X,其中 X 为三角形面积,保留三位小数。
  2. CIRCULO: X,其中 X 为圆形面积,保留三位小数。
  3. TRAPEZIO: X,其中 X 为梯形面积,保留三位小数。
  4. QUADRADO: X,其中 X 为正方形面积,保留三位小数。
  5. RETANGULO: X,其中 X 为长方形面积,保留三位小数。
数据范围

0 ≤ A, B, C ≤ 10000.0

输入样例:
3.0 4.0 5.2
输出样例:
TRIANGULO: 7.800
CIRCULO: 84.949
TRAPEZIO: 18.200
QUADRADO: 16.000
RETANGULO: 12.000

解答(C语言实现):

#include <stdio.h>
#include <math.h>

int main() {
    double A, B, C;
    const double PI = 3.14159;
    
    // 读取输入
    scanf("%lf %lf %lf", &A, &B, &C);
    
    // 计算各种面积
    double area_triangle = 0.5 * A * C;
    double area_circle = PI * pow(C, 2);
    double area_trapezium = 0.5 * (A + B) * C;
    double area_square = B * B;
    double area_rectangle = A * B;
    
    // 输出结果,保留三位小数
    printf("TRIANGULO: %.3lf\n", area_triangle);
    printf("CIRCULO: %.3lf\n", area_circle);
    printf("TRAPEZIO: %.3lf\n", area_trapezium);
    printf("QUADRADO: %.3lf\n", area_square);
    printf("RETANGULO: %.3lf\n", area_rectangle);
    
    return 0;
}

解释:

  1. 使用 scanf 读取输入的三个浮点数 A,B,C。
  2. 按照题目要求,分别计算三角形、圆、梯形、正方形、长方形的面积。
  3. 使用 printf 格式化输出每个图形的面积,保留三位小数。

题目14:平均数2

  • 题目链接

  • 读取三个浮点数 A,B 和 C,对应于三个学生的成绩。请计算加权平均分,其中 A 的权重为 2,B 的权重为 3,C 的权重为 5。

输入格式

输入共三行,每行包含一个浮点数。
第一行表示 A,第二行表示 B,第三行表示 C。

输出格式

输出格式为 MEDIA = X,其中 X 为加权平均分,结果保留一位小数。

数据范围

0 ≤ A, B, C ≤ 10.0

输入样例:
5.0
6.0
7.0
输出样例:
MEDIA = 6.3

解答(C语言实现):

#include <stdio.h>

int main() {
    double A, B, C;
    const int weightA = 2, weightB = 3, weightC = 5;
    
    // 读取三个浮点数 A, B, C
    scanf("%lf", &A);
    scanf("%lf", &B);
    scanf("%lf", &C);
    
    // 计算加权平均分
    double media = (A * weightA + B * weightB + C * weightC) / (weightA + weightB + weightC);
    
    // 输出结果,保留一位小数
    printf("MEDIA = %.1lf\n", media);
    
    return 0;
}

解释:

  1. 使用 scanf 读取三个浮点数 A, B, C,分别表示三个学生的成绩。
  2. 按照权重(A 的权重为 2,B 的权重为 3,C 的权重为 5)计算加权平均分。
  3. 使用 printf 格式化输出结果,保留一位小数。

题目15:工资和奖金

  • 题目链接

  • 给定销售人员的名字、底薪以及月销售额,计算该销售人员的月收入。 月收入等于底薪加上 15% 的月销售额。

输入格式
  1. 第一行:一个由大写字母构成的字符串,表示销售人员的名字(长度不超过 10)。
  2. 第二行:一个浮点数,表示该人员的底薪。
  3. 第三行:一个浮点数,表示该人员的月销售额。
输出格式

输出格式为 TOTAL = R$ X,其中 X 为该人员的月收入,保留两位小数。

数据范围

0 ≤ 底薪, 月销售额 ≤ 10000.00

输入样例:
JOAO
500.00
1000.00
输出样例:
TOTAL = R$ 650.00

解答(C语言实现):

#include <stdio.h>

int main() {
    char name[11];  // 名字的最大长度为10
    double salary, sales;
    
    // 读取销售人员的名字、底薪和月销售额
    scanf("%s", name);
    scanf("%lf", &salary);
    scanf("%lf", &sales);
    
    // 计算月收入 = 底薪 + 15% 的月销售额
    double total = salary + (sales * 0.15);
    
    // 输出结果,保留两位小数
    printf("TOTAL = R$ %.2lf\n", total);
    
    return 0;
}

解释:

  1. 使用 scanf 读取销售人员的名字、底薪和月销售额。
  2. 通过公式计算月收入:月收入 = 底薪 + 月销售额的 15%。
  3. 使用 printf 按照要求的格式输出月收入,保留两位小数。

题目16:最大值

  • 题目链接

  • 给定三个整数,请你找出它们中的最大值。

可以使用以下公式来计算两个数中的最大值: max ( a , b ) = a + b + abs ( a − b ) 2 \text{max}(a,b) = \frac{a + b + \text{abs}(a - b)}{2} max(a,b)=2a+b+abs(ab)

输入格式

输入占一行,包含三个整数。

输出格式

输出格式为 X eh o maior,其中 X 为三个数中的最大值。

数据范围

1 ≤ 给定整数 ≤ 1 0 9 10^9 109

输入样例:
7 14 106
输出样例:
106 eh o maior

解答(C语言实现):

#include <stdio.h>
#include <stdlib.h>

int main() {
    int a, b, c;
    
    // 读取三个整数
    scanf("%d %d %d", &a, &b, &c);
    
    // 计算前两个数的最大值
    int max_ab = (a + b + abs(a - b)) / 2;
    
    // 计算 max_ab 和第三个数的最大值
    int max_abc = (max_ab + c + abs(max_ab - c)) / 2;
    
    // 输出结果
    printf("%d eh o maior\n", max_abc);
    
    return 0;
}

解释:

  1. 使用 scanf 读取三个整数 a, b, c
  2. 使用公式 max ( a , b ) = a + b + abs ( a − b ) 2 \text{max}(a, b) = \frac{a + b + \text{abs}(a - b)}{2} max(a,b)=2a+b+abs(ab) 计算前两个数中的最大值。
  3. 使用相同的公式计算前两个数的最大值与第三个数的最大值。
  4. 输出结果,格式为 X eh o maior

题目17:距离

  • 题目链接

  • 两辆汽车在同一地点,同时沿同一方向前进。一辆车的速度为 60 km/h,另一辆车的速度为 90 km/h。每过 60 分钟,两车的距离就会拉开 30 公里。给定两车之间的距离 L 公里,求出它们已经行驶了多长时间(以分钟为单位)。

输入格式

输入包含一个整数 L ,表示两车之间的距离。

输出格式

输出格式为 X minutos,其中 X 为两车已经行驶的时间,单位为分钟。

数据范围

$1 ≤ L ≤ 10^9 $

输入样例:
30
输出样例:
60 minutos

解答(C语言实现):

#include <stdio.h>

int main() {
    int L;
    
    // 读取两车之间的距离
    scanf("%d", &L);
    
    // 每公里的时间是2分钟,所以时间是 L * 2
    int time = L * 2;
    
    // 输出结果
    printf("%d minutos\n", time);
    
    return 0;
}

解释:

  1. 两辆车每小时拉开 30 公里的距离,因此每公里的时间是 2 分钟。
  2. 通过 L * 2 计算出已经行驶的时间。
  3. 使用 printf 输出时间,格式为 X minutos

题目18:燃料消耗

  • 题目链接

  • 一辆汽车每行驶 12 公里需要消耗 1 升汽油。现在给定汽车的行驶速度 S(km/h)和行驶时间 T(小时),请计算该车在行驶过程中一共消耗了多少升汽油。

输入格式
  1. 第一行包含一个整数 T ,表示行驶时间(小时)。
  2. 第二行包含一个整数 S ,表示行驶速度(km/h)。
输出格式

输出行驶期间的总油耗,结果保留三位小数。

数据范围

1 ≤ T , S ≤ 1 0 7 1 ≤ T, S ≤ 10^7 1T,S107

输入样例:
10
85
输出样例:
70.833

解答(C语言实现):

#include <stdio.h>

int main() {
    long long int T, S;
    
    // 读取行驶时间和速度
    scanf("%lld", &T);
    scanf("%lld", &S);
    
    // 计算总行驶的距离,使用 long long int 类型
    long long int distance = T * S;
    
    // 计算总油耗,仍然使用 double 类型
    double fuel_consumed = (double)distance / 12;
    
    // 输出结果,保留三位小数
    printf("%.3lf\n", fuel_consumed);
    
    return 0;
}

解释:

  1. 数据范围很大,变量都应为 long long int 类型
  2. 使用 scanf 读取行驶时间 T 和速度 S 。
  3. 根据公式 distance = T × S \text{distance} = T \times S distance=T×S 计算总行驶的距离。
  4. 每行驶 12 公里消耗 1 升汽油,因此总油耗为 fuel_consumed = d i s t a n c e / 12 distance/12 distance/12
  5. 使用 printf 输出结果,保留三位小数。

题目19:钞票和硬币

  • 题目链接

  • 读取一个带有两个小数位的浮点数,代表货币价值。将该值分解为多种钞票和硬币的和,要求使用的钞票和硬币的总数量尽可能少。

输入格式

输入一个浮点数 ( N )。

输出格式

输出每种面值的钞票和硬币的需求数量,格式如样例所示。

数据范围

0 ≤ ( N ) ≤ 1000000.00

输入样例:
576.73
输出样例:
NOTAS:
5 nota(s) de R$ 100.00
1 nota(s) de R$ 50.00
1 nota(s) de R$ 20.00
0 nota(s) de R$ 10.00
1 nota(s) de R$ 5.00
0 nota(s) de R$ 2.00
MOEDAS:
1 moeda(s) de R$ 1.00
1 moeda(s) de R$ 0.50
0 moeda(s) de R$ 0.25
2 moeda(s) de R$ 0.10
0 moeda(s) de R$ 0.05
3 moeda(s) de R$ 0.01

解答(C语言实现):

#include <stdio.h>

int main() {
    double N;
    int notas, moedas;
    
    // 读取浮点数 N,转换为整数形式表示(单位为分,避免浮点数误差)
    scanf("%lf", &N);
    int valor = (int)(N * 100 + 0.5); // 将浮点数乘以100并四舍五入

    // 处理钞票部分
    printf("NOTAS:\n");
    notas = valor / 10000;
    printf("%d nota(s) de R$ 100.00\n", notas);
    valor %= 10000;

    notas = valor / 5000;
    printf("%d nota(s) de R$ 50.00\n", notas);
    valor %= 5000;

    notas = valor / 2000;
    printf("%d nota(s) de R$ 20.00\n", notas);
    valor %= 2000;

    notas = valor / 1000;
    printf("%d nota(s) de R$ 10.00\n", notas);
    valor %= 1000;

    notas = valor / 500;
    printf("%d nota(s) de R$ 5.00\n", notas);
    valor %= 500;

    notas = valor / 200;
    printf("%d nota(s) de R$ 2.00\n", notas);
    valor %= 200;

    // 处理硬币部分
    printf("MOEDAS:\n");
    moedas = valor / 100;
    printf("%d moeda(s) de R$ 1.00\n", moedas);
    valor %= 100;

    moedas = valor / 50;
    printf("%d moeda(s) de R$ 0.50\n", moedas);
    valor %= 50;

    moedas = valor / 25;
    printf("%d moeda(s) de R$ 0.25\n", moedas);
    valor %= 25;

    moedas = valor / 10;
    printf("%d moeda(s) de R$ 0.10\n", moedas);
    valor %= 10;

    moedas = valor / 5;
    printf("%d moeda(s) de R$ 0.05\n", moedas);
    valor %= 5;

    moedas = valor / 1;
    printf("%d moeda(s) de R$ 0.01\n", moedas);
    
    return 0;
}

解释:

  1. 将输入的浮点数 ( N ) 乘以 100,转换为整数表示金额(单位为分)来避免浮点数精度问题。
  2. 使用整数表示金额后,依次计算每种面值钞票和硬币的数量,并更新剩余的金额。
  3. 按照题目要求输出钞票和硬币的数量,保留每个面值的格式。

题目20:天数转换

  • 题目链接

  • 读取一个整数值 ( N ),表示一个人的年龄(以天为单位),并将其转换为年、月和日的表示方式。年、月、日分别对应 ano(s), mes(es), dia(s)

假设:

  • 1 年 = 365 天
  • 1 月 = 30 天
输入格式

输入一个整数 ( N )。

输出格式

输出转换后的天数,格式为:

  • X ano(s)
  • Y mes(es)
  • Z dia(s)
数据范围

1 ≤ ( N ) ≤ 1000000

输入样例:
400
输出样例:
1 ano(s)
1 mes(es)
5 dia(s)

解答(C语言实现):

#include <stdio.h>

int main() {
    int N;
    
    // 读取天数
    scanf("%d", &N);
    
    // 计算年、月和日
    int anos = N / 365;
    N = N % 365;
    int meses = N / 30;
    int dias = N % 30;
    
    // 输出结果
    printf("%d ano(s)\n", anos);
    printf("%d mes(es)\n", meses);
    printf("%d dia(s)\n", dias);
    
    return 0;
}

解释:

  1. 使用 scanf 读取输入的天数 ( N )。
  2. 计算年数:将天数除以 365 得到年份 ( anos ),并更新剩余的天数。
  3. 计算月数:将剩余天数除以 30 得到月份 ( meses ),并更新剩余的天数为日数。
  4. 按照题目要求格式化输出年、月和日的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈ing小甘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值