生活随笔
收集整理的這篇文章主要介紹了
全国计算机等级考试题库二级C操作题100套(第93套)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第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
;
t
=t
->___1___
;
}
printf(" %d ",___2___
);
s
->next
=NULL;
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指針變量進行操作的,因此,都要取t的next指針重新賦給t來實現,所以本處應填next。
第二處:輸出最后一個結點的數據,所以應填t->data或(*t).data。
第三處:輸出出最后一個結點數據后,并把此結點刪除了,程序要求釋放內存,所以應填t。
給定程序MODI1.C中函數fun的功能是:將字符串中的字符按逆序輸出,但不改變字符串中的內容。
例如,若字符串為abcd,則應輸出:dcba。
請改正程序中的錯誤,使它能計算出正確的結果。
注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!
給定源程序:
#include <stdio.h>
fun
(char a
)
{ if ( *a
)
{ fun(a
+1) ;
printf("%c" *a
) ;
}
}
main( )
{ char s
[10]="abcd";
printf("處理前字符串=%s\n處理后字符串=", s
);
fun(s
); printf("\n") ;
}
解題思路:
第一處:形參a應定義為字符串指針。
第二處:語句中缺少逗號。
請編寫一個函數fun,它的功能是:比較兩個字符串的長度,(不得調用C語言提供的求字符串長度的函數),函數返回較長的字符串。若兩個字符串長度相同,則返回第一個字符串。
例如,輸入beijing shanghai (為回車鍵), 函數將返回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
;
}
總結
以上是生活随笔為你收集整理的全国计算机等级考试题库二级C操作题100套(第93套)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。