c语言上机模拟试题共10卷.docx
《c语言上机模拟试题共10卷.docx》由会员分享,可在线阅读,更多相关《c语言上机模拟试题共10卷.docx(42页珍藏版)》请在冰豆网上搜索。
![c语言上机模拟试题共10卷.docx](https://file1.bdocx.com/fileroot1/2023-1/25/79a3a492-0eff-4c11-94fc-b1def70fb191/79a3a492-0eff-4c11-94fc-b1def70fb1911.gif)
c语言上机模拟试题共10卷
试卷一、
1.填空题
下列给定程序中,函数fun()的作用是:
将字符串tt中的大写字母都改为对应的小写字母,其他字符不变。
例如,若输入"Ab,cD",则输出"ab,cd"。
试题程序:
#include
#include
#include
char【1】fun(chartt[])
{
inti;
for(i=0;tt[i];i++)
{
if((tt[i]>='A')&&(tt[i]<=【2】))
tt[i]+=32;
}
return(tt);
}
main()
{
chartt[81];
printf("\nPleaseenterastring:
");
gets(tt);
printf("\nTheresultstringis:
\n%s",fun(【3】));
}
1.填空题
【1】*【2】'Z'【3】tt
【解析】填空1:
由return语句可以看出,该函数的返回值类型是指向字符串的指针,所以应该使用符号"*"。
填空2:
从ASCII码表中可以看出,小写字母的ASCII码值比对应大写字母的ASCII码值大32,根据ASCII码值判断该字母是不是大写字母,判断的标准是ASCII码值是否介于A和Z之间。
填空3:
根据题目的意思这里应该调用函数fun对字符串tt进行转换,所以应该使用tt作为函数的参数。
2.改错题
下列给定程序中,函数fun()的功能是逐个比较a,b两个字符串对应位置中的字符,把ASCII值小或相等的字符依次存放到c数组中,形成一个新的字符串。
例如:
a中的字符串为fshADfg,b中的字符串为sdAEdi,则c中的字符串应为fdAADf。
请改正程序中的错误,使它能得到正确结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
voidfun(char*p,char*q,char*c)
{intk=0;
while(*p||*q)
/**********************found***********************/
{if(*p<=*q)
c[k]=*q;
elsec[k]=*p;
if(*p)p++;
if(*q)q++;
/**********************found***********************/
k++
}
}
main()
{chara[10]="fshADfg",b[10]="sdAEdi",c[80]={'\0'};
fun(a,b,c);
printf("Thestringa:
");puts(a);
printf("Thestringb:
");puts(b);
printf("Theresult:
");puts(c);
}
2.改错题
(1)错误:
{if(*p<=*q)
正确:
{if(*p>=*q)
(2)错误:
k++
正确:
k++;
【解析】错误1:
依题意,把ASCII值小或相等的字符存放到c数组中,故if语句的关系运算符应为">="。
错误2:
C语言规定,每个语句要用分号结束。
3.编程题
请编写函数fun,其功能是:
将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。
例如,当a=16,b=35,调用该函数后,c=5361。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
voidfun(inta,intb,long*c)
{
}
main()
{
inta,b;
longc;
clrscr();
printf("Inputa,b;");
scanf("%d%d",&a,&b);
fun(a,b,&c);
printf("Theresultis:
%ld\n",c);
}
3.编程题
voidfun(inta,intb,long*c)
{
*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;
}
【解析】语句*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;是将a数的十位和个位数依次放在c数个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。
注意"/"和"%"的用法。
试卷二、
1.填空题
下列给定程序中,函数fun()的功能是:
按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每5个元素求一个平均值,并将这些值依次存放在w所指的数组中。
若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。
例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。
试题程序:
#include
#defineSIZE20
fun(double*s,double*w)
{intk,i;doublesum;
for(k=2,i=0;i{s[i]=k;k+=2;}
sum=0.0;
for(k=0,i=0;i{sum+=s[i];
if((i+1)【1】5==0)
{w[k]=sum/5;sum=0;k++;}
}
【2】k;
}
main()
{doublea[SIZE],b[SIZE/5];
intI,k;
k=fun(a,b);
printf("Theoriginaldata:
\n");
for(i=0;i{
if(i%5==0)printf("\n");
printf("%4.0f",a[i]);
}
printf("\n\nTheresult:
\n");
for(i=0;iprintf("\n\n");
}
1.填空题
【1】%【2】return【3】b[i]
【解析】填空1:
根据题目的意思,这里是执行按顺序对每5个元素求一个平均值的操作,所以应该使用取余符号"%",如果是5的倍数,则该式子的值为零。
填空2:
根据C语言的规定,除了使用关键字void的任何一个子函数都应该有返回值,所以应该使用关键字return把变量k的值返回主函数。
填空3:
由题目的意思可知这里是把存在数组b中的内容依次循环输出,所以后面的变量名应该使用b[i]。
2.改错题
下列给定程序中,函数fun()的功能是根据整型形参m,计算如下公式的值。
y=1-1/(2×2)+1/(3×3)-1/(4×4)+…
例如:
m中的值为5,则应输出是1-1/4+1/9-1/16+1/25=0.838611。
请改正程序中的错误,使它能得到正确结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
doublefun(intm)
{doubley=1.0;
/**********************found***********************/
intj=1;
intI;
for(i=2;i<=m;i++)
{
j=-1*j;
/**********************found***********************/
y+=1/(I*i);
}
return(y);
}
main()
{
intn=5;
clrscr();
printf("\nTheresultis%lf\n",fun(n));
}
2.改错题
(1)错误:
intj=1;
正确:
doublej=1.0;
(2)错误:
y+=1/(i*i);
正确:
y+=j/(i*i);
【解析】错误1:
为了做后面的除法运算,j要定义为实型数,否则除得的结果将为整数。
错误2:
题中公式是加减相间的运算,通过j来实现。
3.编程题
请编一个函数voidfun(inttt[M][N],intpp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入pp所指的一维数组中。
二维数组中的数已在主函数中给出。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include
#include
#defineM3
#defineN4
voidfun(inttt[M][N],intpp[N])
{
}
main()
{
intt[M][N]={{68,32,54,12},{14,24,88,58},{42,22,44,56}};
intp[N],i,j,k;
clrscr();
printf("Theriginaldatais:
\n");
for(i=0;i{
for(j=0;jprintf("%6d",t[i][j]);
printf("\n");
}
fun(t,p);
printf("\nTheresultis:
\n");
for(k=0;kprintf("%4d",p[k]);
printf("\n");
}
3.编程题
voidfun(inttt[M][N],intpp[N])
{
intI,j,max;
for(j=0;j{
max=tt[0][j];/*假设各列中的第一个元素最大*/
for(i=0;iif(tt[i][j]>max)/*如果各列中的其他元素比最大值还大,
则将这个更大的元素看作当前该列中最大的元素*/
max=tt[i][j];
pp[j]=max;/*将各列的最大值依次放入pp数组中*/
}
}
试卷三、
1.填空题
给定程序中,函数fun的功能是:
将形参n中各位上为偶数的数取出,按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。
例如,从主函数输入一个整数27638496,函数返回值为26846。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#include
unsignedlongfun(unsignedlongn)
{
unsignedlongx=0,s,i;
intt;
s=n;
i=【1】;
while(【2】)
{
t=s%10;
if(t%2==0)
{
x=x+t*i;i=【3】;
}
s=s/10;
}
returnx;
}
main()
{
unsignedlongn=-1;
while(n>99999999||n<0)
{
printf("input(0");
scanf("%ld",&n);
}
printf("\nTheresultis:
%ld\n",fun(n));
}
1.填空题
【1】1或1L【2】s>0或s!
=0或s【3】i*10
【解析】填空1:
从x=x+t*I;语句,可以看到i是将t放到正确数位上的幂指数,相当于t*10n,空1给i赋初值,连乘的初值为1,因此应填入:
1或1L。
填空2:
空2是考查对循环条件表达式的判断,由于是取s每一位上的数给t,判断是否为偶数,同时s除以10,显然s的值越来越小,当s不为零时,继续循环,因此应填入:
s>0或s!
=0或s。
填空3:
空3是对i进行操作,由于随着循环的进行,所取出的数t的幂指数越来越大,每次增大10,因此应填入:
i*10。
2、改错题
给定程序中,函数fun的功能是:
求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。
例如,当字符串中的内容为“abcdabfabcdx”、t中的内容为“ab”时,输出结果应是abcdx。
当字符串中的内容为“abcdabfabcdx”、t中的内容为“abd”时,则程序输出未找到信息notbefound!
。
请改正程序中的错误,使其能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
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++;}
elsebreak;
if(*r=='\0')a=s;
s++;
}
returna;
}
main()
{
chars[100],t[100],*p;
printf("\nPleaseenterstringS:
");
scanf("%s",s);
printf("\nPleaseentersubstringt:
");
scanf("%s",t);
p=fun(s,t);
if(p)printf("\nTheresultis:
%s\n",p);
elseprintf("\nNotfound!
\n");
}
2.改错题
(1)错误:
a=Null;
正确:
a=NULL;
(2)错误:
if(r==p)
正确:
if(*r==*p)。
【解析】错误1:
二级C是区分大小写的,在仔细阅读程序后,发现Null是一个错误的标识符。
给a指针赋空值,空值的宏定义符号是NULL,因此应该改为:
a=NULL;
错误2:
按照语义是判断r和p指针是否相等,显然是错误的。
因为本题是判断子串t是否在串s中出现,应该判定r和p所指内存中字符是否相同,因此应该改为if(*r==*p)。
3.编程题
函数fun的功能是:
将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为“ABCDEFG123456”,其中字符A的ASCII码值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。
最后,t所指的数组中的内容应是“246”。
注意:
部分源程序已给出。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include
#include
voidfun(char*s,chart[])
{inti,j;
for(i=j=0;iif((i%2)==0&&(s[i]%2)==0)
t[j++]=s[i];
t[j]=’\0’;/*此处将’\0’改成0也是一样的*/
}
main()
{
chars[100],t[100];
printf("\nPleaseenterstringS:
");
scanf("%s",s);
fun(s,t);
printf("\nTheresultis:
%s\n",t);
}
3.编程题
(1)本题主要考查对奇偶数的判断以及库函数strlen的使用。
根据题意可知,只保留下标为偶数、同时ASCII值也为偶数的字符,这就需要用循环变量k将字符串查看一遍,逐个字符判断是否满足条件k%2==0&&s[k]%2==0,并将满足条件的字符复制到t中,再设一个计数器变量n,统计复制到t的字符数。
复制完毕,在串尾设字符串结束符'\0'。
(2)按上述解析写出的函数是:
voidfun(char*s,chart[])
{
intk,n=0;
for(k=0;k if(k%2==0&&s[k]%2==0)
t[n++]=s[k];
t[n]='\0';
}
试卷四、
1、填空题
给定程序中,函数fun的功能是:
找出N×N矩阵中每列元素中的最大值,并按顺序依次存放于形参b所指的一维数组中。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
#include
#defineN4
voidfun(int(*a)[N],int*b)
{
inti,j;
for(i=0;i {
b[i]=【1】;
for(j=1;j if(b[i]【2】a[j][i])
b[i]=a[j][i];
}
}
main()
{
intx[N][N]={{12,5,8,7},{6,1,9,3},
{1,2,3,4},{2,8,4,3}},y[N],i,j;
printf("\nThematrix:
\n");
for(i=0;i {
for(j=0;j printf("%4d",x[i][j]);
printf("\n");
}
fun(【3】);
printf("\nTheresultis:
");
for(i=0;i printf("\n");
}
1.填空题
【1】a[0][i]【2】<或<=【3】x,y
【解析】填空1:
b是一维数组,存放N×N矩阵中每列元素中的最大值,循环开始,第i列的b[i]应该首先赋值为每列的第一个元素a[0][i],再循环与本列其他元素比较,最后找出每列元素中的最大值。
因此空1中应该填入:
a[0][i]。
填空2:
for(j=1;j<或<=。
填空3:
空3是调用函数fun,由上下文可知,应该填入:
x,y。
2、改错题
给定程序中,函数fun的功能是:
依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。
请改正程序中的错误,使其能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
voidfun(char*s)
{
inti,j;
for(i=0,j=0;s[i]!
='\0';i++)
if(s[i]>='0'&&s[i]<='9')
/**********************found***********************/
s[j]=s[i];
/**********************found***********************/
s[j]="\0";
}
main()
{
charitem[80];
printf("\nEnterastring:
");
gets(item);
printf("Thestringis:
%s\n",item);
fun(item);
printf("Thestringofchangingis:
%s\n",
item);
}
2.改错题
(1)错误:
s[j]=s[i];
正确:
s[j++]=s[i];
(2)错误:
s[j]="\0";
正确:
s[j]='\0';
【解析】错误1:
第1处错误的前一语句是if(s[i]>='0'&&s[i]<='9'),含义是当s[i]是数字时保留,形成新字符串,覆盖原来的字符串。
j是新字符串的字符个数计数器,每次赋值应该加1,因此s[j]=s[i];应该改为s[j++]=s[i];。
错误2:
由于j是新字符串的字符个数计数器,这里是给新字符串输入一个结束符,应该是'\0'而不是"\0",因此应该改为s[j]='\0';。
3、编程题
请编写函数fun,其功能是:
比较两个字符串的长度,函数返回较长的字符串。
若两个字符串长度相等,则返回第1个字符串(不得使用C语言提供的求字符串长度的函数)。
例如,输入beijingshijiazhuang(为回车键),函数将返回shijiazhuang。
注意:
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include
char*fun(char*s,char*t)
{
}
main()
{
chara[20],b[10],*p,*q;
intI;
printf("Input1thstring:
");
gets(a);
printf("Input2thstring:
");
gets(b);
printf("%s",fun(a,b));
}
3、编程题
(1)本题主要考查for循环语句的概念。
根据题意知,需要使用两个循环来实现,即第1个for循环的作用是求字符串s中字符的个数;第2个for循环的作用是求字符串t中字符的个数。
然后进行比较即可。
由于任何for循环都要控制一条语句,因此在每个for循环条件后面必须要加一个分号。
(2)按上述解析写出的函数是:
char*fun(char*s,char*t)
{
inti,j;
for(i=0;s[i]!
='\0';i++);
/*求字符串s的长度*/
for(j=0;t[j]!
='\0';j++);
/*求字符串t的长度*/
if(i>=j)
re