PAT练习中的错误


1.数据类型

(1)本题要求编写程序,计算4个整数的和与平均值。题目保证输入与输出均在整型范围内。

输入格式:输入在一行中给出4个整数,其间以空格分隔。

输出格式:在一行中按照格式“Sum = 和; Average = 平均值”顺序输出和与平均值,其中平均值精确到小数点后一位。

输入样例:1 2 3 4

输出样例:Sum = 10; Average = 2.5

#include<stdio.h>
int main(){
    int a,b,c,d;
    scanf("%d %d %d %d",&a,&b,&c,&d);
    printf("Sum = %d; Average = %.1f",a+b+c+d,(a+b+c+d)/ 4.0);
    return 0;
}
//输出整数用%d;输出一位小数用%.1f,并且所计算的值记得乘保留一位小数点的值。

 

(2)对于输入的两个整数,按照要求输出其和差积商。

输入格式:在一行内输入两个不超过100的非负整数a和b,中间以一个空格间隔,且保证b不为0。

输出格式:共四行,格式是:

[a] + [b] = [a+b]

[a] - [b] = [a-b]

[a] * [b] = [a*b]

[a] / [b] = [a/b]

其中,带有方括号的内容(如[a][b][a+b]等)表示相应整数或运算结果的值,在输出时要用实际的值代替。并且:如果a能够被b整除,那么a/b应输出为整数格式,否则a/b输出为带两位小数的格式。提示:注意表达式中的空格。

输入样例1:

6 3

输出样例1:

6 + 3 = 9

6 - 3 = 3

6 * 3 = 18

6 / 3 = 2

输入样例2:

8 6

输出样例2:

8 + 6 = 14

8 - 6 = 2

8 * 6 = 48

8 / 6 = 1.33

#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("a + b = %d\na - b = %d\na * b = %d\n",a+b,a-b,a*b);
if(a%b==0){
printf("%d",a/b);
}else{
printf("a / b = %.2f",((double)a/(double)b));
}

return 0;
}

//前面定义了int,printf时要换成double。

//注意:printf中不是输出a+b,而是所输入的数值%d+%d!!!

 

(3)世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。

输入格式:输入在一行中按照“mm-dd-yyyy”的格式给出月、日、年。题目保证给出的日期是1900年元旦至今合法的日期。

输出格式:在一行中按照“yyyy-mm-dd”的格式给出年、月、日。

输入样例:03-15-2017

输出样例:2017-03-15

#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d-%d-%d",&a,&b,&c);
printf("%04d-%02d-%02d",c,a,b);
return 0;
}

//输出两位数

 

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

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

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

输入样例:

1120 110

输出样例:

1310

我写的错误代码:

#include<stdio.h>
int main()
{
int a,b,c,d,h,m;
scanf("%d %d",&a,&b);
h=b/60;//要加的小时
m=b%60;//要加的分钟
c=(m+a%100)/60+h+a/100;//最终总的小时
d=(m+a%100)%60;//最终剩下的分钟
if(c>24){
printf("%d",(c-24)*100+d);
}else{
printf("%d",c*100+d);
}
return 0;
}

别人写的正确代码:

#include<stdio.h>

int main()
{
int hour,min,temp;
scanf("%d %d", &hour, &min);
temp = hour/100*60 + hour%100 + min;
temp = temp/60*100 + temp%60;
printf("%d", temp);
return 0;
}

(转载于:github.com/MuziJin

//这道题其实转变思路,不是把输入的分钟数加到时间上,而是把时间统统转变成分钟,对于分钟的正负就不必再考虑,就简单多了。

感觉我的脑子真的不好使,分析解决问题的能力差,其实很简单的一道题,被我弄的那么复杂,而且经常想的很复杂,恐怕我是真的没救了,嗷嗷嗷啊~

虽然条条大路通罗马,我走的不仅是绕死的,而且还走错了→→

简直要了我的老命!

(5)本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:起步里程为3公里,起步费10元;超起步里程后10公里内,每公里2元;超过10公里以上的部分加收50%的回空补贴费,即每公里3元;营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。

输入格式:输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。

输出格式:在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元。

输入样例1:2.6 2   输出样例1:10

输入样例2:5.1 4   输出样例2:14

输入样例3:12.5 9  输出样例3:34

#include<stdio.h>
int main()
{
    int t,M;
    double m;
    scanf("%lf %d",&m,&t);
    if(t<5){
        t=0;
    }else{
        t=t/5*2;
    }
    if(m<=3){
        m=10;
    }else{
        if(m>3,m<=10){
            m=10+(m-3)*2.0;
        }else{
            if(m>10){
                m=24+(m-10)*3.0;
            }
        }
    }
    M=m+0.5+t;
    printf("%d",M);
    return 0;
}
//这道题并不算太难,我都写出来了(崩溃。。。)

 


免责声明!

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



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