国家二级C语言机试(操作题)模拟试卷462
程序填空题
1.下列给定程序中,函数fun的功能是:在带头结点的单向链表中,查找数据域中值为ch的结点。找到后通过函数值返回该结点在链表中所处的顺序号;若不存在值为ch的结点,函数返回0值。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include < stdio.h >
#include < stdlib.h >
#define N 8
typedef struct list
( int data;
struct list*next;
}SLIST;
SLIST*crear1ist(char*);
void outliSt(SLIST*);
int fun(SLIST*h,char ch)
{ SLIST*p; int n=0;
p=h一 >next:
/*********found*********/
while(p!=【1】)
{ n++;
/*********found*********/
if(p一 >data==ch)
return【2】;
else P=p一 >next;
}
return 0;
}
main()
{ SLIST *head;int k;char ch;
char a[N]={’m’,’p’,’g’,’a’,’w’,’x’,’r’,’d’};
head=treatlist(a);
outlist(head);
printf(\\
(1)NULL
(2)n
(3)head,ch
解析:填空1:while循环语句用来判断是否到达链表结尾,链表结尾结点指针域是NULL。
填空2:若找到指定字符,则通过return语句将该结点在链表的顺序号返回给maln函数。
填空3:函数调用语句,其形式是:函数名(实际参数表),因此根据函数定义语句,填入head,ch。
程序修改题
2.下列给定程序中,函数fun的功能是:删除指针P所指字符串中的所有空白字符(包括制表符、回车符及换行符)。
输入字符串时用“#”结束输入。
请改正程序中的错误,使它能输出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include < string.h >
#include < stdio.h >
#include < ctype.h >
fun(char*p)
{
int i,t;char C[80];
/*********found*********/
For(i=0,t=0 ;p[i];i++)
if(!isspace(*(p+i)))
C[t++]=p[i];
/*********found*********/
C[t]=\\
(1)for(i=0,t=0;p[i];i++)
(2)c[t]=’\\\\0’;
解析:该题目考查C语言关键字的书写,C语言中关键字是区分大小写的。另外为字符串结尾添加结束符时应书写为‘\\\\0’,而非“\\\\0”,“\\\\0”表示一个字符串。该程序的if条件中应用了isspace函数,该函数的功能是检查ch是否为空格、跳格符(制表符)或换行符。
程序设计题
3.编写函数fun,其功能是:将ss所指字符串中所有下标为奇数位上的字母转换为大写 (若该位置上不是字母,则不转换)。
例如,若输入“abc4EFg”,则应输出“aBc4EFg”。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include < conio.h >
#include < stdio.h >
#include < string.h >
void fun(char*ss)
{
}
void main(void)
{
char tt[51];
printf (\\
void fun (char*ss)
{
int i;
for(i=0; ss[i]!=’\\\\0’;i++)
/*将ss所指字符串中所有下标为奇数位置的字母转换为大写*/
if(i%2==1&&ss[i] >=’a’
&&ss[i] < ’z’)
ss[i] =ss[i] 一32;
}
解析:将指定字符串中奇数位置的字母转换为大写,首先需要判断奇数位置,再判断该位置字符是不是小写字母,如果是小写字母,则将小写字母转换为大写字母。字母大小写转换操作中,只要将小写字母减去32即可转换为大写字母。
本文档预览:3600字符,共2748字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载