知ing

最新计算机二级C语言上机试题汇编100套

NCRE研究组 编 / 高等教育出版社

゛Zirro、Y 上传

查看本书

93套: 

给定程序中已建立一个带有头结点的单向链表,main函数中将多次调用fun 函数,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。 

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 

注意:源程序存放在考生文件夹下的BLANK1.C中。 

不得增行或删行,也不得更改程序的结构! 

给定源程序: 

#include <stdio.h> 

#include <stdlib.h> 

#define N 8 

typedef struct list 

{ int data; 

struct list *next; 

} SLIST; 

void fun( SLIST *p) 

{ SLIST *t, *s; 

t=p->next; s=p; 

while(t->next != NULL) 

{ s=t; 

/ **********found**********/ 

t=t->___1___; 

/ **********found**********/ 

printf(" %d ",___2___); 

s->next=NULL; 

/ **********found**********/ 

free(___3___); 

SLIST *creatlist(int *a) 

{ SLIST *h,*p,*q; int i; 

h=p=(SLIST *)malloc(sizeof(SLIST)); 

for(i=0; i<N; i++) 

{ q=(SLIST *)malloc(sizeof(SLIST)); 

q->data=a[i]; p->next=q; p=q; 

p->next=0; 

return h; 

void outlist(SLIST *h) 

{ SLIST *p; 

p=h->next; 

if (p==NULL) printf("\nThe list is NULL!\n"); 

else 

{ printf("\nHead"); 

do { printf("->%d",p->data); p=p->next; } while(p!=NULL); 

printf("->End\n"); 

main() 

{ SLIST *head; 

int a[N]={11,12,15,18,19,22,25,29}; 

head=creatlist(a); 

printf("\nOutput from head:\n"); outlist(head); 

printf("\nOutput from tail: \n"); 

while (head->next != NULL){ 

fun(head); 

printf("\n\n"); 

printf("\nOutput from head again :\n"); outlist(head); 

解题思路: 

本题是对已经建立的链表,通过调用一次函数就输出链表尾部的数据。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。 

第一处:由于本题要求输出链表尾部的数据,函数是利用while循环语句找出链表尾部的指针并存入临时变量s中,那么每循环一次就要判断链表是否已结束位置,如果是,则退出循环,进行输出,由于是通过t指针变量进行操作的,因此,都要取tnext指针重新赋给t来实现,所以本处应填next。 

第二处:输出最后一个结点的数据,所以应填t->data(*t).data。 

第三处:输出出最后一个结点数据后,并把此结点删除了,程序要求释放内存,所以应填t。 

*************************************************** 

给定程序MODI1.C中函数fun的功能是:将字符串中的字符按逆序输出,但不改变字符串中的内容。 

例如,若字符串为abcd,则应输出:dcba。 

请改正程序中的错误,使它能计算出正确的结果。 

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 

给定源程序: 

#include <stdio.h> 

/ ************found************/ 

fun (char a) 

{ if ( *a ) 

{ fun(a+1) ; 

/ ************found************/ 

printf("%c" *a) ; 

main( ) 

{ char s[10]="abcd"; 

printf("处理前字符串=%s\n处理后字符串=", s); 

fun(s); printf("\n") ; 

解题思路: 

第一处:形参a应定义为字符串指针。 

第二处:语句中缺少逗号。 

*************************************************** 

请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。 

例如,输入beijing <CR> shanghai <CR><CR>为回车键)函数将返回shanghai。 

注意部分源程序存在文件PROG1.C中。 

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 

给定源程序: 

#include <stdio.h> 

char *fun ( char *s, char *t) 

main( ) 

{ char a[20],b[20]; 

printf("Input 1th string:") ; 

gets( a); 

printf("Input 2th string:") ; 

gets( b); 

printf("%s\n",fun (a, b )); 

NONO (); 

解题思路: 

本题是比较两个字符串的长度并按要求返回字符串。 

我们给出的程序是使用for循环来判断两个字符串中哪一个比较长或相等,循环的终止值为两个字符串中是否字符串结束符,如果有,则退出循环体。接下来再判断两个字符串是否同时出现结束符,则返回第一个字符串s,如果不没有同时出现,则判断哪一个字符串先有结束符,则按要求返回指定的字符串。 

参考答案: 

char *fun ( char *s, char *t) 

int i; 

char *p=s, *q=t; 

for(i=0;*p && *q; i++) { 

p++; q++; 

if(*p == 0 && *q == 0) return s ; 

if(*p) return s ; 

else return t ; 

※※※※※※※※※※※※※※※※※※※※※※※※※ 


查看更多