国家二级C语言机试(操作题)模拟试卷303
程序填空题
1.下列给定程序中,函数fun的功能是:在带头结点的单向链表中,查找数据域中值为ch的结点。找到后通过函数值返回该结点在链表中所处的顺序号;若不存在值为ch的结点,函数返回0值。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#include<stdlib.h>
#define N 8
typedef struer liSt
{ int data;
struct list *next;
}SLIST;
SLIST*creatlist(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=creatlist(a);
outliSt(head);
printf(\\
1)NULL
(2)n
(3)head,ch
解析:填空1:while循环语句用来判断是否到达链表结尾,链表结尾结点指针域是NULL。
填空2:若找到指定字符,则通过return语句将该结点在链表的顺序号返回给main函数。
填空3:函数调用语句,其形式是:函数名(实际参数表),因此根据函数定义语句,填入head,ch。
程序修改题
2.下列给定程序中函数fun的功能是:将m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt所指存储区中。例如:把三个串“abc”、“CD”、“EF”连接起来,结果是“abcCDEF”。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#include<string.h>
void fun(char sir[][10],
int m,char*pt)
{
/*********found*********/
Tnt k,q,i;
for(k=0;k<m;k++)
{ q=strlen(sir[k]);
for(i=0 j i<q;i++)
/*********found*********/
pt[i]=str[k,i];
pt+=q;
pt[0]=0;
}
}
main()
{ int m,h;
char s[10][10],P[120];
printf(“Please enter m:”);
scanf(“%d”,&m),gets(s[0]),
printf(“Please enter%d string:”,m);
for(h=0;h<m;h++)
gets(s[h]);
fun(s,m,p);
printf(“The result is:%s”, p);
}
(1)int k,q,i;
(2)pt[i]=str[k][i];
解析:本题考查:C语言的书写和语法性错误,这类错误比较简单,只要编译程序,根据错误提示修改即可。
(1)关键字书写错误,定义整型变量的关键字应使用int,而非Int。
(2)数组元素表示错误,表示二维数组元素,应使用方括号将行坐标和列坐标分别括起来,即str[k,i]应改为:str[k][i]。
程序设计题
3.已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。
注意:部分源程序给出如下。
请勿改动主函数nmin和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<conio.h>
#defitie N 10
typedef struct ss /*定义结构体*/
{ char num[10];
int s;
}STU;
fun(STU a[],STU *s)
{
}
void main()
{
STU a[N]={{\\
fun(STU a[],STU*s)
{
int i;
*s=a[0];
for(i=0;i<N;i++) /*找出成绩最高的学生记录*/
if(s->s<a[i].s)
*s=a[i];
}
解析:本题的流程是先使s指向第1名学生,利用循环语句遍历所有学生的成绩,利用条件语句判断当前学生成绩是否最高,所以if语句的条件是s->s<a[i].s。此外,做题时应该熟练掌握“指向运算符”和“成员运算符”的相关知识,题中“s->s”等价于“(*s).s”。
本文档预览:3600字符,共3242字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载