计算机二级C语言上机题型总结.
计算机二级C语言上机题型总结
一)“******”问题
1、将字符串中的前导*号全部删除,中间和后面的*号不删除。
void fun(char *a)
{???
char *p=a;
while(*p= =’*’)? p++;
for( ; *p!=’\0’;p++,a++)
?????? *a=*p;
?????? *a=’\0’;
}
?
2、只删中间*??
int i;
for(i=0;a[i]= =’*’;i++)
? for( ;h
? if(*h!=’*’)
? a[i++]=*h;
? for( ;*p;p++)
? a[i++]=*p;
? a[i]=’\0’;
?
3、只删尾*
while(*a!=’\0’)
? a++;
a--;
while(*a= =’*’)
?? a--;
*(a+1)=’\0’;
?
4、只留前*???
int i , j=0;
for(i=0;a=’*’;i++);
j=i;
for( ;a;i++)
if(a!=’*’)
a[j++]=a[i];
a[j]=’\0’;
?
5、只留中间*
int i,j=0;
for(i=h;i
? a[j++]=a[i];
? a[j]=’\0’;
?
6、只留尾*
char *t=a;
for( ; t<=p;t++)
? if(*t!=’*’)
? *(a++)=*t;
for( ;t!=’\0’;t++)
? *(a++)=*t;
? *a=’\0’;
?
7、*个数>n个,删多余的*;*个数<=n个,不做任何处理。
int i=0, k=0;
char *p,*t;
p=t=a;
while(*t= =’*’)
?{
k++;
t++;
}
if(k>n)
?{
while(*p)
?{a[i]=*(p+k-n);
? i++;p++}
a[i]=’\0’;
}
?
(二)移动问题
1、若一维数组中有n个整数,要求把下标从p到n-1(p<=n-1)的元素平移到数组前面。
int i,j,t;
for(i=p;i<=n-1;i++)
? {
???? t=w[n-1];
???? for(j=n-2;j>=0;j--)
w[j+1]=w[j];
w[0]=t;
}
2、把下标从0到p(p<=n-1)的元素平移到数组最后。
int i,j,t;
for(i=0;i<=p;i++)
? {
?? t=w[0];
?? for(j=1;j
???? w[j-1]=w[j];
?? w[j-1]=t;
}
3、把字符串str中的字符向前移动,原来第1个字符放串尾,结果仍保存在原串中。
ch=str[0];
for(i=0;str[i+1];i++)
?? str[i]=str[i+1];
?? str[i]=ch;
4、移动字符串中的内容,把第1到第m个字符平移到串后,把第m+1到后移到前。
void fun(char *w, int m)
{
? int i, j;
? char t;
? for(i=1,i<=m;i++)
? {
t=w[0];
for(j=1;w[j]!=’\0’;j++)
? w[j-1]=w[j];
? w[j-1]=t;
}
}
?
(三)排序法
1、冒泡法
for(i=1;i
for(j=0;j
if(a[j]>a[j+1])
? {t=a[j];a[j]=a[j+1];a[j+1]=a[j];}
2、选择法
for(i=0;i
{
? p=i;
? for(j=i+1;j
? if(a[p]>a[j]) p=j;
? if(p!=i)
? t=a[i];a[i]=a[p];a[p]=t;
}
3、插入法
for(i=1;i
{
? t=a[i];
? for(j=i-1;a[j]>t&&j>=0;j--)
a[j+1]=a[j];
a[j+1]=t;
}
?
(四)Fibonacci问题
1、求Fibonacci数列中小于t的最大的一个数,结果由函数返回。
int fun(int t)
{
? int a=1,b=1,c=0,i;
? do
? {
c=a+b;
a=b;
b=c;
}while(c
c=a;
return c;
}
2、用递归算法计算数列中第n项的值。
long fun(int g)
{
? swich(g)
? {
case 0:return 0;
switch(g)
?case1:case2:return 1;
}
return(fun(g-1)+fun(g-2));
}
(五)素数问题
1、将大于整数m且紧靠m的k个非素数存入所指的数组中。
void fun(