PTA(浙大版《C语言程序设计(第3版)》题目集

PTA(浙大版《C语言程序设计(第3版)》题目集

学习C语言程序设计的PTA题目

目录

  • PTA(浙大版《C语言程序设计(第3版)》题目集
    • PTA(浙大版《C语言程序设计(第3版)》题目集) 习题2-1 求整数均值 (10 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集) 习题2-2 阶梯电价 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例1:
      • 输出样例1:
      • 输入样例2:
      • 输出样例2:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集) 习题2-3 求平方与倒数序列的部分和 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题2-4 求交错序列前N项和 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题2-4 求交错序列前N项和 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集) 习题2-5 求平方根序列前N项和 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题2-6 求阶乘序列前N项和 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题3-1 比较大小 (10 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题3-2 高速公路超速处罚 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例1:
      • 输出样例1:
      • 输入样例2:
      • 输出样例2:
      • 输入样例3:
      • 输出样例3:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题3-3 出租车计价 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例1:
      • 输出样例1:
      • 输入样例2:
      • 输出样例2:
      • 输入样例3:
      • 输出样例3:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题3-5 三角形判断 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例1:
      • 输出样例1:
      • 输入样例2:
      • 输出样例2:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-1 求奇数和 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-2 求幂级数展开的部分和 (20 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-3 求分数序列前N项和 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-4 特殊a串数列求和 (20 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-5 换硬币 (20 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-6 水仙花数 (20 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-7 最大公约数和最小公倍数 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-8 高空坠球 (20 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-9 打印菱形图案 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-10 猴子吃桃问题 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-11 兔子繁衍问题 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题5-1 符号函数 (10 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题5-2 使用函数求奇数和 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题5-3 使用函数计算两点间的距离 (10 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题5-4 使用函数求素数和 (20 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题5-5 使用函数统计指定数字的个数 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题5-6 使用函数输出水仙花数 (20 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题5-7 使用函数求余弦函数的近似值 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题6-1 分类统计字符个数 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题6-2 使用函数求特殊a串数列和 (20 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题6-3 使用函数输出指定范围内的完数 (20 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例1:
      • 输出样例1:
      • 输入样例2:
      • 输出样例2:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题6-4 使用函数输出指定范围内的Fibonacci数 (20 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例1:
      • 输出样例1:
      • 输入样例2:
      • 输出样例2:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题6-5 使用函数验证哥德巴赫猜想 (20 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题6-6 使用函数输出一个整数的逆序数 (20 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题7-1 选择法排序 (20 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题7-2 求一批整数中出现最多的个位数字 (20 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题7-3 判断上三角矩阵 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题7-4 求矩阵各行元素之和 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题7-5 找鞍点 (20 分)
      • 输入格式:
      • 输出格式:
      • 输入样例1:
      • 输出样例1:
      • 输入样例2:
      • 输出样例2:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题7-6 统计大写辅音字母 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题7-7 字符串替换 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题7-8 字符串转换成十进制整数 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-1 拆分实数的整数与小数部分 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-2 在数组中查找指定元素 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例1:
      • 输出样例1:
      • 输入样例2:
      • 输出样例2:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-3 数组循环右移 (20 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-4 报数 (20 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-5 使用函数实现字符串部分复制 (20 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-6 删除字符 (20 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-7 字符串排序 (20 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-8 判断回文字符串 (20 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例1:
      • 输出样例1:
      • 输入样例2:
      • 输出样例2:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-9 分类统计各类字符个数 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-10 输出学生成绩 (20 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题9-1 时间换算 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题9-2 计算两个复数之积 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题9-3 平面向量加法 (15 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题9-4 查找书籍 (20 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题9-5 通讯录排序 (20 分)
      • 输入格式:
      • 输出格式:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题9-6 按等级统计学生成绩 (20 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题10-1 判断满足条件的三位数 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题10-2 递归求阶乘和 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例1:
      • 输出样例1:
      • 输入样例2:
      • 输出样例2:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题10-3 递归实现指数函数 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题10-4 递归求简单交错幂级数的部分和 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题10-5 递归计算Ackermenn函数 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题10-6 递归求Fabonacci数列 (10 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题10-7 十进制转换二进制 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题10-8 递归实现顺序输出整数 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题11-1 输出月份英文名 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例1:
      • 输出样例1:
      • 输入样例2:
      • 输出样例2:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题11-2 查找星期 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例1:
      • 输出样例1:
      • 输入样例2:
      • 输出样例2:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题11-3 计算最长的字符串长度 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题11-4 字符串的连接 (15 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题11-5 指定位置输出字符串 (20 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例1:
      • 输出样例1:
      • 输入样例2:
      • 输出样例2:
      • 输入样例3:
      • 输出样例3:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题11-6 查找子串 (20 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例1:
      • 输出样例1:
      • 输入样例2:
      • 输出样例2:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题11-7 奇数值结点链表 (20 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码
    • PTA(浙大版《C语言程序设计(第3版)》题目集)习题11-8 单链表结点删除 (20 分)
      • 函数接口定义:
      • 裁判测试程序样例:
      • 输入样例:
      • 输出样例:
      • 解题代码

PTA(浙大版《C语言程序设计(第3版)》题目集) 习题2-1 求整数均值 (10 分)

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

输入格式:

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

输出格式:

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

输入样例:

1 2 3 4

输出样例:

Sum = 10; Average = 2.5
结尾无空行

解题代码

#include <stdio.h>int main(){int a,b,c,d,sum;float avg;scanf("%d %d %d %d", &a,&b,&c,&d);sum = a + b + c + d;avg = sum / 4.0;printf("Sum = %d; Average = %.1f\n", sum, avg);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集) 习题2-2 阶梯电价 (15 分)

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

输入格式:

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

输出格式:

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

输入样例1:

10

输出样例1:

cost = 5.30
结尾无空行

输入样例2:

100

输出样例2:

cost = 55.50
结尾无空行

解题代码

#include <stdio.h>int main(){int total;double cost;scanf("%d", &total);if (total < 0) printf("Invalid Value!\n");else if (total < 50) printf("cost = %.2lf", total * 0.53);else printf("cost = %.2lf",50 * 0.53 + (total - 50) * 0.58);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集) 习题2-3 求平方与倒数序列的部分和 (15 分)

本题要求对两个正整数m和n(m≤n)编写程序,计算序列和m2+1/m+(m+1)2+1/(m+1)+⋯+n2+1/n。

输入格式:

输入在一行中给出两个正整数m和n(m≤n),其间以空格分开。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。

输入样例:

5 10
结尾无空行

输出样例:

sum = 355.845635
结尾无空行

解题代码

#include <stdio.h>int main(){int m,n;double result = 0.0;scanf("%d %d", &m,&n);while(m <= n){result += m * m + 1.0 / m;m += 1;}printf("sum = %.6lf\n", result);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题2-4 求交错序列前N项和 (15 分)

本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+… 的前N项之和。

输入格式:

输入在一行中给出一个正整数N。

输出格式:

在一行中输出部分和的值,结果保留三位小数。

输入样例:

5
结尾无空行

输出样例:

0.917
结尾无空行

解题代码

#include <stdio.h>int main(){int n;double result = 0.0;scanf("%d", &n);int flag = 1;for (int i = 1; i <= n; i++){result += flag * i / (2.0 * i - 1);flag *= -1;}printf("%.3lf\n", result);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题2-4 求交错序列前N项和 (15 分)

本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+… 的前N项之和。

输入格式:

输入在一行中给出一个正整数N。

输出格式:

在一行中输出部分和的值,结果保留三位小数。

输入样例:

5
结尾无空行

输出样例:

0.917
结尾无空行

解题代码

#include <stdio.h>int main(){int n;double result = 0.0;scanf("%d", &n);int flag = 1;for (int i = 1; i <= n; i++){result += flag * i / (2.0 * i - 1);flag *= -1;}printf("%.3lf\n", result);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集) 习题2-5 求平方根序列前N项和 (15 分)

在这里插入图片描述

输入格式:

输入在一行中给出一个正整数N。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后两位。题目保证计算结果不超过双精度范围。

输入样例:

10
结尾无空行

输出样例:

sum = 22.47
结尾无空行

解题代码

#include <stdio.h>
#include <math.h>int main(){int n;double sum;scanf("%d", &n);for (int i = 0;i <= n; i++) sum += sqrt(i);printf("sum = %.2lf\n", sum);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题2-6 求阶乘序列前N项和 (15 分)

本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和。

输入格式:

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

输出格式:

在一行中输出整数结果。

输入样例:

5
结尾无空行

输出样例:

153
结尾无空行

解题代码

#include <stdio.h>long fact(int n){int result = 1;for (int i = 2; i <= n; i++){result *= i;}return result;
}int main(){int n;scanf("%d", &n);long sum = 0;for (int i = 1; i <= n; ++i){sum += fact(i);}printf("%ld\n", sum);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题3-1 比较大小 (10 分)

本题要求将输入的任意3个整数从小到大输出。

输入格式:

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

输出格式:

在一行中将3个整数从小到大输出,其间以“->”相连。

输入样例:

4 2 8
结尾无空行

输出样例:

2->4->8
结尾无空行

解题代码

#include <stdio.h>int main(){int a,b,c,t;scanf("%d %d %d", &a, &b, &c);if (b > a && b > c){t = a;a = b;b = t;}else if (c > a && c > a){t = a;a = c;c = t;}if (b < c){t = b;b = c;c = t;}printf("%d->%d->%d\n", c, b, a);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题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
结尾无空行

解题代码

#include <stdio.h>int main(){int max,speed,rate;scanf("%d %d", &speed, &max);rate = (double)(speed - max)/ max * 100 + 0.5;if (rate < 10){printf("OK\n");} else if (rate < 50){printf("Exceed %d%%. Ticket 200\n", rate);} else {printf("Exceed %d%%. License Revoked\n", rate);}return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题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

解题代码

#include <stdio.h>int main(){int wait,price = 10;float travel;scanf("%f %d", &travel, &wait);if (wait >= 5){price += wait / 5 * 2;}if (travel > 3 && travel <= 10){price += (travel - 3 ) * 2 + 0.5;}if (travel > 10){price += 7 * 2 + (travel - 10) * 3 + 0.5;}printf("%d\n", price);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题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

解题代码

#include <stdio.h>
#include <math.h>int main(){double x1,y1,x2,y2,x3,y3,side1,side2,side3,high,length,area;scanf("%lf %lf %lf %lf %lf %lf", &x1,&y1,&x2,&y2,&x3,&y3);if ((y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2)){printf("Impossible\n");} else{side1 = sqrt(pow(x1-x2,2) + pow(y1 - y2,2));side2 = sqrt(pow(x1-x3,2) + pow(y1 - y3,2));side3 = sqrt(pow(x3-x2,2) + pow(y3 - y2,2));length = side1 + side2 + side3;area = sqrt(length / 2 * (length / 2 - side1) * (length / 2 - side2) * (length / 2 - side3));printf("L = %.2lf, A = %.2lf\n", length, area);}return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-1 求奇数和 (15 分)

本题要求计算给定的一系列正整数中奇数的和。

输入格式:

输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。

输出格式:

在一行中输出正整数序列中奇数的和。

输入样例:

8 7 4 3 70 5 6 101 -1
结尾无空行

输出样例:

116
结尾无空行

解题代码

#include <stdio.h>int main()
{int sum = 0,n;while(1){scanf("%d", &n);if (n <= 0) break;if (n % 2 != 0) sum += n;}printf("%d\n", sum);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-2 求幂级数展开的部分和 (20 分)

已知函数ex可以展开为幂级数1+x+x2/2!+x3/3!+⋯+xk/k!+⋯。现给定一个实数x,要求利用此幂级数部分和求ex的近似值,求和一直继续到最后一项的绝对值小于0.00001。

输入格式:

输入在一行中给出一个实数x∈[0,5]。

输出格式:

在一行中输出满足条件的幂级数部分和,保留小数点后四位。

输入样例:

1.2
结尾无空行

输出样例:

3.3201
结尾无空行

解题代码

#include <stdio.h>
#include <math.h>int main()
{double sum = 0.0,x,temp,n = 0,jie = 1;scanf("%lf", &x);while (1){if (n >= 2) jie *= n; temp = pow(x,n) / jie;sum += temp;if (temp < 0.00001) break;n++;}printf("%.4lf\n", sum);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-3 求分数序列前N项和 (15 分)

本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+… 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

输入格式:

输入在一行中给出一个正整数N。

输出格式:

在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。

输入样例:

20
结尾无空行

输出样例:

32.66
结尾无空行

解题代码

#include <stdio.h>int main()
{int n;double sum = 0.0, fz = 2.0, fm = 1.0, temp;scanf("%d", &n);for (int i = 1; i <= n; i++){if ( i == 1) sum += fz / fm;else {temp = fz;fz = fz + fm;fm = temp;sum += fz / fm;}}printf("%.2lf", sum);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-4 特殊a串数列求和 (20 分)

给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。

输入格式:

输入在一行中给出不超过9的正整数a和n。

输出格式:

在一行中按照“s = 对应的和”的格式输出。

输入样例:

2 3
结尾无空行

输出样例:

s = 246
结尾无空行

解题代码

#include <stdio.h>int main()
{int n,a,sum = 0,temp;scanf("%d %d", &a, &n);temp = a;for(int i = 1; i <= n;i++){sum += temp;temp = temp * 10 + a;}printf("s = %d\n", sum);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-5 换硬币 (20 分)

将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?

输入格式:

输入在一行中给出待换的零钱数额x∈(8,100)。

输出格式:

要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。

输入样例:

13
结尾无空行

输出样例:

fen5:2, fen2:1, fen1:1, total:4
fen5:1, fen2:3, fen1:2, total:6
fen5:1, fen2:2, fen1:4, total:7
fen5:1, fen2:1, fen1:6, total:8
count = 4
结尾无空行

解题代码

#include <stdio.h>int main()
{int price,count = 0;scanf("%d", &price);for (int i = price / 5; i >= 1;i--){for (int j =  price / 2; j >= 1;j--){for (int k = price / 1; k >= 1;k--){if (i * 5 + j * 2 + k * 1 == price){count++;printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n", i, j, k, i+j+k);}}}}printf("count = %d\n", count);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-6 水仙花数 (20 分)

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写程序,计算所有N位水仙花数。

输入格式:

输入在一行中给出一个正整数N(3≤N≤7)。

输出格式:

按递增顺序输出所有N位水仙花数,每个数字占一行。

输入样例:

3
结尾无空行

输出样例:

153
370
371
407
结尾无空行

解题代码

#include <stdio.h>
#include <math.h>int main()
{int n,lower,upper,sum,temp,arr[10];scanf("%d",&n);lower = (int) pow(10,n-1);upper = lower * 10;for (int i = 0; i < 10;i++) {arr[i] = pow(i, n);}for (int i = lower; i < upper; i++){sum = 0;temp = i;while (temp > 0){sum += arr[temp % 10];temp /= 10;}if (sum == i) printf("%d\n", sum);}return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-7 最大公约数和最小公倍数 (15 分)

本题要求两个给定正整数的最大公约数和最小公倍数。

输入格式:

输入在一行中给出两个正整数M和N(≤1000)。

输出格式:

在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。

输入样例:

511 292
结尾无空行

输出样例:

73 2044
结尾无空行

解题代码

#include <stdio.h>int main()
{int num1,num2,temp,ret;scanf("%d %d", &num1, &num2);ret = num1 * num2;while (num2 != 0){temp =  num1 % num2;num1 = num2;num2 = temp;}ret /= num1; printf("%d %d\n", num1, ret);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-8 高空坠球 (20 分)

皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?

输入格式:

输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。

输出格式:

在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。

输入样例:

33 5
结尾无空行

输出样例:

94.9 1.0
结尾无空行

解题代码

#include <stdio.h>int main()
{int hight,n,cnt = 0;double len = 0.0,high = 0.0;scanf("%d %d", &hight, &n);if (n != 0) high = hight;while (cnt < n){len += high + high / 2;high /= 2;cnt++;}printf("%.1lf %.1lf\n", len - high, high);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-9 打印菱形图案 (15 分)

本题要求编写程序,打印一个高度为n的、由“*”组成的正菱形图案。

输入格式:

输入在一行中给出一个正的奇数n。

输出格式:

输出由n行星号“*”组成的菱形,如样例所示。每个星号后跟一个空格。

输入样例:

7
结尾无空行

输出样例:

      * * * * * * * * * 
* * * * * * * * * * * * * * * * 
结尾无空行

解题代码

#include <stdio.h>int main()
{int n;scanf("%d", &n);for (int i = 1;i <= n; i += 2){for (int j = 0; j < n - i;j++){printf(" ");}for (int j = 0; j < i; j++){printf("* ");}printf("\n");}for (int i = n - 2; i > 0; i -= 2){for (int j = 0; j < n - i; j++){printf(" ");}for (int j = 0; j < i; j++){printf("* ");}printf("\n");}return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-10 猴子吃桃问题 (15 分)

一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少个桃子?

输入格式:

输入在一行中给出正整数N(1<N≤10)。

输出格式:

在一行中输出第一天共摘了多少个桃子。

输入样例:

3
结尾无空行

输出样例:

10
结尾无空行

解题代码

#include <stdio.h>int main()
{int n, sum = 1;scanf("%d", &n);for (int i = 1; i < n; i++){sum = 2 * sum + 2;}printf("%d\n", sum);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题4-11 兔子繁衍问题 (15 分)

一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?

输入格式:

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

输出格式:

在一行中输出兔子总数达到N最少需要的月数。

输入样例:

30
结尾无空行

输出样例:

9
结尾无空行

解题代码

#include <stdio.h>int main()
{int n,a = 1,b = 1,t,month = 0;scanf("%d", &n);while (1){if ( month < 2){a = 1;b = 1;}else {t = b;b = a + b;a = t; }month ++;if (b >= n) break;}printf("%d\n", month);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题5-1 符号函数 (10 分)

本题要求实现符号函数sign(x)。

函数接口定义:

int sign( int x );

其中x是用户传入的整型参数。符号函数的定义为:若x大于0,sign(x) = 1;若x等于0,sign(x) = 0;否则,sign(x) = −1。

裁判测试程序样例:

#include <stdio.h>int sign( int x );int main()
{int x;scanf("%d", &x);printf("sign(%d) = %d\n", x, sign(x));return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

10
结尾无空行

输出样例:

sign(10) = 1
结尾无空行

解题代码

int sign( int x ){int result = 0;if (x > 0){result = 1;} else if (x == 0){result = 0;} else {result = -1;}return result;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题5-2 使用函数求奇数和 (15 分)

本题要求实现一个函数,计算N个整数中所有奇数的和,同时实现一个判断奇偶性的函数。

函数接口定义:

int even( int n );
int OddSum( int List[], int N );

其中函数even将根据用户传入的参数n的奇偶性返回相应值:当n为偶数时返回1,否则返回0。函数OddSum负责计算并返回传入的N个整数List[]中所有奇数的和。

裁判测试程序样例:

#include <stdio.h>#define MAXN 10int even( int n );
int OddSum( int List[], int N );int main()
{    int List[MAXN], N, i;scanf("%d", &N);printf("Sum of ( ");for ( i=0; i<N; i++ ) {scanf("%d", &List[i]);if ( even(List[i])==0 )printf("%d ", List[i]);}printf(") = %d\n", OddSum(List, N));return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

6
2 -3 7 88 0 15结尾无空行

输出样例:

Sum of ( -3 7 15 ) = 19
结尾无空行

解题代码

int even( int n ){return n % 2 == 0?1:0;
}int OddSum( int List[], int N ){int sum = 0;for(int i = 0;i < N;i++){if (!even(List[i])){sum += List[i];}}return sum;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题5-3 使用函数计算两点间的距离 (10 分)

本题要求实现一个函数,对给定平面任意两点坐标(x1,y1)和(x2,y2),求这两点之间的距离。

函数接口定义:

double dist( double x1, double y1, double x2, double y2 );

其中用户传入的参数为平面上两个点的坐标(x1, y1)和(x2, y2),函数dist应返回两点间的距离。

裁判测试程序样例:

#include <stdio.h>
#include <math.h>double dist( double x1, double y1, double x2, double y2 );int main()
{    double x1, y1, x2, y2;scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);printf("dist = %.2f\n", dist(x1, y1, x2, y2));return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

10 10 200 100
结尾无空行

输出样例:

dist = 210.24
结尾无空行

解题代码

double dist( double x1, double y1, double x2, double y2 ){return sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题5-4 使用函数求素数和 (20 分)

本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。

素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。

函数接口定义:

int prime( int p );
int PrimeSum( int m, int n );

其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数PrimeSum返回区间[m, n]内所有素数的和。题目保证用户传入的参数mn

裁判测试程序样例:

#include <stdio.h>
#include <math.h>int prime( int p );
int PrimeSum( int m, int n );int main()
{int m, n, p;scanf("%d %d", &m, &n);printf("Sum of ( ");for( p=m; p<=n; p++ ) {if( prime(p) != 0 )printf("%d ", p);}printf(") = %d\n", PrimeSum(m, n));return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

-1 10
结尾无空行

输出样例:

Sum of ( 2 3 5 7 ) = 17
结尾无空行

解题代码

int prime( int p ){int isPrime = 1;for (int i = 2;i <= p / 2; i++){if (p % i == 0){isPrime = 0;}}if (p < 2){isPrime = 0;}return isPrime;
}
int PrimeSum( int m, int n ){int sum = 0;for(int i = m;i <= n;i++){if (prime(i) == 1){sum += i;}}return sum;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题5-5 使用函数统计指定数字的个数 (15 分)

本题要求实现一个统计整数中指定数字的个数的简单函数。

函数接口定义:

int CountDigit( int number, int digit );

其中number是不超过长整型的整数,digit为[0, 9]区间内的整数。函数CountDigit应返回numberdigit出现的次数。

裁判测试程序样例:

#include <stdio.h>int CountDigit( int number, int digit );int main()
{int number, digit;scanf("%d %d", &number, &digit);printf("Number of digit %d in %d: %d\n", digit, number, CountDigit(number, digit));return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

-21252 2
结尾无空行

输出样例:

Number of digit 2 in -21252: 3
结尾无空行

解题代码

int CountDigit( int number, int digit ){int cnt = 0;if (number < 0) number = -number;do {if (digit == number % 10){cnt++;}number /= 10;}while(number != 0);return cnt;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题5-6 使用函数输出水仙花数 (20 分)

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。

函数接口定义:

int narcissistic( int number );
void PrintN( int m, int n );

函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。

函数PrintN则打印开区间(m, n)内所有的水仙花数,每个数字占一行。题目保证100≤mn≤10000。

裁判测试程序样例:

#include <stdio.h>int narcissistic( int number );
void PrintN( int m, int n );int main()
{int m, n;scanf("%d %d", &m, &n);if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);PrintN(m, n);if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

153 400

输出样例:

153 is a narcissistic number
370
371

解题代码

int narcissistic( int number ){int res = 0, t;if (number <= 999){int g = 0,s = 0,b = 0;g = number % 10;s = number % 100 / 10;b = number / 100;t = g * g * g + s * s * s + b * b * b;if (t == number){res = 1;}}else if (number <= 9999){int g = 0,s = 0,b = 0,q = 0;g = number % 10;s = number / 10 % 10;b = number / 100 % 10;q = number / 1000;t = g * g * g * g + s * s * s * s + b * b * b * b + q * q * q * q;if (t == number){res = 1;}}return res;
}
void PrintN( int m, int n ){for (int i = m + 1; i < n;i++){if (narcissistic(i)){printf("%d\n", i);}}
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题5-7 使用函数求余弦函数的近似值 (15 分)

本题要求实现一个函数,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e

cos(x)=x0/0!−x2/2!+x4/4!−x6/6!+⋯

函数接口定义:

double funcos( double e, double x );

其中用户传入的参数为误差上限e和自变量x;函数funcos应返回用给定公式计算出来、并且满足误差要求的cos(x)的近似值。输入输出均在双精度范围内。

裁判测试程序样例:

#include <stdio.h>
#include <math.h>double funcos( double e, double x );int main()
{    double e, x;scanf("%lf %lf", &e, &x);printf("cos(%.2f) = %.6f\n", x, funcos(e, x));return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

0.01 -3.14
结尾无空行

输出样例:

cos(-3.14) = -0.999899
结尾无空行

解题代码

double funcos( double e, double x ){int flag = 1,n = 0;double fact = 1,temp = 0.0,res = 0.0;while (1){if (n == 0){fact = 1;}else {fact *= n * (n - 1);}temp = flag *pow(x,n) / fact;res += temp;if (fabs(temp) < e){break;} n += 2;flag = -flag;}return res;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题6-1 分类统计字符个数 (15 分)

本题要求实现一个函数,统计给定字符串中英文字母、空格或回车、数字字符和其他字符的个数。

函数接口定义:

void StringCount( char s[] );

其中 char s[] 是用户传入的字符串。函数StringCount须在一行内按照

letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数

的格式输出。

裁判测试程序样例:

#include <stdio.h>
#define MAXS 15void StringCount( char s[] );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */int main()
{char s[MAXS];ReadString(s);StringCount(s);return 0;
}/* Your function will be put here */

输入样例:

aZ &
09 Az

输出样例:

letter = 4, blank = 3, digit = 2, other = 1
结尾无空行

解题代码

void StringCount( char s[] ){int letter = 0,blank = 0,digit = 0,other = 0;for (int i = 0;i < MAXS;i++){if (s[i] == '\0'){break;}if ((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z')){letter++;}else if (s[i] == ' ' || s[i] == '\n'){blank++;}else if (s[i] >= '0' && s[i] <= '9'){digit++;}else {other++;}}printf("letter = %d, blank = %d, digit = %d, other = %d", letter,blank,digit,other);
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题6-2 使用函数求特殊a串数列和 (20 分)

给定两个均不超过9的正整数an,要求编写函数求a+aa+aaa++⋯+aaana)之和。

函数接口定义:

int fn( int a, int n );
int SumA( int a, int n );

其中函数fn须返回的是na组成的数字;SumA返回要求的和。

裁判测试程序样例:

#include <stdio.h>int fn( int a, int n );
int SumA( int a, int n );int main()
{int a, n;scanf("%d %d", &a, &n);printf("fn(%d, %d) = %d\n", a, n, fn(a,n));        printf("s = %d\n", SumA(a,n));    return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

2 3
结尾无空行

输出样例:

fn(2, 3) = 222
s = 246结尾无空行

解题代码

int fn( int a, int n ){int t = a;for (int i = 1;i < n;i++){a = a * 10 + t;}return a;
}
int SumA( int a, int n ){int sum = a, t = a;for(int i = 1;i < n;i++){a = a * 10 + t;sum += a;}return sum;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题6-3 使用函数输出指定范围内的完数 (20 分)

本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数mn(0<mn≤10000)之间的所有完数。所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。

函数接口定义:

int factorsum( int number );
void PrintPN( int m, int n );

其中函数factorsum须返回int number的因子和;函数PrintPN要逐行输出给定范围[m, n]内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + … + 因子k”,其中完数和因子均按递增顺序给出。如果给定区间内没有完数,则输出一行“No perfect number”。

裁判测试程序样例:

#include <stdio.h>int factorsum( int number );
void PrintPN( int m, int n );int main()
{int m, n;scanf("%d %d", &m, &n);if ( factorsum(m) == m ) printf("%d is a perfect number\n", m);if ( factorsum(n) == n ) printf("%d is a perfect number\n", n);PrintPN(m, n);return 0;
}/* 你的代码将被嵌在这里 */

输入样例1:

6 30
结尾无空行

输出样例1:

6 is a perfect number
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14结尾无空行

输入样例2:

7 25
结尾无空行

输出样例2:

No perfect number
结尾无空行

解题代码

int fn( int a, int n ){int t = a;for (int i = 1;i < n;i++){a = a * 10 + t;}return a;
}
int SumA( int a, int n ){int sum = a, t = a;for(int i = 1;i < n;i++){a = a * 10 + t;sum += a;}return sum;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题6-4 使用函数输出指定范围内的Fibonacci数 (20 分)

本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有Fibonacci数。所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。

函数接口定义:

int fib( int n );
void PrintFN( int m, int n );

其中函数fib须返回第n项Fibonacci数;函数PrintFN要在一行中输出给定范围[m, n]内的所有Fibonacci数,相邻数字间有一个空格,行末不得有多余空格。如果给定区间内没有Fibonacci数,则输出一行“No Fibonacci number”。

裁判测试程序样例:

#include <stdio.h>int fib( int n );
void PrintFN( int m, int n );int main()
{int m, n, t;scanf("%d %d %d", &m, &n, &t);printf("fib(%d) = %d\n", t, fib(t));PrintFN(m, n);return 0;
}/* 你的代码将被嵌在这里 */

输入样例1:

20 100 7
结尾无空行

输出样例1:

fib(7) = 13
21 34 55 89结尾无空行

输入样例2:

2000 2500 8

输出样例2:

fib(8) = 21
No Fibonacci number

解题代码

int fib( int n ){int a = 1,b = 1,t;for (int i = 3;i <= n;i++){t = a;a = b;b = t + a;}return b;
}
void PrintFN( int m, int n ){int a = 0,b = 1,t,cnt = 0;while(1){t = a;a = b;if (b > n){break;}if (b >= m){if (b <= n){printf("%d", b);cnt++;}if (t + a <= n){printf(" ");}}b = t + a;}if (cnt == 0){printf("No Fibonacci number");}printf("\n");
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题6-5 使用函数验证哥德巴赫猜想 (20 分)

本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。

函数接口定义:

int prime( int p );
void Goldbach( int n );

其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数Goldbach按照格式“n=p+q”输出n的素数分解,其中p≤q均为素数。又因为这样的分解不唯一(例如24可以分解为5+19,还可以分解为7+17),要求必须输出所有解中p最小的解。

裁判测试程序样例:

#include <stdio.h>
#include <math.h>int prime( int p );
void Goldbach( int n );int main()
{int m, n, i, cnt;scanf("%d %d", &m, &n);if ( prime(m) != 0 ) printf("%d is a prime number\n", m);if ( m < 6 ) m = 6;if ( m%2 ) m++;cnt = 0;for( i=m; i<=n; i+=2 ) {Goldbach(i);cnt++;if ( cnt%5 ) printf(", ");else printf("\n");}return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

89 100
结尾无空行

输出样例:

89 is a prime number
90=7+83, 92=3+89, 94=5+89, 96=7+89, 98=19+79
100=3+97, 结尾无空行

解题代码

int prime( int p ){if (p < 2){return 0;}else {for (int i = 2; i <= p / 2;i++){if (p % i == 0){return 0;}}}return 1;
}
void Goldbach( int n ){for (int i = 2;i < n;i++){if (prime(i) && prime(n - i)){printf("%d=%d+%d", n,i,n-i);break;}}
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题6-6 使用函数输出一个整数的逆序数 (20 分)

本题要求实现一个求整数的逆序数的简单函数。

函数接口定义:

int reverse( int number );

其中函数reverse须返回用户传入的整型number的逆序数。

裁判测试程序样例:

#include <stdio.h>int reverse( int number );int main()
{int n;scanf("%d", &n);printf("%d\n", reverse(n));return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

-12340
结尾无空行

输出样例:

-4321
结尾无空行

解题代码

int reverse( int number ){int res = 0;res = number % 10;number /= 10;while(number != 0){res = res * 10 + number % 10;number /= 10;}return res;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题7-1 选择法排序 (20 分)

本题要求将给定的n个整数从大到小排序后输出。

输入格式:

输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。

输出格式:

在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。

输入样例:

4
5 1 7 6
结尾无空行

输出样例:

7 6 5 1
结尾无空行

解题代码

#include <stdio.h>int main()
{int n,temp,index;scanf("%d", &n);int arr[n];for (int i = 0;i < n;i++){scanf("%d", &arr[i]);}for (int i = 0;i < n;i++){temp = arr[i];index = i;for (int j = i+1;j < n;j++){if (temp < arr[j]){temp = arr[j];index = j;}}temp = arr[i];arr[i] = arr[index];arr[index] = temp;}for (int i = 0;i < n;i++){printf("%d",arr[i]);if (i != n-1) printf(" ");}printf("\n");return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题7-2 求一批整数中出现最多的个位数字 (20 分)

给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。

输入格式:

输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。

输出格式:

在一行中按格式“M: n1 n2 …”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。

输入样例:

3
1234 2345 3456
结尾无空行

输出样例:

3: 3 4
结尾无空行

解题代码

#include <stdio.h>int main()
{int n;scanf("%d", &n);char ch;int arr[10] = {0,0,0,0,0,0,0,0,0,0};while ((ch = getchar()) != EOF){if (ch >= '0' && ch <= '9'){arr[ch - 48]++;}}n = arr[0];for (int i = 1;i < 10;i++){if (n < arr[i]){n = arr[i];}}printf("%d:", n);for (int i = 0;i < 10; i++){if (arr[i] == n){printf(" %d", i);}}printf("\n");return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题7-3 判断上三角矩阵 (15 分)

上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。

本题要求编写程序,判断一个给定的方阵是否上三角矩阵。

输入格式:

输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。

输入样例:

3
3
1 2 3
0 4 5
0 0 6
2
1 0
-8 2
3
1 2 3
1 4 5
0 -1 6

输出样例:

YES
NO
NO

解题代码

#include <stdio.h>int main()
{int cnt,line,num,flag = 1;scanf("%d", &cnt);for (int i = 0; i < cnt;i++){scanf("%d", &line);for (int j = 0;j < line;j++){for(int k = 0;k < line;k++){scanf("%d", &num);if (j > k && num != 0){flag = 0;}}}if (flag == 0){printf("NO\n");} else{printf("YES\n");}flag = 1;}return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题7-4 求矩阵各行元素之和 (15 分)

本题要求编写程序,求一个给定的m×n矩阵各行元素之和。

输入格式:

输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间

以空格分隔。

输出格式:

每行输出对应矩阵行元素之和。

输入样例:

3 2
6 3
1 -8
3 12
结尾无空行

输出样例:

9
-7
15
结尾无空行

解题代码

#include <stdio.h>int main()
{int m,n,num,sum = 0;scanf("%d %d", &m, &n);for (int i = 0;i < m;i++){for (int j = 0;j < n;j++){scanf("%d", &num);sum += num;}printf("%d", sum);if (i != m - 1) printf("\n");sum = 0;}return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题7-5 找鞍点 (20 分)

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入格式:

输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

输入样例1:

4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
结尾无空行

输出样例1:

2 1
结尾无空行

输入样例2:

2
1 7
4 1

输出样例2:

NONE

解题代码

#include <stdio.h>int main()
{int n,num,max,cnt = 0,min;scanf("%d", &n);int arr[n][n],point[n];for (int i = 0;i < n; i++){for (int j = 0;j < n; j++){scanf("%d", &num);if (j == 0){max = num;point[i] = 0;} else {if (max <= num){max = num;point[i] = j;}}arr[i][j] = num;}}for (int i = 0;i < n;i++){for (int j = 0;j < n;j++){if (j ==0){min = arr[j][point[i]];} else {if (min >= arr[j][point[i]]){min = arr[j][point[i]];}}}if (min == arr[i][point[i]]){if (cnt != 0) printf("\n");printf("%d %d",i,point[i]);cnt++;}}if (cnt == 0) printf("NONE");return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题7-6 统计大写辅音字母 (15 分)

英文辅音字母是除AEIOU以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数。

输入格式:

输入在一行中给出一个不超过80个字符、并以回车结束的字符串。

输出格式:

输出在一行中给出字符串中大写辅音字母的个数。

输入样例:

HELLO World!
结尾无空行

输出样例:

4
结尾无空行

解题代码

#include <stdio.h>int main()
{char c;int count = 0;while((c = getchar()) != '\n'){if (c != 'A' && c != 'E' && c != 'I' && c != 'O' && c != 'U'){if (c > 'A' && c <= 'Z')count++;}}printf("%d", count);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题7-7 字符串替换 (15 分)

本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换:

原字母对应字母
AZ
BY
CX
DW
XC
YB
ZA

输入格式:

输入在一行中给出一个不超过80个字符、并以回车结束的字符串。

输出格式:

输出在一行中给出替换完成后的字符串。

输入样例:

Only the 11 CAPItaL LeTtERS are replaced.
结尾无空行

输出样例:

Lnly the 11 XZKRtaO OeGtVIH are replaced.
结尾无空行

解题代码

#include <stdio.h>int main()
{char c;while((c = getchar()) != '\n'){if (c >= 'A' && c <= 'Z'){c = 'A' + 'Z' - c;}putchar(c);}return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题7-8 字符串转换成十进制整数 (15 分)

输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。

输入格式:

输入在一行中给出一个以#结束的非空字符串。

输出格式:

在一行中输出转换后的十进制数。题目保证输出在长整型范围内。

输入样例:

+-P-xf4+-1!#
结尾无空行

输出样例:

-3905
结尾无空行

解题代码

#include <stdio.h>int main()
{char c, pre = ' ';int sign = 1,result = 0,isFirst = 1;while((c = getchar()) != '#'){if (c == 'x' && pre == '-'){sign = -1;}if(c >= '0' && c <= '9'){if (isFirst == 1){isFirst = 0;if (pre == '-') sign = -1;}result = result * 16 + (c - '0');}else if(c >= 'a' && c <= 'f'){if (isFirst == 1){isFirst = 0;if (pre == '-') sign = -1;}result = result * 16 + (c - 'a' + 10);}else if (c >= 'A' && c <= 'F'){if (isFirst == 1){isFirst = 0;if (pre == '-') sign = -1;}result = result * 16 + (c - 'A' + 10);}pre = c;}result *= sign;printf("%d", result);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-1 拆分实数的整数与小数部分 (15 分)

本题要求实现一个拆分实数的整数与小数部分的简单函数。

函数接口定义:

void splitfloat( float x, int *intpart, float *fracpart );

其中x是被拆分的实数(0≤x<10000),*intpart*fracpart分别是将实数x拆分出来的整数部分与小数部分。

裁判测试程序样例:

#include <stdio.h>void splitfloat( float x, int *intpart, float *fracpart );int main()
{float x, fracpart;int intpart;scanf("%f", &x);splitfloat(x, &intpart, &fracpart);printf("The integer part is %d\n", intpart);printf("The fractional part is %g\n", fracpart);return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

2.718
结尾无空行

输出样例:

The integer part is 2
The fractional part is 0.718
结尾无空行

解题代码

void splitfloat( float x, int *intpart, float *fracpart ){*intpart = (int) x;*fracpart = x - *intpart;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-2 在数组中查找指定元素 (15 分)

本题要求实现一个在数组中查找指定元素的简单函数。

函数接口定义:

int search( int list[], int n, int x );

其中list[]是用户传入的数组;n(≥0)是list[]中元素的个数;x是待查找的元素。如果找到

则函数search返回相应元素的最小下标(下标从0开始),否则返回−1。

裁判测试程序样例:

#include <stdio.h>
#define MAXN 10int search( int list[], int n, int x );int main()
{int i, index, n, x;int a[MAXN];scanf("%d", &n);for( i = 0; i < n; i++ )scanf("%d", &a[i]);scanf("%d", &x);index = search( a, n, x );if( index != -1 )printf("index = %d\n", index);elseprintf("Not found\n");return 0;
}/* 你的代码将被嵌在这里 */

输入样例1:

5
1 2 2 5 4
2结尾无空行

输出样例1:

index = 1
结尾无空行

输入样例2:

5
1 2 2 5 4
0

输出样例2:

Not found

解题代码

int search( int list[], int n, int x ){int index = -1;for (int i = 0;i < n;i++){if (list[i] == x){index = i;break;}}return index;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-3 数组循环右移 (20 分)

本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0a1⋯a**n−1)变换为(a**nma**n−1a0a1⋯a**nm−1)(最后m个数循环移至最前面的m个位置)。

函数接口定义:

void ArrayShift( int a[], int n, int m );

其中a[]是用户传入的数组;n是数组的大小;m是右移的位数。函数ArrayShift须将循环右移后的数组仍然存在a[]中。

裁判测试程序样例:

#include <stdio.h>
#define MAXN 10void ArrayShift( int a[], int n, int m );int main()
{int a[MAXN], n, m;int i;scanf("%d %d", &n, &m);for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);ArrayShift(a, n, m);for ( i = 0; i < n; i++ ) {if (i != 0) printf(" ");printf("%d", a[i]);}printf("\n");return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

6 2
1 2 3 4 5 6
结尾无空行

输出样例:

5 6 1 2 3 4
结尾无空行

解题代码

int ArrayShift( int a[], int n, int m ){for (int i = 0;i < m;i++){int last = a[n-1];for (int j = n-1;j > 0;j--){a[j] = a[j - 1]; }a[0] = last;}
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-4 报数 (20 分)

报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。

本题要求编写函数,给出每个人的退出顺序编号。

函数接口定义:

void CountOff( int n, int m, int out[] );

其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)。函数CountOff将每个人的退出顺序编号存在数组out[]中。因为C语言数组下标是从0开始的,所以第i个位置上的人是第out[i-1]个退出的。

裁判测试程序样例:

#include <stdio.h>
#define MAXN 20void CountOff( int n, int m, int out[] );int main()
{int out[MAXN], n, m;int i;scanf("%d %d", &n, &m);CountOff( n, m, out );   for ( i = 0; i < n; i++ )printf("%d ", out[i]);printf("\n");return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

11 3
结尾无空行

输出样例:

4 10 1 7 5 2 11 9 3 6 8 
结尾无空行

解题代码

void CountOff( int n, int m, int out[] )
{int arr[n];for(int i = 0;i < n;i++){arr[i] = i + 1;}int cnt = 0,index = 0;;for(int i = 0;i < n;i++){while(1){if (index == n) index = 0;if (arr[index] != -1){cnt++;} if (cnt == m) break;index++;}cnt = 0;out[arr[index] - 1] = i + 1;arr[index++] = -1;}
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-5 使用函数实现字符串部分复制 (20 分)

本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。

函数接口定义:

void strmcpy( char *t, int m, char *s );

函数strmcpy将输入字符串char *t中从第m个字符开始的全部字符复制到字符串char *s中。若m超过输入字符串的长度,则结果字符串应为空串。

裁判测试程序样例:

#include <stdio.h>
#define MAXN 20void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */int main()
{char t[MAXN], s[MAXN];int m;scanf("%d\n", &m);ReadString(t);strmcpy( t, m, s );printf("%s\n", s);return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

7
happy new year

输出样例:

new year

解题代码

void strmcpy( char *t, int m, char *s ){if (m < MAXN){t += m - 1;while((*s = *t) != '\0'){s++;t++;}}
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-6 删除字符 (20 分)

本题要求实现一个删除字符串中的指定字符的简单函数。

函数接口定义:

void delchar( char *str, char c );

其中char *str是传入的字符串,c是待删除的字符。函数delchar的功能是将字符串str中出现的所有c字符删除。

裁判测试程序样例:

#include <stdio.h>
#define MAXN 20void delchar( char *str, char c );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */int main()
{char str[MAXN], c;scanf("%c\n", &c);ReadString(str);delchar(str, c);printf("%s\n", str);return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

a
happy new year

输出样例:

hppy new yer

解题代码

void delchar( char *str, char c ){char *ptr = NULL;while(*str != '\0'){if (*str == c){ptr = str;while((*ptr = *(ptr+1))){ptr++;}} else {str++;}}
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-7 字符串排序 (20 分)

本题要求编写程序,读入5个字符串,按由小到大的顺序输出。

输入格式:

输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。

输出格式:

按照以下格式输出排序后的结果:

After sorted:
每行一个字符串

输入样例:

red yellow blue black white
结尾无空行

输出样例:

After sorted:
black
blue
red
white
yellow结尾无空行

解题代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 5
#define LEN 80int main(){char *arr[MAX],*p,c;int i = 0;arr[0] = (char *) malloc(LEN);p = arr[i];c = getchar();while (c != '\n' && c != '\0'){if(c != ' '){*p++ = c;}else{*p = '\0';i++;arr[i] = (char *) malloc(LEN);p = arr[i];}c = getchar();}for (int i = 0;i < MAX - 1;i++){for (int j = 0; j < MAX - 1 - i;j++){if (strcmp(arr[j], arr[j+1]) > 0){char *s = arr[j];arr[j] = arr[j+1];arr[j+1] = s;}}}printf("After sorted:\n");for (int i = 0;i < MAX;i++){if (i != 0) printf("\n");printf("%s", arr[i]);}return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-8 判断回文字符串 (20 分)

本题要求编写函数,判断给定的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。

函数接口定义:

bool palindrome( char *s );

函数palindrome判断输入字符串char *s是否为回文。若是则返回true,否则返回false

裁判测试程序样例:

#include <stdio.h>
#include <string.h>#define MAXN 20
typedef enum {false, true} bool;bool palindrome( char *s );int main()
{char s[MAXN];scanf("%s", s);if ( palindrome(s)==true )printf("Yes\n");elseprintf("No\n");printf("%s\n", s);return 0;
}/* 你的代码将被嵌在这里 */

输入样例1:

thisistrueurtsisiht
结尾无空行

输出样例1:

Yes
thisistrueurtsisiht

输入样例2:

thisisnottrue

输出样例2:

No
thisisnottrue

解题代码

bool palindrome( char *s ){bool res = true;int len = strlen(s) - 1;char *ptr = s;while(*s != *(ptr + len / 2)){if (*s != *(ptr + len)){res = false;break;}s++;len--;}return res;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-9 分类统计各类字符个数 (15 分)

本题要求实现一个函数,统计给定字符串中的大写字母、小写字母、空格、数字以及其它字符各有多少。

函数接口定义:

void StringCount( char *s );

其中 char *s 是用户传入的字符串。函数StringCount须在一行内按照

大写字母个数 小写字母个数 空格个数 数字个数 其它字符个数

的格式输出。

裁判测试程序样例:

#include <stdio.h>
#define MAXS 15void StringCount( char *s );
void ReadString( char *s ); /* 由裁判实现,略去不表 */int main()
{char s[MAXS];ReadString(s);StringCount(s);return 0;
}/* Your function will be put here */

输入样例:

aZ&*?
093 Az

输出样例:

2 2 1 3 4
结尾无空行

解题代码

void StringCount( char *s ){char *p = s;int big,small,blank,num,other;big=small=blank=num=other=0;while(*p != '\0'){if (*p >= 'A' && *p <= 'Z'){big++;}else if (*p >= 'a' && *p <= 'z'){small++;}else if (*p >= '0' && *p <= '9'){num++;}else if (*p == ' '){blank++;}else{other++;}p++;}printf("%d %d %d %d %d", big,small,blank,num,other);
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题8-10 输出学生成绩 (20 分)

本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。

输入格式:

输入第一行首先给出一个正整数N,表示学生的个数。接下来一行给出N个学生的成绩,数字间以空格分隔。

输出格式:

按照以下格式输出:

average = 平均成绩
max = 最高成绩
min = 最低成绩

结果均保留两位小数。

输入样例:

3
85 90 95
结尾无空行

输出样例:

average = 90.00
max = 95.00
min = 85.00
结尾无空行

解题代码

#include <stdio.h>int main()
{int n,score;double sum,max,min;sum = 0.0;scanf("%d", &n);for (int i = 0;i < n;i++){scanf("%d", &score);sum += score;if (i == 0){min = max = score;}else {if (score > max) max = score;if (score < min) min = score;}}sum = sum / n;printf("average = %.2f\nmax = %.2f\nmin = %.2f", sum, max, min);return 0;	
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题9-1 时间换算 (15 分)

本题要求编写程序,以hh:mm:ss的格式输出某给定时间再过n秒后的时间值(超过23:59:59就从0点开始计时)。

输入格式:

输入在第一行中以hh:mm:ss的格式给出起始时间,第二行给出整秒数n(<60)。

输出格式:

输出在一行中给出hh:mm:ss格式的结果时间。

输入样例:

11:59:40
30
结尾无空行

输出样例:

12:00:10
结尾无空行

解题代码

#include <stdio.h>typedef struct{int hour;int minute;int second;
} date;int main()
{date d;int s;scanf("%d:%d:%d %d",&d.hour,&d.minute,&d.second,&s);d.second += s;if (d.second >= 60){d.second = d.second - 60;d.minute++;}if (d.minute >= 60){d.minute -= 60;d.hour++;}if (d.hour > 23){d.hour = 0;}if (d.hour < 10) printf("0");printf("%d:",d.hour);if (d.minute < 10) printf("0");printf("%d:",d.minute);if (d.second < 10) printf("0");printf("%d",d.second);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题9-2 计算两个复数之积 (15 分)

本题要求实现一个计算复数之积的简单函数。

函数接口定义:

struct complex multiply(struct complex x, struct complex y);

其中struct complex是复数结构体,其定义如下:

struct complex{int real;int imag;
};

裁判测试程序样例:

#include <stdio.h>struct complex{int real;int imag;
};struct complex multiply(struct complex x, struct complex y);int main()
{struct complex product, x, y;scanf("%d%d%d%d", &x.real, &x.imag, &y.real, &y.imag);product = multiply(x, y);printf("(%d+%di) * (%d+%di) = %d + %di\n", x.real, x.imag, y.real, y.imag, product.real, product.imag);return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

3 4 5 6
结尾无空行

输出样例:

(3+4i) * (5+6i) = -9 + 38i
结尾无空行

解题代码

struct complex multiply(struct complex x, struct complex y){struct complex res;res.real = x.real * y.real - x.imag * y.imag;res.imag = x.real * y.imag + x.imag * y.real;return res;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题9-3 平面向量加法 (15 分)

本题要求编写程序,计算两个二维平面向量的和向量。

输入格式:

输入在一行中按照“x1 y1 x2 y2”的格式给出两个二维平面向量v1=(x1,y1)和v2=(x2,y2)的分量。

输出格式:

在一行中按照(x, y)的格式输出和向量,坐标输出小数点后一位(注意不能输出−0.0)。

输入样例:

3.5 -2.7 -13.9 8.7
结尾无空行

输出样例:

(-10.4, 6.0)
结尾无空行

解题代码

#include <stdio.h>
typedef struct{double real;double imag;
}complex;
int main()
{complex x,y,res;scanf("%lf %lf %lf %lf", &x.real,&x.imag,&y.real,&y.imag);res.real = (x.real + y.real);res.imag = (x.imag + y.imag);if(res.real < 0) res.real = (double)((int)(res.real * 10.0 - 0.5) ) / 10.0;else res.real = (double)((int)(res.real * 10.0 + 0.5) ) / 10.0;if(res.imag < 0) res.imag = (double)((int)(res.imag * 10.0 - 0.5) ) / 10.0;elseres.imag = (double)((int)(res.imag * 10.0 + 0.5) ) / 10.0;printf("(%.1lf, %.1lf)", res.real,res.imag);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题9-4 查找书籍 (20 分)

给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。

输入格式:

输入第一行给出正整数n(<10),随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。题目保证没有同样价格的书。

输出格式:

在一行中按照“价格, 书名”的格式先后输出价格最高和最低的书。价格保留2位小数。

输入样例:

3
Programming in C
21.5
Programming in VB
18.5
Programming in Delphi
25.0
结尾无空行

输出样例:

25.00, Programming in Delphi
18.50, Programming in VB
结尾无空行

解题代码

#include <stdio.h>typedef struct{char name[31];double price;
}book;int main()
{int n;book arr[3];scanf("%d", &n);getchar();for (int i = 0;i < n;i++){gets(arr[2].name);scanf("%lf", &arr[2].price);getchar();if (i == 0){arr[0] = arr[2];arr[1] = arr[2];}else{if (arr[0].price < arr[2].price){arr[0] = arr[2];}if (arr[1].price > arr[2].price){arr[1] = arr[2];}}}printf("%.2lf, %s\n%.2f, %s", arr[0].price,arr[0].name,arr[1].price,arr[1].name);return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题9-5 通讯录排序 (20 分)

输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。

输入格式:

输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+-组成的字符串。

输出格式:

按照年龄从大到小输出朋友的信息,格式同输出。

输入样例:

3
zhang 19850403 13912345678
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
结尾无空行

输出样例:

wang 19821020 +86-0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678
结尾无空行

解题代码

#include <stdio.h>
#include <string.h>
typedef struct{char name[11];char birth[9];char phone[18];
}firend;void getdata(char *s){char *p,c;p = s;c = getchar();while (c != ' ' && c != '\n' && c != EOF){*p++ = c;c = getchar();}*p = '\0';
}int main()
{int n,i,j;scanf("%d",&n);getchar();firend firends[n],t;for(i = 0;i < n;i++){getdata(firends[i].name);getdata(firends[i].birth);getdata(firends[i].phone);if (i != 0){t = firends[i];for (j = i-1;j >= 0 && strcmp(firends[j].birth,t.birth) > 0; j--){firends[j + 1] = firends[j];}firends[j + 1] = t;}}for(i = 0;i < n;i++){if (i != 0) {printf("\n");}printf("%s %s %s", firends[i].name,firends[i].birth,firends[i].phone);}return 0;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题9-6 按等级统计学生成绩 (20 分)

本题要求实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数。

函数接口定义:

int set_grade( struct student *p, int n );

其中p是指向学生信息的结构体数组的指针,该结构体的定义为:

struct student{int num;char name[20];int score;char grade;
};

n是数组元素个数。学号num、姓名name和成绩score均是已经存储好的。set_grade函数需要根据学生的成绩score设置其等级grade。等级设置:85-100为A,70-84为B,60-69为C,0-59为D。同时,set_grade还需要返回不及格的人数。

裁判测试程序样例:

#include <stdio.h>
#define MAXN 10struct student{int num;char name[20];int score;char grade;
};int set_grade( struct student *p, int n );int main()
{   struct student stu[MAXN], *ptr;int n, i, count;ptr = stu;scanf("%d\n", &n);for(i = 0; i < n; i++){scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);} count = set_grade(ptr, n);printf("The count for failed (<60): %d\n", count);printf("The grades:\n"); for(i = 0; i < n; i++)printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade);return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

10
31001 annie 85
31002 bonny 75
31003 carol 70
31004 dan 84
31005 susan 90
31006 paul 69
31007 pam 60
31008 apple 50
31009 nancy 100
31010 bob 78结尾无空行

输出样例:

The count for failed (<60): 1
The grades:
31001 annie A
31002 bonny B
31003 carol B
31004 dan B
31005 susan A
31006 paul C
31007 pam C
31008 apple D
31009 nancy A
31010 bob B结尾无空行

解题代码

int set_grade( struct student *p, int n ){int count = 0;for(int i = 0;i < n;i++){if (p->score >= 85){p->grade = 'A';}else if (p->score >= 70){p->grade = 'B';}else if (p-> score >= 60){p->grade = 'C';}else{p->grade = 'D';count++;}p++;}return count;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题10-1 判断满足条件的三位数 (15 分)

本题要求实现一个函数,统计给定区间内的三位数中有两位数字相同的完全平方数(如144、676)的个数。

函数接口定义:

int search( int n );

其中传入的参数int n是一个三位数的正整数(最高位数字非0)。函数search返回[101, n]区间内所有满足条件的数的个数。

裁判测试程序样例:

#include <stdio.h>
#include <math.h>int search( int n );int main()
{int number;scanf("%d",&number);printf("count=%d\n",search(number));return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

500
结尾无空行

输出样例:

count=6
结尾无空行

解题代码

int search( int n ){int count = 0,t,g,s,b;for(int i = 101;i <= n;i++){g = i % 10;s = i / 10 % 10;b = i / 100;t = (int)sqrt(i);if ((t * t) == i){if (g == s || s == b || b == g)count++;}}return count;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题10-2 递归求阶乘和 (15 分)

本题要求实现一个计算非负整数阶乘的简单函数,并利用该函数求 1!+2!+3!+…+n! 的值。

函数接口定义:

double fact( int n );
double factsum( int n );

函数fact应返回n的阶乘,建议用递归实现。函数factsum应返回 1!+2!+…+n! 的值。题目保证输入输出在双精度范围内。

裁判测试程序样例:

#include <stdio.h>double fact( int n );
double factsum( int n );int main()
{int n;scanf("%d",&n);printf("fact(%d) = %.0f\n", n, fact(n));printf("sum = %.0f\n", factsum(n));return 0;
}/* 你的代码将被嵌在这里 */

输入样例1:

10
结尾无空行

输出样例1:

fact(10) = 3628800
sum = 4037913
结尾无空行

输入样例2:

0

输出样例2:

fact(0) = 1
sum = 0

解题代码

double fact( int n ){if (n == 0 || n == 1){return 1;} else {return fact(n - 1) * n;  }}
double factsum( int n ){if (n == 0){return 0;}else if (n == 1){return 1;}else {return factsum(n - 1) + fact(n);}
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题10-3 递归实现指数函数 (15 分)

本题要求实现一个计算x**nn≥1)的函数。

函数接口定义:

double calc_pow( double x, int n );

函数calc_pow应返回xn次幂的值。建议用递归实现。题目保证结果在双精度范围内。

裁判测试程序样例:

#include <stdio.h>double calc_pow( double x, int n );int main()
{double x;int n;scanf("%lf %d", &x, &n);printf("%.0f\n", calc_pow(x, n));return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

2 3
结尾无空行

输出样例:

8
结尾无空行

解题代码

double calc_pow( double x, int n ){if (n == 0){return 1;}else if (n == 1) {return x;}else{return x * calc_pow(x,n - 1);}
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题10-4 递归求简单交错幂级数的部分和 (15 分)

本题要求实现一个函数,计算下列简单交错幂级数的部分和:

f(x,n)=xx2+x3−x4+⋯+(−1)n−1x**n

函数接口定义:

double fn( double x, int n );

其中题目保证传入的n是正整数,并且输入输出都在双精度范围内。函数fn应返回上述级数的部分和。建议尝试用递归实现。

裁判测试程序样例:

#include <stdio.h>double fn( double x, int n );int main()
{double x;int n;scanf("%lf %d", &x, &n);printf("%.2f\n", fn(x,n));return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

0.5 12
结尾无空行

输出样例:

0.33
结尾无空行

解题代码

double fn( double x, int n ){if (n == 1){return x;} else {double res = 1.0;for (int i = 0;i < n;i++) res *= x * -1;res *= - 1;return fn(x,n - 1) + res;}
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题10-5 递归计算Ackermenn函数 (15 分)

本题要求实现Ackermenn函数的计算,其函数定义如下:
在这里插入图片描述

函数接口定义:

int Ack( int m, int n );

其中mn是用户传入的非负整数。函数Ack返回Ackermenn函数的相应值。题目保证输入输出都在长整型

范围内。

裁判测试程序样例:

#include <stdio.h>int Ack( int m, int n );int main()
{int m, n;scanf("%d %d", &m, &n);printf("%d\n", Ack(m, n));return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

2 3
结尾无空行

输出样例:

9
结尾无空行

解题代码

int Ack( int m, int n ){if (m == 0){return n + 1;} else if (n == 0 && m > 0){return Ack(m - 1, 1);} else if (m > 0 && n > 0){return Ack (m - 1,Ack(m , n - 1));}
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题10-6 递归求Fabonacci数列 (10 分)

本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:

f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。

函数接口定义:

int f( int n );

函数f应返回第n个Fabonacci数。题目保证输入输出在长整型范围内。建议用递归实现。

裁判测试程序样例:

#include <stdio.h>int f( int n );int main()
{int n;scanf("%d", &n);printf("%d\n", f(n));return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

6
结尾无空行

输出样例:

8
结尾无空行

解题代码

int f( int n ){if (n == 0){return 0;} else if (n == 1){return 1;} else {return f(n - 1) + f(n - 2);}
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题10-7 十进制转换二进制 (15 分)

本题要求实现一个函数,将正整数n转换为二进制后输出。

函数接口定义:

void dectobin( int n );

函数dectobin应在一行中打印出二进制的n。建议用递归实现。

裁判测试程序样例:

#include <stdio.h>void dectobin( int n );int main()
{int n;scanf("%d", &n);dectobin(n);return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

10
结尾无空行

输出样例:

1010
结尾无空行

解题代码

void dectobin( int n ){if (n == 0 || n == 1){printf("%d", n);}else {dectobin(n / 2);printf("%d", n % 2);}
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题10-8 递归实现顺序输出整数 (15 分)

本题要求实现一个函数,对一个整数进行按位顺序输出。

函数接口定义:

void printdigits( int n );

函数printdigits应将n的每一位数字从高位到低位顺序打印出来,每位数字占一行。

裁判测试程序样例:

#include <stdio.h>void printdigits( int n );int main()
{int n;scanf("%d", &n);printdigits(n);return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

12345
结尾无空行

输出样例:

1
2
3
4
5
结尾无空行

解题代码

void printdigits( int n ){if (n < 10){printf("%d\n",n);} else {printdigits(n / 10);printf("%d\n",n % 10);}
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题11-1 输出月份英文名 (15 分)

本题要求实现函数,可以返回一个给定月份的英文名称。

函数接口定义:

char *getmonth( int n );

函数getmonth应返回存储了n对应的月份英文名称的字符串头指针。如果传入的参数n不是一个代表月份的数字,则返回空指针NULL。

裁判测试程序样例:

#include <stdio.h>char *getmonth( int n );int main()
{int n;char *s;scanf("%d", &n);s = getmonth(n);if ( s==NULL ) printf("wrong input!\n");else printf("%s\n", s);return 0;
}/* 你的代码将被嵌在这里 */

输入样例1:

5
结尾无空行

输出样例1:

May
结尾无空行

输入样例2:

15

输出样例2:

wrong input!

解题代码

char *getmonth( int n ){if (n < 1 || n > 12){return NULL;} else {switch (n){case 1: return "January";case 2: return "February";case 3: return "March";case 4: return "April";case 5: return "May";case 6: return "June";case 7: return "July";case 8: return "August";case 9: return "September";case 10: return "October";case 11: return "November";default : return "December";}}
}

PTA(浙大版《C语言程序设计(第3版)》题目集)习题11-2 查找星期 (15 分)

本题要求实现函数,可以根据下表查找到星期,返回对应的序号。

序号星期
0Sunday
1Monday
2Tuesday
3Wednesday
4Thursday
5Friday
6Saturday

函数接口定义:

int getindex( char *s );

函数getindex应返回字符串s序号。如果传入的参数s不是一个代表星期的字符串,则返回-1。

裁判测试程序样例:

#include <stdio.h>
#include <string.h>#define MAXS 80int getindex( char *s );int main()
{int n;char s[MAXS];scanf("%s", s);n = getindex(s);if ( n==-1 ) printf("wrong input!\n");else printf("%d\n", n);return 0;
}/* 你的代码将被嵌在这里 */

输入样例1:

Tuesday
结尾无空行

输出样例1:

2
结尾无空行

输入样例2:

today

输出样例2:

wrong input!

解题代码

int getindex( char *s ){if (strcasecmp(s, "Sunday") == 0){return 0;} else if (strcasecmp(s, "Monday") == 0){return 1;} else if (strcasecmp(s, "Tuesday") == 0){return 2;} else if (strcasecmp(s, "Wednesday") == 0){return 3;} else if (strcasecmp(s, "Thursday") == 0){return 4;} else if (strcasecmp(s, "Friday") == 0){return 5;} else if (strcasecmp(s, "Saturday") == 0){return 6;} else {return -1;}
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题11-3 计算最长的字符串长度 (15 分)

本题要求实现一个函数,用于计算有n个元素的指针数组s中最长的字符串的长度。

函数接口定义:

int max_len( char *s[], int n );

其中n个字符串存储在s[]中,函数max_len应返回其中最长字符串的长度。

裁判测试程序样例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>#define MAXN 10
#define MAXS 20int max_len( char *s[], int n );int main()
{int i, n;char *string[MAXN] = {NULL};scanf("%d", &n);for(i = 0; i < n; i++) {string[i] = (char *)malloc(sizeof(char)*MAXS);scanf("%s", string[i]);}printf("%d\n", max_len(string, n));return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

4
blue
yellow
red
green结尾无空行

输出样例:

6

解题代码

int max_len( char *s[], int n ){int i,len,t;len = strlen(s[0]);for (i = 1;i < n;i++){t = strlen(s[i]);if (len < t){len = t;}}return len;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题11-4 字符串的连接 (15 分)

本题要求实现一个函数,将两个字符串连接起来。

函数接口定义:

char *str_cat( char *s, char *t );

函数str_cat应将字符串t复制到字符串s的末端,并且返回字符串s的首地址。

裁判测试程序样例:

#include <stdio.h>
#include <string.h>#define MAXS 10char *str_cat( char *s, char *t );int main()
{char *p;char str1[MAXS+MAXS] = {'\0'}, str2[MAXS] = {'\0'};scanf("%s%s", str1, str2);p = str_cat(str1, str2);printf("%s\n%s\n", p, str1);return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

abc
def结尾无空行

输出样例:

abcdef
abcdef

解题代码

char *str_cat( char *s, char *t ){char *p = s;s += strlen(s);while(*t != '\0'){*s = *t;s++;t++;} return p;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题11-5 指定位置输出字符串 (20 分)

本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。

函数接口定义:

char *match( char *s, char ch1, char ch2 );

函数match应打印s中从ch1ch2之间的所有字符,并且返回ch1的地址。

裁判测试程序样例:

#include <stdio.h>#define MAXS 10char *match( char *s, char ch1, char ch2 );int main()
{char str[MAXS], ch_start, ch_end, *p;scanf("%s\n", str);scanf("%c %c", &ch_start, &ch_end);p = match(str, ch_start, ch_end);printf("%s\n", p);return 0;
}/* 你的代码将被嵌在这里 */

输入样例1:

program
r g
结尾无空行

输出样例1:

rog
rogram
结尾无空行

输入样例2:

program
z o

输出样例2:

(空行)
(空行)

输入样例3:

program
g z

输出样例3:

gram
gram

解题代码

char *match( char *s, char ch1, char ch2 )
{char *p = NULL;int isPrint = 0;while (*s != '\0'){if (*s == ch1 && isPrint != 1){isPrint = 1;p = s;printf("%c",*s);} else {if (isPrint){printf("%c",*s);}if (*s == ch2){break;}}s++;}printf("\n");if (p == NULL)return "";return p;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题11-6 查找子串 (20 分)

本题要求实现一个字符串查找的简单函数。

函数接口定义:

char *search( char *s, char *t );

函数search在字符串s中查找子串t,返回子串t在s中的首地址。若未找到,则返回NULL。

裁判测试程序样例:

#include <stdio.h>
#define MAXS 30char *search(char *s, char *t);
void ReadString( char s[] ); /* 裁判提供,细节不表 */int main()
{char s[MAXS], t[MAXS], *pos;ReadString(s);ReadString(t);pos = search(s, t);if ( pos != NULL )printf("%d\n", pos - s);elseprintf("-1\n");return 0;
}/* 你的代码将被嵌在这里 */

输入样例1:

The C Programming Language
ram

输出样例1:

10
结尾无空行

输入样例2:

The C Programming Language
bored

输出样例2:

-1
结尾无空行

解题代码

char *search(char *s, char *t){char *p,*t1;int len = -1;p = t1 = NULL;while(*s != '\0'){p = s;t1 = t;while (*t1 != '\0'){len = *p - *t1;if (len == 0){p++;t1++;  }else{break;}}if (len == 0){p = s;break;} else {p = NULL;}s++;}return p;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题11-7 奇数值结点链表 (20 分)

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下:

struct ListNode {int data;ListNode *next;
};

函数接口定义:

struct ListNode *readlist();
struct ListNode *getodd( struct ListNode **L );

函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。

函数getodd将单链表L中奇数值的结点分离出来,重新组成一个新的链表。返回指向新链表头结点的指针,同时将L中存储的地址改为删除了奇数值结点后的链表的头结点地址(所以要传入L的指针)。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>struct ListNode {int data;struct ListNode *next;
};struct ListNode *readlist();
struct ListNode *getodd( struct ListNode **L );
void printlist( struct ListNode *L )
{struct ListNode *p = L;while (p) {printf("%d ", p->data);p = p->next;}printf("\n");
}int main()
{struct ListNode *L, *Odd;L = readlist();Odd = getodd(&L);printlist(Odd);printlist(L);return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

1 2 2 3 4 5 6 7 -1
结尾无空行

输出样例:

1 3 5 7 
2 2 4 6 
结尾无空行

解题代码

struct ListNode *readlist(){struct ListNode * head,*t, *tail;head = NULL;int n;scanf("%d", &n);while(n != -1){t = (struct ListNode *) malloc(sizeof(struct ListNode));t->data = n;t->next = NULL;if (head == NULL){head = t;tail = t;} else {tail->next = t;tail = t;}scanf("%d", &n);}return head;
}
struct ListNode *getodd( struct ListNode **L ){struct ListNode *p = *L, *even = NULL, *odd = NULL, * ret = NULL;*L = NULL;while(p){if (p->data % 2 == 0){if (even == NULL){even = p;*L = p;} else {even->next = p;even = p;}} else {if (odd == NULL){odd = p;ret = odd;} else {odd->next = p;odd = p;}}p = p->next;}if (odd != NULL) odd->next = NULL;if (even != NULL) even->next = NULL;return ret;
}

在这里插入图片描述

PTA(浙大版《C语言程序设计(第3版)》题目集)习题11-8 单链表结点删除 (20 分)

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除。链表结点定义如下:

struct ListNode {int data;ListNode *next;
};

函数接口定义:

struct ListNode *readlist();
struct ListNode *deletem( struct ListNode *L, int m );

函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。

函数deletem将单链表L中所有存储了m的结点删除。返回指向结果链表头结点的指针。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>struct ListNode {int data;struct ListNode *next;
};struct ListNode *readlist();
struct ListNode *deletem( struct ListNode *L, int m );
void printlist( struct ListNode *L )
{struct ListNode *p = L;while (p) {printf("%d ", p->data);p = p->next;}printf("\n");
}int main()
{int m;struct ListNode *L = readlist();scanf("%d", &m);L = deletem(L, m);printlist(L);return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

10 11 10 12 10 -1
10结尾无空行

输出样例:

11 12 
结尾无空行

解题代码

struct ListNode *readlist(){struct ListNode * head,*t,*tail;head = tail = NULL;int n;scanf("%d", &n);while (n != -1){t = (struct ListNode *) malloc(sizeof(struct ListNode));t->data = n;t->next = NULL;if (head == NULL){head = t;tail = t;} else {tail->next = t;tail = t;}scanf("%d", &n);}return head;
}
struct ListNode *deletem( struct ListNode *L, int m ){struct ListNode *p,*q,*ret;p = L;q = ret = NULL;while(p){if (p->data != m){if (ret == NULL){ret = p;q = p;} else {q->next = p;q = p;}}p = p->next;}if (q != NULL) q->next = NULL;return ret;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/628108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS常用插件 Swiper插件 实现轮播图

Swiper介绍 Swiper 是一款免费以及轻量级的移动设备触控滑块的js框架 中文官网地址: https://www.swiper.com.cn/ 点击查看Swiper演示&#xff0c;里面的功能和样式十分丰富&#xff0c;根据自己的需求选择 中文教程中详细介绍了如何使用Swiper API文档中介绍了各个模块以及参…

如何画出优秀的系统架构图-架构师系列-学习总结

--- 后之视今&#xff0c;亦犹今之视昔&#xff01; 目录 早期系统架构图 早期系统架构视图 41视图解读 41架构视图缺点 现代系统架构图的指导实践 业务架构 例子 使用场景 画图技巧 客户端架构、前端架构 例子 使用场景 画图技巧 系统架构 例子 定义 使用场…

C++面试宝典第19题:最长公共前缀

题目 编写一个函数来查找字符串数组中的最长公共前缀,如果不存在公共前缀,返回空字符串""。说明:所有输入只包含小写字母a-z。 示例1: 输入: ["flower", "flow", "flight"]输出: "fl" 示例2: 输入: ["dog",…

微信小程序快速入门03

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、生命周期生…

手写springBoot启动器

提示&#xff1a;springboot原理&#xff0c;手写springboot启动器&#xff0c;手写模拟SpringBoot启动过程、手写模拟SpringBoot自动配置功能 文章目录 前言一、本文内容1、手写模拟SpringBoot启动过程2、手写模拟SpringBoot自动配置功能 二、项目总体介绍三、代码实现(手写模…

python的库或函数不会用:使用help函数查看函数

help(time) # 查看time这个库 FUNCTIONS #函数&#xff1b;都可以调用asctime(...)asctime([tuple]) -> string #调用这个函数的参数需要一个元组&#xff08;tuple&#xff09;&#xff0c;->&#xff1a;代表返回值是string类型的#下面是简单的介绍Convert a time tup…

k8s的存储卷、数据卷---动态PV创建

当发布PVC之后可以生成PV&#xff0c;还可以在动态服务器上直接生成挂载目录。PVC直接绑定和使用PV。 动态PV需要两个组件 存储卷插件&#xff1a;Provisioner(存储分配器)根据定义的属性创建PV StorageClass&#xff1a;定义属性 存储卷插件 存储卷插件&#xff1a;k8s本…

ElasticSearch降本增效常见的方法 | 京东云技术团队

Elasticsearch在db_ranking 的排名不断上升&#xff0c;其在存储领域已经蔚然成风且占有非常重要的地位。 随着Elasticsearch越来越受欢迎&#xff0c;企业花费在ES建设上的成本自然也不少。那如何减少ES的成本呢&#xff1f;今天我们就特地来聊聊ES降本增效的常见方法&#x…

服务器和电脑有啥区别?

服务器可以说是“高配的电脑”&#xff0c;两者都有CPU、硬盘、电源等基础硬件组成&#xff0c;但服务器和电脑也是有一定区别的&#xff0c;让小编带大家了解一下吧&#xff01; #秋天生活图鉴# 1、稳定性需求不同&#xff1a;服务器是全年无休&#xff0c;需要高稳定性&…

世微大功率 内置2.5A宽电压降压恒流 LED电源驱动车灯IC AP5193

AP5193是一款PWM工作模式,高效率、外围简单、 内置功率MOS管&#xff0c;适用于4.5-100V输入的高精度 降压LED恒流驱动芯片。电流2.5A。AP5193可实现线性调光和PWM调光&#xff0c;线性调光 脚有效电压范围0.55-2.6V. AP5193 工作频率可以通过RT 外部电阻编程来设定&#xff0c…

快乐学Python,数据分析之使用爬虫获取网页内容

在上一篇文章中&#xff0c;我们了解了爬虫的原理以及要实现爬虫的三个主要步骤&#xff1a;下载网页-分析网页-保存数据。 下面&#xff0c;我们就来看一下&#xff1a;如何使用Python下载网页。 1、网页是什么&#xff1f; 浏览器画网页的流程&#xff0c;是浏览器将用户输…

Python代码调试的几种方法总结

使用 pdb 进行调试 pdb 是 python 自带的一个包&#xff0c;为 python 程序提供了一种交互的源代码调试功能&#xff0c;主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。pdb 提供了一些常用的调试命令&#xff0c;详情见表 1。…

互联网加竞赛 基于机器视觉的12306验证码识别

文章目录 0 简介1 数据收集2 识别过程3 网络构建4 数据读取5 模型训练6 加入Dropout层7 数据增强8 迁移学习9 结果9 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器视觉的12306验证码识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向…

6.1810: Operating System Engineering 2023 <Lab7 lock: Parallelism/locking>

一、本节任务 二、要点 2.1 文件系统&#xff08;file system&#xff09; xv6 文件系统软件层次如下&#xff1a; 通过路径树我们可以找到相应的文件&#xff1a; fd&#xff08;文件描述符&#xff09;是进程用来标识其打开的文件的手段&#xff0c;每个进程有自己的文件…

程序员有哪些接s单的渠道?

这题我会&#xff01;程序员接单的渠道那可太多了&#xff0c;想要接到合适的单子&#xff0c;筛选一个合适的平台很重要。如果你也在寻找一个合适的接单渠道&#xff0c;可以参考以下这些方向。 首先&#xff0c;程序员要对接单有一个基本的概念&#xff1a;接单渠道可以先粗…

Elasticsearch_8.11.4_kibana_8.11.4_metricbeat_8.11.4安装及本地部署_ELK日志部署

文章目录 Elasticsearch_8.11.4_kibana_8.11.4_metricbeat_8.11.4安装及本地部署_ELK日志部署分布式引擎Elasticsearch_8.11.4安装及本地部署系统环境要求1 Windows 安装 Elasticsearch下载完成后进行解压,进入 bin 目录,找到elasticsearch.bat脚本文件执行一键启动.启动都选允…

51单片机HC-SR04超声波测距lcd1602显示(程序+ad硬件设计+文档说明)

本帖主控使用STC89C52单片机&#xff0c;超声波测距采用HC-SR04模块&#xff0c;包含ad硬件设计和文档。 测距原理 超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波&#xff0c;从而测出发射和接收回波的时间差t,然后求出距SCt/2,式中的C为超声波波速。由于超声…

环保时代下的品牌全球化之路:绿色供应链的战略洞察

随着全球化的深入和消费者对可持续发展和环保的日益关注&#xff0c;品牌出海不仅需要考虑市场扩张和竞争力提升&#xff0c;还需要认真思考如何在全球供应链中构建绿色可持续的供应链体系。本文Nox聚星将和大家探讨品牌出海的绿色供应链建设&#xff0c;分析可持续发展和环保要…

机器学习扩散模型简介

一、说明 扩散模型的迅速崛起是过去几年机器学习领域最大的发展之一。在这本易于理解的指南中了解您需要了解的有关扩散模型的所有信息。 扩散模型是生成模型&#xff0c;在过去几年中越来越受欢迎&#xff0c;这是有充分理由的。仅在 2020 年代发布的几篇开创性论文就向世界…

MySQL系列之数据导入导出

前言 大数据与云计算作为当今时代&#xff0c;数据要素发展的“动力引擎”&#xff0c;已经走进了社会生活的方方方面。而背后承载的云服务或数据服务的高效运转&#xff0c;起了决定作用。 作为数据存储的重要工具&#xff0c;数据库的品类和特性也日新月异。从树型、网络型…