二级C语言笔试操作题-6

  • 格式:doc
  • 大小:7.32 KB
  • 文档页数:4

二级C语言笔试操作题-6
(总分:100.00,做题时间:90分钟)
一、程序填空题(总题数:1,分数:30.00)
1.下列给定程序中,函数fun的功能是:统计带头结点的单向链表中结点的个数,并存放在形参n所指的存储单元中。

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

注意:部分源程序给出如下。

不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#include<stdlib.h>
#defineN 8
typedef street list
int data;
struct list*next;
SLIST;
SLIST*creatlist(int*a);
void outlist(SLIST*);
void fun(SLIST*h,int*n)
SLIST*p;
/***************found***********/
______=0;
p=h->next;
while(p)
(*n)++;
/*************found***********/
p=p->______;
main()
SLIST*head;
int a[N]=12,87,45,32,91,16,20,48,num;
head=creatlist(a);
outlist(head);
/*************found*********/
fun(______,&num);
printf("/number=%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 NULLP,n");
else
printf("/nHead");
do
printf("->%d",p->data);
p=p->next;
while(p!=NULL);
printf("->End/n");
(分数:30.00)
填空项1:__________________ (正确答案:*n next head)
解析:[解析] 填空1:*n用来存放结点的个数,对其赋初值为0。

填空2:while循环用于遍历链表,循环一次,指针指向链表的下一个结点。

填空3:根据函数定义语句确定调用函数的实际参数,即fun(head,&num);。

二、程序改错题(总题数:1,分数:30.00)
2.下列给定程序中,函数fun的功能是:求出s所指字符串中最后一次出现的t所指字符串的地址,并通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。

例如,当字符串中的内容为“123dabf123dx”,t中内容为“ab”时,输出结果应是“123dx”。

当字符串中的内容为“123dabf123dx”,t中内容为“abd”时,则程序输出未找到信息“Not 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;
voidmain()
char s[100],t[100],*p;
printf("/nPlease enter string S:");
scanf("%s",s);
printf("/nPlease enter substring t=t:");
scanf("%s",t);
p=fun(s,t);
if(p)
printf("inThe result is:%s/n",p);
else
printf("inNot found!/n");
(分数:30.00)
填空项1:__________________ (正确答案:(1)a=NULL;
(2)if(*r==*p))
解析:[解析] (1)a=Null;是个明显的语法错误,指针指向空值的关键字应为NULL。

(2)r和p均为指针变量,分别指向两个字符串中的字符变量,循环条件是当r和p所指向的字符相同时,进行指针后移操作,故此处应为if(*r==*p)。

三、程序设计题(总题数:1,分数:40.00)
3.函数fun的功能是:将s所指字符串中除下标为偶数同时ASCII码值也为偶数的字符外,其余的全部删除;字符串中剩余字符所形成的新串放在t所指的数组中。

例如,若s所指字符串中的内容为“ABCDEFG123456”,其中字符A的ASCII码值为奇数,因此应当删除;字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;字符2的ASCII码值为偶数,在数组中的下标也为偶数,因此不应当删除,其他依此类推。

最后t所指的数组中的内容应是“246”。

注意:部分源程序给出如下。

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

试题程序:
#include<stdio.h>
#include<string.h>
void fun(char*s,char t[])
voidmain()
char s[100],t[100];
system("CLS");
printf("/nPlease enter string S:");
scanf("%s",s);
fun(s,t);
printf("/nThe result is:%s/n",t);
(分数:40.00)
__________________________________________________________________________________________ 正确答案:(void fun(int a,int b,long*c)
{
*c=b%10+(a/10)*10+(b/10)*100+(a%10)*1000;
})
解析:[解析] 本题中主要的问题是如何取出a和b的个位数和十位数,取出后如何表示成c中相应的位数。

由于a和b都是只有两位的整数,所以分别对它们除10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。

得到后对应乘以1000、100、10、1就可得到c的千位数、百位数、十位数和个位数。

注意:使用c时要进行指针运算。