生活随笔
收集整理的這篇文章主要介紹了
全国计算机等级考试题库二级C操作题100套(第09套)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第09套: 給定程序中,函數fun的功能是將不帶頭節點的單向鏈表結點數據域中的數據從小到大排序。即若原鏈表結點數據域從頭至尾的數據為:10、4、2、8、6,排序后鏈表結點數據域從頭至尾的數據為:2、4、6、8、10。 請在程序的下劃線處填入正確的內容并把下劃線刪除, 使程序得出正確的結果。 注意:源程序存放在考生文件夾下的BLANK1.C中。 不得增行或刪行,也不得更改程序的結構! 給定源程序:
#include <stdio.h>
#include <stdlib.h>
#define N 6
typedef struct node
{
int data
;
struct node
* next
;
} NODE
;
void fun ( NODE
* h
)
{ NODE
* p
, * q
; int t
;
p
= h
;
while ( p
) {
q
= __1__
;
while ( __2__
)
{ if ( p
-> data
> q
-> data
)
{ t
= p
-> data
; p
-> data
= q
-> data
; q
-> data
= t
; }
q
= q
-> next
;
}
p
= __3__
;
}
}
NODE
* creatlist ( int a
[ ] )
{ NODE
* h
, * p
, * q
; int i
;
h
= NULL ;
for ( i
= 0 ; i
< N
; i
++ )
{ q
= ( NODE
* ) malloc ( sizeof ( NODE
) ) ;
q
-> data
= a
[ i
] ;
q
-> next
= NULL ;
if ( h
== NULL ) h
= p
= q
;
else { p
-> next
= q
; p
= q
; }
}
return h
;
}
void outlist ( NODE
* h
)
{ NODE
* p
;
p
= h
;
if ( p
== NULL ) printf ( "The list is NULL!\n" ) ;
else
{ printf ( "\nHead " ) ;
do
{ printf ( "->%d" , p
-> data
) ; p
= p
-> next
; }
while ( p
!= NULL ) ;
printf ( "->End\n" ) ;
}
}
main ( )
{ NODE
* head
;
int a
[ N
] = { 0 , 10 , 4 , 2 , 8 , 6 } ;
head
= creatlist ( a
) ;
printf ( "\nThe original list:\n" ) ;
outlist ( head
) ;
fun ( head
) ;
printf ( "\nThe list after inverting :\n" ) ;
outlist ( head
) ;
}
解題思路: 本題是考察使用鏈表方法,使用兩重while循環語句,對鏈表的結點數據進行升序排列。 第一處:由于外循環變量使用p指針,內循環變量使用q指針,所以q指向必須指向p的next 指針,因此應填寫:p.next。 第二處:判斷內循環q指針是否結束,所以應填:q。 第三處:外循環控制變量p指向自己的next指針,所以應填:p.next。
給定程序MODI1.C中函數fun的功能是: 將s所指字符串中的字母轉換為按字母 序列的后續字母(但Z轉換為A, z轉換為a),其它字符不變。 請改正函數fun中指定部位的錯誤, 使它能得出正確的結果。 注意: 不要改動main函數, 不得增行或刪行, 也不得更改程序的結構! 給定源程序:
#include <stdio.h>
#include <ctype.h>
void fun
( char * s
)
{
while ( * s
!= '@' )
{ if ( * s
>= 'A' & * s
<= 'Z' || * s
>= 'a' && * s
<= 'z' )
{ if ( * s
== 'Z' ) * s
= 'A' ;
else if ( * s
== 'z' ) * s
= 'a' ;
else * s
+ = 1 ;
}
( * s
) ++ ;
}
}
main ( )
{ char s
[ 80 ] ;
printf ( "\n Enter a string with length < 80. :\n\n " ) ; gets ( s
) ;
printf ( "\n The string : \n\n " ) ; puts ( s
) ;
fun
( s
) ;
printf
( "\n\n The Cords :\n\n " ) ; puts ( s
) ;
}
解題思路: 第一處: 使用while循環來判斷字符串指針s是否結束,所以應改為:while(*s)。 第二處: 取字符串指針s的下一個位置,所以應改為:s++;。
請編寫函數fun, 函數的功能是: 移動一維數組中的內容; 若數組中有n個整數, 要求把下標從0到p(含p,p小于等于n-1)的數組元素平移到數組的最后。 例如, 一維數組中的原始內容為: 1,2,3,4,5,6,7,8,9,10; p的值為3。移動 后, 一維數組中的內容應為: 5,6,7,8,9,10,1,2,3,4。 注意:部分源程序在文件PROG1.C中。 請勿改動主函數main和其它函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。 給定源程序:
#include <stdio.h>
#define N 80
void fun ( int * w
, int p
, int n
)
{
}
main ( )
{ int a
[ N
] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 } ;
int i
, p
, n
= 15 ;
printf ( "The original data:\n" ) ;
for ( i
= 0 ; i
< n
; i
++ ) printf ( "%3d" , a
[ i
] ) ;
printf ( "\n\nEnter p: " ) ; scanf ( "%d" , & p
) ;
fun ( a
, p
, n
) ;
printf ( "\nThe data after moving:\n" ) ;
for ( i
= 0 ; i
< n
; i
++ ) printf ( "%3d" , a
[ i
] ) ;
printf ( "\n\n" ) ;
NONO ( ) ;
}
解題思路:
本題是考察一維數組的操作。
1. 定義一維數組中間變量b,把n值后面數組中的內容存入b中。
2. 再把m前的數組中的內容存入b中。
3. 最后把數組b的內容依次存放到w中。
參考答案:
void fun ( int * w
, int p
, int n
)
{
int i
, j
= 0 , b
[ N
] ;
for ( i
= p
+ 1 ; i
< n
; i
++ ) b
[ j
++ ] = w
[ i
] ;
for ( i
= 0 ; i
<= p
; i
++ ) b
[ j
++ ] = w
[ i
] ;
for ( i
= 0 ; i
< n
; i
++ ) w
[ i
] = b
[ i
] ;
}
總結
以上是生活随笔 為你收集整理的全国计算机等级考试题库二级C操作题100套(第09套) 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。