日韩色综合-日韩色中色-日韩色在线-日韩色哟哟-国产ts在线视频-国产suv精品一区二区69

手機APP下載

您現在的位置: 首頁 > 考研英語 > 考研專業課 > 吉林大學 > 正文

吉林大學2004年c語言程序設計專業課考研真題試卷及答案(回憶版)

來源:可可英語 編輯:max ?  可可英語APP下載 |  可可官方微信:ikekenet

/*===========================================================================*/
/*程序名稱:2004_1.c */
/*程序目的:計算一個“零幺串”當中最長的零/幺串  */
/*Writen by Apechn ,Soft Lab of JLU */
/*===========================================================================*/#include#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
#include

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
#include
#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
#include
#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);
}

重點單詞   查看全部解釋    
define [di'fain]

想一想再看

v. 定義,解釋,限定,規定

聯想記憶
void [vɔid]

想一想再看

adj. 空的,無效的,空虛的
n. 真空,空

 
spill [spil]

想一想再看

v. 溢出,灑,使 ... 流出,泄漏
n.

 
sin [sin]

想一想再看

n. 原罪
v. 犯罪,違反(教規)

 
allocate ['æləkeit]

想一想再看

vt. 分派,分配,分配額

聯想記憶
symbol ['simbəl]

想一想再看

n. 符號,標志,象征

聯想記憶
?
發布評論我來說2句

    最新文章

    可可英語官方微信(微信號:ikekenet)

    每天向大家推送短小精悍的英語學習資料.

    添加方式1.掃描上方可可官方微信二維碼。
    添加方式2.搜索微信號ikekenet添加即可。
    主站蜘蛛池模板: jenna haze| 孔冉| 飞扬的青春 电视剧| 黄色网址视频免费| 何玲| 沈月个人简历资料| 胡渭康| 《非常案件》电视剧| 爱爱内含光在线播放| 郎君不如意演员表| 自拍激情视频| 许良| 保姆欲望| 三人越谷文言文翻译| 后进紧身牛仔裤翘臀美女视频| 广告设计培训速成班| 稻森泉| 寻梦环游记英文| 工程力学电子版教材| 日本大片网址| 小丑与小丑女| 天与地越南战争在线观看免费| 五年级简易方程40题| 米娅华希科沃斯卡| 成龙电影全部电影作品大全| 迷夜电影| 汤晶锦| 易烊千玺个人资料简介| livecams直播表演视频| 藏文作文| 春节到,人欢笑,贴窗花,放鞭炮| disturbia| 苏教版二年级下册数学| 搞黄色的视频| 色戒 在线看| 中央电视台科教频道| 高允贞| 禁漫社| 非他莫属| 糟老头视频| 捷克女人性ⅹxxxx视频|