国家二级C语言机试(操作题)模拟试卷374
程序填空题
1.给定程序中,函数fun的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include
#include
#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) {
/*********found**********/
q=____1____;
/*********found**********/
while (____2____ )
{ if (p—>data > q—>data)
{ t = p—>data; p—>data = q—>
data; q—>data = t; }
q = q—>next;
}
/*********found**********/
p= ____3____;
}
}
NODE *creatlist (int a [] )
{NODE *h,*p,*q; int i;
h=NULL;
{ 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(\\
(1) p—>next
(2) q
(3) p—>next
解析:函数fun的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序,在fun函数内采用的是选择法排序。
第一空:由审题分析可知,q从p的下一个元素开始寻找最小值,故第一空为“p—>next”。
第二空:由审题分析可知,“while (2)”是在剩下的元素当中找最小值,剩下的结点是由q指向的链表,故第二空处的循环条件是q不为NULL链表就存在元素继续往后搜索,故第二空处为“q”。
第三空:由审题分析可知,q指向p的下一个结点,下次外循环进入时,继续寻找剩余结点的最小值,故第三空处应为\\
程序修改题
2.给定程序MODI1.C中函数fun的功能是:将s所指字符串中的字母转换为按字母序列的后续字母(但Z转换为A,z转换为a),其他字符不变。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
void fun (char *s)
{
/*********found**********/
else *s += 1;
}
}
main ()
{ char s[80];
printf(\\
(1) while (*s)或while(* s!=’\\\\0’)或while (*s! =0)
(2)s++;
解析:函数的功能是将字符串中的字母改为该字母序列的后续字母。
(1)第一个错误标识下的“while(*s!=’@’)”语句原意是s不指向字符串尾就进入下面的循环,所以对于指针判断不为尾符的语句应该是“while(*s)”或者“while(*s!=’\\\\0’)”或者“while(*s! =0)”。
(2)第二个标识下“(*s)H;”是对字符内容加1,而原题是对字符位置加1,所以将其改为“s++;”。
程序设计题
3.请编写函数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
#define N 80
void fun (int *w, int p. int n)
{
}
main()
{int a[N] ={1,2,3,4,5,6,7,8r 9,10,
11,12,13,14,15);
int i,p,n=15;void NONO ();
printf (\\
1 int i, j=0, b[N];
2 for (i=p+1; i<n; i++)b[j++]=w [i]j
3 for(i=0; i<=p; i++)b[j++]=w[i];
4 for(i=0; i<n; i++)w[i]=b[i];
解析:该程序功能是移动一维数组中的内容。解题思路首先将字符串拷贝到一个临时的数组,然后将字符串进行前移操作,最后将由于前移覆盖掉的字符,由临时数组中拷贝到指定字符串。
本文档预览:3600字符,共3223字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载