南京师范大学考研C语言程序设计试题历年真题(2003-2011)
目录
2011年南京师范大学考研C语言程序设计(含数据结构)真题 (2)
2010年南京师范大学考研C语言程序设计(含数据结构)真题 (3)
2009年南京师范大学考研C语言程序设计(含数据结构)真题 (18)
2008年南京师范大学考研C语言程序设计(含数据结构)真题 (29)
2007年南京师范大学考研C语言程序设计(含数据结构)真题 (42)
2006年南京师范大学考研C语言程序设计(含数据结构)真题 (52)
2005年南京师范大学考研C语言程序设计(含数据结构)真题 (61)
2004年南京师范大学考研C语言程序设计(含数据结构)真题 (69)
2003年南京师范大学考研C语言程序设计(含数据结构)真题 (76)
2011年南京师范大学考研C语言程序设计(含数据结构)真题1、编写一个程序,求用户输入的开始时间到终止时间之间相距的天数。(本题15分)
2、编写一个程序,利用递归法实现将用户输入的字符串逆序排列。(本题15分)
3、出所有200以内(含200)满足I,I+4,I+10都是素数的整数I(I+10也在200以内)的个数以及这些数之和sum。并把所有这些数、个数和sum按文本文件输出到文件out.dat中。(本题20分)
4、编写程序,判断两线段是否相交。(本题20分)
5、假设以带头节点的循环链表表示队列,并只设一个指针指向对尾元素节点(不设头指针),编写相应的队列初始化、入队列和出队列算法。(本题20分)
6、假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将表A和表B归并成一个按元素值非递减有序(允许值相同)排列的线性表C,并要求利用原表(即表A和表B)的结点空间存放表。(本题20分)
7、给定一棵树用二叉链表表示的二叉树,其中的指针t指向根结点,试写出从根开始,按层次遍历二叉树的算法,周层的结点按从左到右的次序访问。(本题20分)
8、若S是n个元素的集合,则S的幂集P(S)定义为S的所有子集的集合。例如,S=(a,b,c),P(S)={(),(a),(b),(c),(a,b),(a,c),(b,c),(a,b,c)}。给定S,写一递归算法求P(S)。(本题20分)
1、解题思路:假如计算2005年5月20日至2008年9月12日之间经过的天数,则以2005年1月1日为起点,分别计算2005年5月20日和2008年9月12日至2005年1月1日的天数,两者天数相减,则可以求出两者相距的天数。
2、解题思路:假如一个字符串有n个字符,用递归方法进行第1与第n字符交换、第2与第n-1个字符交换...直到字符串的中间位置。
3、解题思路:将符合条件的所有元素I存入一个数组中,并记录个数,再求和
4、解题思路:如果两条线段平行,则两条线段定不相交;如果不平行,则求两线段所在的直线的交点,再判断该交点是否在线段上,如果在线段上,则表示两线段相交,如果不在线段上,则表示两线段不相交。
5、参照严蔚敏的数据结构(C语言版)课本64页循环队列-队列的顺序存储结构
6、参照严蔚敏的数据结构(C语言版)课本31页算法2.12
7、参照严蔚敏的数据结构(C语言版)课本170页算法7.6
8、对照严蔚敏的数据结构(C语言版)课本149页例6-3
2010年南京师范大学考研C语言程序设计(含数据结构)真题1、给出年、月、日,计算该日是该年的第几天。(本题15分)
参考解法:
#include<stdio.h>
int get_days_of_month(int year,int month)
{
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) return 31;
else if(month==2)
if(year%400==0 || (year%4==0 && year%100!=0))
return 29;
else
return 28;
else
return 30;
}
void main()
{
int i,year,month,day,sum=0,flag=1;
while(flag)
{
printf("please input the date(for example:2005,6,9):");
scanf("%d,%d,%d",&year,&month,&day);
if(year>0)
if(month>=1 && month<=12)
if(day>=1 && day<=get_days_of_month(year,month))
flag = 0;
}
for(i=1;i<month;i++)
{
sum +=get_days_of_month(year,i);
}
sum += day;
printf("The date is %d day.\n",sum);
}
2、有几个学生,每个学生考m门课,要求编一函数,能检查n个学生有无不及格的课程,如
果有某一学生有一门或一门以上课程不及格,就输出该学生的学号(学号从0开始)和其全
部课程成绩。(本题15分)
参考解法:
#include<stdio.h>
#define N 100
void main()
数据结构与算法考研真题{
int a[N][N];
int i,j,m,n,flag;
printf("please input the number of students:");
scanf("%d",&n);
printf("please input the number of courses:");
scanf("%d",&m);
for(i=0;i<n;i++)
{
printf("please input No.%d scores:",i);
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
}
printf("students who have failed their courses as follows:");
for(i=0;i<n;i++)
{
flag = 0;
for(j=0;j<m;j++)
{
if(a[i][j]<60)
{flag=1;break;}
}
if(flag)
{
printf("No.%d ",i);
for(j=0;j<m;j++)
printf("%d ",a[i][j]);
}
printf("\n");
}
}
3、用二分法求方程“(2*X^3)-(4*x^2)+(3*x)-6 = 0”在(-10,10)之间的根。(本题20分)
#include<stdio.h>
#include<math.h>
float getresult(float x)
{
return (2*x*x*x - 4*x*x + 3*x -6);
}
void main()
{
float x0,x1,x2,y0,y1,y2;
do
{