25261程序设计原理

天津大学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
2000 12 31  

样例输出:

1
366

完整代码

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项的和,保留小数点后五位

1
2
样例输入:
20
1
2
样例输出:
12.27829

解题思路:
分式的分子分母是斐波那契数列中的项,数据范围很小,可以直接生成数列保存到数组里。输出保留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;
}
Author

Patricia-Chi

Posted on

2026-01-22

Updated on

2026-01-22

Licensed under