信息学奥赛一本通 第二章 顺序结构程序设计 五节C语言非C++

第二章 顺序结构程序设计

第五节 顺序结构实例

2070:【例2.13】数字对调

#include <stdio.h>

int main()
{
    
    
	int n, a, b, c;

    // 从输入读取一个整数n
	scanf("%d", &n);

    // 通过取余数运算得到n的个位数a
	a = n%10; // 个位 

    // 通过除以10然后取余数运算得到n的十位数b
	b = n/10%10; // 十位 

    // 通过除以100运算得到n的百位数c
	c = n/100; // 百位 

    // 输出n的个位、十位和百位数字反转后得到的新数字
    // 注意,如果a是0,那么输出的数字没有百位
	printf("%d", a*100+b*10+c); 

   	return 0;
}

2071:【例2.14】平均分

#include <stdio.h>

int main()
{
    
    
    // 声明两个double类型的变量x, y
    double x, y;

    // 从输入读取两个double类型的数并分别赋给x和y
    scanf("%lf %lf", &x, &y);

    // 计算x乘以87加上y乘以85,然后除以x加y的结果
    // 并将结果以保留4位小数的形式打印出来
    printf("%.4f", (x*87+y*85)/(x+y));

    return 0;
}

2072:【例2.15】歌手大奖赛

#include <stdio.h>

int main()
{
    
    
	double t, h, l; // t:总分,h:最高分,l:最低分

	t = 6*9.6; // 总分计算为6个9.6的和

	h = t-5*9.4; // 最高分为总分减去5个9.4

	l = t-5*9.8; // 最低分为总分减去5个9.8

    // 计算(t-h-l)/4的结果,即去掉最高分和最低分后的平均分
    // 以保留两位小数的形式打印结果
	printf("%5.2f", (t-h-l)/4);

	return 0; 
}

2073:【例2.16 】三角形面积

#include <bits/stdc++.h>
using namespace std;

int main()
{
    
    
    // 声明四个double类型的变量a, b, c, p
    double a, b, c, p;

    // 从输入读取三个double类型的数并分别赋给a, b, c
    scanf("%lf %lf %lf", &a, &b, &c); 

    // 计算(a+b+c)/2的结果并赋给p
    p = (a+b+c)/2;

    // 计算sqrt(p*(p-a)*(p-b)*(p-c))的结果,即根据海伦公式计算的三角形的面积
    // 并将结果以保留3位小数的形式打印出来
    printf("%.3f", sqrt(p*(p-a)*(p-b)*(p-c)));

    return 0;
}

1029:计算浮点数相除的余

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

int main()
{
    
    
    // 声明两个double类型的变量a, b
    double a, b; 

    // 从输入读取两个double类型的数并分别赋给a和b
    scanf("%lf %lf", &a, &b);

    // 计算a除以b的商的整数部分,然后这个整数乘以b后和a的差
    // 这实际上等价于a除以b的余数
    // 并将结果打印出来
    printf("%g", a - (int)(a/b) * b); // 或a - floor(a/b) * b

    return 0;
}

1030:计算球的体积

#include<stdio.h>

int main()
{
    
    
    // 声明并初始化一个常量PI,表示圆周率
    const double PI = 3.14;

    // 声明一个double类型的变量r,表示球的半径
    double r; 

    // 从输入读取一个double类型的数并赋给r
    scanf("%lf", &r);

    // 计算球的体积,公式为4/3*PI*r*r*r
    // 这里将4强制转换为double类型后参与除法运算,即可进行实数相除运算
    // 并将结果以保留2位小数的形式打印出来
    printf("%.2f", (double)4/3*PI*r*r*r);

    return 0;
}

1031:反向输出一个三位数

#include<stdio.h>

int main()
{
    
    
    // 声明一个整型变量n
    int n;

    // 从输入读取一个整数并赋给n
    scanf("%d", &n);

    // 对n进行循环,每次都将n除以10
    for(int a = n; a > 0; a /= 10)
        // 打印出n除以10的余数,也就是n的最后一位数字
        printf("%d", a % 10);
        
    return 0;
}

1032:大象喝水查

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

int main()
{
    
    
    // 声明并初始化一个常量PI,表示圆周率
    const double PI = 3.14159;

    // 声明两个整型变量h和r,分别表示圆柱体的高度和半径
    int h, r; 

    // 从输入读取两个整数并分别赋给h和r
    scanf("%d %d", &h, &r); 

    // 计算圆柱体的体积(公式为PI*r*r*h),然后用20000(单位为立方厘米,相当于20升)除以圆柱体的体积,并向上取整(因为如果不足一桶需要再加一桶)
    // 这里的结果是需要多少桶才能装满20升的水
    // ceil()函数返回的值为double类型,所以需要强制转换为int型输出
    printf("%d", (int)ceil(20/(PI*r*r*h/1000)));

    return 0;
}

1033:计算线段长度

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

int main()
{
    
    
    //声明四个double型变量,分别表示两个二维点的坐标
    double xa, ya, xb, yb;
    
    //从输入读取四个浮点数,分别赋值给xa, ya, xb, yb
    scanf("%lf %lf %lf %lf", &xa, &ya, &xb, &yb); 
    
    //计算两点间的欧氏距离,公式为sqrt((xa-xb)^2 + (ya-yb)^2)
    //并将结果保留三位小数,打印输出
    printf("%.3f", sqrt((xa-xb)*(xa-xb) + (ya-yb)*(ya-yb)));
    
    return 0;
}

1034:计算三角形面积

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

int main()
{
    
    
    // 声明六个double类型的变量x1, y1, x2, y2, x3, y3,分别表示三个二维点的坐标
    // 声明四个double类型的变量a_m, b_m, adotb, res,用于计算过程中的中间结果
    double x1,y1,x2,y2,x3,y3, a_m, b_m, adotb, res;

    // 从输入读取六个double类型的数并分别赋给x1, y1, x2, y2, x3, y3
    scanf("%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &x3, &y3);

    // 计算向量a的模(长度),公式为sqrt((x2-x1)^2 + (y2-y1)^2)
    a_m = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));

    // 计算向量b的模(长度),公式为sqrt((x3-x1)^2 + (y3-y1)^2)
    b_m = sqrt((x3-x1)*(x3-x1) + (y3-y1)*(y3-y1));

    // 计算向量a和向量b的点积,公式为(x2-x1)*(x3-x1) + (y2-y1)*(y3-y1)
    adotb = (x2-x1)*(x3-x1)+(y2-y1)*(y3-y1);

    // 计算向量a和向量b所构成的平行四边形的面积,公式为0.5*sqrt(a_m*b_m*a_m*b_m - adotb*adotb)
    res = 0.5 * sqrt(a_m*b_m*a_m*b_m-adotb*adotb);

    // 以两位小数的精度打印res
    printf("%.2lf\n", res);

    return 0;
}

1035:等差数列末项计算

#include <stdio.h>

int main()
{
    
    
    // 声明三个整数变量a1, a2, n,分别表示等差数列的前两项和项数
    int a1, a2, n;

    // 从输入读取三个整数并分别赋给a1, a2, n
    scanf("%d%d%d", &a1, &a2, &n);

    // 计算等差数列的第n项,等差数列的通项公式为an = a1 + (n-1)*d,其中d为公差,这里的公差d等于a2 - a1
    // 然后将结果打印出来
    printf("%d\n", a1 + (a2 - a1) * (n - 1));

    return 0;
}

1036:A×B问题

#include <stdio.h>

int main()
{
    
    
    // 声明两个long long类型的变量a, b,用于存储输入的两个大整数
    long long a, b;

    // 从输入读取两个long long类型的数并分别赋给a, b
    scanf("%lld %lld", &a, &b);

    // 计算a和b的乘积,并将结果打印出来
    printf("%lld", a * b);

    return 0;
}

1037:计算2的幂

#include <stdio.h>

int main()
{
    
    
    // 声明两个整数变量n, r,其中n用于存储输入的整数,r用于计算2^n
    int n, r = 1;

    // 从输入读取一个整数并赋给n
    scanf("%d", &n);

    // 使用for循环计算2^n,每次循环让r乘以2,循环n次
    for(int i = 0; i < n; ++i)
        r *= 2;

    // 打印2^n的结果
    printf("%d", r);

    return 0;
}

1038:苹果和虫子

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

int main()
{
    
    
    // 声明三个double类型的变量n, x, y,用于存储输入的三个浮点数
    double n, x, y;

    // 从输入读取三个double类型的数并分别赋给n, x, y
    scanf("%lf %lf %lf", &n, &x, &y);

    // 计算n - y / x的值,然后将结果向下取整(floor函数),
    // 然后和0比较取最大值(使用fmax函数),
    // 最后将结果转换为整数(使用(int)进行类型转换)并打印出来。
    printf("%d", (int)fmax(0, floor(n - y / x)));

    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44738632/article/details/134974648