江苏省二级c语言上机考试例题集120.docx
《江苏省二级c语言上机考试例题集120.docx》由会员分享,可在线阅读,更多相关《江苏省二级c语言上机考试例题集120.docx(29页珍藏版)》请在冰豆网上搜索。
![江苏省二级c语言上机考试例题集120.docx](https://file1.bdocx.com/fileroot1/2022-12/11/b143f305-47f8-4f21-8129-f2a1756674da/b143f305-47f8-4f21-8129-f2a1756674da1.gif)
江苏省二级c语言上机考试例题集120
1、取出一个十进制正整数中的所以奇数数字,用这些数字构成一个最小数。
#include
#include
voidsort(inta[],intn)
{
inti,j,t;
for(i=0;ifor(j=0;jif(a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
}
longarrange(longs)/*arrange函数的功能是取出十进制整数s中的所有奇数数字,用这些数字构成一个最小数,函数返回该数*/
{intd,b[10],i,j=0;
longs1=0;
while(s>0)/*利用循环对s数位分离,分离出个位、十位、百位等各位上的数*/
{d=s%10;
if(d%2!
=0)/*判断每一位上的数字是否为奇数*/
b[j++]=d;/*若为奇数则存放到b数组中*/
s/=10;
}
sort(b,j);/*调用sort函数,将数组b从小到大排列*/
for(i=0;is1=s1*10+b[i];/*求得用各位上的奇数组成的最小数*/
returns1;/*返回求得的数*/
}
voidmain()
{
longm,n;
FILE*fp;/*定义文件指针fp*/
if((fp=fopen("myf2.out","w"))==NULL)/*涉及文件的打开*/
{printf("Thefilecannotopen!
");exit(0);}
scanf("%ld",&n);/*接收键盘输入的整型数据*/
m=arrange(n);/*键盘输入的数据作为实参调用arrange函数*/
printf("%ld\n",m);/*将得到的最小数输出到屏幕及结果文件中*/
fprintf(fp,"%ld\n",m);
printf("\nMyexamnumberis:
WLJY001\n");/*将考生准考证号输出到屏幕及结果文件中*/
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);/*关闭文件*/
}
2、按要求合并两个字符串
#include
#include
#include
voidfun(char*a,char*b,char*c)/*函数功能是先将b指向的字符串逆序存放,然后按a[0],b[0],a[1],b[1]…的顺序合并a字符串和b字符串到c指向的数组中,将a或b中剩余的字符拼接在c数组的尾部*/
{inti,j;
charch;
i=0;j=strlen(b)-1;
while(i{ch=b[i];b[i]=b[j];b[j]=ch;
i++;j--;
}
while(*a||*b)/*利用while循环,通过判断*a||*b,将a、b数组间隔存放在c数组中*/
{if(*a){*c=*a;c++;a++;}
if(*b){*c=*b;c++;b++;}
}
*c='\0';
}
voidmain()
{
FILE*fp;/*定义文件指针fp*/
chars1[80],s2[80],s[200];/*声明3个一维数组*/
if((fp=fopen("myf2.out","w"))==NULL)
{printf("can'topenfile");exit(0);}
printf("\nEnters1string:
");
gets(s1);
printf("\nEnters2string:
");
gets(s2);/*s1、s2接收键盘输入的字符*/
fun(s1,s2,s);/*调用change函数,对字符串s2进行逆序变换,再合并s1字符串和s2字符串并保存到s数组中*/
printf("\nTheresultis:
%s\n",s);
/*将合并后产生的数组s中的字符串输出到屏幕及结果文件中*/
fprintf(fp,"%s",s);
fprintf(fp,"\n");
printf("\nMyexamnumberis:
WLJY001\n");/*将考生准考证号输出到屏幕及结果文件中*/
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);/*关闭文件*/
}
3、先判断一个m×n矩阵为Monge矩阵,在对该矩阵进行交换处理
#include
#include
#defineN5
voidchange(inta[][N],intn)/*该函数的功能是,对a指向的n行5列数组中的矩阵进行变换*/
{inti,j,t;
for(i=0;ifor(j=0;j{t=a[i][j];a[i][j]=a[n-1-i][j];a[n-1-i][j]=t;}/*变换形式:
第一行与最后一行交换,第二行与倒数第二行交换……*/
}
intMonge(inta[][N],intn)
{
inti,j;
for(i=0;i{for(j=0;jif(a[i][j]+a[i+1][j+1]>a[i][j+1]+a[i+1][j])
return0;
/*若矩阵不是Monge矩阵,函数返回0*/
}
return1;
/*若矩阵是Monge矩阵,函数返回1*/
}
voidmain()
{
inta[][N]={{10,17,13,28,23},{17,22,16,29,23},
{24,28,22,34,24},{11,13,6,17,7},{45,44,32,37,23}};/*数组初始化*/
intmonge,i,j;FILE*fp;
fp=fopen("myf2.out","w");/*以只写"w"方式打开文件*/
if(fp==NULL)exit(0);
monge=Monge(a,5);/*调用Monge函数对a数组进行判断*/
for(i=0;i{for(j=0;j{printf("%4d",a[i][j]);fprintf(fp,"%4d",a[i][j]);}
printf("\n");fprintf(fp,"\n");
}
if(monge)
{printf("aisMonge\n");fprintf(fp,"aisMonge\n");}/*将a数组变换前的判断结果输出到屏幕及结果文件中*/
else
{printf("aisnotMonge\n");fprintf(fp,"aisnotMonge\n");}
change(a,5);/*调用change函数对a数组进行变换处理*/
for(i=0;i{
for(j=0;j{printf("%4d",a[i][j]);fprintf(fp,"%4d",a[i][j]);}
printf("\n");fprintf(fp,"\n");
}/*将a数组变换后的元素输出到屏幕及结果文件中*/
monge=Monge(a,5);/*调用Monge函数对经过变换的a数组进行判断*/
if(monge)/*将a数组变换后的判断结果输出到屏幕及结果文件中*/
{printf("aisMonge\n");
fprintf(fp,"aisMonge\n");}
else
{printf("aisnotMonge\n");fprintf(fp,"aisnotMonge\n");}
printf("\nMyexamnumberis:
WLJY001\n");/*将考生准考证号输出到屏幕及结果文件中*/
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);/*关闭文件*/
}
4、用一组整数验证命题
#include
#include
#defineN100
intfun(inta[],intb[],intn)
{
inti,j,x,y,z,s,t,m,k=0;
for(i=0;iif(a[i]/1000<1)
{
x=a[i]/100;y=a[i]/10%10;z=a[i]%10;/*对数a[i]进行数位分离*/
if(x!
=z)
{
s=z*100+y*10+x;/*交换a[i]的百位数字与个位数字得到s*/
t=s>a[i]?
(s-a[i]):
(a[i]-s);/*求a[i]和s的绝对值得到t*/
x=t/100;y=t/10%10;z=t%10;
m=z*100+y*10+x;/*交换t的百位数字与个位数字得到m*/
if(t+m==1089)/*判断t与m的和是否为1089*/
b[k++]=i;
}
}
returnk;/*函数返回数组b中数据的个数*/
}
voidmain()
{
inta[N]={123,765,1,45,121,1345,131,67,696,3589},b[N],n,i;
FILE*fp;/*定义文件指针*/
if((fp=fopen("myf2.out","w"))==NULL)/*以只写"w"方式打开文件*/
{printf("Thefilecallnotopen!
");exit(0);}
n=dotest(a,b,10);/*用a数组作为实参调用fun函数*/
for(i=0;i{printf("%5d",a[b[i]]);fprintf(fp,"%5d",a[b[i]]);}/*将a数组中所有符合命题的整数输出到屏幕及结果文件中*/
/*将考生准考证号输出到屏幕及结果文件中*/
printf("\nMyexamnumberis:
WLJY001\n");
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);/*关闭文件*/
}
5、找出7个默森尼数
#include
#include
#defineN7
voidMersenne(longa[],intm);
intprime(long);
voidmain()
{
longa[N];
inti;
FILE*fp;/*定义文件指针*/
fp=fopen("myf2.out","w");/*以只写"w"方式打开文件*/
if(fp==NULL)exit(0);
Mersenne(a,N);/*调用Mersenne函数,找出并保存前7个Mersenne数*/
for(i=0;i{printf("%8ld",a[i]);fprintf(fp,"%8ld",a[i]);}/*将运行结果输出到屏幕及结果文件中*/
printf("\nMyexamnumberis:
WLJY001\n");/*将考生准考证号输出到屏幕及结果文件中*/
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
}
voidMersenne(longa[],intm)/*该函数的功能是,求出前m个Mersenne数*/
{longf,n,k;
inti=0;
a[i++]=3;
for(n=3;i{
f=1;
for(k=1;k<=n;k++)
f*=2;/*求2的n次方*/
if(prime(n)&&prime(f-1))/*当n和2的n次方减1均为素数时,该数为Mersenne数*/
a[i++]=f-1;/*将找到的Mersenne数保存到数组a中*/
}
}
intprime(longn)/*该函数的功能是,判断整数a是否是素数*/
{longi;
for(i=2;i<=n/2;i++)
if(n%i==0)return0;
return1;/*若是素数函数返回值1*/
}
6、从一个指定的自然数
#include
#include
intlinkrun(inta,intb,int*p);
voidmain()
{
inti,a,b,max,p[100];
FILE*fp;
if((fp=fopen("myf2.out","w"))==NULL)/*以只写"w"方式打开文件*/
{printf("Thefilecallnotopen!
");exit(0);}
printf("Entera,b:
(a
scanf("%d,%d",&a,&b);/*接收从键盘输入的a和b*/
max=linkrun(a,b,p);/*以a、b、p作为实参调用函数*/
for(i=0;i<=b-a;i++)
{
printf("%3d",p[i]);
fprintf(fp,"%3d",p[i]);
}
printf("\nmax=%d",max);
fprintf(fp,"\nmax=%d",max);/*将运行结果输出到屏幕及结果文件中*/
printf("\nMyexamnumberis:
WLJY001\n");/*将考生准考证号输出到屏幕及结果文件中*/
fprintf(fp,"\nMyexamnumberis:
WLJY001\n");
fclose(fp);/*关闭文件*/
}
intlinkrun(inta,intb,int*p)
{
inti,k,m,n,num;
num=0;
for(i=0,k=a;k<=b;i++,k++)/*通过for循环,以[a,b]中所有自然数作为n*/
{n=k;p[i]=1;
while(n!
=1)
{
++p[i];/*将数列的长度保存到数组p中*/
if(n%2)/*n为奇数时,按相应公式求解*/
n=n*3+1;
else/*当n为偶数时,按相应公式求解*/
n/=2;
}
if(p[i]>num)num=p[i];/*求出数组中最大值*/
}
returnnum;/*返回最大值*/
}
7、将一个十进制整数m转换成r进制整数的字符串表示形式
#include
#include
voidtrdec(char*str,intidec,intibase)/*该函数的功能是,将十进制整数idec转换为ibase进制的字符串表示形式*/
{charch;
inti,idr,k=0;
while(idec!
=0)
{
idr=idec%ibase;/*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;/*变量声明,定义文件指针fp*/
if((fp=fopen("myf2.out","w"))==NULL)
{printf("Thefilecannotopen!
");exit(0);}
printf("Enteranumber");scanf("%d",&x);/*接收从键盘输入的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);/*关闭文件*/
}
8、将以为数组中的所有素数移到该数组的前端部分
#include
#include
intN;
voidinsert(int*p,intx,intn)
{
inti=0,j;
while(x>p[i]&&ii++;
for(j=n;j>i;j--)
p[j]=p[j-1];
p[j]=x;/*②此语句的作用是将x插入到元素p[j]的位置*/
}
int*create()
{
int*head,*p,i;
printf("\nN=");
scanf("%d",&N);
head=(int*)malloc(N*sizeof(int));/*③分配内存空间函数malloc的调用形式错误,正确的为:
(类型说明符*)malloc(size)*/
printf("Enternumbers:
");
p=head;
for(i=0;iscanf("%d",&p[i]);/*④接收从键盘输入的数值要用取址运算符*/
for(i=1;iinsert(p,p[i],i);
returnhead;
}
voidmain()
{
int*head,*p,i,x;
head=create();
p=head;
for(i=0;iprintf("%3d",*p++);
free(head);
}
9、用以下展开式求
#include
#include
#include/*①后续程序调用了字符函数isalpha,所以要加#include*/
voidreplace_word(chars[])
{
charword_tab[4][10]={"sad","happy","accuse","forgive"};
chart[10],tmp[80];/*②由后面的t[k]=s[j]知,此处定义的t不是一个字符变量,而是一个字符型数组*/
inti,j,k,n;
for(i=0;s[i];i++)
{
for(j=i,k=0;isalpha(s[j]);k++,j++)
t[k]=s[j];
t[k]=0;
if(k>0)
{
for(n=0;n<4;n++)
if(strcmp(t,word_tab[n])==0)break;
if(n<4)
{
strcpy(tmp,s+i+strlen(t));
strcpy(s+i,word_tab[(n+1)%4]);
strcat(s,tmp);/*③strcpy(str1,str2)是把字符串str2复制到str1中,会覆盖str1中的内容,此处应用strcat函数*/
i=i+strlen(word_tab[(n+1)%4]);