知ing

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

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

゛Zirro、Y 上传

查看本书

36套: 

给定程序中,函数fun的功能是:统计出带有头结点的单向链表中结点的个数,存放在形参n所指的存储单元中。 

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

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

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

给定源程序: 

#include <stdio.h> 

#include <stdlib.h> 

#define N 8 

typedef struct list 

{ int data; 

struct list *next; 

} SLIST; 

SLIST *creatlist(int *a); 

void outlist(SLIST *); 

void fun( SLIST *h, int *n) 

{ SLIST *p; 

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

___1___=0; 

 

p=h->next; 

while(p) 

{ (*n)++; 

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

p=p->___2___; 

main() 

{ SLIST *head; 

int a[N]={12,87,45,32,91,16,20,48}, num; 

head=creatlist(a); outlist(head); 

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

fun(___3___, &num); 

printf("\nnumber=%d\n",num); 

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("The list is NULL!\n"); 

else 

{ printf("\nHead "); 

do 

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

while(p!=NULL); 

printf("->End\n"); 

解题思路: 

本题是要求统计出带有头结点的单向链表中结点的个数。 

第一处:对n所指的存储单元进行初始化,所以应填:*n。 

第二处:指向p的下一个结点,所以应填:next。 

第三处:函数调用,在主函数中已经给出了head,所以应填:head。 

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

给定程序MODI1.C中函数fun的功能是:求出s所指字符串中最后一次出现的所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串若未找到,则函数值为NULL。 

例如,当字符串中的内容为:"abcdabfabcdx"t中的内容为:"ab"时, 输出结果应是:abcdx。 

当字符串中的内容为:"abcdabfabcdx"t中的内容为:"abd"时,则程序输出未找到信息:not be found!。 

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

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

给定源程序: 

#include <stdio.h> 

#include <string.h> 

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

char *p , *r, *a; 

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

a = Null; 

while ( *s ) 

{ p = s; r = t; 

while ( *r ) 

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

if ( r == p ) 

{ r++; p++; } 

else break; 

if ( *r == '\0' ) a = s; 

s++; 

return a ; 

main() 

char s[100], t[100], *p; 

printf("\nPlease enter string S :"); scanf("%s", s ); 

printf("\nPlease enter substring t :"); scanf("%s", t ); 

p = fun( s, t ); 

if ( p ) printf("\nThe result is : %s\n", p); 

else printf("\nNot found !\n" ); 

解题思路: 

第一处:指向空指针错误,NullNULL。 

第二处:比较指针位置的值是否相等,所以应改为:if(*r==*p)。 

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

函数fun的功能是: 将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的数组中。 

例如,若s所指字符串中的内容为:"ABCDEFG123456",其中字符AASCII码值为奇数,因此应当删除;其中字符BASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其它依此类推。最后t所指的数组中的内容应是:"246"。 

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

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

给定源程序: 

#include <stdio.h> 

#include <string.h> 

void fun(char *s, char t[]) 

main() 

char s[100], t[100]; 

printf("\nPlease enter string S:"); scanf("%s", s); 

fun(s, t); 

printf("\nThe result is: %s\n", t); 

NONO(); 

解题思路: 

本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。 

参考答案: 

void fun(char *s, char t[]) 

int i, j = 0 ; 

for(i = 0 ; i < strlen(s) ; i += 2) 

if(s[i] % 2 == 0) t[j++] = s[i] ; 

t[j] = 0 ; 

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


查看更多