吉林大学《程序设计基础》历年试题及答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
·
图 2 单链表 例如:若单链表中存储的整数信息依次为 1、5、5、0、5、6、0、0、5、1,如果 x 为 5,则 得到的单链表中相应信息依次为 1、0、6、0、0、1。
张三 男(true) 83 李四 女(false) 76 … 赵九 男(true) 97
图 1 管理学生信息的结构体数组 例如:一个学生的信息为 ZhangSan、true、83,另一个学生的信息为 LiSi、false、76。 五、[20 分] 定义一个单链表(每个结点包含 2 个字段:整数信息、后继指针) ,如下图所示。编 写函数,删除该单链表中所含整数信息等于整数 x 的多个重复结点。 1 5 5 … 1
1005 Zhang San Prof CCST
1420 Li Si Lect CS
5862 Wang Wuchang Assi CCST ...
7582 Zhao Tianyi Prof CS ·
图 1 管理教师信息的单链表
第 1 页 共 1 页
2011-2012 学年 第 1 学期
Biblioteka Baidu
2011 级《高级语言程序设计》考试试题(A 卷)
张三 李四 女 男(true) (false) 50 37 48 男(true) 男(true) 王五 赵九
…
29
·
图 2 管理教师信息的单链表
第 1 页 共 1 页
2011-2012 学年 第 1 学期
2008 级《高级语言程序设计》重修考试试题(B 卷) 答案及评分标准
考试时间:2012 年 4 月 一、满分 20 分。 int fac(int n)//阶乘函数1:循环形式(10分) { int i,r=1; for(i=1;i<=n;i++) r=r*i; return r; } int fac(int n)//阶乘函数2:递归形式(10分) { if(n==0) return 1; return n*fac(n-1); } //利用阶乘函数的计算函数(10分) float f(int n) { float f=0; for(int i=0;i<=n;i++) { f=f+i*1.0/((i+1)*fac(i+2)); } return f; } 参考要点: 阶乘函数 (10分) ; 累加计算功能 (10 分) 。 二、满分20分。 bool exist(int a[],int n) { int sum=0; for(int i=0;i<n-1;i++) { sum=sum+a[i];//累加到第i项 if(sum==a[i+1]) //判断相等 return true; } return false; } 参考要点:累加函数(10分) ;判定过程(10 分) 。 三、满分20分。 int f(int n) { if(n<10)//递归出口 return n; return n%10+f(n/10);//递归调用 } 参考要点: 递归出口 (10分) ; 递归过程 (10分) 。
五、满分20分。 //头文件包含命令(2分) #include<stdio.h> struct node//链表定义(5分) { char name[10]; bool sex; int age; struct node * next; }; void save(struct node * h) { //文件定义(2分)和打开(4分) FILE* file; if((file=fopen("output.txt","w"))==NU LL) printf("File Open Error!"); //文件存储过程(5分) while(h!=NULL) { if(h->sex==false) { fprintf(file,"%10s",st[i].name); fprintf(file,"%5d\n",st[i].age); } h=h->next; } //文件关闭(2分) fclose(file); } 参考要点:结构体定义(5分) ;stdio.h头文件 包含命令 (2分) ; 文件定义 (2分) 、 存储 (5分) 、 打开(4分)和关闭(2分) 。
二、[20 分] 编写程序,由键盘输入一个字符串(仅包括数字字符、英文字符和空格) ,把该字符 串中英文字符和空格过滤掉,提取所有整数,并将得到的整数序列输出到文件 int.txt 中。例 如:输入字符串为:12A34□567Bc89D,则得到的整数序列为:12□34□567□89(□表示 空格) 三、[20 分] 编写程序,打印一个 n 行 n 列矩阵中所有满足下面条件的元素 a ij : 1) a ij 是第 i 行中所有元素的最大值; 2) 如果将第 j 列中所有元素 a 1j, a 2j, ……, a nj 按照从小到大的顺序排序,a ij 为第 j/2 个元素(最小 元素为第 0 个元素,j/2 为整数除法) 。 四、 [20 分] 每个学生的信息卡片包括学号、姓名和性别三项,编写程序,由键盘依次输入 n 个 学生的信息,创建一个用于管理学生信息的单链表,如下图所示(必须说明该单链表中每个 结点的数据类型定义) ;并在该单链表中添加一个给定结点 x。
张三 男(true) 50 李四 女(false) 37 … 赵九 男(true) 29
图 1 管理教师信息的结构体数组 例如:一个教师的信息为 Zhangsan、true、50,另一个教师的信息为 Lisi、false、37。 五、[20 分] 设有一个保存教师信息的单链表(每个结点包含 4 个字段:姓名、性别、年龄、后 继指针) ,如下图所示。构造该链表中一节的数据类型声明;编写函数,在给定链表上查 找所有女教师的信息,并存储到指定文件 output.txt 中。
考试时间:2012 年 01 月 班级 学号 姓名
请将答案写在答题纸上,写清题号,不必抄题,字迹工整、清晰; 请在答题纸和试题纸上都写上你的班级、学号和姓名,交卷时请将试题纸、答题纸和草纸一并交上来; 每个题目必须添加必要的注释,程序命名和书写尽可能规范。 一、[20 分] 编写函数,判定正整数 m 和 n(均至少为 2)是否满足:数 m 为数 n 可分解的最小 质因数(数 n 可分解的最小质因数为能整除 n 的最小质数) 。 //提示:判定 m 为质数且 m 是 n 的最小因数。 二、[20 分] 编写函数,对给定的整型数组 a 的前 n 个元素排序,使得所有正整数均出现在负整 数和 0 之前。 //提示:排序结果中,正整数之间的出现顺序不限制,负整数和 0 之间的出现顺序不限制。 例如:原数组为-1、4、-3、0、2、1、-9、7,则排序后可以为 4、2、1、7、0、-1、-3、-9。 三、[20 分] 编写递归函数,实现按照如下公式计算的功能。 //提示:如果独立编写阶乘运算函数,可以不考虑存储溢出,默认结果类型为整型。 f(n)=0/(1*2!)+1/(2*3!)+2/(3*4!)+3/(4*5!)+…+n/((n+1)*(n+2)!),其中:n 为自然数。 四、[20 分] 定义一个表示学生的结构体(包含 3 个字段:姓名、性别、成绩) ,编写函数,将下 图所示的结构体数组 s 中的前 n 个学生的信息,存储到当前目录下的 output.txt 文件中。 //提示:性别可以定义为 bool、int、enum 等类型均可,存储信息的具体形式不限制。
2011-2012 学年 第 1 学期
2008 级《高级语言程序设计》重修考试试题(B 卷)
班级 学号 考试时间:2012 年 04 月 姓名
请将答案写在答题纸上,写清题号,不必抄题,字迹工整、清晰; 答题纸和试题纸上都写上班级、学号和姓名,交卷时将试题纸、答题纸和草纸一并交上来。 每个题目不必给出对应的 PAD 图,但要添加必要的注释,程序命名和书写要规范。 一、[20 分] 编写函数,实现按照如下公式计算的功能。 f(n)=0/(1*2!)+1/(2*3!)+2/(3*4!)+3/(4*5!)+…+n/((n+1)*(n+2)!),其中 n 为自然数。 二、[20 分] 编写 bool 函数,判断给定的整数数组 a[n]中是否存在元素 a[i] (0<i<n),等于其前 边的所有元素之和,即 a[i]=a[0]+a[1]+…+a[i-1]。 三、[20 分] 编写一个递归函数,计算组成给定正整数 n 的所有数字之和。 例如:输入参数为 1035,则返回结果应该为 9(通过 1+0+3+5=9 得到) 。 四、[20 分] 构造一个表示教师的结构体(包含 3 个字段:姓名、性别、年龄) ,编写函数,读 入 M 个教师的信息,存入一个结构体数组中,如下图所示。
考试时间:2011 年 01 月 班级 学号 姓名
请将答案写在答题纸上,写清题号,不必抄题,字迹工整、清晰; 请在答题纸和试题纸上都写上你的班级、 学号和姓名, 交卷时请将试题纸、 答题纸和草纸一并交上来。 一、[20 分] 编写程序,根据如下公式计算 X 的值(精确到 1e-5)。 X= 1 2 1 4 1 6 1 8 1 2n ∙ + ∙ + ∙ + ∙ + ⋯+ ∙ +⋯ 1 1 3 3 5 5 7 7 2n − 1 2n − 1
05 张三 男
03 李四 女
33 王五 男 ...
07 赵九 男 ·
图 1 管理学生信息的单链表 五、[20 分] 编写程序, 在上述建立的单链表中删除所有学号为 z 的结点 (学号为 z 的结点可能有 多个) 。
第 1 页 共 1 页
2010-2011 学年 第 1 学期
2010 级《高级语言程序设计》考试试题(B)
第 2 页 共 2 页
2010-2011 学年 第 1 学期
2010 级《高级语言程序设计》考试试题(A)
考试时间:2011 年 01 月 班级 学号 姓名
请将答案写在答题纸上,写清题号,不必抄题,字迹工整、清晰; 请在答题纸和试题纸上都写上你的班级、 学号和姓名, 交卷时请将试题纸、 答题纸和草纸一并交上来。 一、[20 分] 编写程序,根据如下公式计算圆周率 π 的值(精确到 1e-5)。 π 2 2 4 4 6 6 8 8 2n 2n = � ∙ �∙ � ∙ �∙ � ∙ �∙ � ∙ �∙ ⋯∙ � ∙ �∙⋯ 2 1 3 3 5 5 7 7 9 2n − 1 2n + 1
第 1 页 共 2 页
四、满分20分。 #include <stdio.h> struct Teacher //结构体定义(5分) { char name[10]; bool sex; int age; }; void save(struct Teacher st[], int M) { int i; for(i=0;i<M;i++) { scanf("%s",&st[i].name); //scanf("%s",st[i].name);也可 scanf("%d",&st[i].sex); scanf("%d",&st[i].age); } } 参考要点:结构体定义(5分) ;stdio.h头文件 包含命令(5分) ;存储函数(10分) 。
二、[20 分] 编写程序,由键盘输入一个字符串(仅包括数字字符、英文字符和空格) ,把该字符 串数字字符和空格过滤掉, 提取所有字符, 并将得到的字符序列逆序输出到文件 char.txt 中。 例如:输入字符串为:12A34□567Bc89D(□表示空格) ,则输出到文件中的字符序列为: DcBA 三、[20 分] 编写程序,输出一个 n 行 n 列矩阵中所有鞍点 a ij ,即元素 a ij 满足下列条件: 1) a ij 是第 i 行中所有元素的最小值; 2) a ij 是第 j 列中所有元素的最大值; 四、[20 分] 编写程序,将一个单链表转换为一个反向的单链表。 五、[20 分] 每个教师的信息卡片包括教工号、姓名、职称和学院名称三项,编写程序,由键盘 依次输入 n 个教师的信息,创建一个用于管理教师信息的单链表,如下图所示(必须说明该 单链表中每个结点的数据类型定义) ;并保证添加完所有信息后,该单链表按照教工号从小 到大排序。
图 2 单链表 例如:若单链表中存储的整数信息依次为 1、5、5、0、5、6、0、0、5、1,如果 x 为 5,则 得到的单链表中相应信息依次为 1、0、6、0、0、1。
张三 男(true) 83 李四 女(false) 76 … 赵九 男(true) 97
图 1 管理学生信息的结构体数组 例如:一个学生的信息为 ZhangSan、true、83,另一个学生的信息为 LiSi、false、76。 五、[20 分] 定义一个单链表(每个结点包含 2 个字段:整数信息、后继指针) ,如下图所示。编 写函数,删除该单链表中所含整数信息等于整数 x 的多个重复结点。 1 5 5 … 1
1005 Zhang San Prof CCST
1420 Li Si Lect CS
5862 Wang Wuchang Assi CCST ...
7582 Zhao Tianyi Prof CS ·
图 1 管理教师信息的单链表
第 1 页 共 1 页
2011-2012 学年 第 1 学期
Biblioteka Baidu
2011 级《高级语言程序设计》考试试题(A 卷)
张三 李四 女 男(true) (false) 50 37 48 男(true) 男(true) 王五 赵九
…
29
·
图 2 管理教师信息的单链表
第 1 页 共 1 页
2011-2012 学年 第 1 学期
2008 级《高级语言程序设计》重修考试试题(B 卷) 答案及评分标准
考试时间:2012 年 4 月 一、满分 20 分。 int fac(int n)//阶乘函数1:循环形式(10分) { int i,r=1; for(i=1;i<=n;i++) r=r*i; return r; } int fac(int n)//阶乘函数2:递归形式(10分) { if(n==0) return 1; return n*fac(n-1); } //利用阶乘函数的计算函数(10分) float f(int n) { float f=0; for(int i=0;i<=n;i++) { f=f+i*1.0/((i+1)*fac(i+2)); } return f; } 参考要点: 阶乘函数 (10分) ; 累加计算功能 (10 分) 。 二、满分20分。 bool exist(int a[],int n) { int sum=0; for(int i=0;i<n-1;i++) { sum=sum+a[i];//累加到第i项 if(sum==a[i+1]) //判断相等 return true; } return false; } 参考要点:累加函数(10分) ;判定过程(10 分) 。 三、满分20分。 int f(int n) { if(n<10)//递归出口 return n; return n%10+f(n/10);//递归调用 } 参考要点: 递归出口 (10分) ; 递归过程 (10分) 。
五、满分20分。 //头文件包含命令(2分) #include<stdio.h> struct node//链表定义(5分) { char name[10]; bool sex; int age; struct node * next; }; void save(struct node * h) { //文件定义(2分)和打开(4分) FILE* file; if((file=fopen("output.txt","w"))==NU LL) printf("File Open Error!"); //文件存储过程(5分) while(h!=NULL) { if(h->sex==false) { fprintf(file,"%10s",st[i].name); fprintf(file,"%5d\n",st[i].age); } h=h->next; } //文件关闭(2分) fclose(file); } 参考要点:结构体定义(5分) ;stdio.h头文件 包含命令 (2分) ; 文件定义 (2分) 、 存储 (5分) 、 打开(4分)和关闭(2分) 。
二、[20 分] 编写程序,由键盘输入一个字符串(仅包括数字字符、英文字符和空格) ,把该字符 串中英文字符和空格过滤掉,提取所有整数,并将得到的整数序列输出到文件 int.txt 中。例 如:输入字符串为:12A34□567Bc89D,则得到的整数序列为:12□34□567□89(□表示 空格) 三、[20 分] 编写程序,打印一个 n 行 n 列矩阵中所有满足下面条件的元素 a ij : 1) a ij 是第 i 行中所有元素的最大值; 2) 如果将第 j 列中所有元素 a 1j, a 2j, ……, a nj 按照从小到大的顺序排序,a ij 为第 j/2 个元素(最小 元素为第 0 个元素,j/2 为整数除法) 。 四、 [20 分] 每个学生的信息卡片包括学号、姓名和性别三项,编写程序,由键盘依次输入 n 个 学生的信息,创建一个用于管理学生信息的单链表,如下图所示(必须说明该单链表中每个 结点的数据类型定义) ;并在该单链表中添加一个给定结点 x。
张三 男(true) 50 李四 女(false) 37 … 赵九 男(true) 29
图 1 管理教师信息的结构体数组 例如:一个教师的信息为 Zhangsan、true、50,另一个教师的信息为 Lisi、false、37。 五、[20 分] 设有一个保存教师信息的单链表(每个结点包含 4 个字段:姓名、性别、年龄、后 继指针) ,如下图所示。构造该链表中一节的数据类型声明;编写函数,在给定链表上查 找所有女教师的信息,并存储到指定文件 output.txt 中。
考试时间:2012 年 01 月 班级 学号 姓名
请将答案写在答题纸上,写清题号,不必抄题,字迹工整、清晰; 请在答题纸和试题纸上都写上你的班级、学号和姓名,交卷时请将试题纸、答题纸和草纸一并交上来; 每个题目必须添加必要的注释,程序命名和书写尽可能规范。 一、[20 分] 编写函数,判定正整数 m 和 n(均至少为 2)是否满足:数 m 为数 n 可分解的最小 质因数(数 n 可分解的最小质因数为能整除 n 的最小质数) 。 //提示:判定 m 为质数且 m 是 n 的最小因数。 二、[20 分] 编写函数,对给定的整型数组 a 的前 n 个元素排序,使得所有正整数均出现在负整 数和 0 之前。 //提示:排序结果中,正整数之间的出现顺序不限制,负整数和 0 之间的出现顺序不限制。 例如:原数组为-1、4、-3、0、2、1、-9、7,则排序后可以为 4、2、1、7、0、-1、-3、-9。 三、[20 分] 编写递归函数,实现按照如下公式计算的功能。 //提示:如果独立编写阶乘运算函数,可以不考虑存储溢出,默认结果类型为整型。 f(n)=0/(1*2!)+1/(2*3!)+2/(3*4!)+3/(4*5!)+…+n/((n+1)*(n+2)!),其中:n 为自然数。 四、[20 分] 定义一个表示学生的结构体(包含 3 个字段:姓名、性别、成绩) ,编写函数,将下 图所示的结构体数组 s 中的前 n 个学生的信息,存储到当前目录下的 output.txt 文件中。 //提示:性别可以定义为 bool、int、enum 等类型均可,存储信息的具体形式不限制。
2011-2012 学年 第 1 学期
2008 级《高级语言程序设计》重修考试试题(B 卷)
班级 学号 考试时间:2012 年 04 月 姓名
请将答案写在答题纸上,写清题号,不必抄题,字迹工整、清晰; 答题纸和试题纸上都写上班级、学号和姓名,交卷时将试题纸、答题纸和草纸一并交上来。 每个题目不必给出对应的 PAD 图,但要添加必要的注释,程序命名和书写要规范。 一、[20 分] 编写函数,实现按照如下公式计算的功能。 f(n)=0/(1*2!)+1/(2*3!)+2/(3*4!)+3/(4*5!)+…+n/((n+1)*(n+2)!),其中 n 为自然数。 二、[20 分] 编写 bool 函数,判断给定的整数数组 a[n]中是否存在元素 a[i] (0<i<n),等于其前 边的所有元素之和,即 a[i]=a[0]+a[1]+…+a[i-1]。 三、[20 分] 编写一个递归函数,计算组成给定正整数 n 的所有数字之和。 例如:输入参数为 1035,则返回结果应该为 9(通过 1+0+3+5=9 得到) 。 四、[20 分] 构造一个表示教师的结构体(包含 3 个字段:姓名、性别、年龄) ,编写函数,读 入 M 个教师的信息,存入一个结构体数组中,如下图所示。
考试时间:2011 年 01 月 班级 学号 姓名
请将答案写在答题纸上,写清题号,不必抄题,字迹工整、清晰; 请在答题纸和试题纸上都写上你的班级、 学号和姓名, 交卷时请将试题纸、 答题纸和草纸一并交上来。 一、[20 分] 编写程序,根据如下公式计算 X 的值(精确到 1e-5)。 X= 1 2 1 4 1 6 1 8 1 2n ∙ + ∙ + ∙ + ∙ + ⋯+ ∙ +⋯ 1 1 3 3 5 5 7 7 2n − 1 2n − 1
05 张三 男
03 李四 女
33 王五 男 ...
07 赵九 男 ·
图 1 管理学生信息的单链表 五、[20 分] 编写程序, 在上述建立的单链表中删除所有学号为 z 的结点 (学号为 z 的结点可能有 多个) 。
第 1 页 共 1 页
2010-2011 学年 第 1 学期
2010 级《高级语言程序设计》考试试题(B)
第 2 页 共 2 页
2010-2011 学年 第 1 学期
2010 级《高级语言程序设计》考试试题(A)
考试时间:2011 年 01 月 班级 学号 姓名
请将答案写在答题纸上,写清题号,不必抄题,字迹工整、清晰; 请在答题纸和试题纸上都写上你的班级、 学号和姓名, 交卷时请将试题纸、 答题纸和草纸一并交上来。 一、[20 分] 编写程序,根据如下公式计算圆周率 π 的值(精确到 1e-5)。 π 2 2 4 4 6 6 8 8 2n 2n = � ∙ �∙ � ∙ �∙ � ∙ �∙ � ∙ �∙ ⋯∙ � ∙ �∙⋯ 2 1 3 3 5 5 7 7 9 2n − 1 2n + 1
第 1 页 共 2 页
四、满分20分。 #include <stdio.h> struct Teacher //结构体定义(5分) { char name[10]; bool sex; int age; }; void save(struct Teacher st[], int M) { int i; for(i=0;i<M;i++) { scanf("%s",&st[i].name); //scanf("%s",st[i].name);也可 scanf("%d",&st[i].sex); scanf("%d",&st[i].age); } } 参考要点:结构体定义(5分) ;stdio.h头文件 包含命令(5分) ;存储函数(10分) 。
二、[20 分] 编写程序,由键盘输入一个字符串(仅包括数字字符、英文字符和空格) ,把该字符 串数字字符和空格过滤掉, 提取所有字符, 并将得到的字符序列逆序输出到文件 char.txt 中。 例如:输入字符串为:12A34□567Bc89D(□表示空格) ,则输出到文件中的字符序列为: DcBA 三、[20 分] 编写程序,输出一个 n 行 n 列矩阵中所有鞍点 a ij ,即元素 a ij 满足下列条件: 1) a ij 是第 i 行中所有元素的最小值; 2) a ij 是第 j 列中所有元素的最大值; 四、[20 分] 编写程序,将一个单链表转换为一个反向的单链表。 五、[20 分] 每个教师的信息卡片包括教工号、姓名、职称和学院名称三项,编写程序,由键盘 依次输入 n 个教师的信息,创建一个用于管理教师信息的单链表,如下图所示(必须说明该 单链表中每个结点的数据类型定义) ;并保证添加完所有信息后,该单链表按照教工号从小 到大排序。