| 网站首页 | 考研信息中心 | 考研资料下载 | 考研论坛 | 考研专业试题 | 2008考研招生简章 | 考研图书 | 留言板 | 考研图片中心 | 

设为首页
加入收藏
联系我们

您现在的位置: 考研信息网 >> 考研信息中心 >> 考研资料 >> 免费试卷 >> 东北院校 >> 吉林大学 >> 正文 用户登录 新用户注册
吉林大学2004年硕士研究生入学考试c语言程序设计答案          【字体:
吉林大学2004年硕士研究生入学考试c语言程序设计答案
作者:吉林大学…    文章来源:吉林大学2004年硕士研究生入学考试c语言程序设计答案    点击数:    更新时间:2006-2-17

本站推荐Firefox浏览器,有效阻止病毒和垃圾弹出[正版免费下载]

吉林大学2004年硕士研究生入学考试c语言程序设计答案

考研试题
/*===========================================================================*/
/*程序名称:2004_1.c                                                         */
/*程序目的:计算一个“零幺串”当中最长的零/幺串                             */
/*Writen by Apechn ,Soft Lab of JLU                                          */
/*===========================================================================*/#include <stdio.h>#define MAX 100void main(void){ char s[MAX]; /* 用来保存用户输入的"零/幺串" */ int i = 0;   /* 计数器 */ int n0 = 0; /* 保存最长"零串"数0的个数 */ int n1 = 0;  /* 保存最长"幺串"中1的个数 */ int temp0 = 0,temp1 = 0; printf("请输入一个仅由0/1组成的字符串:\n"); scanf("%s",s);  /* 由用户输入"零幺串" */ while (s[i]) {  if (s[i] == '0')   temp0++;  if (temp0 > n0) /* n0取已经扫描过的"零串"中0个数最多者 */  {   n0 = temp0;   temp1 = 0; /* 处理"零串"时将"幺串"计数的临时变量置零 */  }  if (s[i] == '1')   temp1++;  if (temp1 > n1) /* n1取已经扫描过的"零串"中1个数最多者 */  {   n1 = temp1;   temp0 = 0; /* 处理"幺串"时将"零串"计数的临时变量置零 */  }  i++; } printf("最长的\"零串\"中零的个数即n0 = %d .\n",n0); /* 输出结果 */ printf("最长的\"幺串\"中幺的个数即n1 = %d .\n",n1);}

考研试题
/*====================================================================================*/
/*程序名称:2004_2.c                                             */
/*程序目的:两个多项式相加                                           */
/*Writen by Apechn ,Soft Lab of JLU                                    */
/*====================================================================================*/
#include <stdio.h>
#include <stdlib.h>
struct list     /* 节点结构声明 */
{
 int power;    /* 多项式中变量的幂 */
 int coeff;    /* 多项式中变量的系数 */
 struct list *next;
};
typedef struct list node;
typedef node *poly;
/*-------------------------------------*/
/* 打印出一个多项式的各项       */
/*-------------------------------------*/
void printPoly(poly head)
{
 poly pointer;    /* 临时指针变量 */
 pointer = head;
 while (pointer != NULL)  /* 打印各节点 */
 {
  printf("[%d,%d] ",pointer->coeff,pointer->power);
 
  pointer = pointer->next;
 }
 printf("\n");
}
/*------------------------------------------------------------------------------*/
/* 从键盘输入一个多项式的项数和各项的幂和系数,多项式的系数不能为零       */
/*------------------------------------------------------------------------------*/
poly createPoly(poly head) /* 从键盘输入一个多项式的项数和各项的幂和系数 */
{
 poly newNode;     /* 临时节点 */
 poly pointer;
 int n,i;
 int coeffTemp,powerTemp;   /* 临时变量 */
 head = (poly) malloc(sizeof(node));  /* 内存配置 */
 if (head == NULL)
  printf("Memory allocate Failure!!\n"); /* 内存配置失败 */
 else
 {
  printf("请输入要创建的多项式的项数:\n");
  scanf("%d",&n);
  if (n == 0)
   return NULL;
  printf("请按x降幂依次输入各项的系数和幂:\n");
 
  scanf("%d%d",&coeffTemp,&powerTemp);/* 输入多项式一项的系数和幂 */
  head->coeff = coeffTemp;      /* 定义首节点 */
  head->power = powerTemp;
  head->next = NULL;
 
  pointer = head;
  for (i = 1;i < n;i++)   /* 依次定义其它节点 */
  {
   scanf("%d%d",&coeffTemp,&powerTemp); /* 输入各项的系数和幂 */
   newNode = (poly) malloc(sizeof(node));
   newNode->coeff = coeffTemp;
   newNode->power = powerTemp;
   newNode->next = NULL;
   pointer->next = newNode;  /* 将新定义的节点连接到原链表的表尾 */
   pointer = newNode;   /* pointer指针后移 */
  }
 }
 printPoly(head);
 return head;
}

/*-----------------------------------*/
/* 释放一个链表的空间                */
/*-----------------------------------*/
void freeList(poly head)
{
 poly pointer; /* 临时指针变量 */
 while (head != NULL)
 {
  pointer = head;
  head = head->next;
  free(pointer);
 }
}
/*--------------------------------------------*/
/* 计算两个多项式的和,并将结果存入另一个链表 */
/*--------------------------------------------*/
poly addPoly(poly head1,poly head2)
{
 poly pointer1,pointer2,pointer,newNode,head;/* 临时指针变量 */
 pointer1 = head1;
 pointer2 = head2;
 head = (poly) malloc(sizeof(node));
 pointer = head;
 while ((pointer1 != NULL) || (pointer2 != NULL)) /* 若两个多项式至少有一个没有访问结束 */
 {
  if (pointer1 !=NULL && pointer2 != NULL &&(pointer1->power > pointer2->power))
  {/* 若两个多项式当前指针指向的项的幂不相等 */
   newNode = (poly) malloc(sizeof(node));
   newNode->power = pointer1->power;
   newNode->coeff = pointer1->coeff;
   newNode->next = NULL;
  
   pointer->next = newNode;
   pointer = newNode;
   pointer1 = pointer1->next;
  }
  if (pointer1 !=NULL && pointer2 != NULL &&(pointer1->power < pointer2->power))
  {/* 若两个多项式当前指针指向的项的幂不相等 */
   newNode = (poly) malloc(sizeof(node));
   newNode->power = pointer2->power;
   newNode->coeff = pointer2->coeff;
   newNode->next = NULL;
   pointer->next = newNode;
   pointer = newNode;/* 指向存储结果的链表的指针后移 */
   pointer2 = pointer2->next;
  }
  if (pointer1 !=NULL && pointer2 != NULL &&(pointer1->power == pointer2->power))
  {     /* 若两个多项式当前指针指向的项的幂相等 */
   newNode = (poly) malloc(sizeof(node));
   newNode->power = pointer1->power;
   newNode->coeff = pointer1->coeff + pointer2->coeff;
   newNode->next = NULL;
   pointer->next = newNode;
   pointer = newNode;/* 指向存储结果的链表的指针后移 */
  
   pointer1 = pointer1->next;
   pointer2 = pointer2->next;
  }
  if (pointer1 == NULL && pointer2 != NULL)
  {
   newNode = (poly) malloc(sizeof(node));
   newNode->power = pointer2->power;
   newNode->coeff = pointer2->coeff;
   newNode->next = NULL;
   pointer->next = newNode;
   pointer = newNode;/* 指向存储结果的链表的指针后移 */
   pointer2 = pointer2->next; 
  }
  if (pointer2 == NULL && pointer1 != NULL)
  {
   newNode = (poly) malloc(sizeof(node));
   newNode->power = pointer1->power;
   newNode->coeff = pointer1->coeff;
   newNode->next = NULL;
  
   pointer->next = newNode;
   pointer = newNode;
   pointer1 = pointer1->next;
  }
 }

 pointer = head;   /* 由于多用了一个节点,这3行代码将多出的节点释放 */
 head = head->next;
 free(pointer);
 return (head);
}
/*------------------------------------------------------------------------------*/
/* 主程序                                                     */
/*------------------------------------------------------------------------------*/
void main()
{
 poly p,q,r;   /* 定义三个代表多项式的链表 */
 printf("这是多项式p:\n"); /* 创建多项式p */
 p = createPoly(p);
 printf("这是多项式q:\n"); /* 创建多项式q */
 q = createPoly(q);
 r = (poly) malloc(sizeof(node));
 printf("这是多项式p与多项式q的和r:\n");
 r = addPoly(p,q);   /* 将多项式p和多项式q的和赋值给r */
 printPoly(r);
 freeList(p);    /* 释放程序中使用过的链表所占用的空间 */
 freeList(q);
 freeList(r);
}

考研试题
/*=============================================================================*/
/*程序名称:2004_3.c                                                           */
/*程序目的:求sin(x)的近似值                                                   */
/*Writen by Apechn ,Soft Lab of JLU                                            */
/*=============================================================================*/
#include <stdio.h>
#include <stdlib.h>
#define MIN 0.00005    /* 设置运算停止条件 */
/*------------------------------------------------------------------------------*/
/* 计算弧度数为angle的角的正弦值第i项                                           */
/*------------------------------------------------------------------------------*/
float spill(int i,float angle)   /* 计算第i项 */
{
 int symbol,j;    
 float temp = angle;   /* 临时变量 */
 
 if (i % 2)    /* 设置该项的符号 */
  symbol = 1;
 else
  symbol = -1;
 
 if (i == 1)    /* 若只需要计算一项,直接返回角度值 */
  return (angle);
 
 for (j = 2;j <= i;j++)   /* 循环计算一项的值 */
 {
  temp *= angle * angle / ((2 * j - 2) * (2 * j - 1));
 }
 temp *= symbol;
 return (temp);
}
/*------------------------------------------------------------------------------*/
/* 递归求解sin(angle)的近似值,其中angle表示用户输入的弧度值                     */
/*------------------------------------------------------------------------------*/
float f(int i,float angle)
{
 float temp;   /* 临时变量 */
 if (i == 1)    /* 递归出口 */
  return angle;
 temp = spill(i,angle);   /* 需要加上的项 */
 return (f((i - 1),angle) + temp);  /* 递归运算 */
}
/*------------------------------------------------------------------------------*/
/* 计算需要的级数的项数,其中angle表示用户输入的弧度值                          */
/*------------------------------------------------------------------------------*/
int loopTime(float angle)
{
 int i = 1;
 float seed = angle;    /* 临时变量 */
 while ((seed >= MIN) || (seed <= (-1 * MIN))) /* 循环条件 */
 {
  i++;
  seed *= angle * angle /((2 * i -1) * (2 * i - 2)) * (-1);
 }
 return i;
}
/*------------------------------------------------------------------------------*/
/* 主程序                                                     */
/*------------------------------------------------------------------------------*/
void main()
{
 float x;     /* 用来保存用户输入的弧度数 */
 int count = 1;    /* 用来保存需要递归的次数 */
 float sinOfAngle = 0;   /* 用来保存最终结果 */
 printf("请输入一个浮点数,它代表一个弧度值:");
 scanf("%f",&x);   /* 用户从键盘输入一个弧度数 */
 count = loopTime(x);
 sinOfAngle = f(count,x);
 printf("sin %f 的近似值为 %f.\n",x,sinOfAngle); /* 在屏幕上打印出最终结果 */
}

考研试题
/*=============================================================================*/
/*函数名称:2004_4.c                                                           */
/*函数目的:递归的求出一个给定结构树的高度、节点数和路径个数           */
/*Writen by Siyee ,Soft Lab of JLU                                             */
/*=============================================================================*/
int depth = 0;    /* 用来保存深度的变量 */
void H(tree *T, int *h, int *n, int *k)
{
 ++*n;
 ++depth;
 *h = max(*h, depth);  /* 如果h比depth小,则更新h */
 if(T->kind=='two'){  /* 若节点有两个子节点 */
  H(T->son1, h, n, k); /* 递归计算两个子节点 */
  H(T->son2, h, n, k);
 }
 else if(T->kind=='one'){ /* 若节点有一个子节点 */
  H(T->son, h, n, k); /* 递归计算这一个子节点 */
 }
 else{
  ++*k;   /* 如果是叶节点,则路径数k增一 */
 }
 --depth;    /* 回溯,深度减一 */
}

考研试题
/*=============================================================================*/
/*程序名称:2004_5.c                                                           */
/*程序目的:删除整数单链表中重复的节点                                      */
/*Writen by Apechn ,Soft Lab of JLU                                            */
/*=============================================================================*/
#include <stdio.h>
#include <stdlib.h>
#define  N 6    /* 节点个数 */
struct list      /* 节点结构声明 */
{
 int number;
 struct list *next;
};
typedef struct list node;
typedef node *link;
int data[N] = {0,3,0,3,1,3};   /* 输入数据 */
/*------------------------------------------------------------------------------*/
/* 以已有的数组为基础建立单链表                                          */
/*------------------------------------------------------------------------------*/
link createList(link head)
{
 link newNode;
 link pointer;    /* 函数中需要用到的临时变量 */
 int i;
 head = (link) malloc(sizeof(node));
 if (head == NULL)   /* 若分配内存失败 */
  printf("Memory allocate Failure!!\n");
 else
 {
  head->number = data[0];   /* 设置首节点 */
  head->next = NULL;
  pointer = head;
  for (i = 1;i < N;i++)   /* 依次设置其它节点 */
  {
   newNode = (link) malloc(sizeof(node));
   newNode->number = data[i];
   newNode->next = NULL;
  
   pointer->next = newNode;
   pointer = newNode;
  }
 }
 return head;
}
/*------------------------------------------------------------------------------*/
/* 递归地删除链表中的重复节点                                            */
/*------------------------------------------------------------------------------*/
link delSame(link head)
{
 link pointer,temp = head;  /* 函数中需要用到的临时变量 */
 if (head->next == NULL)   /* 若head为空则直接返回 */
  return head;
 head->next = delSame(head->next); /* 递归地删除重复节点 */
 pointer = head->next;
 while (pointer != NULL)
 {
  if (head->number == pointer->number) /* 删除重复节点 */
  {
   temp->next = pointer->next;
   free(pointer);   /* 释放被删除节点所占用的空间 */
   pointer = temp->next;
  }
  else
  {
   pointer = pointer->next; /* 如果没有重复节点则指针后移 */
   temp = temp->next;
  }
 }
 return head;
}
/*------------------------------------------------------------------------------*/
/* 释放链表所占用的空间                                                  */
/*------------------------------------------------------------------------------*/
void freeList(link head)   
{
 link pointer;     /* 临时变量 */
 while (head != NULL)
 {
  pointer = head;
  head = head->next;
  free(pointer);    /* 一次释放一个节点所占的空间 */
 }
}
/*------------------------------------------------------------------------------*/
/* 打印链表各项                                                                 */
/*------------------------------------------------------------------------------*/
void printList(link head)
{
 link pointer;     /* 临时变量 */
 pointer = head;
 while (pointer != NULL)
 {
  printf("%d ",pointer->number);
  pointer = pointer->next;
 }
 printf("\n");
}
/*------------------------------------------------------------------------------*/
/* 主程序                                                                       */
/*------------------------------------------------------------------------------*/
void main()
{
 link head;
 link pointer;
 head = createList(head);  /* 以已有的数组为基础建立一个链表 */
 if (head != NULL)    /* 打印未删除重复节点前的数组 */
 {
  printf("初始链表中各元素依次如下所示:\n");
  printList(head);
 }
 pointer = delSame(head);  /* 递归地删除链表中的重复节点 */
 printf("删除重复节点后的链表中各元素依次如下所示:\n");
 printList(pointer);    /* 打印删除重复节点后的数组 */
 freeList(head);
}
 
 

考研信息网在线版权与免责声明

1、 凡本站注明“稿件来源:考研信息网(sanwww.com)”的所有文字、图片和音视频稿件,版权均属本网所有,任何媒体、

网站或个人未经本网协议授权不得转载、转贴或以其他方式复制发表。已经本站协议授权的媒体、网站,在下载使用时

必须注明"稿件来源:sanwww.com",违者本站将依法追究责任。

2、本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着

赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。

3、考研试题、各种考试试题以及考试信息转载于各大bbs论坛,就其真实性本站无法证实,并不意味着赞同其观点。

如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
           最新热点        最新推荐        相关文章
    吉林大学2004年硕士研究生入学考试
    吉林大学2004年硕士研究生入学考试
    吉林大学2003年硕士研究生入学考试
    吉林大学2003年硕士研究生入学考试
    吉林大学2002年硕士研究生入学考试
    吉林大学2002年硕士研究生入学考试
    吉林大学2002年硕士研究生入学考试
    吉林大学2002年硕士研究生入学考试
    吉林大学2001年硕士研究生入学考试
    吉林大学2001年硕士研究生入学考试
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)