天津大学25261程序设计原理期末试题回忆程序设计原理课程同步题解&课件&复习资料
提示:
天津大学智能与计算学部2025级2025-2026学年第一学期程序设计原理课程(课程代码2240099)
个人整理仅供参考,很可能存在问题。如发现错误请联系我,感谢。
纯英文试题,不会有阅读障碍,生僻的名词会有解释。身边朋友有人买了英语词典,我个人没有买,也没有因此遇到问题
有些具体的题目内容记不清了,但考察的知识点会写出来。这个基本是准的。大题完整度会更高一些。分AB卷
代码编写题不存在标准答案,题目本身的要求也很模糊(比如并没有提及运行时间小于1000ms等要求),难免存在不严谨的问题
老师上课发的练习题考察内容与试卷重合度很大,建议至少练完这一套。复习提纲ppt上的知识点也很全。课程分数构成:平时分30%+期末70%
一、单项选择题 12道,12*2=24分 序号不代表试题顺序
1.编写并运行c++程序的过程 (Program running process) Creating, Compiling, linking, and Running
2.会产生报错的语句: char ch = "A";
3.正确的变量命名 (1).变量名只能由字母数字下划线组成 下划线是_,如_op是合法的变量名。下划线不是连字符 (2).数字不能在首位 (3).不能是C++关键字(如while、if、double……)
4.程序控制结构 顺序、分支、循环
5.switch语法 语句阅读,break、default
6.文件读写 fstream
二、写出程序运行结果 6道题共38分 1.static相关语法 2.函数运行结果、不同类型函数的返回值、指针 3.对字符串/字符数组进行操作 字符串反向
4.类:基类和派生类,构造函数和析构函数
三、代码补全 5个填空,5*2=10分 计算一年过去了多少天的问题,建立了一个类存放年/月/日,需要补充判断条件。 需要注意的地方有:闰年2月有29天,要额外判断是否为闰年(年份能被4整除且不能被100整除,或能被400整除)
题目:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #include <iostream> using namespace std;class Date { public : int year; int month; int day; }; bool IsLeapYear (int year) { return (year % 4 == 0 && year % 100 != 0 ) || __________1__________; } int DaysOfTheYear (Date date) { int daysInMonths[] = {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 }; if (IsLeapYear (date.year)) { __________2__________ } int totalDays = 0 ; for (int i = 0 ; i < date.month - 1 ; i++) { __________3__________ } __________4__________ return totalDays; } int main () { Date date; cin >> date.year >> date.month >> date.day; cout << __________5__________ << endl; return 0 ; }
样例输入:
样例输出:
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #include <iostream> using namespace std;class Date { public : int year; int month; int day; }; bool IsLeapYear (int year) { return (year % 4 == 0 && year % 100 != 0 ) || (year % 400 == 0 ); } int DaysOfTheYear (Date date) { int daysInMonths[] = {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 }; if (IsLeapYear (date.year)) { daysInMonths[1 ] = 29 ; } int totalDays = 0 ; for (int i = 0 ; i < date.month - 1 ; i++) { totalDays += daysInMonths[i]; } totalDays += date.day; return totalDays; } int main () { Date date; cin >> date.year >> date.month >> date.day; cout << DaysOfTheYear (date) << endl; return 0 ; }
四、编写程序 3道题28分(似乎是8+10+10) 1.计算数列前n项和 8分 数列为:1/2, 2/3, 3/5, 5/8, 8/13, 13/25…… 数据范围:n<30 输入输出: 输入一个整数n 输出数列前n项的和,保留小数点后五位
解题思路: 分式的分子分母是斐波那契数列中的项,数据范围很小,可以直接生成数列保存到数组里。输出保留5位小数,要使用<iomanip>头文件。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include <iostream> #include <iomanip> using namespace std;double f[35 ];void febonacci () { f[0 ] = 1 ; f[1 ] = 1 ; for (int i = 2 ; i <= 32 ; i++) { f[i] = f[i - 1 ] + f[i - 2 ]; } } int main () { int n; cin >> n; febonacci (); double ans = 0 ; for (int i = 1 ; i <= n; i++) { ans += f[i] / f[i + 1 ]; } cout << fixed << setprecision (5 ) << ans << endl; return 0 ; }
2.判断回文质数 10分 输出100~9999之间的全部回文质数(回文数,如121、9999;质数,即只能被自己和1整除)
要求:判断回文数、判断质数写在如下两个函数里
1 2 bool isPrime () ;bool isPalindrome () ;
无输入,输出格式为一行一个数字(英语题干容易遗漏题目要求,这点第一次没看到)
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include <iostream> using namespace std;bool isPrime (int n) { if (n <= 1 ) return false ; for (int i = 2 ; i * i <= n; i++) { if (n % i == 0 ) return false ; } return true ; } bool isPalindrome (int n) { int original = n, reversed = 0 ; while (n > 0 ) { reversed = reversed * 10 + n % 10 ; n /= 10 ; } return original == reversed; } int main () { for (int i = 100 ; i <= 9999 ; i++) { if (isPrime (i) && isPalindrome (i)) { cout << i << endl; } } return 0 ; }
3.输出成绩排名 10分 给定整数n和n组数据,每组数据给出学号、成绩、姓名 给学生成绩排名并按顺序输出,成绩相同的情况下按任意顺序输出均可 学生信息应储存在类中。 数据范围忘了,总之很小,直接开数组即可。 学号似乎没有超int范围,但是long long总没错,数据量小不存在空间问题
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include <iostream> #include <algorithm> #include <string> using namespace std;class Student { public : long long id; string name; int grade; }; bool cmp (Student a, Student b) { return a.grade > b.grade; } int main () { int n; cin >> n; Student stu[107 ]; for (int i = 0 ; i < n; i++) { cin >> stu[i].id >> stu[i].name >> stu[i].grade; } sort (stu, stu + n, cmp); int rank = 1 ; cout << stu[0 ].id << " " << stu[0 ].name << " " << stu[0 ].grade << " " << rank << endl; for (int i = 1 ; i < n; i++) { if (stu[i].grade != stu[i - 1 ].grade) { rank = i + 1 ; } cout << stu[i].id << " " << stu[i].name << " " << stu[i].grade << " " << rank << endl; } return 0 ; }