C语言试题4Word文档格式.docx
《C语言试题4Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言试题4Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
intj=4,m=1,k;
k=fun(&
j,m);
printf(“Thefirstk:
%d\n”,k);
}
intfun(int*x,inty)
{staticintk=2;
k+=*x+1;
*s=k-y;
returnk;
(2)[程序2.2]
main()printf(“\n”);
{char*p1,*p2;
p1=”How_are_you?
”;
答:
?
uoy_era_who
p2=p1+strlen(p1)-1;
Hwaeyu
while(p2>
=p1)
printf(“%c”,*p2--);
printf(“\n”);
for(p2=p1;
*p2!
=’\0’;
p2=p2+2)
printf(“%c”,*p2);
试题三(12分,每小题6分)
改错。
下列每个程序都有三个错误,按题中的计算要求,纠正所有错误。
(1)程序3.1通过调用递归函数来求两个整数的最大公约数。
[程序3.1]
main()
{intc,d;
intgcd(int,int);
scanf(“%d%d”,c,d);
scanf(“%%”,&
c,&
d);
printf(“%dand%dGCD=%d”,答:
printf(“%dand%d
a,b,gcd(c,d));
GCD==%d”,c,d,gcd(c,d));
}
intgcd(inta,intb)
{if(a%b==0)
returna;
returnb;
else
returngcd(b,a%b);
}
(2)程序3.2用二分法在一个按单调不减次序排列的数组中查找某个数。
若存在,输出该数及它的下标位置;
若不存在,输出表示找不到该数的信息。
[程序3.2]
{inta[10]={2,5,6,8,11,15,18,22,60,88};
intlow,high,m,i,x;
scanf(“%f”,&
x);
scanf(%d”,&
low=0;
high=9;
while(low<
=high)
{m=(low+high)/2;
if(x==a[m])break;
elseif(x>
a[m])high=m+1;
elseif(x>
a[m])low=m+1;
elselow=m-1;
elsehigh=m-1;
if(low<
printf(“%disfound,thepositionis%d”,x,m);
elseprintf(“%disnotfound\n”,x);
试题四(18分,每小题6分)
(1)编写完整的程序,用公式
计算e的近似值,直到某项小于10-7为止。
(2)试写一个函数,以m为整型参数,判别m是否为素数。
若m是素数,则返回1;
若m不是素数,则返回0。
(3)设单链表的结点类型doctor中有工号num(整型)、工资pay(实型)、和next(指向doctor类型的指针类型)三个成员。
假定单链表已经建立,链首指针为head,试写一个函数,以head为形式参数,其功能是删除给定工号为n的结点。
试题五(15分)
填空。
[程序5说明]
本程序读入两个十进制正整数n和base,将n转化为base进制的数(2≤base≤16)。
例如:
若输入92,则输出9(10)=1001
(2);
若输入9416,则输出94(10)=5E(16);
若输入2008,则输出200(10)=310(8);
若输入1005,则输出100(10)=400(5);
若输入10712,则输出107(10)=8B(12).
[程序5]
#include<
stdio.h>
structnode
{intnum;
structnode*next;
};
{structnode*p,*b=NULL;
intm,n,base,c;
printf(“Inputnandbase:
\n”);
scanf(“%d%d”,&
n,&
base);
m=n;
while(n)
{c=___
(1)_____;
n=n/base;
if(c<
10)
c=___
(2)____;
elsec=c+’A’-10;
p=___(3)___;
答:
(structnode*)malloc(sizeof(structnode))
p->
num=c;
next=b;
b=p;
printf(“Output:
printf(“%d(10)”,____(4)_____);
m
while(p)
{printf(“%c”,p->
num);
p=_____(5)_____;
p->
next
printf(“(%d)\n”,base);
free(p);
试题六(15分)
填空。
[程序6说明]
本程序首先输入某单位的职工数据(包括每个职工的工号、姓名、工资),然后根据
工资由高到低(即按单调不增次序)对这些数据实行排序,排好序的数据送入磁盘文件
d:
\test.dat中保存,同时在屏幕上显示排序後的内容。
[程序6]
#include<
#defineN500
structworker
{intnum;
charname[30];
foatpay;
};
{structworkerw[N],temp;
inti,j,k;
______
(1)______;
FILE*fp
printf(“Inputdata;
for(i=0;
i<
N;
i++)
scanf(“%d%s%f”,&
w[i].num,w[i].name,&
w[i].pay);
for(j=0;
N-1;
{k=i;
for(j=i+1;
j<
N;
j++)
if(______
(2)______)答:
w[k].pay<
w[j].pay
k=_____(3)______;
j
temp=w[i];
w[i]=w[k];
w[k]=temp;
printf(“Createanddisplayafile:
fp=fopen(______(4)______);
”d:
\\test.dat”,”wb”
for(i=0;
{fwrite(____(5)_____);
&
w[j],sizeof(structworker),1,fp
printf(“%d%s%f”,w[i].num,w[i].name,w[i].pay);
fclose(fp);
}
参考答案
试题一
28分
(1)
10
4
(2)
4.0
(3)
19
(4)
(x>
0)&
(x<
100)
(5)
第一个参数用来统计命令行中字符串的个数,第二个参数是字符型指针数组,用来存放命令行中各字符串的首地址。
(6)
000101,110011,010100,010011
(7)
指向本结构体类型变量的指针成员。
试题二
12分
Thefirstk:
7
Thesecondk:
14
6
Hwaeyu
试题三
将第4行改为scanf(“%%”,&
将第5行改为printf(“%dand%dGCD==%d”,c,d,gcd(c,d));
将第9行改为returnb;
将第4行改为scanf(%d”,&
将第9行改为elseif(x>
将第10行改为elsehigh=m-1;
试题四
18分
{doublee=1.0,u=1.0;
intn=1;
while(u>
=1.0e-7)
{u=y/n;
e=e+u;
n=n+1;
printf(“e=%8.6f\n”,e);
intprime(intm)
{inti;
for(i=2;
m;
if(m%I==0)break;
if(i==m)return1;
elsereturn0;
structdoctor*del(structdoctor*head,intn)
{structdoctor*p1,*p2;
p1=head;
while(n!
=p1->
num&
p1->
next!
=nil)
{p2=p1;
p1=p1->
next;
if(n==p1->
num)
{if(p1==head)head=p1->
elsep2->
next=p1->
free(p1);
elseprintf(“%disnotfound.”,n);
retrunhead;
试题五
15分
n%base
3
c+’0’
m
试题六