试题5760Word格式.docx
《试题5760Word格式.docx》由会员分享,可在线阅读,更多相关《试题5760Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
\n"
);
gets(str);
\n***originalstring***\n"
puts(str);
\nInputacharactor:
scanf("
%c"
&
ch);
fun(str,ch);
\n***newstring***\n"
【1】i++【2】s[j++]=s[i]【3】s[j]='
\0'
【解析】填空1:
如果当前字符比指定字符小,则什么都不做,通过i++访问下一个字符。
填空2:
如果当前字符大于等于指定字符,则将它保存在字符数组s中。
填空3:
通过保存比指定字符大或相等的字符,来实现删除比指定字符小的字符。
处理结束后,在字符串s最后要加上结束标记符′\0′。
2.改错题
下列给定程序中fun()函数的功能是:
将n个无序整数从小到大排序。
请改正程序中的错误,使它能得出正确的结果。
不要改动main函数,不得增行或删行,也不得更改程序的结构。
conio.h>
stdlib.h>
fun(intn,int*a)
{inti,j,p,t;
for(j=0;
j<
n-1;
j++)
{p=j;
/**********************found***********************/
for(i=j+1;
i<
i++)
if(a[p]>
a[i])
t=i;
if(p!
=j)
{t=a[j];
a[j]=a[p];
a[p]=t;
putarr(intn,int*z)
{inti;
for(i=1;
=n;
i++,z++)
{printf("
%4d"
*z);
if(!
(i%10))printf("
}printf("
{intaa[20]={9,3,0,4,1,2,5,6,8,10,7},n=11;
\n\nBeforesorting%dnumbers:
n);
putarr(n,aa);
fun(n,aa);
\nAftersorting%dnumbers:
putarr(n,aa);
(1)错误:
for(i=j+1;
正确:
n;
(2)错误:
t=i;
p=i;
【解析】该程序是对n个数实现从小到大的排序,该题中先是找出输入整数的最小项,置于指针第1个元素的位置;
再找出第2个元素至尾元素的最小项,置于第2个元素的位置;
之后顺次处理后读元素。
3.编程题
请编写函数fun(),它的功能是:
求出ss所指字符串中指定字符的个数,并返回此值。
例如,若输入字符串123412132,输入字符1,则输出3。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#defineM81
intfun(char*ss,charc)
{chara[M],ch;
clrscr();
printf("
\nPleaseenterastring:
"
gets(a);
\nPleaseenterachar:
ch=getchar();
\nThenumberofthecharis:
%d\n"
fun(a,ch));
【解析】从字符串ss中找出子字符串的方法是:
从第1个字符开始,对字符串进行遍历;
若ss串的当前字符等于t串的第1个字符,两字符串的指针自动加1,继续比较下一个字符;
若比较至字符串的结尾,则跳出循环;
若ss串的字符和c串的字符不对应相同,则继续对ss串的下一个字符进行处理。
本程序是采用逐一比较的方式找出出现的次数。
循环的作用是在串中从左到右逐一走动,if()的作用是进行判断是否相同,若与c相同则表示又出现一次。
inti=0;
for(;
*ss!
='
;
ss++)
if(*ss==c)
i++;
/*求出ss所指字符串中指定字符的个数*/
returni;
第58套
交换数组aa中最大和最小两个元素的位置,结果依然保存在原数组中,其它元素位置不变。
注意数组aa中没有相同元素。
33,67,42,58,25,76,85,16,41,56"
,则输出"
33,67,42,58,25,76,16,85,41,56"
#defineN10
voidfun(intaa[])
inti,j,t;
intmax=0,min=0;
for(i=0;
i<
N;
i++)
if(【1】)
max=i;
if(【2】)
min=i;
t=aa[max];
aa[min]=t;
inti;
intaa[N]={33,67,42,58,25,76,85,16,
41,56};
clrscr();
printf("
\n***originallist***\n"
aa[i]);
fun(aa);
\n***newlist***\n"
【1】aa[max]<
aa[i]【2】aa[min]>
aa[i]【3】aa[max]=aa[min]
先假设aa[0]最大,如果找到更大的元素,则将这个元素的下标赋给max。
同理,先假设aa[0]最小,如果找到更小的元素,则将这个元素的下标赋给min。
找到最大值和最小值之后,借助第三个变量t交换这两个元素。
N个有序整数数列已放在一维数组中,给定下列程序中,函数fun()的功能是:
利用折半查找算法查找整数m在数组中的位置。
若找到,则返回其下标值;
反之,则返回-1。
折半查找的基本算法是:
每次查找前先确定数组中待查的范围:
low和high(low<
high),然后把m与中间位置(mid)中元素的值进行比较。
如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;
反之,下次查找范围落在中间位置之前的元素中。
直到low>
high,查找结束。
voidfun(inta[],intm)
{intlow=0,high=N-1,mid;
while(low<
=high)
{mid=(low+high)/2;
if(m<
a[mid])
high=mid-1;
elseif(m>
=a[mid])
low=mid+1;
elsereturn(mid);
return(-1);
{inti,a[N]={-3,4,7,9,13,24,67,89,100,180},k,m;
a数组中的数据如下:
"
i++)printf("
%d"
a[i]);
Enterm:
&
m);
k=fun(a,m);
if(k>
=0)printf("
m=%d,index=%d\n"
m,k);
elseprintf("
Notbefound!
intfun(inta[],intm)
elseif(m>
【解析】fun(inta[],intm)函数的返回值为int类型,所以定义函数时,函数的返回类型不能是void,而是int类型。
=a[mid]中的m>
a[mid]与m=a[mid]两个条件段的结果不一样,所以要分开考虑。
请编写函数fun(),该函数的功能是:
移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(p≤n-1)的数组元素平移到数组的最后。
例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值为3。
移动后,一维数组中的内容应为5,6,7,8,9,10,11,12,13,14,15,1,2,3,4。
voidfun(int*w,intp,intn)
inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
inti,p,n=15;
Theoriginaldata:
i++)
%3d"
\n\nEnterp:
p);
fun(a,p,n);
\nThedataaftermoving:
\n\n"
【解析】本题采用"
循环左移"
的算法(关于"
,我们在后面的试题中有详细的解释)。
和我们在前面分析的稍有不同的是,一个是整型数组,一个是字符型数组。
inti,j,t;
=p;
i++)/*循环左移p+1次*/
{t=w[0];
for(j=1;
j++)/*实现循环左移*/
w[j-1]=w[j];
w[j-1]=t;
第59套
请补充main函数,该函数的功能是:
把字符串str中的字符向前移动一位,原来的第一个字符移动到字符串尾,结果仍然保存在原字符串中。
howdoyoudo?
owdoyoudo?
h"
请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。
charstr[N],ch;
ch=str[0];
【1】;
str[i]=str[i+1];
【2】;
\n***newstring***\n"
【1】str[i+1]【2】str[i]=ch
for循环的条件是要移动的字符不为′\0′,即还没有到字符串的最后一个字符。
ch中保存了字符串的第一个字符,按题目要求移动到字符串尾,而str[i]是′\0′的前一个字符,也就是字符串尾,故将ch赋给str[i]。
下列给定程序中,函数fun()的功能是:
根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示的数据,由main()函数输出。
例如,若输入2,则输出12
24
输入4,则输出1234
2468
36912
481216
#defineM10
inta[M][M]={0};
fun(int**a,intm)
{intj,k;
for(j=0;
m;
for(k=0;
k<
k++)
a[j][k]=k*j;
{inti,j,n;
Entern\n"
n);
fun(a,n);
{for(j=0;
%4d"
a[i][j]);
\n"
voidfun(int(*a)[M],intm)
a[j][k]=k*j;
a[j][k]=(k+1)*(j+1);
【解析】对于二维数组,应该理解成为是由几个一维数组作元素组成的一维数组,或者说,二维数组实际是一个一维数组,只不过它的每个数组元素又都是一个一维数组。
我们先来看看指针数组的表示形式:
(1)p+i和a+i均表示a[i]的地址,或者讲,它们均指向数组第i号元素,即指向a[i]。
(2)*(p+i)和*(a+i)都表示p+i和a+i所指对象的内容,即为a[i]。
(3)指向数组元素的指针,也可以表示成数组的形式,也就是说,它允许指针变量带下标,如p[i]与*(p+i)等价。
因此,二维数组元素a[i][j]可表示成*(a[i]+j)或*(*(a+i)+j),它们都与a[i][j]等价,或者还可写成(*(a+i))[j]。
了解了以上这些内容后本题就好解决了。
移动字符串中的内容,移动的规则是把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。
例如,字符串中原有的内容为ABCDEFGHIJK,m的值为3,移动后,字符串中的内容应该是DEFGHIJKABC。
#include<
string.h>
voidfun(char*w,intm)
chara[N]="
ABCDEFGHIJK"
intm;
Theoriginastring:
puts(a);
\n\nEnterm:
fun(a,m);
\nThestringaftermoving:
【解析】我们在学习C语言的时候,应该广泛地应用到循环的方法,本题应采用"
的算法。
即从第2个字符开始以后的每个字符都依次前移一个字符,而原来的第1个字符放在串中的最后一个字符。
当要平移m个字符时,则要进行m次的循环左移。
内嵌的循环的作用是完成从第2个字符开始以后的每个字符都依次前移一个字符,w[j-1]=t的作用是将第1个字符放到最后一个字符中。
inti,j;
chart;
for(i=1;
=m;
i++)/*进行m次的循环左移*/
w[j]!
j++)/*从第2个字符开始以后的每个字符都依次前移一个字符*/
/*将第1个字符放到最后一个字符中*/
第60套
把ASCII码为奇数的字符从字符串str中删除,结果仍然保存在字符串str中。
字符串str从键盘输入,其长度作为参数传入函数fun()。
abcdef"
,输出"
bdf"
voidfun(chars[],intn)
inti,j;
j=0;
s[j++]=s[i];
inti=0,strlen=0;
charstr[N];
\nInputastring:
while(str[i]!
)
strlen++;
i++;
fun(str,strlen);
\n***displaystring***\n"
【1】i<
n【2】s[i]%2==0【3】s[j]=′\0′
变量n为字符串的长度,所以字符数组的下标的取值范围是从0到n-1。
如果当前字符的ASCII码对2取余等于0,就说明这个字符的ASCII码为偶数,故不能删除,而是将它存于字符串s中。
通过保留ASCII码为偶数的字符的方法,来实现删除ASCII码为奇数的字符的目的。
处理结束后,还要在字符串s的最后加上结束标记符′\0′。
下列给定的程序中,函数fun()的功能是:
为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。
请改正函数fun()中的错误,使它能得出正确的结果。
math.h>
voidfun(inta,int*b,int*c)
{inti,j,d,y;
for(i=3;
=a/2;
i=i+2)
{y=0;
for(j=2;
=sqrt((double)i);
if(i%j==0)y=0;
if(y==1)
{d=i-a;
=sqrt((double)d);
if(d%j==0)y=0;
{*b=i;
*c=d;
{inta,b,c;
do
\nInputa:
a);
while(a%2);
fun(a,&
b,&
c);
\n\n%d=%d+%d\n"
a,b,c);
y=0;
y=1;
d=i-a;
d=a-i;
【解析】这道题是历年的考题经典。
也就是验证哥德巴赫猜想之变体,原来的思路是(任意一个大于等于6的偶数都可以分解为两个素数之和)n为大于等于6的任一偶数,可分解为n1和n2两个数,分别检查n1和n2是否为素数,如都是,则为一组解。
如n1不是素数,就不必再检查n2是否素数。
先从n1=3开始,检验n1和n2(n2=N-n1)是否素数。
然后使n1+2再检验n1,n2是否素数,…直到n1=n/2为止。
该题思路是与"
经典猜想"
是相同的。
请编写一个函数voidfun(char*ss),其功能是:
将字符串ss中所有下标为偶数位置上的字母转化为大写(若该位置上不是字母,则不转换)。
例如,若输入abc4Efg,则应输出AbC4EfG。
#