二级C语言考试机试满分原题.docx
《二级C语言考试机试满分原题.docx》由会员分享,可在线阅读,更多相关《二级C语言考试机试满分原题.docx(25页珍藏版)》请在冰豆网上搜索。
二级C语言考试机试满分原题
类型一:
调整一个数的个、十、百、千位
1.请编写函数fun,其功能是:
将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。
例如,当a=45,b=12,调用该函数后c=4152。
*c=(a/10)*1000+(b/10)*100+(a%10)*10+(b%10);
STYPEFILEFp
for(i=0;i<=sl;i++)把s后字母改为小写L
t[2*sl]='\0';
2.请编写函数fun,其功能是:
将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的千位和十位上。
例如,当a=45,b=12,调用该函数后c=1524。
*c=(b/10)*1000+(a%10)*100+(b%10)*10+(a/10);
*fwstrstr
voidfun(longs,long*t)
sl=sl*10;
3.请编写函数fun,其功能是:
将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上。
例如,当a=45,b=12,调用该函数后c=2514。
*c=(b%10)*1000+(a%10)*100+(b/10)*10+(a/10);
fpfclose(fp)fname
for(i=j+1;i<=n-1;i++)
p=i;
4.请编写函数fun,其功能是:
将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的百位和个位上。
例如,当a=45,b=12,调用该函数后c=5142。
*c=(a%10)*1000+(b/10)*100+(a/10)*10+(b%10);
"r"fsft
if(d%2==0)
s/=10;
5.请编写函数fun,其功能是:
将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的个位和百位上。
例如,当a=45,b=12,调用该函数后c=5241。
*c=(a%10)*1000+(b%10)*100+(a/10)*10+(b/10);
kN-1temp
fun(inta[][M],intm)
a[j][k]=(k+1)*(j+1);
6.请编写函数fun,其功能是:
将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上。
例如,当a=45,b=12,调用该函数后c=2415。
*c=(b%10)*1000+(a/10)*100+(b/10)*10+a%10;
structstudent*
a->score[i]
a
char*fun(char(*sq)[M])
returnsp;
7.请编写函数fun,其功能是:
将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的千位和十位上。
例如,当a=45,b=12,调用该函数后c=1425。
*c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10);
0xt++
inti,s1;s后面是小写的L
t[i]=s[sl-i-1];
8.请编写函数fun,其功能是:
将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的个位和百位上。
例如,当a=45,b=12,调用该函数后c=4251。
*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);
1si*10
intfun(intn,intxx[][M])
printf("%d",xx[i][j]);
类型二:
与*号有关的操作
9.请编写函数fun,它的功能是:
将字符串中的前导*号全部删除,中间和尾部的*号不删除。
删除前导*号
intj=0;char*p=a;
while(*p=='*')p++;
while(*p){a[j++]=*p;p++;}
a[j]=0;
[N]t[i][j]t[j][i]
#defineFU(m,n)((m)/(n))
return(value);
10.请编写函数fun,它的功能是:
除了尾部的*号之外,将字符串中其他*号全部删除。
形参p已指向字符串中最后的一个字母。
除尾部*号,其余*删除
char*q=a;intj=0;
while(*q&&q
='*')a[j++]=*q;q++;}
while(*p)a[j++]=*p++;a[j]=0;
t[][N]i=0;iintfun(inta[],intm)
elseif(m>a[mid])
11.请编写函数fun,它的功能是:
除了字符串前导和尾部的*号之外,将串中其他*号全部删除。
只删除中间*号
intj=0;char*q=a;
while(*q&&qwhile(*h&&*p&&h
{if(*h!
='*')a[j++]=*h;h++;}
while(*p)a[j++]=*p++;
a[j]=0;
sum=0
t[i][i]
1
doubler;
while(fabs(m-n)>0.001)
12.请编写函数fun,它的功能是:
删除字符串中所有的*号。
删除串中所有*号
intj=0;char*p=a;
while(*p)
{if(*p!
='*')a[j++]=*p;p++;}
a[j]=0;
1
j++
j
t=a;a=b;b=t;
return(b);
13.请编写函数fun,它的功能是:
将字符串尾部的*号全部删除,前面和中间的*号不删除。
删除串尾*号
char*p=a;
while(*p)p++;p--;
while(*p=='*')p--;
p++;
*p=0;
N
i
-1
a2=k/10;
returni;
14.请编写函数fun,它的功能是:
除了字符串前导的*号之外,将串中其他*号全部删除。
除前导*外其他删除*
inti=0,k;
while(a[i]=='*')i++;
k=i;
while(a[i]!
='\0'){if(a[i]!
='*')a[k++]=a[i];i++;}
a[k]='\0';
N
k
ss[i]
intk=0;
while(*p||*q)
15.请编写函数fun,它的功能是:
只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。
删除前导和尾部*
char*p=a;intj=0,len=0;
while(*p){p++;len++;}
while(jN
substr
0
fun(intx,inty,intz)
returnj;
16.请编写函数fun,它的功能是:
使字符串中尾部的*号不得多于n个
串尾部*号不多于n个
char*p=a;intj=0;
while(*p)p++;p--;
while(*p=='*')p--;p++;
while(ja[i]%2
a[j]
j
fun(intn)
if(n==1)
17.请编写函数fun,它的功能是:
使字符串的前导*号不得多于n个
前导*不多于n个
inti=0,j,k=0;
while(a[k]=='*')k++;
if(k>n)
{i=n;j=k;
for(;a[j]!
=0;j++)a
[i++]=a[j];
a[i]=0;}
MN0
t=1;
return(2*s);
18.请编写函数fun,它的功能是:
将字符串中的前导*号全部移到字符串的尾部。
串前*移至串尾
char*p,*q;intn=0;p=a;
while(*p=='*'){n++;p++;}
q=a;
while(*p){*q=*p;p++;q++;}
for(;n>0;n--)*q++='*';
*q='\0';
ab.namescore[i]
s[j++]=s[i];
s[j]=0;
19.编写一个函数,从传入的num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址
(用****作为结束输入的标志)。
inti,k=0,maxlen;
maxlen=strlen(a[k]);
for(i=1;i{if(strlen(a[i])>maxlen)
{maxlen=strlen(a[i]);k=i;}}
*max=a[k];
[N]ii+1
aa[i]=m%k;
printf("%d",aa[i-1]);
类型三:
与下标或ASCII码有关
20.请编写一个函数fun,它的功能是:
将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。
下标奇数位置子母改大写
inti;
for(i=1;i{
if(ss[i]>='a'&&ss[i]<='z')ss[i]-=32;
}
kNa[k][i]
for(i=strlen(t)-1;i;i--)
if(t[j]>t[j+1])
21.请编写—个函数voidfun(char*ss),其功能是:
将字符串ss中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。
下标奇数位置子母改大写
char*p=ss;inti=0;
while(*p){
if((i%2)&&(*p>='a'&&*p<='z'))*p-=32;
p++;i++;}
returnss;
NULLnhead,ch
for(i=0,t=0;p[i];i++)
c[t]='\0';
22.请编写函数fun,其功能是:
将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。
下标为偶数字符删除
inti,j=0;
for(i=1;it[j]=0;
data
next
head
while(*r)
*a=*r;a++;r++;
23.编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。
除首尾外其余ASCII码降序
charch;inti,j;
for(i=1;i<6;i++)
for(j=i+1;j<6;j++)
{if(*(s+i)<*(s+j))
{ch=*(s+j);*(s+j)=*(s+i);*(s+i)=ch;}}
ss[i]n+j1
if(*p=='')
*(p-1)=toupper(*(p-1));
24.请编写函数fun,其功能是:
将s所指字符串中ASCII值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
ASCII码值为偶数删除
inti,j=0;
for(i=0;iif(s[i]%2)t[j++]=s[i];
t[j]=0;
STUstd[i].numstd[i]
r++;p++;
if(*r==0)
25.请编写函数fun,其功能是:
将s所指字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
ASCII值为奇数删除
inti,j=0;
for(i=0;it[j++]=s[i];
t[j]=0;
s[i]k'\0'
while(*w)
if(*r==*p)
26.请编写函数fun,其功能是:
将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除
除下标偶数同时ASCII码值偶数之外其余全部删除
inti,j=0;
for(i=0;iif(s[i]%2==0)t[j++]=s[i];
t[j]=0;
*nnexthead
a=NULL;
if(*r==*p)
27.请编写函数fun,其功能是:
将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所有字符都删除
除下标奇数同时ASCII码也为奇数外其余字符删除
inti,j=0;
for(i=1;iif(s[i]%2)t[j++]=s[i];
t[j]=0;
0i++2.0*i
voidfun(char*s,char*t)
t[2*d]=0;
28.请编写函数fun,其功能是:
将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s中剩余的字符形成的新串放在t所指的数组中。
将下标为偶数同时ASCII码为奇数删除
inti,j=0;
for(i=0;iif(!
((i%2)==0&&(s[i]%2)))t[j++]=s[i];
t[j]=0;
jkp
while(iif(*a)
类型四:
数组和矩阵操作
29.请编写函数fun,该函数的功能是:
移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p(p小于等于n-1)的数组元素平移到数组的最后。
下标0-p移到数组最后
inti,j=0,b[N];
for(i=p+1;ifor(i=0;i<=p;i++)b[j++]=w[i];
for(i=0;ip->nextqp->next
while(*s)
s++;
30.请编写函数fun,该函数的功能是:
删去一维数组中所有相同的数,使之只剩一个。
删除一维数组相同的数
inti,j=1,k=a[0];
for(i=1;iif(k!
=a[i]){a[j++]=a[i];k=a[i];}
a[j]=0;
returnj;
FILE*fclose(fp)fp
t=(STU*)calloc(sizeof(STU),m);
t[k]=b[j];
31.请编写一个函数fun,它的功能是:
找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。
找出一维数组最大值及其下标
inti;
*max=a[0];*d=0;
for(i=1;iif(*max12*i(-1)
k++;
if(m==k)
32.请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。
求数组最大元素及下标
inti,pos=0,max=*s;
for(i=1;i{if(max<*(s+i))
{max=*(s+i);pos=i;}}
*k=pos;
n++0s++
t+=s[k];
*ave=ave;
33.请编写函数fun(inta[][N],intn),该函数的功能是:
使数组左下半三角元素中的值乘以n。
左下三角元素乘n
inti,j;
for(i=0;ifor(j=0;j<=i;j++)a[i][j]*=n;
STUscore[i]&std
if(k>0)
elseif(k==0)
34.请编写函数fun(inta[][N],intn),该函数的功能是:
使数组右上半三角元素中的值乘以m。
右上三角元素同乘m
inti,j;
for(i=0;ifor(j=i;j*avix[j]
floatfun(intn)
for(i=2;i<=n;i++)
35.请编写函数fun(inta[][N]),该函数的功能是:
使数组左下半三角元素中的值全部置成0。
左下三角元素置0
inti,j;
for(i=0;ifor(j=0;j<=i;j++)a[i][j]=0;
*stdPERSONstd
intk,q,i;
pt[i]=str[k][i];
36.请编一个函数求出二维数组每列中最小元素,并依次放入pp所指一维数组中。
二维数组每列最小元素
inti,j,min,k;
for(i=0;i{min=tt[0][i];k=0;
for(j=1;jif(min>tt[j][i]){min=tt[j][i];k=j;}
pp[i]=tt[k][i];}
*stdstd[i].agemax.name
voidfun(int*a,int*b)
t=*b;*b=*a;*a=t;
37.请编写一个函数fun,它的功能是:
求出—个2×M整型二维数组中最大元素的值,并将此值返回调用函数。
求二维数组中最大元素的值
inti,j,max=a[0][0];
for(i=0;i<2;i++)
for(j=0;jif(maxreturnmax;
3.0>2*i+1
doublefun(intn)
s=s+(double)a/b;
38.编写程序,实现矩阵(3行3列)的转置(即行列互换)。
矩阵转置
inti,j,arr[3][3];
memcpy(arr,array,9*sizeof(int));
for(i=0;i<3;i++)
for(j=0;j<3;j++)
array[i][j]=arr[j][i];
Nbreakn
sum=0;
scanf("%d",&a[i][j]);
39.请编写函数fun,该函数的功能是:
将M行N列的二维数组中的数据,按列的顺序依次放到一维数组中。
按列顺序334455334455
inti,j,np=0;
for(i=0;ifor(j=0;j{b[np]=s[j][i];np=i*mm+j+1;}
*n=np;
NODE*nextr
if(i%2||s[i]%2==0)
t[j]=’\0’;
40.请编写函数fun,该函数的功能是:
将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中。
按行顺序3333333344444444
inti,j,k;
for(i=0;ifor(j=0;j{k=i*nn+j;b[k]=s[i][j];}
*n=mm*nn;
h->nextp->next>
p=h->next;
p=p->next;
41.请编写函数fun,该函数的功能是:
将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。
按列顺序wshwshwsh
inti,j,n=0;
for(i=0;ifor(j=0;j{b[n]=s[j][i];n=i*M+j+1;}}
b[n]='\0';
FILE*fpch
s[j++]=s[i];
s[j]='\0';.
42.请编写函数fun,函数的功能是:
求出数组周边元素的平均值并作为函数值返回给主函数中的s。
数组周边元素的平均值
inti,j,n=0;doublesum=0;
for(i=0;isum+=w[0][i]+w[N-1][i];n+=2;}
for(i=1;i{sum+=w[i][0]+w[i][N-1];n+=2;}
returnsum/n;
s/Nj++-1
#include
upfst(char*p)
43.请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。
二维数组周边元素之和
inttot=0,i,j;
for(i=0;i{tot+=a[0][i];tot+=a[M-1][i];}
for(i=1;i{tot+=a[i][0];tot+=a[i][N-1