浙邮院基础训练解题报告

全题目详解-by xzj





A:C语言实验题――Hello World


基础输出题,一个cout解决,直接贴代码


#include "iostream"
using namespace std;
int main() {
   cout << "Hello, World!";     //这里建议从题目上直接复制粘贴,避免格式问题
   return 0;
}


B:C语言实验题――三角形面积


这道题目需要考虑保留三位小数以及变量类型的转换,保留小数可以使用printf输出函数%.3f的输出方式

直接使用math库中的sqrt函数进行开根,注意要加上cmath或者math.h头文件

注意定义变量的类型,如果直接使用整形进行计算会导致计算出来的结果被强制转换为整形而不是小数


#include "iostream"
#include "cmath"//或者math.h
#include "cstdio"         //或者stdio.h
using namespace std;
int main() {
    float a, b, c;                   
    cin >> a >> b >> c;
    float p = (a + b + c) / 2;    
        //这里a、b、c都是float类型,所以计算结果也会是float类型,如果a、b、c是整形,那么2需要改为2.0
    printf("%.3f\n", sqrt(p * (p - a) * (p - b) * (p - c)));
    return 0;
}


C:C语言实验题――找中间数


非常简单粗暴的if else运用,首先判断最大的,再判断第二大的,就是中间数了。


#include "iostream"
using namespace std;
int main() {
    int a, b, c;
    cin >> a >> b >> c;
    if (a > b && a > c) {                      //这里判断a是不是最大的
        if (b > c) cout << b << endl;          //这里开始判断哪个是第二大的,也就是中位数
        else cout << c << endl;
    }
    else if (b > c) {                          //这里判断b是不是最大的,这里用的是else,a已经不是最大的了
        if (a > c) cout << a << endl;
        else cout << c << endl;
    }
    else {                                     //这里就是c最大了
        if (a > b) cout << a << endl;
        else cout << b << endl;
    }
    return 0;
}


D:C语言实验题――三个整数


这道题和b题的难点比较类似,在保留小数的问题上我们同样使用到printf函数,方便快捷,注意要加上cstdio头文件


#include "iostream"
#include "cstdio"         //或者stdio.h
using namespace std;
int main() {
    int a, b, c;
    cin >> a >> b >> c;
    cout << a + b + c << " ";
    cout << a * b * c << " ";
    printf("%.2f\n", (a + b + c) / 3.0);    //由于a、b、c是整形变量,需要一个浮点型3.0来改变计算结果的类型
    return 0;
}


E:C语言实验题――买糖果


这道题目考的是整除以及取余符号的运用,由于c++中整数之间的运算为整除,也就是自动向下取整,所以我们直接乘十除三就可以计算出可以购买的个数,剩余的钱直接乘十取余就可以了


#include "iostream"
using namespace std;
int main() {
    int a;
    cin >> a;
    cout << a * 10 / 3 << " " << a * 10 % 3 << endl;
    return 0;
}


F:C语言实验题――温度转换


这道题目考的是浮点型的输入输出运算,我们直接使用scanf和printf函数,用%.2f控制小数点后两位


#include "cstdio"         //或者stdio.h
using namespace std;
int main() {
    float a;
    scanf("%f", &a);                            //地址符(&)别忘咯
    printf("%.2f\n", (5 * (a - 32)) / 9);
    return 0;
}


G:C语言实验题――三个数排序


这道题难点在于输入格式控制以及排序输出,有两种解题方式

输入格式控制我们可以直接使用scanf语句,双引号内使用"%d,%d,%d"可以控制逗号分隔


1、比较之后交换变量

定义一个中间变量t,需要交换时用t存储变量,这种方法比较清晰便捷

#include "iostream"
#include "cstdio"        //或者stdio.h
using namespace std;
int main() {
    int a, b, c;
    scanf("%d,%d,%d", &a, &b, &c);
    if (a > b) {                             //判断a是否比b大
        int t = a;
        a = b;
        b = t;
    }
    if (b > c) {                            //判断b是否比c大,这时候b绝对是比a大的
        int t = b;
        b = c;
        c = t;
    }
    if (a > b) {                            //这时候c绝对是最大的,判断a是否比b大
        int t = a;
        a = b;
        b = t;
    }
    cout << a << " " << b << " " << c << endl;
    return 0;
}


2、直接输出

需要运用大量的if语句,比较复杂

#include "iostream"
#include "cstdio"        //或者stdio.h
using namespace std;
int main() {
    int a, b, c;
    scanf("%d,%d,%d", &a, &b, &c);
    if (a > b && a > c) {                        //判断a是否是最大的
        if (b > c) cout << c << " " << b << " " << a << endl;    //a是最大的,判断b是否比c大
        else cout << b << " " << c << " " << a << endl;
    }
    else if (b > c) {                                //判断b是否是最大的
        if (a > c) cout << c << " " << a << " " << b << endl;    //b是最大的,判断a是否比c大
        else cout << a << " " << c << " " << b << endl;
    }
    else {                                                //c是最大的
        if (a > b) cout << b << " " << a << " " << c << endl;    //判断a是否比b大
        else cout << a << " " << b << " " << c << endl;
    }
    return 0;
}


H:C语言实验题――大小写转换


这道题考验字符型的输入输出以及asc码

我们都知道大写字母的asc码比小写字母的asc码小32,只需要将输入的字符加32就可以将大写转为小写了

要注意的一点是如果直接输出原字符+32会输出一个整数,除非使用printf函数的%c控制输出格式,所以需要一个字符型变量储存答案


#include "iostream"
using namespace std;
int main(){
    char c;
    cin >> c;
    char ans=c+32;
    cout << ans;
    return 0;
}


I:C语言实验题――逆置正整数


逆置三位正整数,需要用到整除以及取余,根据十进制,我们只需要对十取余就可以取出个位数,除十就可以将个位数去除,让十位变成个位。三位正整数是比较简单的,直接使用三个变量储存个位十位百位,倒序输出即可。

这里需要注意的是前缀零,我们需要判断哪些是前缀零


正解:

#include "iostream"
using namespace std;
int main() {
    int n;
    cin >> n;
    int a = n % 10;            //个位
    int b = n / 10 % 10;        //十位
    int c = n / 100;           //百位
    if(a==0&&b==0) cout << c;         //如果a和b都是0那么只需要输出c
    else if(a==0) cout << b << c;               //如果只有a为0那么只需要输出bc
    else cout << a << b << c;                   //否则正常输出
    return 0;
}


不限位数逆置:

用到的方法是数位分离,我们将整数末尾的位数取出之后去除掉,直到所有的位数都被取出为止

举例:1234 -> 123 -> 12 -> 1 -> 0

#include "iostream"
using namespace std;
int main() {
int a, b = 0;                            //这里的b可以看作是通行证,用来剔除前缀零
cin >> a;
while (a) { //循环到a变为0为止
if (a % 10 != 0) b = 1;        //这里的b在第一个非零位数会变为1
if (b) cout << a % 10;        //如果第一个非零位数已经出现了直接输出最后一位(个位数)
a /= 10;                     //将个位数去除,十位数变成个位数
}
return 0;
}


J:C语言实验题――两个数最大


判断大小,控制输出格式,直接上代码


#include "iostream"
using namespace std;
int main(){
    int a,b;
    cin >> a >> b;
    if(a>b) cout << "max=" << a;
    else cout << "max=" << b;
    return 0;
}


K:C语言实验题――鸡兔同笼


数学思维题,知道公式就很好做

先设所有的都是鸡(也就是所有的兔子都抬起了两条腿),头的数目乘二,再把总的腿数减去设想都是鸡的腿数就是兔子抬起了多少条腿,再除二就是兔子的数量


#include "iostream"
using namespace std;
int main() {
    int a, b, c;
    cin >> a >> b;
    int x = (b - a * 2) / 2;
    cout << a - x << " " << x;
    return 0;
}


L:C语言实验题――相加和最大值


这道题目有两种方法


1、直接比较

由于本题只有三个整数,所以两数和的可能性只有三种:a+b、b+c、a+c

#include "iostream"
using namespace std;
int main() {
    int a, b, c;
    cin >> a >> b >> c;
    int maxn = a + b;                            //用一个变量maxn来存储最大的两数和
    if (a + c > maxn) maxn = a + c;
    if (c + b > maxn) maxn = c + b;
    cout << maxn;
    return 0;
}


2、找到最小的数,输出另外两数的和

#include "iostream"
using namespace std;
int main() {
    int a, b, c;
    cin >> a >> b >> c;
    if (a < b && a < c) cout << b + c;        //a最小,输出b+c
    else if (b < c) cout << a + c;            //b最小
    else cout << a + b;
    return 0;
}


注:如果题目要求不只三个数,就需要找到最大的两个数再相加,需要用到循环。












为解题报告打分
暂时不评分

★★
★★★
★★★★
★★★★★
发表您的评论(若贴AC代码或发表禁止言论等违禁行为将被删除并扣除积分)

|返回 |   | 转到页头|
Copyright @ 2008-2024(浙ICP备2022001332号), TZOJ. All Rights Reserved.