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