国家二级C语言机试(操作题)模拟试卷492
程序填空题
1. 给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include
#include
#define N 8
typedef struct 1ist
{ 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(\\
(1)next
(2)t->data
(3)t
解析:第一空:fun函数中的循环目的是找到尾结点“while(t->next!=NULL)”,利用结点变量s和t,s指向当前节点,t不断指向下一个结点,因此,第一空处应该是“t=t->next;”。
第二空:这里是输出尾结点中的数据,已经利用循环找到了尾结点t,t的数据是t->data,因此,第二空处应该为“printf(\\
程序修改题
2. 给定程序MODI1.C中函数fun的功能是:将字符串中的字符按逆序输出,但不改变字符串中的内容。
例如,若字符串为abcd,则应输出:dcba。
请改正程序中的错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
/*********** found* ***********/
fun (char a) { if (*a)
{ fun(a+1);
/*********** found* ***********/
printf(\\
(1)void fun(char *a)
(2)printf(\\
解析:(1)主函数中“fun(s);”语句中的s是数组名,所以在fun函数中参数的定义应该是指针型,“fun(chat a)”改为“void fun(char *a)”。
(2)printf函数的调用形式是:printf(格式字符串,输出项表),在格式字符串和输出项表之间有“,”,因此,第二个标识处应该是“printf(\\
程序设计题
3. 请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。
例如,输入beijingshanghai(为回车键),函数将返回shanghai。
注意:部分源程序存在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
char *fun (char *s, char *t)
{
}
main ()
{ char a[20] ,b[20] ;
void NONO () ;
printf(\\
int i;
char *p=s,*q=t;
int n=0,m=0;
while(*p)//计算串s的长度n,其
中p为临时指针
{ n++;
p++;
}
while(*q)//计算串t的长度m,其
中q为临时指针
{m++;
q++;
}
if(n>=m) //比较m和n的值,设置
p指向较大的指针
p=s;
else
p=t;
return p;
解析:进入fun函数,根据前面的分析:
(1)首先求得字符串的长度,设变量n和m分别用来求字符串的长度,初值设为0,把字符串中的字符逐个访问,每访问一个字符,n和m分别加1,直到字符串结束;
(2)使用两个临时指针变量p、q分别作为访问字符串的变量;
(3)根据m和n的值返回串,设置指针p,指向返回串的开始地址。
本文档预览:3600字符,共2498字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载