模拟题5套Word文档下载推荐.docx
《模拟题5套Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《模拟题5套Word文档下载推荐.docx(24页珍藏版)》请在冰豆网上搜索。
例如:
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);
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);
1.填空题
【1】*【2】'
Z'
【3】tt
【解析】填空1:
由return语句可以看出,该函数的返回值类型是指向字符串的指针,所以应该使用符号"
*"
填空2:
从ASCII码表中可以看出,小写字母的ASCII码值比对应大写字母的ASCII码值大32,根据ASCII码值判断该字母是不是大写字母,判断的标准是ASCII码值是否介于A和Z之间。
填空3:
根据题目的意思这里应该调用函数fun对字符串tt进行转换,所以应该使用tt作为函数的参数。
(1)错误:
=*q)
正确:
{if(*p>
(2)错误:
k++
k++;
【解析】错误1:
依题意,把ASCII值小或相等的字符存放到c数组中,故if语句的关系运算符应为"
>
="
错误2:
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"
(2)函数fun()的功能是:
求出一个2×
M整型二维数组中最大元素的值,并将此值返回调用函数。
#defineM4
fun(int【1】)
inti,j,max=【2】;
2;
for(j=0;
j<
M;
j++)
if(max【3】a[i][j])
max=a[i][j];
returnmax;
FILE*wf;
intarr[2][M]={5,8,3,45,76,-4,12,82};
max=%d\n"
fun(arr));
wf=fopen("
out.dat"
"
w"
fprintf(wf,"
%d"
fclose(wf);
下列给定程序中,函数fun()的功能是根据整型形参m,计算如下公式的值。
y=1-1/(2×
2)+1/(3×
3)-1/(4×
4)+…+(-1)(m+1)/(m×
m)
m中的值为5,则应输出0.838611。
doublefun(intm)
{doubley=1.0;
intj=1;
for(i=2;
i<
=m;
i++)
j=-1*j;
y+=1/(i*i);
return(y);
intn=5;
\nTheresultis%lf\n"
fun(n));
请编一个函数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:
N;
%6d"
t[i][j]);
fun(t,p);
\nTheresultis:
for(k=0;
k<
k++)
%4d"
p[k]);
【1】%【2】return【3】b[i]
根据题目的意思,这里是执行按顺序对每5个元素求一个平均值的操作,所以应该使用取余符号"
,如果是5的倍数,则该式子的值为零。
根据C语言的规定,除了使用关键字void的任何一个子函数都应该有返回值,所以应该使用关键字return把变量k的值返回主函数。
由题目的意思可知这里是把存在数组b中的内容依次循环输出,所以后面的变量名应该使用b[i]。
intj=1;
正确:
doublej=1.0;
y+=1/(i*i);
y+=j/(i*i);
为了做后面的除法运算,j要定义为实型数,否则除得的结果将为整数。
题中公式是加减相间的运算,通过j来实现。
inti,j,max;
max=tt[0][j];
/*假设各列中的第一个元素最大*/
if(tt[i][j]>
max)/*如果各列中的其他元素比最大值还大,
则将这个更大的元素看做当前该
将s所指字符串中的字母转换为按字母序列的后续字母(但Z转化为A,z转化为a),其他字符不变。
ctype.h>
voidfun(char*s)
{while(【1】)
{if(*s>
*s<
||*s>
a'
z'
)
{if(*s=='
)*s='
;
elseif(*s=='
else*s+=【2】;
【3】;
{chars[80];
\nEnterastringwithlength<
80:
gets(s);
\nThestring:
puts(s);
fun(s);
\n\nTheCords:
下列给定程序中,函数fun的功能是按以下递归公式求函数值。
当给n输入5时,函数值为240;
当给n输入3时,函数值为60。
fun(intn);
intc;
if(n=1)
c=15;
else
c=fun(n-1)*2;
return(c);
intn;
Entern:
n);
%d\n\n"
fun(n));
intfun(char*s,intnum)
chars[10];
输入7个字符的字符串:
gets(s);
fun(s,7);
\n%s"
s);
【1】*s【2】1【3】s++
从C语言的学习中我们知道,while语句的结束条件是括号中的式子结果为0,而一个字符串的结尾标志为'
,即满足循环的结束条件,所以一般情况下C语言中使用字符串的结尾作为结束循环的标志;
s为指向一个数组的指针,*s为取出s指向的内容。
根据题目的意思,若该字母不是'
或'
,则该字母的ASCII码值加1。
根据题目的意思,要对字符串所有字母进行遍历,使用指针进行这一过程应该使用循环,即每次都对该指针进行加一操作。
fun(intn)
if(n=1)
if(n==1)
该行是函数的首部,不是一条语句,因此不能以分号结束。
if后面应该紧跟一个条件判断表达式,若写成"
if(n=1)"
,则说明该表达式的值永远为真,也就是说这个条件永远成立,没有递归执行。
{chart;
inti,j;
for(i=1;
num-2;
i++)/*下标值从1开始,用循环依次取得字符串中的字符*/
for(j=i+1;
num-1;
j++)/*将字符与其后的每个字符比较*/
if(s[i]>
s[j])/*如果后面字符的ASCII码值小于该字符的ASCII码值*/
{t=s[i];
/*则交换这两个字符*/
s[i]=s[j];
s[j]=t;
【解析】本题考查利用循环来控制数组元素的操作,首尾元素除外,因此,数组的下标值要从1开始,用循环变量i来依次取得数组中的元素,用数组中的元素s[i]和s[j]进行比较,如果后一个元素的ASCII码值小于前一个元素的ASCII码值,则交换这两个数组元素的值。
下列给定程序中函数fun()的功能是:
将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。
高位仍在高位,低位仍在低位。
当s中的数为87653142时,t中的数为7531。
voidfun(longs,long*t)
{intd;
longs1=1;
*t=0;
while(s>
0)
{d=s【1】10;
if(d%2!
=0)
{*t=d*s1+*t;
s1*=【2】;
s/=【3】;
}
{longs,t;
\nPleaseenters:
%ld"
s);
fun(s,&
t);
Theresultis:
t);
下列给定程序中函数fun()的功能是计算1/n!
的值。
给n输入5,则输出0.008333。
intfun(intn)
{doubleresult=1.0;
if(n==0)
return1.0;
while(n>
1&
n<
170)
result*=n++;
result=1/result;
returnresult;
InputN:
\n1/%d!
=%lf\n"
n,fun(n));
3.编程题
编写函数fun(),它的功能是求n以内(不包括n)同时能被5与11整除的所有自然数之和的平方根s,并作为函数值返回。
n为1000时,函数值应为s=96.979379。
math.h>
doublefun(intn)
clrscr();
printf("
s=%f\n"
fun(1000));
【1】%【2】10【3】10
根据题目的意思,此处是由低到高逐位地提取变量d的每一位,然后再进行判断,所以可以推断出这里应该使用取余符号"
。
根据题目的意思,这里是把提取出来满足条件的数字依次从低到高填入一个新的变量t中,所以进行的操作应该是每一个数字都循环乘以10,再加上原来的部分,例如:
依次得到数字321,最后应该输出123。
由算法可以看出,这里应该是进行完毕一次提取,所以应该舍弃最低位--个位,即把变量s除以10。
result*=n++;
result*=n--;
函数的返回值为实型数据,所以函数的返回类型应为double。
根据阶乘的概念,从n开始,每递减1的数相乘,直到1,因此此处n递减,而不是递增。
{doubles=0.0;
inti;
for(i=0;
n;
i++)/*从0~n中找到既能被5整除同时又能被11整除的数,并将这些数求和*/
if(i%5==0&
i%11==0)
s=s+i;
s=sqrt(s);
/*对s求平方根*/
returns;
【解析】本题的解题思路是逐个取得从0~n之间的所有数,对每次取得的数进行条件判断,条件是既能被5整除同时又能被11整除,注意:
这两个条件要求同时成立,因此用到了"
运算符。
满足条件,该数就被累加到s中去,求出所有符合条件的数后,用sqrt()函数(包含于头文件<
中)对s求平方根。
下列给定的程序中,fun()函数的功能是:
将p所指字符串中每个单词的最后一个字母改成大写(这里的"
单词"
是指有空格隔开的字符串)。
例如,若输入:
Iamastudenttotaketheexamination
则应输出:
IaMAstudenTtOtakEthEexaminatioN
voidfun(char*p)
intk=0;
for(;
*p;
p++)
if(k)
if(*p=='
'
)
【1】;
【2】=toupper(*(p-1));
k=1;
{charchrstr[64];
intd;
\nPleaseenteranEnglishsentencewithin63letters:
gets(chrstr);
d=strlen(chrstr);
chrstr[d]='
chrstr[d+1]=0;
\nBoforechanging:
\n%s"
chrstr);
\nAfterchanging:
下列给定程序中函数fun()的功能是计算正整数num的各位上的数字之平方和。
输入352,则输出应该是38;
若输入328,则输出应该是77。
longfun(longnum)
longk=1;
do
k+=(num%10)*(num%10);
num/=10;
}while(num)
return(k);
longn;
\Pleaseenteranumber:
n)