国家二级C语言机试(操作题)模拟试卷299
程序填空题
1.给定程序中,函数fun的功能是:根据形参i的值返回某个函数的值。当调用正确时,程序输出:x1=5.000000,x2=3.000000,x1*x1+x1*x2=40.000000。
注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
double f1(double x)
{return x*x;)
double f2(double x,double y)
{return x*y;)
/*********found*********/
【1】 fun(int i,double x,double y)
{if(i==1)
/*********found*********/
return 【2】(x);
else
/*********found*********/
return 【3】(x,y);
}
main()
{ double x1=5,x2=3,r;
r=fun(1,x1,x2);
r+=fun(2,x1,x2);
printf(\\
(1)double
(2)f1
(3)f2
解析:填空1:本空函数fun的返回值,根据return可知,不论返回的是f1还是12,它们的返回值均为double型的,故此空应该填写double。
填空2:因为函数fun的功能是根据形参i的值返回某个函数的值,当i等于1时,应该返回的是f1。
填空3:如果不满足if的话,应该返回的是f2。
程序修改题
2.下列给定程序中函数Creatlink的功能是:创建带头结点的单向链表,并为各结点数据域赋0到m—1的值。
请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。
注意:部分源程序在文件NODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
1 #include<stdio.h>
2 #include<stdlib.h>
3 typedef strucL aa
4 {int data;
5 struct aa * next;
6 }NODE;
7 NODE*Creatlink(int n,int m)
8 {NODE*h=NULL,*p,*s;
9 int i;
10 /*********found*********/
11 P=(NODE)malloc(sizeof(NODE));
12 h=P;
13 p->next=NULL;
14 for(i=1;i<=n;i++)
15 {s=(NODE*)malloc(sizeof (NODE)),
16 s->data=rand()%m;
17 s->next=p->nexL,
18 p->next=s;p=p->next;
19 }
20 /*********found*********/
21 return p;
22 }
23 outlink(NODE*h)
24 {NODE*p;
25 P=h->next;
26 printf(\\
(1)p=(NODE*)malloc(sizeof(NODE));
(2)return h;
解析:(1)由变量定义可知p为指向结点的指针。指向刚分配的结构指针,所以应改为p=(NODE*)malloc(sizeof(NODE))。
(2)在动态分配内存的下一行语句是,使用临时结构指针变量h保存p指针的初始位置,最后返回不能使用p,是因为p的位置已经发生了变化,所以应改为return h。
程序设计题
3.编写函数fun,其功能是:将s所指字符串中除了下标为奇数同时ASCII码值也为奇数的字符之外,其余的所有字符全部删除,串中剩余字符所形成的一个新串放在t所指的数组中。
例如,若s所指字符串的内容为“ABCDEFG12345”,其中字符A的ASCII码值为奇数,但所在元素的下标为偶数,因此需要删除;而字符1的ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t所指数组中的内容应为“135”。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
void fun(char *s,char t[])
{
}
main()
{
char s[100],t[100];
printf(\\
void fun(char*s,char t[])
{
int i,j=0,n;
n=strlen(s);
for(i=0;i<n;i++)
if((i%2)&&(s[i]%2))
{
t[j++]=s[i]; /*将下标为奇数同时ASCII码值为奇数的字符放入数组t中*/
}
t[j]=’\0’; /*最后加上结束标识符*/
}
解析:本题要求除了下标为奇数同时ASCII码值也为奇数的字符,其余的所有字符都删除,即要留下下标为奇数同时ASCII码值也为奇数的字符。所以if的条件语句应为:if(i%2!=0&&s[i]%2!=0)。
本文档预览:3600字符,共3053字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载