第一次机考

ex_01

题目:

C语言为程序员提供了丰富的数据类型,如char 型、int 型、long long 型、float 型、double 型。你的任务是在主程序中分别定义上述的所有类型变量,并用sizeof运算符求出每种类型在当前系统下所占内存的大小。
输入:
共5行,第一行是一个整数n(要求用int存储);第二行为一个整数m(要求用 long long 存储),第三行是一个浮点数(要求用float存储);第四行是一个浮点数(要求用double存储);第五行是一个字符c(只可能是大写字母或小写字母,要求用char存储)。测试用例保证合法,不会出现超出我们指定的数据类型的范围。
输出:
共五行,每行一次对应输入的五行,输出格式见测试用例。
注意:
1、浮点数均要求保留2位小数;
输入样例
100
100000000000
3.14
1.23456789
a
输出样例
Size of 100 is 4.
Size of 100000000000 is 8.
Size of 3.14 is 4.
Size of 1.23 is 8.
Size of ‘a’ is 1.
分析:
毕竟第一道题,没有什么难度,考查sizeof,注意输出格式

#include 
int main()
{
 int n;
 long long int m;
 float f;
 double d;
 char c;
 scanf("%d",&n);
 scanf("%lld",&m);
 scanf("%f",&f);
 scanf("%lf\n",&d);
 scanf("%c",&c);
 printf("Size of %d is %d.\n",n,sizeof(n));
 printf("Size of %lld is %d.\n",m,sizeof(m));
 printf("Size of %.2f is %d.\n",f,sizeof(f));
 printf("Size of %.2lf is %d.\n",d,sizeof(d));
 printf("Size of '%c' is %d.",c,sizeof(c));
 return 0;
}

ex_02

题目:
请写程序求表达式a + b * c / d % e -f 的值。
输入:
只有一行,为六个用空格分隔的整数,依次代表 a、b、c、d、e、f(-100000 < a,b,c,d,e,f
< 100000)。
输出:
只有一个整数,为表达式的值。测试数据保证合法,不会出现除数为0的情况且除法为C语言的整数除法。
分析:
表面上看起来很善良,然而考试的时候提交了n次,要注意数值范围,int的范围大致是-2147483648 ~2147483647,显然计算a*b时有可能超出范围,所以用long long int储存

#include 
int main()
{
 long long int a,b,c,d,e,f,sum;
 scanf("%lld%lld%lld%lld%lld%lld",&a,&b,&c,&d,&e,&f);
 sum = a+b*c/d%e-f;
 printf("%lld",sum);
 return 0;
}

ex_03

题目:
请你根据给定的三条线段的长度来判断这三条线段是否能构成一个三角形及构成什么样的三角形。
输入:
只有一行,为三个用空格分隔的正整数,代表三条线段的长度。
输出:
当无法构成三角形时输出“It is not a triangle.”;当构成不规则三角形时输出“It is a scalenous triangle.”;当构成直角三角形时输出“It is a right-angled triangle.”;当构成等腰三角形时输出“It is an isosceles triangle.”;当构成等边三角形时输出“It is a equilateral triangle.”
测试用例保证输入合法且所有整数可以用int型存储。
分析:
这道题我又提交了很多次,因为初中老师说等边三角形是特殊的等腰三角形,可是OJ并不这么觉得,代码思路是先将三边长按从小到大排序,之后用if会更加方便,当然也可以不排序,用 if+&&或是 if+|| 进行判断。

int main()
{
    int a,b,c,temp;
    scanf("%d%d%d",&a,&b,&c);
    if(a>b)
    {
        temp = a;
        a = b;
        b = temp;
    }
    if(a>c)
    {
        temp = a;
        a = c;
        c = temp;
    }
    if(b>c)
    {
        temp = b;
        b = c;
        c = temp;
    }  //a,b,c的值按由小到大排列
    if(a+b<=c)
        printf("It is not a triangle.");
    else
    {
        if(a==b && b==c)
            printf("It is a equilateral triangle.");
        else if(a==b || b==c || a==c)
            printf("It is an isosceles triangle.");
        else if(a*a+b*b==c*c)
            printf("It is a right-angled triangle.");
        else
            printf("It is a scalenous triangle.");
    }
    return 0;
}

ex_04

题目:
题目描述
给定三个浮点数,a,b,c(用float类型存储),如果a除以b的绝对值与b除以c的绝对值相等,则输出yes,否则输出no。
输入:
只有一行,为三个用空格分隔的浮点数。
输出:
如果a除以b的绝对值与b除以c的绝对值相等,则输出yes,否则输出no。测试用例保证输入合法,且b和c不为0。
分析:
这道题依旧是提交了很多次,程序在运行时将十进制数转化为二进制数进行计算,所以会出现无限不循环情况,例如5.4转化为二进制数为无限小数,所以不能用"=="直接判断两数是否相等,需运用fabs 函数,允许误差为1e-6

#include 
#include 
int main()
{
 float a,b,c,n1,n2;
 scanf("%f%f%f",&a,&b,&c);
 n1 = fabs(a/b);
 n2 = fabs(b/c);
 if(fabs(n1-n2)<1e-6)
 printf("yes");
 else
 printf("no");
 return 0;
}

ex_05

题目:
某电商推出优惠活动。规定,如果某订单商品总价大于等于300元,则免100元;如果订单商品总价大于等于200元但小于300元,则免75元;如果订单商品总价大于等于100元但小于200元,则免30元。现某订单共4件商品,请你算一下该订单实付多少(不含邮费)。
输入:
只有一行,为四个用空格分隔的正整数,代表4件商品的价格。
输出:
为一个整数,为客户实际需要支付的钱数(不含邮费)。测试用例保证输入合法,且所有整数可以用int型存储。
分析:
一道善良的题,用 if 暴力解决

#include 
int main()
{
    int a,b,c,d,sum;
    scanf("%d%d%d%d",&a,&b,&c,&d);
    sum = a+b+c+d;
    if(sum>=100 && sum<200)
        sum = sum -30;
    if(sum>=200 && sum<300)
        sum = sum-75;
    if(sum>=300)
        sum = sum-100;
    printf("%d",sum);
    return 0;
}

你可能感兴趣的:(第一次机考)