计算机二级C语言上机题型总结新.docx
《计算机二级C语言上机题型总结新.docx》由会员分享,可在线阅读,更多相关《计算机二级C语言上机题型总结新.docx(13页珍藏版)》请在冰豆网上搜索。
计算机二级C语言上机题型总结新
计算机二级C语言上机题型总结
(一)“******”问题
1、将字符串中的前导*号全部删除,中间和后面的*号不删除。
voidfun(char*a)
{char*p=a;
while(*p==’*’) p++;
for(;*p!
=’\0’;p++,a++)
*a=*p;
*a=’\0’;
}
2、只删中间*
#include
voidmain()
{chara[81]="*****plpkj**123****mmkk***lkj***";
puts(a);
inti=0;char*h=a,*p=a;
while(*p!
='\0')p++;
do
{p--;
}
while(*p=='*');
for(i=0;a[i]=='*';i++)h++;
for(;h
if(*h!
='*')a[i++]=*h;
for(;*p;p++)
a[i++]=*p;
a[i]='\0';
puts(a);
}
3、只删尾*
#include
voidmain()
{chara[81]="*****plpkj**123****mmkk***lkj***";
puts(a);
char*p=a;
while(*p!
='\0')p++;
p--;
while(*p=='*')p--;
*(p+1)='\0';
puts(a);
}
(二)移动问题
1、若一维数组中有n个整数,要求把下标从p到n-1(p<=n-1)的元素平移到数组前面。
inti,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)的元素平移到数组最后。
inti,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到后移到前。
voidfun(char*w,intm)
{inti,j;
chart;
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;
}
}
(三)Fibonacci问题
1、求Fibonacci数列中小于t的最大的一个数,结果由函数返回。
intfun(intt)
{ inta=1,b=1,c=0,i;
do
{c=a+b;a=b;b=c;}
while(cc=a;
returnc;
}
2、用递归算法计算数列中第n项的值。
longfun(intg)
{
if(g==1)return1;
if(g==2)return1;
if(g>2)return(fun(g-1)+fun(g-2));
}
(四)素数问题
1、将大于整数m且紧靠m的k个非素数存入所指的数组中。
voidfun(intm,intk,intxx[])
{inti,j,n;
for(i=m+1,n=0;n for(j=2;j
if(i%j==0)
{xx[n++]=i;break;}
}
2、小于或等于lim的所有素数放在aa数组中,该函数返回所求出的素数个数。
intfun(intlim,intaa[MAX])
{ inti,j,k=0;
for(i=2;i<=lim;i++)
{for(j=2;j
if(i%j==0)break;
if(j>=i) aa[k++]=i;
}
returnk;
}
3、将所有大于1小于整数m的非素数存入xx数组中,个数通过k传回。
voidfun(intm,int*k,intxx[])
{inti,j,n=0;
for(i=4;i{for(j=2;j
if(i%j==0)break;
if(j
}
*k=n;
}
或
{inti,j,t,n=0;
for(i=2;i {t=1;
for(j=2;j
if(i%j==0)
{t=0;break;}
if(t==1)xx[n++]=I;}
*k=n;
}
(五)删除相同数
intfun(inta[],intn)
{inti,j=1;
for(i=1;iif(a[j-1]!
=a[i])
a[j++]=a[i];
returnj;
}
或
{inti,t,j=0;
t=a[0];
for(i=1;i if(t==a[i])
;
else
{
a[j++]=t;
t=a[i];
}
a[j++]=t;
returnj;
}
(七)统计字符个数,单词个数。
1、按‘0’到‘9’统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。
voidfun(char*tt,intnum[])
{inti,j;
intbb[10];
char*p=tt;
for(i=0;i<10;i++)
{num[i]=0;
bb[i]=0;}
while(*p)
{if(*p>=’0’&&*p<=’9’) bb[*p-‘0’]++;
p++;}
for(i=1,j=0;i<10;i=i+2,j++)
num[j]==bb[i];
}
2、str全部由小写字母和空格字符组成的字符串,num传入字符串长度。
统计单词个数。
voidfun(char*s,int*num)
{intI,n=0;
for(i=0;i<*num;i++)
{
if(s[i]>=’a’&&ss[i]<=’z’&&(s[i+1]==’’||s[i+1]==’0’))
n++;
}
*num=n;
}
3、从’a’到’z’统计一个字符串中所有字母字符各自出现的次数,结果存在数组alf中。
voidfun(char*tt,intalf[])
{inti;
char*p=tt;
for(i=0;i<26;i++)
alf[i]=0;
while(*p)
{
if(*p>=’A’&&*p<=’Z’) *p+=32;
if(*p>=’a’&&*p<=’z’) alf[*p-‘a’]++;
p++;
}
}
4、str字符序列由字符0和1组成。
查找0字符连续出现的最长长度,若有几个0字符长度相同,只记录最后1个0字符串相关信息,通过m和k返回最长0字符长度和其下标。
voidfun(char*str,int*m,int*k)
{inti,j=0;
intbb[N];
char*p=str;
*m=0;
*k=0;
for(i=0;i bb[i]=0;
i=0;
while(*(p+i))
{
if(*(p+i)==’0’)
{bb[j]++;i++;}
else{j++;i++;}
if(*m<=bb[j])
{*m=bb[j];*k=i-1;}
}
}
5、统计在tt字符串中”a”到”z”26个字母各自出现的次数,并依次放在pp所指数组中。
voidfun(char*tt,intpp[])
{
inti;
for(i=0;i<26;i++)
pp[i]=0;
for(;*tt!
=’\0’;tt++)
if(;*tt>=’a’&&*tt<=’z’)
pp[*tt-’a’]++;
}
6、统计一个长度为n的字符串在另一个字符串中出现的次数。
intfun(char*str,char*substr)
{ intn;
char*p,*r;
n=0;
while(*str)
{p=str;
r=substr;
while(*r)
if(*r==*p)
{r++;p++;}
elsebreak;
if(*r==’\0’) n++;
str++;
}
returnn;
}
7、求出ss所指字符串中指定字符的个数,并返回此值。
intfun(char*ss,charc)
{inti=0;
for(;*ss!
=’\0’;ss++)
if(*ss==c)
i++;
returni;
}
8、统计一个长度为2的字符串在另一个字符串中出现的次数。
intfun(char*str,char*substr)
{inti,j=0;
for(i=0;str[i+1]!
=’\0’;i++)
if(str[i]==substr[0]&&str[i+1]==substr[1])
j++;
returnj;
}
(七)进制转换
1、把str字符串转换成任意进制的数。
x:
原进制;y:
要转换成的进制。
intfun(char*str,intx,inty)
{intsum;
inti=0;
char*p=str;
for(i=0;ixx[i]=0;
sum=*p-‘\0’;
p++;
while(*p)
{sum=sum*x+*p-‘0’;
p++; }
i=0;
while(sum!
=0)
{xx[i]=sum%y;
sum=sum/y;
i++;}
returni;
}
注:
(1) 将x转换成10进制:
sum=sum*x+*p-‘0’;
(2) 将10进制转换成y:
sum%y得到y进制数的最低位。
sum/y 得到y进制数的次低位。
2、str字符串由‘0’和‘1’组成。
转换成十进制数。
intfun(char*str)
{intn;
char*p=str;
n=*p-‘0’;
p++;
while(*p)
{n=n*2+*p-‘0’;
p++;}
returnn;
}
(八)比较字符串长度
1、比较两个字符串的长度,函数返回较短的字符串。
char*fun(char*s,char*t)
{inti,j;
for(i=0;s[i]!
=’\0’;i++);
for(j=0;t[j]!
=’\0’;j++);
if(i<=j)
returns;
else
returnt;
}
2、从传入的num个字符中找出最长的一个字符串,通过形参指针max传回该串地址。
fun(char(*a)[81],intnum,char*max)
{inti=0;
max=a[0];
for(i=0;i if(strlen(max) max=a[i];
returnmax;
}
(九)最大公约数,最小公倍数
1、intfun(inta,intb)
{intr,t;
if(a
{t=a;a=b;b=t;}
r=a%b;
while(r!
=0)
{a=b;b=r;r=a%b}
return(b);
}
2、输入两整数m和n,求最大公约数,最小公倍数。
while(b!
=0)
{t=a%b;a=b;b=t;}
printf(“%d”,”%d”,a,n*m/a);
注:
(1)最大公约数:
若b/a的非零余数能整除a。
(2)最小公倍数:
两数乘积除以最大公约数。