【C语言】万恶PTA练习题之初入江湖

简介: 【C语言】万恶PTA练习题之初入江湖

一些简单的C语言题目


1.求整数平均值

求整数平均值

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

输入格式:

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

输出格式:

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

输入样例:

1 2 3 4

输出样例:

Sum = 10; Average = 2.5

1. #include <stdio.h>
2. 
3. int main() {
4.  int a[4], sum = 0;
5.  float average = 0;
6.  for (int i = 0; i <= 3; i++)
7.    scanf("%d", &a[i]);//输入到数组,只有一句,可以不加大括号
8.  for (int i = 0; i <= 3; i++)
9.    sum += a[i];//求和
10.   average = (float)sum / 4;    //强制类型转换,不然报错
11.   printf("Sum = %d; Average = %.1f", sum, average);
12. }

2.是不是太胖了

据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。已知市斤的数值公斤数值的两倍。现给定某人身高,请你计算其标准体重应该是多少?(顺便也悄悄给自己算一下吧……)

输入格式:

输入第一行给出一个正整数H(100 < H ≤ 300),为某人身高。

输出格式:

在一行中输出对应的标准体重,单位为市斤,保留小数点后1位。

输入样例:

169

输出样例:

124.2

1. #include <stdio.h>
2. 
3. int main(void) {
4.  int H;
5.  float b;
6.  scanf("%d", &H);
7.  b = (H - 100) * 0.9 * 2;
8.  printf("%.1f", b);
9.  return 0;
10. }

3.计算摄氏温度

给定一个华氏温度F,本题要求编写程序,计算对应的摄氏温度C。计算公式:C=5×(F−32)/9。题目保证输入与输出均在整型范围内。

输入格式:

输入在一行中给出一个华氏温度。

输出格式:

在一行中按照格式“Celsius = C”输出对应的摄氏温度C的整数值。

输入样例:

150

输出样例:

Celsius = 65

注意:输出格式有空格

1. #include <stdio.h>
2. 
3. int main() {
4.  int c, f;
5.  scanf("%d", &f);
6.  c = 5 * (f - 32) / 9;
7.  printf("Celsius = %d", c);
8.  return 0;
9. }

4.求三角形面积

输入三角形的三边长,求其面积。

输入格式:

在一行中输入能够构成三角形的3个实数,3个数之间用逗号间隔。

输出格式:

对每一组输入,在一行中输出面积值,结果保留两位小数,没有附加字符。

输入样例:

3,3,3

输出样例:

3.90

解题思路:

  1. 先按照格式输入三个实数a、b、c,(下面应该是float类型?)
  2. 判断 是否满足三角形判定条件(任意两边之和大于第三边)
  3. 如果满足,在上述if判断条件中计算三角形面积
  4. 用高中推导过的海伦公式计算,很方便
  5. 海伦公式 S = √p(p-a)(p-b)(p-c)
  6. 打印输出结果
1. #include <stdio.h>
2. #include <math.h>    //声明引用到的头文件,调用其中sqrt开平方的函数
3. 
4. int main() {
5.  int a, b, c; //定义三角形三条边长
6.  float s, area, s2;
7.  scanf("%d,%d,%d", &a, &b, &c);
8.  if  (a > 0 && b > 0 && c > 0 && (a + b > c) && (a + c > b) && (b + c > a)) {
9.    //(任意两边之和大于第三边)
10.     s = (float)(a + b + c) / 2;//必须强制类型转换!不然s为int类型,计算后转为float类型的数据,会造成数据丢失
11. 
12.         //海伦公式计算三角形面积 
13.     s2 = s * (s - a) * (s - b) * (s - c);
14.     area = sqrt(s2);
15.       
16.         //打印结果
17.     printf("%.2f", area);    //保留两位小数
18.   } 
19.   return 0;
20. }

我记得这样写的程序是过了的


5.整数152的各位数字

本题要求编写程序,输出整数152的个位数字、十位数字和百位数字的值。

输入格式:

本题无输入。

输出格式:

按照以下格式输出:

152 = 个位数字 + 十位数字*10 + 百位数字*100

本题考察除法和求余运算,进行数位分离

1. #include <stdio.h>
2. 
3. int main() {
4.  int a = 152, i, j, k;
5.  k = a % 10; //个位数
6.  i = a / 100; //百位数
7.  j = a / 10 % 10; //十位数
8.  printf("152 = %d + %d*10 + %d*100", k, j, i);
9.  return 0;
10. }

6.交换a和b的值

交换变量a,b的值,如输入a的值为1,b的值为5,则输出a的值为5,b的值为1。

输入格式:

输入两个整数,之间用一个空格间隔

输出格式:

在一行中按照“a=x,b=y”的格式输出,其中x和y均是原样输出,不加宽度控制

输入样例:

1 5

输出样例:

a=5,b=1

思路: 定义一个暂存变量t

1. #include <stdio.h>
2. 
3. int main(void) {
4.  int a, b, t;
5.  scanf("%d%d", &a, &b);
6.  t = a;
7.  a = b;
8.  b = t;
9.  printf("a=%d,b=%d", a, b);
10.   return 0;
11. }

7.计算分段函数

7-8 计算分段函数[2]

本题目要求计算下列分段函数f(x)的值:

97d0aac8c2808e56432eadccd5df1449_80ea86f3330b4220b3d7f1373915de33.png

注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。

输入格式:

输入在一行中给出实数x。

输出格式:

在一行中按“f(x) = result”的格式输出,其中x与result都保留两位小数

输入样例1:

10

输出样例1:

f(10.00) = 3.16

输入样例2:

-0.5

输出样例2:

f(-0.50) = -2.75

1. #include <stdio.h>
2. #include <math.h>
3. 
4. int main(void) {
5.  float x, y;
6.  scanf ("%f", &x);
7. 
8.  if (x >= 0)
9.    y = sqrt(x);
10.   else
11.     y = pow((x + 1), 2) + 2 * x + 1 / x;
12. 
13.   printf("f(%.2f) = %.2f", x, y);
14. 
15.   return 0;
16. }

注意最后输出格式保留两位小数 %.2f


8.阶梯电价

为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。

输入格式:

输入在一行中给出某用户的月用电量(单位:千瓦时)。

输出格式:

在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”;若用电量小于0,则输出"Invalid Value!"。

输入样例1:

10

输出样例1:

cost = 5.30

输入样例2:

100

输出样例2:

cost = 55.50

1. #include <stdio.h>
2. 
3. int main(void) {
4.  float cost, n;
5.  scanf("%f", &n);
6. 
7.  if (n <= 50 && n >= 0) {
8.    cost = 0.53 * n;
9.    printf("cost = %.2f", cost);
10.   }
11.   else if (n > 50) {
12.     cost = 0.53 * 50 + (0.53 + 0.05) * (n - 50);
13.     printf("cost = %.2f", cost);
14.   }
15.   else
16.     printf("Invalid Value!");
17. 
18.   return 0;
19. }

本题用到了

if(……)   {……}

else if(……)   {……}

else   {……}

分支结构


9.计算符号函数的值

7-10 计算符号函数的值

对于任一整数n,符号函数sign(n)的定义如下:

d760ad66a7906c0fb4203253c135b1a2_3d0d44d816fa4c76bbb27c90af8c006b.png

请编写程序计算该函数对任一输入整数的值。

输入格式:

输入在一行中给出整数n。

输出格式:

在一行中按照格式“sign(n) = 函数值”输出该整数n对应的函数值。

输入样例1:

10

输出样例1:

sign(10) = 1

输入样例2:

0

输出样例2:

sign(0) = 0

输入样例3:

-98

输出样例3:

sign(-98) = -1

1. #include <stdio.h>
2. 
3. int main(void) {
4.  int n, sign;
5.  scanf("%d", &n);
6.  if (n < 0)
7.    sign = -1;
8.  else if (n == 0)
9.    sign = 0;
10.   else if (n > 0)
11.     sign = 1;
12. 
13.   printf("sign(%d) = %d", n, sign);
14. 
15.   return 0;
16. }

10.输出三角形面积和周长

本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。

输入格式:

输入为3个正整数,分别代表三角形的3条边a、b、c。

输出格式:

如果输入的边能构成一个三角形,则在一行内,按照area = 面积; perimeter = 周长的格式输出,保留两位小数。否则,输出These sides do not correspond to a valid triangle

输入样例1:

5 5 3

输出样例1:

area = 7.15; perimeter = 13.00

输入样例2:

1 4 1

输出样例2:

These sides do not correspond to a valid triangle

1. #include <stdio.h>
2. #include <math.h>
3. 
4. int main() {
5.  int a, b, c; //定义三角形三条边长
6.  float s, area, perimeter, s2;
7.  scanf("%d%d%d", &a, &b, &c);    //输入边长
8.  if  (a > 0 && b > 0 && c > 0 && (a + b > c) && (a + c > b) && (b + c > a)) {
9.    //(任意两边之和大于第三边)
10.     s = (float)(a + b + c) / 2;    //必须强制类型转换
11. 
12.     s2 = s * (s - a) * (s - b) * (s - c);
13.     area = sqrt(s2);
14. 
15.     perimeter = a + b + c;//周长
16. 
17.     printf("area = %.2f; perimeter = %.2f", area, perimeter);
18.   } 
19.     else
20.     printf("These sides do not correspond to a valid triangle");
21. 
22.   return 0;
23. }

11.三天打鱼两天晒网

中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?

输入格式:

输入在一行中给出一个不超过1000的正整数N

输出格式:

在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。

输入样例1:

103

输出样例1:

Fishing in day 103

输入样例2:

34

输出样例2:

Drying in day 34

这里用到了标志位的思想

flag是一个标志位,记录n被5除的余数判断余数大小即可知道打鱼还是晒网

1. #include <stdio.h>
2. 
3. int main(void) {
4.  int n, flag;
5.  scanf("%d", &n);    //输入
6. 
7.  if (n >= 0 && n <= 1000)    //判断数据是否在0~1000内
8.    flag = n % 5 ;    //flag是一个标志位,记录n被5除的余数
9. 
10.   if (flag <= 3 && flag >= 1)     //余数在1~3之间,就是打鱼日
11.     printf("Fishing in day %d", n);
12.   else                            //否则就是晒网子
13.     printf("Drying in day %d", n);
14. 
15.   return 0;
16. }

12.三个数由小到大输出

输入三个整数x,y,z,请把这三个数由小到大输出。

输入格式:

在一行中直接输入3个整数,之间各用一个空格间隔。

输出格式:

在一行中按照“x=最小值,y=次小值, z=最大值”的顺序输出结果,最大值、次大值和最小值均原样输出,没有宽度控制。

输入样例:

2 1 3

输出样例:

x=1,y=2,z=3

1. #include <stdio.h>
2. 
3. void swap(int *i, int *k) {    //用指针,数据才能改变!
4.  int t;
5.  t = *i;
6.  *i = *k;
7.  *k = t;
8. };
9. 
10. int main() {
11.   int x, y, z, t;
12.   scanf("%d%d%d", &x, &y, &z);
13.   if (x > y)
14.     swap(&x, &y);
15.   if (x > z)
16.     swap(&x, &z);
17.   if (y > z)
18.     swap(&y, &z);
19.   printf("x=%d,y=%d,z=%d", x, y, z);
20.   return 0;
21. }

13.计算天数

本题要求编写程序计算某年某月某日是该年中的第几天。

输入格式:

输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。

输出格式:

在一行输出日期是该年中的第几天。

输入样例1:

2009/03/02

输出样例1:

61

输入样例2:

2000/03/02

输出样例2:

62

一年有12个月份,用if else语句显得代码比较臃肿,选用switch语句更简洁方便

switch语句中的break语句在其中起什么作用呢?它让程序离开switch语句,跳转至switch语句后面的下一条语句。如果没有break语句,就会从匹配标签开始执行到switch末尾!

思路:从大月往小月累加,借助switch语句中break语句的的特点

1. #include <stdio.h>
2. 
3. int main() {
4.  int year, month, day, sum;
5.  scanf("%d/%d/%d", &year, &month, &day);
6.  sum += day;             //先累加当前月份的日期
7.  switch (month - 1) {    //month - 1是从上一个月份开始累加
8.    case 11:
9.      sum += 30;
10.     case 10:
11.       sum += 31;
12.     case 9:
13.       sum += 30;
14.     case 8:
15.       sum += 31;
16.     case 7:
17.       sum += 31;
18.     case 6:
19.       sum += 30;
20.     case 5:
21.       sum += 31;
22.     case 4:
23.       sum += 30;
24.     case 3:
25.       sum += 31;
26.     case 2:         //2月分情况讨论
27.       if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)    //闰年条件
28.         sum += 29;
29.       else
30.         sum += 28;
31.     case 1:
32.       sum += 31;
33.       break;
34.   }
35. 
36.   printf("%d", sum);
37.   return 0;
38. }

可以注意到只有 case 1:语句(1月份)后面才有break语句,其他月份都不加break语句,这样就可以可以从大的月份一直累加到1月,直到累加到1月才跳出switch语句:

如果是1月几号,month - 1 = 0,不满足switch语句的条件,直接跳转到printf语句


14.两个数的简单计算器

本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。

输入格式:

输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数据类型为整型,且保证除法和求余的分母非零。

输出格式:

当运算符为+-*/%时,在一行输出相应的运算结果。若输入是非法符号(即除了加、减、乘、除和求余五种运算符以外的其他符号)则输出ERROR

输入样例1:

-7 / 2

输出样例1:

-3

输入样例2:

3 & 6

输出样例2:

ERROR

1. #include <stdio.h>
2. 
3. int main(void) {
4.  int x, y;
5.  char c;
6.  scanf("%d %c %d", &x, &c, &y);
7.  switch (c) {
8.    case '+' :
9.      printf("%d", x + y);
10.       break;
11.     case '-' :
12.       printf("%d", x - y);
13.       break;
14.     case '*' :
15.       printf("%d", x * y);
16.       break;
17.     case '/' :
18.       printf("%d", x / y);
19.       break;
20.     case '%' :
21.       printf("%d", x % y);
22.       break;
23.     default:
24.       printf("ERROR");
25.   }
26.   return 0;
27. }

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!

1. #include <stdio.h>
2. 
3. int main(void) {
4.  int y, flag = 0;
5.  scanf("%d", &y);
6.  if (y <= 2000 || y > 2100)
7.    printf("Invalid year!");
8.  else {
9.    for (int i = 2001; i <= y; i++) {
10.       if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
11.         printf("%d\n", i);
12.         flag++;
13.       }
14.     }
15.     if (flag == 0)
16.       printf("None");
17.   }
18.   return 0;
19. }

回忆一下大一下学期被PTA这个破网站支配的恐惧日子



相关文章
|
2天前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
|
2天前
|
C语言
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
|
2天前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-6 删除字符 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-6 删除字符 (20分)
|
2天前
|
C语言
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
|
3月前
|
C语言
C语言部分期末答案(来自PTA)
C语言部分期末答案(来自PTA)
|
27天前
|
存储 C语言
[C语言/PTA] 学生成绩链表处理
[C语言/PTA] 学生成绩链表处理
89 0
|
23天前
|
存储 C语言
[C语言/PTA] 建立学生信息链表
[C语言/PTA] 建立学生信息链表
56 0
|
5月前
|
存储 C语言
[C语言/PTA] 单链表结点删除
[C语言/PTA] 单链表结点删除
55 0
|
5月前
|
C语言
C语言 每日一题 PTA 11.8 day14
C语言 每日一题 PTA 11.8 day14
39 0
|
5月前
|
存储 C语言
C语言 每日一题 PTA 11.7 day13
C语言 每日一题 PTA 11.7 day13
48 0

相关实验场景

更多