江苏计算机C语言上机试题45道.docx
《江苏计算机C语言上机试题45道.docx》由会员分享,可在线阅读,更多相关《江苏计算机C语言上机试题45道.docx(60页珍藏版)》请在冰豆网上搜索。
江苏计算机C语言上机试题45道
45置换矩阵中的某个特定数。
#include
#include
voidmatrix_change(intx[][3],intn)
{
inti,j,k,t[5]={0},max,maxi,maxj,v;
max=x[0][0];maxi=maxj=0;
for(i=0;ifor(j=0;j<3;j++)
if(x[i][j]>max){max=x[i][j];maxi=i;maxj=j;}
k=0;
while(max>0){t[k++]=max%10;max=max/10;}
for(i=0;ifor(j=0;jif(t[j]for(i=0;imax=max*10+t[i];
x[maxi][maxj]=max;
}
voidmain()
{
inta[3][3]={4,8,16,32,64,128,256,512,1024},i,j;FILE*fp;
matrix_change(a,3);
fp=fopen("myf2.out","w");
if(fp==NULL)
{printf("can'topenfile");return;}
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
{fprintf(fp,"%5d",a[i][j]);printf("%5d",a[i][j]);}
printf("\n");
fprintf(fp,"\n");
}
printf("\nMyexamnumberis:
WLJY001\n");
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);
getch();
}
44找出满足下列条件的整数对(m,n):
(1)m小于n
(2)a(m)=a(n)=m+n+1,其中a(m)表示m的所有因子和,a(n)同上;
#include
#include
intfactor(intn)
{inti,s=0;
for(i=1;i<=n;i++)
if(n%i==0)s=s+i;
returns;
}
intfun(intn,inta[][2])
{inti,j,g1,g2,k=0;
for(i=2;i<=n;i++)
{
g1=factor(i);
for(j=1;j
{
g2=factor(j);
if(g1==g2&&g1==i+j+1)
{a[k][0]=j;a[k++][1]=i;}
}
}
returnk;
}
voidmain()
{
FILE*fp;inti,n,m,a[100][2];
if((fp=fopen("myf2.out","w"))==NULL)
{printf("Thefilecallnotopen!
");exit(0);}
scanf("%d",&n);
m=fun(n,a);
for(i=0;i{
printf("(%d,%d)\n",a[i][0],a[i][1]);
fprintf(fp,"(%d,%d)\n",a[i][0],a[i][1]);
}
printf("\nMyexamnumberis:
WLJY001\n");
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);
getch();
}
43将一个十进制整数m转换成r进制整数的字符串表示形式。
#include
#include
voidtrdec(char*str,intidec,intibase)
{charch;
inti,idr,k=0;
while(idec!
=0)
{
idr=idec%ibase;
if(idr>=10)
str[k++]=idr-10+'A';
else
str[k++]=idr+'0';
idec/=ibase;
}
for(i=0;i{ch=str[i];
str[i]=str[k-i-1];
str[k-i-1]=ch;
}
str[k]='\0';
}
voidmain()
{
intx;charstr[20];FILE*fp;
if((fp=fopen("myf2.out","w"))==NULL)
{printf("Thefilecannotopen!
");exit(0);}
printf("Enteranumber");scanf("%d",&x);
trdec(str,x,2);
printf("%sB,",str);fprintf(fp,"%sB,",str);
trdec(str,x,8);
printf("%sQ,",str);fprintf(fp,"%sQ,",str);
trdec(str,x,16);
printf("%sH\n",str);fprintf(fp,"%sH\n",str);
printf("\nMyexamnumberis:
WLJY001\n");
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);
}
42已知x数组中存储的n接矩阵有一个鞍点(鞍点是指该位置上的数十所在行的最大数,同时也是所在列的最小数),程序实现将矩阵中鞍点所在列移动到最右侧。
#include
#include
#defineN4
voidmove(inta[][N])
{
inti,j,k,f,t,m,mj;
for(i=0;i{
m=a[i][0];mj=0;f=1;
for(j=0;jif(a[i][j]>m)
{
m=a[i][j];mj=j;
}
for(k=0;kif(a[k][mj]f=0;
if(k>=N)break;
}
if(f)
{
printf("Andian:
a[%d][%d]\n",i,mj);
for(i=0;i{
t=a[i][mj];
for(j=mj;ja[i][j]=a[i][j+1];
a[i][N-1]=t;
}
}
}
voidmain()
{
intx[N][N]={{1,3,2,0},{4,6,5,-1},{7,9,8,0},{-1,10,3,2}},i,j;
for(i=0;i{
for(j=0;jprintf("%3d",x[i][j]);
printf("\n");
}
printf("\n");
move(x);
for(i=0;i{
for(j=0;jprintf("%3d",x[i][j]);
printf("\n");
getch();
}
}
41在给定的范围内查找满足特定条件的整数。
#include
#include
#include
intfind(longn1,longn2,longx[])
{longi,y;
intj,m=0,k=0,f,t[10],d[10];
for(i=n1;i<=n2;i++)
{for(j=0;j<10;j++)d[j]=0;
y=i*i;
f=1;m=0;
for(j=2;j
if(i%j==0){f=0;break;}
if(!
f)continue;
while(y>0){t[m++]=y%10;y=y/10;}
for(j=0;j{
d[t[j]]++;
if(d[t[j]]>1){f=0;break;}
}
if(f)
x[k++]=i;
}
returnk;
}
main()
{
longa[50],i,n;
FILE*fp=fopen("myf2.out","w");
if(fp==NULL){printf("can'topenfile");return;}
n=find(1000,1500,a);
for(i=0;i{printf("\n%ld%ld",a[i],a[i]*a[i]);
fprintf(fp,"\n%ld%ld",a[i],a[i]*a[i]);}
printf("\nMyexamnumberis:
WLJY001\n");
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);
getch();
}
40求级数的前n项之和。
编写函数doublefun(doublex,intn)
#include
#include
#include
#defineN40
doublefun(doublex,intn)
{doubles=0,y;
longinti,j,a[N]={1,1};
for(i=2;i<=n;i++)
a[i]=a[i-2]+a[i-1];
for(i=1;i<=n;i++)
{y=1;
for(j=1;j<=a[i];j++)
y*=x;
s+=y/(a[i-1]*a[i]);
}
returns;
}
main()
{
doublex,s;intn;
FILE*fp;
fp=fopen("myf2.out","w");
if(fp==NULL)
{printf("Thefilecannotopen!
");exit(0);}
printf("inputnandx:
");
scanf("%d,%lf",&n,&x);
s=fun(x,n);
printf("s=%lf\n",s);
fprintf(fp,"s=%lf\n",s);
printf("\nMyexamnumberis:
WLJY001\n");
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);
getch();
}
39求级数的前n项之和。
编写函数doublefun(doublex,doubleeps)功能是对于给定的x计算下列级数前n项的和,直到第n项的绝对值小于eps为止。
#include
#include
#include
doublefun(doublex,doubleeps)
{doubles=x,t=x,temp=x;
intn=1,flag=1;
while(fabs(t)>=eps)
{flag=-flag;
temp*=x*x*(2*n-1)/(2.0*n);
t=flag*temp/(2.0*n+1);
s+=t;n++;
}
returns;
}
main()
{
doublex,s,eps;FILE*fp;
fp=fopen("myf2.out","w");
if(fp==NULL)
{printf("thefilecannotopen!
");exit(0)}
scanf("%lf",&x);
while(fabs(x)>1)scanf("%lf",&x);
scanf("%lf",&eps);
s=fun(x,eps);
printf("s=%lf\n",s);
fprintf(fp,"s=%lf\n",s);
printf("\nMyexamnumberis:
WLJY001\n");
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);
getch();
}
38验证:
任意一个四位数不全相同的四位正整数经以下变换后均能变成6174,编程实现这个验证过程,输出变换过程所产生四位数及变成6174的步骤次数。
编写函数intjudge(intn,inty[])
#include"stdio.h"
#include
#include"stdlib.h"
intjudge(intn,inty[])
{
inta[4],x,i,j,t,step=0;
x=n;
do
{
for(i=0;i<4;i++)
{a[i]=x%10;x/=10;}
for(i=0;i<4;i++)
for(j=i+1;j<4;j++)
if(a[i]x=a[0]*1000+a[1]*100+a[2]*10+a[3];
t=a[0]+a[1]*10+a[2]*100+a[3]*1000;
x=x-t;y[step++]=x;
if(x==6174)break;
}
while(step<=7);
if(x==6174)returnstep;
elsereturn-1;
}
voidmain()
{
FILE*fp;inti,n,k,x[7]={0};
if((fp=fopen("myf2.out","w"))==NULL)exit(0);
scanf("%d",&n);
k=judge(n,x);
if(k!
=-1)
{for(i=0;ifprintf(fp,"%8d\n",k);printf("%8d\n",k);}
else
{
fprintf(fp,"%ddoesn'tmeetstherequirments\n",n);
printf("%ddoesn'tmeetstherequirments\n",n);
}
printf("\nMyexamnumberis:
WLJY001\n");
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);
getch();
}
37查找四位超级素数。
若一个素数从低位到高位依次去掉一位数字之后剩下的数任然是素数,则称此数为超级素数。
例如23、233、2333、2均为素数故2333是一个超级素数。
#include
#include
#include
#defineN100
intprime(intn)
{
inti;
if(n==1)return0;
if(n==2)return1;
for(i=2;i<=sqrt(n);i++)
if(n%i==0)return0;
return1;
}
intsuperprime(inta[])
{inti,k=0;
for(i=1000;i<10000;i++)
if(prime(i)&&prime(i/10)&&prime(i/100)&&prime(i/1000))
a[k++]=i;
returnk;
}
main()
{
inta[N]={0};inti,n;FILE*fp;
fp=fopen("myf2.out","w");
if(fp==NULL)
{printf("Thefilecannotopen!
");exit(0);}
n=superprime(a);
for(i=0;i{if(i%5==0)
{
fprintf(fp,"\n");printf("\n");
}
fprintf(fp,"%12d",a[i]);
printf("%12d",a[i]);
}
fprintf(fp,"\nn=%d\n",n);printf("\nn=%d\n",n);
printf("\nMyexamnumberis:
WLJY001\n");
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);
getch();
}
36求素数及反序数。
编写函数intlwval(intm,intx[],inty[])
#include
#include
#include
#include
intlmval(intm,intx[],inty[])
{inti,k=0,s,n;
while(--m)
{
for(i=2;i<=sqrt(m);++i)
if(m%i==0)break;
if(i<=sqrt(m))continue;
if(m>1)
{
x[k]=m;
s=0;n=m;
while(n)
{s=s*10+n%10;n/=10;}
y[k++]=s;
}
}
returnk;
}
main()
{
intm,i,x[100],y[100],n;FILE*fp;
if((fp=fopen("myf2.out","w"))==NULL)
{printf("can'topenthefile");exit(0);}
scanf("%d",&m);
n=lmval(m,x,y);for(i=0;iprintf("\n");fprintf(fp,"\n");
for(i=0;iprintf("\nMyexamnumberis:
WLJY001\n");
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);
getch();
}
35在一组数据中查找并删除完全数。
编写函数intfactor(intx[],intn,inty[])
#include
#include
intfactor(intx[],intn,inty[])
{
inti,j,k=0,s,c,d,a;
for(i=0;i{
a=x[i];s=1;c=2;
do
{
d=a/c;
if(a==a/c*c)
{if(c==d)s=s+c;
elses=s+c+d;
}
c=c+1;
}
while(cif(s==a)
{for(j=i;jy[k++]=a;
n--;
}
}
returnk;
}
voidmain()
{
FILE*fp;
inta[10]={5,6,12,23,28,200,496,3000,8010,8128},b[10]={0},m,n=10,i;
fp=fopen("myf2.out","w");
if(fp==NULL){printf("Can