计算机二级C语言上机题库及答案解析Word下载.docx
- 文档编号:4471337
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:25
- 大小:22.33KB
计算机二级C语言上机题库及答案解析Word下载.docx
《计算机二级C语言上机题库及答案解析Word下载.docx》由会员分享,可在线阅读,更多相关《计算机二级C语言上机题库及答案解析Word下载.docx(25页珍藏版)》请在冰点文库上搜索。
printf("
\nTheoriginalstringis:
%s\n"
s);
fun(s,p);
\nTheresultis:
p);
解题思路:
第一处:
取外循环的控制变量,所以应填:
t=i。
第二处:
内循环的起始变量,应该是i+2,所以应填:
i。
第三处:
新字符串处理完后应添加字符串结束符,所以应填:
'
。
改错题
给定程序MODI1.C中函数fun的功能是:
用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:
π111
┄┄≈1-┄┄+┄┄-┄┄+...
4357
例如,程序运行后,输入0.0001,则程序输出3.1414。
请改正程序中的错误,使它能输出正确的结果。
不要改动main函数,不得增行或删行,也不得更改程序的结构!
floatfun(floatnum)
{ints;
floatn,t,pi;
t=1;
pi=0;
n=1;
s=1;
while(t>
=num)
{
pi=pi+t;
n=n+2;
s=-s;
t=s%n;
pi=pi*4;
returnpi;
main()
{floatn1,n2;
Enterafloatnumber:
"
);
scanf("
%f"
&
n1);
n2=fun(n1);
%6.4f\n"
n2);
要判断t的最后一项绝对小于指定的数,由于t是实数,那么应改为while(fabs(t)>
=num)。
t是s除以n的值,而不是取余数,所以应改t=s/n;
编程题
请编写一个函数voidfun(chara[],charb[],intn),其功能是:
删除一个字符串中指定下标的字符。
其中,a指向原字符串,删除指定字符后的字符串存放在b所指的数组中,n中存放指定的下标。
例如,输入一个字符串:
World,然后输入3,则调用该函数后的结果为:
Word。
注意:
部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#defineLEN20
voidfun(chara[],charb[],intn)
{
{charstr1[LEN],str2[LEN];
intn;
Enterthestring:
\n"
gets(str1);
Enterthepositionofthestringdeleted:
%d"
n);
fun(str1,str2,n);
Thenewstringis:
str2);
NONO();
本题是利用字符串拷贝和字符串连接来生成新的字符串。
参考答案:
strncpy(b,a,n);
b[n]=0;
strcat(b,a+n+1);
填空题
给定程序中,函数fun的功能是:
统计出带有头结点的单向链表中结点的个数,存放在形参n所指的存储单元中。
#defineN8
typedefstructlist
{intdata;
structlist*next;
}SLIST;
SLIST*creatlist(int*a);
voidoutlist(SLIST*);
voidfun(SLIST*h,int*n)
{SLIST*p;
___1___=0;
p=h->
next;
while(p)
{(*n)++;
p=p->
___2___;
{SLIST*head;
inta[N]={12,87,45,32,91,16,20,48},num;
head=creatlist(a);
outlist(head);
fun(___3___,&
num);
\nnumber=%d\n"
num);
SLIST*creatlist(inta[])
{SLIST*h,*p,*q;
inti;
h=p=(SLIST*)malloc(sizeof(SLIST));
{q=(SLIST*)malloc(sizeof(SLIST));
q->
data=a[i];
p->
next=q;
p=q;
p->
next=0;
returnh;
voidoutlist(SLIST*h)
if(p==NULL)printf("
ThelistisNULL!
);
else
{printf("
\nHead"
do
->
p->
data);
p=p->
while(p!
=NULL);
End\n"
本题是要求统计出带有头结点的单向链表中结点的个数。
对n所指的存储单元进行初始化,所以应填:
*n。
指向p的下一个结点,所以应填:
next。
函数调用,在主函数中已经给出了head,所以应填:
head。
给定程序MODI1.C中函数fun的功能是:
求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;
若未找到,则函数值为NULL。
例如,当字符串中的内容为:
abcdabfabcdx"
,t中的内容为:
ab"
时,
输出结果应是:
abcdx。
当字符串中的内容为:
abd"
时,则程序输出未找到信息:
notbefound!
请改正程序中的错误,使它能得出正确的结果。
不要改动main函数,不得增行或删行,也不得更改程序的结构!
char*fun(char*s,char*t)
char*p,*r,*a;
a=Null;
while(*s)
{p=s;
r=t;
while(*r)
if(r==p)
{r++;
p++;
elsebreak;
if(*r=='
)a=s;
s++;
returna;
chars[100],t[100],*p;
\nPleaseenterstringS:
scanf("
%s"
s);
\nPleaseentersubstringt:
t);
p=fun(s,t);
if(p)printf("
p);
elseprintf("
\nNotfound!
);
指向空指针错误,Null应NULL。
比较指针位置的值是否相等,所以应改为:
if(*r==*p)。
函数fun的功能是:
将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;
串中剩余字符所形成的一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为:
ABCDEFG123456"
,其中字符A的ASCII码
值为奇数,因此应当删除;
其中字符B的ASCII码值为偶数,但在数组中的下标为
奇数,因此也应当删除;
而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其它依此类推。
最后t所指的数组中的内容应是:
246"
部分源程序存在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
voidfun(char*s,chart[])
main() www.Examda.CoM
chars[100],t[100];
\nPleaseenterstringS:
s);
fun(s,t);
\nTheresultis:
t);
NONO();
本题是从一个字符串按要求生成另一个新的字符串。
我们使用for循环语句来解决这个问题。
inti,j=0;
for(i=0;
i<
strlen(s);
i+=2)
if(s[i]%2==0)t[j++]=s[i];
t[j]=0;
填空题
给定程序中,函数fun的功能是:
在形参ss所指字符串数组中,查找含有形参substr所指子串的所有字符串并输出,若没找到则输出相应信息。
ss所指字符串数组中共有N个字符串,且串长小于M。
程序中库函数strstr(s1,s2)的功能是在s1串中查找s2子串,若没有,函数值为0,若有,为非0。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
#defineN5
#defineM15
voidfun(char(*ss)[M],char*substr)
{inti,find=0;
__1__;
i++)
if(strstr(ss[i],__2__)!
=NULL)
{find=1;
puts(ss[i]);
printf("
if(find==__3__)printf("
\nDon'
tfound!
{charx[N][M]={"
BASIC"
"
Clangwage"
Java"
QBASIC"
Access"
},str[M];
inti;
\nTheoriginalstring\n\n"
i printf("
\nEnterastringforsearch:
gets(str);
fun(x,str);
本题是根据给定的字符串数组中查找指定的字符串,如果存在,则显示。
利用for循环,从几个字符串中进行查找,程序中已经给定了N个字符串,所以应填:
N。
查找子串,子串由形参substr传递,所以应填:
substr。
试题要求,若没有找到,函数值为0,所以应填:
0。
改错题
求三个数的最小公倍数。
例如,给主函数中的变量x1、x2、x3分别输入15112,
则输出结果应当是:
330。
请改正程序中的错误,使它能得出正确结果。
不要改动main函数,不得增行或删行,也不得更改程序的结构。
fun(intx,y,z)
{intj,t,n,m;
j=1;
t=j%x;
m=j%y;
n=j%z;
while(t!
=0||m!
=0||n!
=0)
{j=j+1;
m=j%y;
returni;
{intx1,x2,x3,j;
Inputx1x2x3:
%d%d%d"
&
x1,&
x2,&
x3);
x1=%d,x2=%d,x3=%d\n"
x1,x2,x3);
j=fun(x1,x2,x3);
Theminimalcommonmultipleis:
%d\n"
j);
第一处:
函数中形参的定义不正确,应改为:
fun(intx,inty,intz)。
第二处:
程序中三个数的最小公倍数是用j处理的,所以应返回j的值。
假定输入的字符串中只包含字母和*号。
请编写函数fun,它的功能是:
只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。
形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个数。
在编写函数时,不得使用C语言提供的字符串函数。
例如,字符串中的内容为:
****A*BC*DEF*G*******,删除后,字符串中的内容应当是:
A*BC*DEF*G。
部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
voidfun(char*a,intn,inth,inte)
{chars[81],*t,*f;
intm=0,tn=0,fn=0;
Enterastring:
gets(s);
t=f=s;
while(*t){t++;
m++;
}
t--;
while(*t=='
*'
){t--;
tn++;
while(*f=='
){f++;
fn++;
fun(s,m,fn,tn);
Thestringafterdeleted:
puts(s);
本题是考察对字符串的操作。
1.求出字符串的长度。
2.利用循环把字符串中字符按要求仍存放在原字符串首址开始的位置上。
char*p=a;
intj=0,len=0;
while(*p){p++;
len++;
while(j a[j]=a[h+j];
j++;
a[j]=0;
给定程序中,函数fun的功能是建立一个N×
N的矩阵。
矩阵元素的构成规律是:
最外层元素的值全部为1;
从外向内第2层元素的值全部为2;
第3层元素的值
全部为3,…依次类推。
例如,若N=5,生成的矩阵为:
11111
12221
12321
#defineN7
voidfun(int(*a)__1__)
{inti,j,k,m;
if(N%2==0)m=N/2;
elsem=N/2+1;
i++)="
for(j=__2__;
j<
a[i][j]=a[N-i-1][j]=i+1;
for(k=i+1;
k<
a[k][i]=a[k][N-i-1]=__3__;
{intx[N][N]={0},i,j;
fun(x);
{for(j=0;
建立一个N×
N的矩阵,所以应填:
[N]。
j的起始变量值应i。
也应该填写i+1。
给定程序MODI1.C中函数fun的功能是:
将十进制正整数m转换成k(2≤k≤9)进制数,并按高位到低位顺序输出。
例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。
请改正fun函数中的错误,使它能得出正确的结果。
不要改动main函数。
不得增行或删行,也不得更改程序的结构!
voidfun(intm,intk)
intaa[20],i;
for(i=0;
m;
i++)
aa[i]=m/k;
m/=k;
}
for(;
i;
i--)
printf("
aa[i]);
intb,n;
\nPleaseenteranumberandabase:
scanf("
%d%d"
n,&
b);
fun(n,b);
应该取模而不是整除,所以应为:
aa[i]=m%k;
输出aa的位置不正确,所以应为:
printf("
aa[i-1]);
编写一个函数,从num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址。
(注意:
主函数中用****作为结束输入的标志,函数fun中给出的语句仅供参考。
)
部分源程序在文件PROG1.C中。
fun(char(*a)[81],intnum,char**max)
inti,k=0,len,maxlen;
/*k为a数组中最长串所在元素的下标,初始为0,maxlen为其串
长*/
maxlen=strlen(a[k]);
i<
num;
i++)<
<
/num;
/*以下完成查找最长串*/
*max=a[k];
charss[10][81],*ps;
intn,i=0;
输入若干个字符串:
gets(ss[i]);
puts(ss[i]);
while(!
strcmp(ss[i],"
****"
)==0)
i++;
n=i;
fun(ss,n,&
ps);
\nmax=%s\n"
ps);
本题是考察考生怎样从已输入的字符串中找出长度最大的字符串。
求字符串的长度可以使用strlen函数。
inti,k=0,maxlen;
/*k为a数组中最长串所在元素的下标,初始为0,maxlen为其串长*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 二级 语言 上机 题库 答案 解析