14套.docx

上传人:b****7 文档编号:25106973 上传时间:2023-06-05 格式:DOCX 页数:64 大小:41.01KB
下载 相关 举报
14套.docx_第1页
第1页 / 共64页
14套.docx_第2页
第2页 / 共64页
14套.docx_第3页
第3页 / 共64页
14套.docx_第4页
第4页 / 共64页
14套.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

14套.docx

《14套.docx》由会员分享,可在线阅读,更多相关《14套.docx(64页珍藏版)》请在冰豆网上搜索。

14套.docx

14套

第1套

1.填空题

请补充main函数,该函数的功能是:

把一个字符串中的所有小写字母字符全部转换成大写字母字符,其他字符不变,结果保存原来的字符串中。

例如:

当str[N]="123abcdefABCDEF!

",结果输出:

"123ABCDEFABCDEF!

"。

注意:

部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

试题程序:

#include

#include

#include

#defineN80

voidmain()

{

intj;

charstr[N]="123abcdefABCDEF!

";

char*pf=str;

clrscr();

printf("***originalstring***\n");

puts(str);

【1】;

while(*(pf+j))

{

if(*(pf+j)>='a'&&*(pf+j)<='z')

{

*(pf+j)=【2】;

j++;

}

else

【3】;

}

printf("******newstring******\n");

puts(str);

system("pause");

}

【1】j=0【2】*(pf+j)-32【3】j++

【解析】填空1:

变量j声明时没有初始化,而后面程序用到j,所以在这里对j初始化为0。

填空2:

将小写字母转换为对应的大写字母的方法是,小写字母的ASCII码减去32,得到对应的大写字母的ASCII码。

填空3:

如果当前字符不是小写字母,则不做任何处理,使指针指向下一个字符,准备进行判断。

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

}

(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);

}

【解析】语句*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;是将a数的十位和个位数依次放在c数个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。

注意"/"和"%"的用法。

voidfun(inta,intb,long*c)

{

*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;

}

第2套

1.填空题

请补充main函数,该函数的功能是求方程ax2+bx+c=0的两个实数根。

方程的系数a、b、c从键盘输入,如果判别式(disc=b2-4ac)小于0,则要求重新输入a、b、c的值。

例如,当a=1,b=2,c=1时,方程的两个根分别是x1=-1.00,x2=-1.00。

注意:

部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

试题程序:

#include"math.h"

#include

main()

{

floata,b,c,disc,x1,x2;

clrscr();

do

{

printf("Inputa,b,c:

");

scanf("%f,%f,%f",&a,&b,&c);

disc=b*b-4*a*c;

if(disc<0)

printf("disc=%f\nInputagain!

\n",disc);

}while(【1】);

printf("*******theresult*******\n");

x1=【2】;

x2=【3】;

printf("\nx1=%6.2f\nx2=%6.2f\n",x1,x2);

}

【1】disc<0【2】(-b+sqrt(disc))/(2*a)【3】(-b-sqrt(disc))/(2*a)

【解析】填空1:

题目要求当判别式disc小于0时,要重新输入a、b、c的值,所以do-while循环的执行条件是disc<0。

填空2:

方程

的一个实数根是:

填空3:

方程

的另一个实数根是:

2.改错题

下列给定程序中,函数fun()的功能是根据整型形参m,计算如下公式的值。

y=1-1/(2×2)+1/(3×3)-1/(4×4)+…+(-1)(m+1)/(m×m)

例如:

m中的值为5,则应输出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));

}

(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");

}

【解析】本题中函数的功能是求出二维数组中每列的最大元素。

首先,假设各列中的第一个元素最大,然后利用行标值的移动来依次取得各列中其他元素的值,并与假设的最大值进行比较,如果遇到更大的,则把这个更大的元素看做当前该列中最大的元素,继续与该列中其他元素比较。

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数组中*/

}

第3套

1.填空题

请补充函数fun(),该函数的功能是:

把一个整数转换成字符串,并倒序保存在字符数组str中。

例如:

当n=13572468时,str="86427531"。

注意:

部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

试题程序:

#include

#include

#defineN80

charstr[N];

voidfun(longintn)

{

inti=0;

while(【1】)

{

str[i]=【2】;

n/=10;

i++;

}

【3】;

}

main()

{

longintn=13572468;

clrscr();

printf("***theorigialdata***\n");

printf("n=%ld",n);

fun(n);

printf("\n%s",str);

}

【1】n>0【2】n%10+'0'【3】str[i]=′\0′

【解析】填空1:

while循环的执行条件是n>0,当n等于0时,说明已经将整数的各位数字都转换为数字字符并存入字符串中了。

填空2:

n对10求余,得到整数n的个位数字,在加上字符′0′的ASCII码,得到对应的数字字符,并存入字符串str中。

填空3:

将整数转换为字符串并倒序存放入字符数组str中后,还要在str最后加上字符串结束标记符′\0′。

2.改错题

下列给定程序中,函数fun的功能是按以下递归公式求函数值。

例如:

当给n输入5时,函数值为240;当给n输入3时,函数值为60。

请改正程序中的错误,使它能得到正确结果。

注意:

不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include

/**********************found***********************/

fun(intn);

{

intc;

/**********************found***********************/

if(n=1)

c=15;

else

c=fun(n-1)*2;

return(c);

}

main()

{

intn;

printf("Entern:

");

scanf("%d",&n);

printf("Theresult:

%d\n\n",fun(n));

}

(1)错误:

fun(intn);

正确:

fun(intn)

(2)错误:

if(n=1)

正确:

if(n==1)

【解析】错误1:

该行是函数的首部,不是一条语句,因此不能以分号结束。

错误2:

if后面应该紧跟一个条件判断表达式,若写成"if(n=1)",则说明该表达式的值永远为真,也就是说这个条件永远成立,没有递归执行。

 

3.编程题

请编写函数fun(),对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII值码升序排列。

编写完程序,运行程序后输入:

字符串为Bdsihad,则排序后输出为应为Badhisd。

注意:

部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include

#include

#include

intfun(char*s,intnum)

{

 

}

main()

{

chars[10];

clrscr();

printf("输入7个字符的字符串:

");

gets(s);

fun(s,7);

printf("\n%s",s);

}

【解析】本题考查利用循环来控制数组元素的操作,首尾元素除外,因此,数组的下标值要从1开始,用循环变量i来依次取得数组中的元素,用数组中的元素s[i]和s[j]进行比较,如果后一个元素的ASCII码值小于前一个元素的ASCII码值,则交换这两个数组元素的值。

intfun(char*s,intnum)

{chart;

inti,j;

for(i=1;i

for(j=i+1;j

if(s[i]>s[j])/*如果后面字符的ASCII码值小于该字符的ASCII码值*/

{t=s[i];/*则交换这两个字符*/

s[i]=s[j];

s[j]=t;

}

}

第4套

1.填空题

数组xx[N]保存着一组3位数的无符号正整数,其元素的个数通过变量num传入函数fun()。

请补充函数fun(),该函数的功能是:

从数组xx中找出个位和百位的数字相等的所有无符号整数,结果保存在数组yy中,其个数由函数fun()返回。

例如:

当xx[8]={135,78,72,32,222,424,333,141,541}时,bb[6]={787,232,222,424,333,141}。

注意:

部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

试题程序:

#include

#defineN1000

intfun(intxx[],intbb[],intnum)

{

inti,n=0;

intg,b;

for(i=0;i

{

g=【1】;

b=xx[i]/100;

if(g==b)

【2】;

}

return【3】;

}

main()

{

intxx[8]={135,787,232,222,424,333,

141,541};

intyy[N];

intnum=0,n=0,i=0;

num=8;

clrscr();

printf("***originaldata***\n");

for(i=0;i

printf("%u",xx[i]);

printf("\n\n\n");

n=fun(xx,yy,num);

printf("\nyy=");

for(i=0;i

printf("%u",yy[i]);

}

【1】xx[i]%10【2】bb[n++]=xx[i]【3】n

【解析】填空1:

变量b存放了三位数的百位数字,所以变量g应该存放三位数的个位数字,将这个三位数对10求余,则得到这个数的个位数字。

填空2:

将个位数字与百位数字相等的整数存于数组bb中。

填空3:

变量n记录了个位数字等于百位数字的整数的个数,题目要求个数由函数fun()返回,所以应返回n。

2.改错题

下列给定程序中函数fun()的功能是计算1/n!

的值。

例如:

给n输入5,则输出0.008333。

请改正程序中的错误,使它能得到正确结果。

注意:

不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include

#include

/**********************found***********************/

intfun(intn)

{doubleresult=1.0;

if(n==0)

return1.0;

while(n>1&&n<170)

/**********************found***********************/

result*=n++;

result=1/result;

returnresult;

}

main()

{

intn;

printf("InputN:

");

scanf("%d",&n);

printf("\n1/%d!

=%lf\n",n,fun(n));

}

(1)错误:

intfun(intn)

正确:

doublefun(intn)

(2)错误:

result*=n++;

正确:

result*=n--;

【解析】错误1:

函数的返回值为实型数据,所以函数的返回类型应为double。

错误2:

根据阶乘的概念,从n开始,每递减1的数相乘,直到1,因此此处n递减,而不是递增。

 

3.编程题

编写函数fun(),它的功能是求n以内(不包括n)同时能被5与11整除的所有自然数之和的平方根s,并作为函数值返回。

例如:

n为1000时,函数值应为s=96.979379。

注意:

部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include

#include

#include

doublefun(intn)

{

 

}

main()

{

clrscr();

printf("s=%f\n",fun(1000));

}

【解析】本题的解题思路是逐个取得从0~n之间的所有数,对每次取得的数进行条件判断,条件是既能被5整除同时又能被11整除,注意:

这两个条件要求同时成立,因此用到了"&&"运算符。

满足条件,该数就被累加到s中去,求出所有符合条件的数后,用sqrt()函数(包含于头文件中)对s求平方根。

doublefun(intn)

{doubles=0.0;

inti;

for(i=0;i

if(i%5==0&&i%11==0)

s=s+i;

s=sqrt(s);/*对s求平方根*/

returns;

}

第5套

1.填空题

请补充main函数,该函数的功能是求方程ax2+bx+c=0的根(方程的系数a,b,c从键盘输入)。

例如,当a=1,b=2,c=1时,方程的两个根分别是:

x1=-1.00,x2=-1.00。

注意:

部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。

试题程序:

#include

#include

#include

main()

{

floata,b,c,disc,x1,x2,p,q;

scanf("%f,%f,%f",&a,&b,&c);

disc=b*b-4*a*c;

clrscr();

printf("*******theresult*******\n");

if(disc>=0)

{

x1=【1】;

x2=(-b-sqrt(disc))/(2*a);

printf("x1=%6.2f,x2=%6.2f\n",x1,x2);

}

else

{

p=【2】;

q=【3】;

printf("x1=%6.2f+%6.2fi\n",p,q);

printf("x2=%6.2f-%6.2fi\n",p,q);

}

}

【1】(-b+sqrt(disc))/(2*a)

【2】-b/(2*a)

【3】sqrt(fabs(disc))/(2*a)

【解析】填空1:

方程的根是:

当时,;当时,。

填空2:

由输出格式可知,。

填空3:

由输出格式可知,。

2.改错题

下列给定程序中函数fun()的功能是计算正整数num的各位上的数字之平方和。

例如:

输入352,则输出应该是38;若输入328,则输出应该是77。

请改正程序中的错误,使它能得到正确结果。

注意:

不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include

#include

longfun(longnum)

{

/**********************found***********************/

l

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

当前位置:首页 > 外语学习 > 法语学习

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

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