c语言上机模拟试题共10卷.docx

上传人:b****6 文档编号:7805505 上传时间:2023-01-26 格式:DOCX 页数:42 大小:32.72KB
下载 相关 举报
c语言上机模拟试题共10卷.docx_第1页
第1页 / 共42页
c语言上机模拟试题共10卷.docx_第2页
第2页 / 共42页
c语言上机模拟试题共10卷.docx_第3页
第3页 / 共42页
c语言上机模拟试题共10卷.docx_第4页
第4页 / 共42页
c语言上机模拟试题共10卷.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

c语言上机模拟试题共10卷.docx

《c语言上机模拟试题共10卷.docx》由会员分享,可在线阅读,更多相关《c语言上机模拟试题共10卷.docx(42页珍藏版)》请在冰豆网上搜索。

c语言上机模拟试题共10卷.docx

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;i

printf("\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;j

printf("%6d",t[i][j]);

printf("\n");

}

fun(t,p);

printf("\nTheresultis:

\n");

for(k=0;k

printf("%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;i

if(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;i

if((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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1