概述
习题2-4 求交错序列前N项和 (15 分)
int i, N, flag = 1;
float sum = 0;
sum += i / (2 * i - 1.0) * flag;//左边是浮点型,右边是整形,要把1变成1.0完成类型转换
习题2-6 求阶乘序列前N项和 (15 分)
本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和。
输入格式:
输入在一行中给出一个不超过12的正整数N。
输出格式:
在一行中输出整数结果。
输入样例:
5
输出样例:
153
//一定要细心!1.忘了加函数的参数类型 2.阶乘的sum初值为1不是0 3.忘了写输出函数 4.函数的参数值是i不是N
#include <stdio.h>
int fact(int n);
int main()
{
int i, N, sum = 0;
scanf("%d", &N);
for(i = 1; i <= N; i++)
{
sum += fact(i);
}
printf("%d", sum);
return 0;
}
int fact(int n)
{
int i, sum = 1;
for(i = 1; i <= n; i++)
{
sum *= i;
}
return sum;
}
练习3-3 统计学生平均成绩与及格人数 (15 分)
本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。
输入格式:
输入在第一行中给出非负整数N,即学生人数。第二行给出N个非负整数,即这N位学生的成绩,其间以空格分隔。
输出格式:
按照以下格式输出:
average = 成绩均值
count = 及格人数
其中平均值精确到小数点后一位。
输入样例:
5
77 54 92 73 60
输出样例:
average = 71.2
count = 4
//要考虑N==0的情况,此事 sum/N 不存在,且最开始还没讲到数组,用如下代码可以代替
int score, sum = 0;
for(int i = 0; i < N; i++)
{
scanf("%d", &score);
sum += score;
}
代码如下:
#include <stdio.h>
int main()
{
int N, count = 0, i;
float average, sum = 0;
scanf("%d", &N);
int a[N];
for(i = 0; i < N; i++)
{
scanf("%d", &a[i]);
sum += a[i];
if(a[i] >= 60)
count++;
}
if(N != 0)
average = sum / N;
else
average = 0;
printf("average = %.1fncount = %d", average, count);
return 0;
}
练习3-5 输出闰年 (15 分)
输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。
输入格式:
输入在一行中给出21世纪的某个截止年份。
输出格式:
逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。
输入样例1:
2048
输出样例1:
2004
2008
2012
2016
2020
2024
2028
2032
2036
2040
2044
2048
输入样例2:
2000
输出样例2:
Invalid year!
//这道题直接颠覆了我的常识,我现在才知道2000年是20世纪不是21世纪,21世纪是2001-2100年
#include <stdio.h>
int main()
{
int year, i, count = 0;
scanf("%d", &year);
if(year <= 2000 || year > 2100)
printf("Invalid year!");
else
{
for(i = 2001; i <= year; i++)
{
if((i % 4 == 0 && i % 100 != 0) || year % 400 == 0 )
{
printf("%dn", i);
count++;
}
}
if(count == 0)
printf("None");
}
return 0;
}
练习3-8 查询水果价格 (15 分)
给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。
首先在屏幕上显示以下菜单:
[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。
输入格式:
输入在一行中给出用户连续输入的若干个编号。
输出格式:
首先在屏幕上显示菜单。然后对应用户的每个输入,在一行中按格式“price = 价格”输出查询结果,其中价格保留两位小数。当用户连续查询次数超过5次、或主动输入0时,程序结束。
输入样例1:
3 -1 0 2
输出样例1:
[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
price = 4.10
price = 0.00
输入样例2:
1 2 3 3 4 4 5 6 7 8
输出样例2:
[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
price = 3.00
price = 2.50
price = 4.10
price = 4.10
price = 10.20
//题中说显示结果为0,其实也得是0.0,忘加<stdlib.h>头文件来使用exit(0)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, num;
printf("[1] applen[2] pearn[3] orangen[4] grapen[0] exitn");
for(i = 0; i < 5; i++)
{
scanf("%d", &num);
if(num == 0)
exit(0);
else if(num == 1)
printf("price = 3.00n");
else if(num == 2)
printf("price = 2.50n");
else if(num == 3)
printf("price = 4.10n");
else if(num == 4)
printf("price = 10.20n");
else
printf("price = 0.00n");
}
return 0;
}
习题3-2 高速公路超速处罚 (15 分)
按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。
输入格式:
输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。
输出格式:
在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。
输入样例1:
65 60
输出样例1:
OK
输入样例2:
110 100
输出样例2:
Exceed 10%. Ticket 200
输入样例3:
200 120
输出样例3:
Exceed 67%. License Revoked
//%%可以打印一个%。1/2 * 3.0 =0;1 * 3.0 / 2 =1.5;要掌握类型转换。保留零位小数用%.f即可,0可以省略。
习题3-3 出租车计价 (15 分)
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
- 起步里程为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
//理解错误:起步里程为3公里,起步费10元;超起步里程后10公里内,每公里2元;指的是3-7公里,每公里2块,不是指3-13公里。
#include <stdio.h>
int main()
{
float x, money;
int time, m;
scanf("%f %d", &x, &time);
if(x <= 3)
money = 10;
else if(x <= 10)
money = 10 + (x - 3) * 2;
else
money = 10 + 7 * 2 + (x - 10) * 3;
money += time / 5 * 2;
m = money;
if(money - m >= 0.5)
money++;
printf("%d", (int)money);
return 0;
}
习题3-5 三角形判断 (15 分)
给定平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3),检验它们能否构成三角形。
输入格式:
输入在一行中顺序给出六个[−100,100]范围内的数字,即三个点的坐标x1、y1、x2、y2、x3、y3。
输出格式:
若这3个点不能构成三角形,则在一行中输出“Impossible”;若可以,则在一行中输出该三角形的周长和面积,格式为“L = 周长, A = 面积”,输出到小数点后2位。
输入样例1:
4 5 6 9 7 8
输出样例1:
L = 10.13, A = 3.00
输入样例2:
4 6 8 12 12 18
输出样例2:
Impossible
//1.三角形的判别公式 2.求三角形面积的海伦公式
#include <stdio.h>
#include <math.h>
int main()
{
double x1, y1, x2, y2, x3, y3, a, b, c, L, A, P;
scanf("%lf %lf %lf %lf %lf %lf", &x1, &y1, &x2, &y2, &x3, &y3);
a = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
b = sqrt(pow(x3 - x1, 2) + pow(y3 - y1, 2));
c = sqrt(pow(x3 - x2, 2) + pow(y3 - y2, 2));
if(a + b > c && a + c > b && b + c > a)//三角形判别公式
{
L = a + b + c;
P = L / 2;
A = sqrt(P * (P - a) * (P - b) * (P - c));//海伦公式
printf("L = %.2lf, A = %.2lf", L, A);
}
else
printf("Impossible");
return 0;
}
练习4-3 求给定精度的简单交错序列部分和 (15 分)
本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。
输入格式:
输入在一行中给出一个正实数eps。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。
输入样例1:
4E-2
输出样例1:
sum = 0.854457
输入样例2:
0.02
输出样例2:
sum = 0.826310
//i的初始值要为零,且i++要放在do-while循环体的最上面,否则就会出现下一项(应该是本项)与给定值进行比较的情况
#include <stdio.h>
int main()
{
double eps, sum = 0, i = 0, flag = 1;
scanf("%lf", &eps);
do
{
i++;
sum += 1 / (3 * i - 2) * flag;
flag *= -1;
}while(1 / (3 * i - 2) > eps);
printf("sum = %lf", sum);
return 0;
}
练习4-6 猜数字游戏 (15 分)
猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。
输入格式:
输入第一行中给出两个不超过100的正整数,分别是游戏机产生的随机数、以及猜测的最大次数N。最后每行给出一个用户的输入,直到出现负数为止。
输出格式:
在一行中输出每次猜测相应的结果,直到输出猜对的结果或“Game Over”则结束。
输入样例:
58 4
70
50
56
58
60
-2
输出样例:
Too big
Too small
Too small
Good Guess!
//令人崩溃的一道题, 我多加了一个“!”, 结果搞了一晚上才找到问题,呜呜
#include <stdio.h>
int main()
{
int r, N, i, num;
scanf("%d %d", &r, &N);
for(i = 1; i <= N; i++)
{
scanf("%d", &num);
if(num < 0)
{
printf("Game Over");
return 0;
}
if(num == r)
{
if(i == 1)
{
printf("Bingo!");
return 0;
}
else if(i <= 3)
{
printf("Lucky You!");
return 0;
}
else
{
printf("Good Guess!");
return 0;
}
}
else if(num < r)
printf("Too smalln");
else
printf("Too bign");
}
printf("Game Over");
return 0;
}
今日总结:
暂时来说题还是不难,关键是要细心,否则就会浪费很多时间在找错误上,如果代码逻辑没问题,很可能是自己在输出上加了料。找错误耽误了太多时间,今天只做了19道简单题,看似不少,但只要不出错的话,平均每道只要15min,也就是说最多五小时就能做完,结果我至少多花了两个小时去找那些不明显的缺漏增添,效率很低,明日继续刷题,记住教训,一定要细心!
最后
以上就是糟糕茉莉为你收集整理的2022/2/5——浙大版《C语言程序设计(第3版)》题目集PAT错题记录(做了19道题)的全部内容,希望文章能够帮你解决2022/2/5——浙大版《C语言程序设计(第3版)》题目集PAT错题记录(做了19道题)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复