江苏省二级c语言上机考试例题集2045.docx
《江苏省二级c语言上机考试例题集2045.docx》由会员分享,可在线阅读,更多相关《江苏省二级c语言上机考试例题集2045.docx(41页珍藏版)》请在冰点文库上搜索。
江苏省二级c语言上机考试例题集2045
21、在给定范围内查找并输出所有由两个不同数字组成的六位回文数
#include
#include
#include
intpalin(longm1,longm2,longx[])
/*该函数的功能是,在m1~m2内找到所有由两个不同数字组成的回文数*/
{inta[10],i,k=0,sum;
longn,m,t;
for(n=m1;n<=m2;n++)/*利用循环对m1~m2之间的数进行查找*/
{for(i=0;i<10;i++)a[i]=0;
t=n;m=0;
while(t>0)/*对数n进行数位分离,反序排列给数位上的数求得其反序数*/
{
i=t%10;a[i]=1;
m=m*10+i;t/=10;
}
for(sum=0,i=0;i<10;i++)
if(a[i]!
=0)sum++;/*sum记录数位上不同数字的个数*/
if(m==n&&sum==2)/*判断反序数是否与原数相等,并且是由两位不同数字组成*/
x[k++]=n;/*若是回文数则将其依次保存到x指向的数组中*/
}
returnk;/*函数返回x数组中回文数的个数*/
}
main()
{
inti,n;
longa[200];
FILE*fp;/*定义文件指针*/
if((fp=fopen("myf2.out","w"))==NULL)
{printf("Can'topenfilemyf2.out!
\n");exit
(1);}
n=palin(100000,120000,a);/*调用函数palin查找100000~120000之间所有由两个不同数字组成的六位回文数字*/
for(i=0;i{printf("%ld",a[i]);fprintf(fp,"%ld\t",a[i]);}
printf("\nMyexamnumberis:
WLJY001\n");
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);/*关闭文件*/
}
22、验证定理:
大于2的两个相邻素数之和等于
#include
#include
char*convert(intx,chartype,chary[])
{
inti=0,j,base,xx;chark;
switch(type)
{
case'd':
base=10;break;
case'o':
base=8;break;
case'x':
base=16;
}
if(x<0)xx=-x;
elsexx=x;
while(xx>0)
{
intm=xx%base;
if(base<=10||m<10)/*①此处是判断,如果m本身小于10或base<=10,那么直接将m转换为字符型即可*/
y[i]=m+'0';
else
y[i]=m-10+'a';
xx=xx/base;
i++;
}
if(x<0)y[i++]='-';
for(j=0;j
{k=y[j];y[j]=y[i-j-1];y[i-j-1]=k;}
y[i]='\0';
returny;/*③convert函数的返回值是char*,所以此处应将数y作为函数返回值,而不能只返回y数组的单个元素y[0]的值*/
}
main()
{
intnumber;
chart,str[7]={0};
puts("inputconversiontypeandnumber:
");
scanf("%c%d",&t,&number);
puts(convert(number,t,str));/*④convert函数前面已经有定义,被引用是不必再做声明*/
}
23、编写函数doublemyfun(doublex)
#include
#include
#include
#include
#defineEPS1.0e-6
doublemyfun(doublex)/*该函数的功能是,求题目所给的展开式的值*/
{doubletn,ft=1.0,sn=x,xn=x;
doublen=2.0;
do
{
xn=xn*x*x;
ft=ft*(2*n-3)/(2*n-2);
tn=ft*xn/(2*n-1);/*各项的表达式*/
sn=sn+tn;/*利用循环,对各项累加求和*/
n=n+1;
}
while(fabs(tn)>EPS);/*循环的终止条件是最后一项tn的绝对值小于等于eps*/
returnsn;/*返回和值sn*/
}
main()
{
FILE*fp;/*定义文件指针*/
doublex[3]={-1.0,0.5,1.0};
inti;
fp=fopen("myf2.out","w");/*以只写方式"w"打开文件*/
f(fp==NULL)
{printf("Cannotopenthefile!
\n");exit(0);}
for(i=0;i<3;i++)/*调用3次myfun函数求值,并将计算结果输出到屏幕并用写文件函数保存到结果文件中*/
{printf("f(%lf)=%0.6lf\n",x[i],allsum(x[i]));
fprintf(fp,"f(%lf)=%0.6lf\n",x[i],allsum(x[i]));
}
printf("\nMyexamnumberis:
WLJY001\n");/*将考生准考证号输出到屏幕及结果文件中*/
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);/*关闭文件*/
}
24、用公式“M×M-M+41”生成一个数列
#include
#include
#include
#include
intprime(longa)/*判断整数a是否为素数*/
{inti,k;
if(a==0||a==1)return0;
k=sqrt(a);
for(i=2;i<=k;i++)
if(a%i==0)return0;
return1;/*若为素数,函数值返回1*/
}
intallprime(longx[])
{
longi,j=0,n,n1,n2;
for(i=1;i<=20;i++)
{
n=i*i-i+41;/*用公式生成20个由整数组成的数列*/
if(prime(n))/*判断数n本身是否为素数*/
{n1=n;
n2=0;
while(n1>0)
{n2=n2*10+n1%10;n1/=10;}/*对整数进行数位分离,对各位上的数字反序组合得到反序数*/
if(prime(n2))x[j++]=n;/*判断反序数是否为素数,若本身和反序数均为素数即为无暇素数,将其保存到数组x中*/
}
}
returnj;/*返回x数组中存储的无暇素数的个数*/
}
main()
{
inti,n;longa[101];
FILE*fp;/*定义文件指针*/
if((fp=fopen("myf2.out","w"))==NULL)
{printf("Can'topenfilemy2.out!
\n");exit
(1);}
n=allprime(a);/*调用allprime函数找到由公式生成的数列中所有无暇素数*/
for(i=0;i{printf("%d\t",a[i]);fprintf(fp,"%d\t",a[i]);}
printf("\nMyexamnumberis:
WLJY001\n");/*将考生准考证号输出到屏幕及结果文件中*/
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
close(fp);/*关闭文件*/
}
25、编写函数intfind(chara[],charb[])
#include
#include
intfind(chara[],charb[])/*该函数的功能是,找出字符串a中最长的单词并将其存入b指向的数组中*/
{inti=0,plen=0,maxlen=0,pseat=0;
while(a[i]!
='\0')
{
while(a[i]!
=''&&a[i]!
='\0')
{plen++;i++;}/*plen记录各个单词的长度*/
if(plen>maxlen)
{pseat=i-plen;maxlen=plen;}/*比较各个单词的长度*/
while(a[i]=='')i++;/*利用while循环找到以空格作为分隔的单词的个数*/
plen=0;
}
for(i=0;ib[i]=a[pseat+i];/*将找到的最长单词存放到数组b中*/
b[i]='\0';
return(pseat);/*函数返回最长单词在字符串a中的起始位置下标*/
}
main()
{
FILE*fp;/*定义文件指针*/
chara[80],b[20];inti;
fp=fopen("myf2.out","w");/*以只写方式"w"打开文件*/
if(fp==NULL)
{printf("Cannotopenthefile!
\n");exit(0);}
printf("inputastring:
");
gets(a);/*从键盘输入字符串*/
i=find(a,b);/*调用find函数找到该句子中最长的单词*/
printf("%s,i=%d\n",b,i);/*将最长单词及其在字符串中起始位置下标输出到屏幕并用写文件函数保存到结果文件中*/
fprintf(fp,"%s,i=%d\n",b,i);
printf("\nMyexamnumberis:
WLJY001\n");/*将考生准考证号输出到屏幕及结果文件中*/
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);/*关闭文件*/
}
26、从一个整型数组中删除所以小于数组元素平均值
#include
#include
#include
#include
intprime(intm)/*判断是否为素数*/
{inti,k;
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)return0;
return1;/*若为素数,函数值返回1*/
}
intdel(intr[],intn)
{
inti,j;
floataver=0;
for(i=0;iaver+=r[i];
if(n)aver/=n;/*求得数组中前n个整数的平均值*/
for(i=0;iif((r[i]{for(j=i;jr[j]=r[j+1];/*通过元素的前移覆盖,删除数组中小于平均数并且不是素数的元素*/
n--;
}
returnn;/*返回r数组中剩余整数的个数*/
}
main()
{
intresource[6]={27,15,16,28,18,38},n=6;/*数组初始化*/
inti;
FILE*fp;/*定义文件指针*/
fp=fopen("myf2.out","w");/*以只写方式"w"打开文件*/
if(fp==NULL)
{printf("Cannotopenthefile!
\n");exit(0);}
n=del(resource,n);/*调用del函数处理数组resource*/
for(i=0;iprintf("%d\t",resource[i]);
for(i=0;ifprintf(fp,"%d\t",resource[i]);
printf("\nMyexamnumberis:
WLJY001\n");/*将考生考号输出到屏幕及结果文件中*/
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);/*关闭文件*/
}
27、编写函数intfun(long*x)
#include
#include
#include
#include
intfun(long*x)/*该函数的功能是,找出所有满足题目要求特性的六位整数*/
{longinti,m,temp;
inta[7],k,j=0;
for(i=300;i<1000;i++)
{
m=i*i;/*求出是完全平方数的数*/
k=temp=0;
while(m)
{
a[k]=m%10;/*对m进行数位分离*/
temp=temp*10+a[k];/*求得m的各个数位,反序组合得到反序数*/
m/=10;
k++;
}
if(temp==i*i&&k==6)/*判断反序数是否与原数相等,若相等则该六位数为回文数*/
x[j++]=i*i;/*将找到的满足条件的六位整数存放到数组x中*/
}
returnj;/*函数返回数组x中元素的个数*/
}
main()
{
inti,k;
longresult[20];
FILE*fp;/*定义文件指针*/
fp=fopen("myf2.out","w");/*以只写方式"w"打开文件*/
if(fp==NULL)
{printf("Cannotopenthefile!
\n");exit(0);}
k=fun(result);/*调用fun函数将所有满足条件的六位整数存入到result数组中*/
for(i=0;iprintf("%12ld",result[i]);
for(i=0;ifprintf(fp,"%12ld",result[i]);
printf("\nMyexamnumberis:
WLJY001\n");/*将考生考号输出到屏幕及结果文件*/
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);/*关闭文件*/
}
28、编写函数voidchange(longx[],intn)
#include
#include
#include
#include
voidchange(longx[],intn);
inthw(longn);
main()
{
longa[10]={100,101,110,111,120,121,200,201,202,212};
inti;
FILE*fp;/*定义文件指针*/
fp=fopen("myf2.out","w");/*以只写方式"w"打开文件*/
if(fp==NULL)
{printf("Cannotopenthefile!
\n");exit(0);}
change(a,10);/*调用change函数对a数组做变换*/
for(i=0;i<10;i++)
printf("%d",a[i]);
for(i=0;i<10;i++)
fprintf(fp,"%d",a[i]);/*将变换后的数组a中的数据输出到屏幕并用写文件函数保存到结果文件*/
printf("\nMyexamnumberis:
WLJY001\n");/*将考生考号输出到屏幕及结果文件中*/
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);/*关闭文件*/
getch();
}
voidchange(longx[],intn)/*该函数的功能是,对x指向的数组中的前n个整数作题目要求的变换*/
{longi,j,m=n,k;
for(i=0;i{
if(hw(x[i])&&hw(x[i]*x[i]))/*判断每个整数及该整数的平方是否均为回文数*/
{
k=x[i];
for(j=i;jx[m-1]=k;i--;n--;/*将回文数移到最后一个位置*/
}
}
}
inthw(longn)/*该函数的功能是,判断数n是否为回文数*/
{longt=n,s=0;
while(t>0)
{s=s*10+t%10;t=t/10;}/*对s首先进行数位分离,并求得其反序数*/
if(n==s)return1;/*判断反序是是否与原数相等,若是则为回文数,函数值返回1*/
elsereturn0;/*若不是回文数,函数值返回0*/
}
29、编写函数intfun(intm)
#include
#include
intprime(intn)/*该函数的功能是,判断任意数n是否为素数*/
{inti;
for(i=2;i<=n/2;i++)
if(n%i==0)
return0;/*若n不为素数,函数返回0*/
return1;/*若n为素数,函数返回1*/
}
intfun(intm)/*该函数的功能是,求大于m并且不包含小于21的素数因子的最小合数*/
{inta[8]={2,3,5,7,11,13,17,19},i,n;/*把小于21的素数存放在数组a中*/
n=m+1;
while
(1)
{
if(!
prime(n))/*判断是否为素数,排除为素数的数*/
{for(i=0;i<8;i++)
if(n%a[i]==0)break;/*判断数是否能被数组a中的元素整除,若能则跳出循环*/
if(i>=8)
returnn;/*函数返回找到的最小合数*/
}
n++;
}
}
main()
{
intm,n;
FILE*fp;/*定义文件指针*/
fp=fopen("myf2.out","w");/*以只写方式"w"打开文件*/
if(fp==NULL)
{printf("Cannotopenthefile!
\n");exit(0);};
scanf("%d",&m);/*从键盘输入m*/
n=fun(m);/*调用fun函数,得到满足条件的合数*/
printf("%d\n",n);
fprintf(fp,"%d\n",n);/*将合数输出到屏幕并用写文件函数保存到结果文件*/
printf("\nMyexamnumberis:
WLJY001\n");/*将考生考号输出到屏幕及结果文件*/
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);/*关闭文件*/
}
30、查找回文素数。
如果一个素数从左向右
#include
#include
#include
#include
longgmval(intm)/*该函数的功能是,找出大于整数m且最靠近m的回