C语言题库第5章 数组.docx
- 文档编号:16854889
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:39
- 大小:71.41KB
C语言题库第5章 数组.docx
《C语言题库第5章 数组.docx》由会员分享,可在线阅读,更多相关《C语言题库第5章 数组.docx(39页珍藏版)》请在冰点文库上搜索。
C语言题库第5章数组
第五章数组
一、单项选择
1.若要定义一个具有5个元素的整型数组,以下错误的定义语句是(C)
2.下列选项中,能正确定义数组的语句是(D)
3.下面是有关C语言字符数组的描述,其中错误的是(D)
4.有以下程序,程序运行时若输入:
howareyou?
Iamfine<回车>则输出结果是(C)
#include
intmain()
{chara[30],b[30];
scanf("%s",a);
gets(b);
printf("%s\n%s\n",a,b);
return0;
}
5.以下选项中正确的语句组是(D)
6.若有定义语句:
intm[]={5,4,3,2,1},i=4;则下面对m数组元素的引用中错误的是(A)
7.以下数组定义中错误的是(A)
8.下列选项中,能够满足"若字符串s1等于字符串s2,则执行ST"要求的是(A)
9.有以下程序,程序运行后的输出结果是(C)
#include
#include
intmain()
{
charx[]="STRING";
x[0]='0';x[1]='\0';x[2]=0;
printf("%d%d\n",sizeof(x),strlen(x));
return0;
10.有以下程序,程序运行后的输出结果是(B)
#include
#include
intmain()
{
chara[20]=”ABCD\0EFG\0”,b[]=”IJK”;
strcat(a,b);printf(“%s\n”,a);
return0;
二、程序设计
1./*编写程序,实现矩阵(3行3列)的转置(即行列互换)。
例如,输入下面的矩阵:
100200300
400500600
700800900
程序输出:
100400700
200500800
300600900
注意:
部分源程序存在文件prog.c中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
*/
#include
voidfun(intarray[3][3])
{
/**********Begin**********/
/**********End***********/
}
NONO()
{/*请在此函数内打开文件,输入测试数据,调用fun函数,
输出数据,关闭文件。
*/
inti,j;
FILE*wf,*in;
intarray[3][3]={{100,200,300},
{400,500,600},
{700,800,900}};
in=fopen("a11.in","r");
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
fscanf(in,"%d",&array[i][j]);
}
wf=fopen("a11.out","w");
fun(array);
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
fprintf(wf,"%7d\n",array[i][j]);
}
fclose(wf);
}
intmain()
{
inti,j;
intarray[3][3]={{100,200,300},
{400,500,600},
{700,800,900}};
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%7d",array[i][j]);
printf("\n");
}
fun(array);
printf("Convertedarray:
\n");
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%7d",array[i][j]);
printf("\n");
}
NONO();
return0;
}
【参考代码】
inti,j;intb[3][3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
b[j][i]=array[i][j];
===========================
2./*请编写函数fun,其功能是:
将所有大于1小于等于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。
例如,输入17,则应输出46891012141516。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
*/
#include
#include
#include
#include
intfun(intm,intxx[])
{
/**********Begin*******/
/*********End*********/
}
intmain()
{
FILE*wf,*in;
intm,n,zz[100];
printf("\nPleaseenteranintegernumberbetween10and100:
");
scanf("%d",&n);
m=fun(n,zz);
printf("\n\nThereare%dnon-primenumberslessthan%d:
",m,n);
for(n=0;n printf("\n%4d",zz[n]); /******************************/ wf=fopen("1.out","w"); in=fopen("1.in","r"); fscanf(in,"%d",&n); m=fun(n,zz); for(n=0;n fprintf(wf,"%d\n",zz[n]); fclose(wf); fclose(in); /*****************************/ return0; } 【参考代码】 inti,j,n=0; for(i=4;i<=m;i++) { for(j=2;j if(i%j==0)break; if(j } returnn; =============== 3./*编写函数intfun(intlim,intaa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求出的素数的个数。 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */ #include #include #include #defineMAX100 intfun(intlim,intaa[MAX]) { /*********Begin********/ /*********End*********/ } intmain() { FILE*wf,*in; intlimit,i,sum; intaa[MAX]; printf("输入一个整数"); scanf("%d",&limit); sum=fun(limit,aa); for(i=0;i { if(i%10==0&&i! =0)/*每行输出10个数*/ printf("\n"); printf("%5d",aa[i]); } /******************************/ in=fopen("2.in","r"); fscanf(in,"%d",&limit); wf=fopen("2.out","w"); sum=fun(limit,aa); for(i=0;i { fprintf(wf,"%d\n",aa[i]); } fclose(wf); fclose(in); /*****************************/ return0; } 【参考代码】 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; =============== 4./*请编写函数fun,该函数的功能是: 移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(p<=n-1)的数组元素平移到数组的最后。 例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值为3。 移动后,一维数组中的内容应为5,6,7,8,9,10,11,12,13,14,15,1,2,3,4。 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号注释语句中填入所编写的若干语句。 试题程序: */ #include #defineN80 voidfun(intw[],intp,intn) { /************Begin**************/ /************End**************/ } intmain() { FILE*wf,*in; inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; inti,p,n=15; printf("Theoriginaldata: \n"); for(i=0;i printf("%3d",a[i]); printf("\n\nEnterp: "); scanf("%d",&p); fun(a,p,n); printf("\nThedataaftermoving: \n"); for(i=0;i printf("%3d",a[i]); printf("\n\n"); /******************************/ in=fopen("in49.dat","r"); wf=fopen("out49.dat","w"); fscanf(in,"%d%d",&n,&p); for(i=0;i fscanf(in,"%d",&a[i]); for(i=0;i printf("%3d",a[i]); fun(a,p,n); for(i=0;i fprintf(wf,"%3d",a[i]); fclose(wf); fclose(in); /*****************************/ return0; } *【参考代码】 inti,j=0,b[N]; for(i=p+1;i for((i=0);i<=p;i++) b[j++]=w[i]; for(i=0;i w[i]=b[i]; =============== 5./*请编写一个函数fun,它的功能是: 将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转为整数的函数)。 例如,若输入字符串"-1234",则函数把它转换为整数值-1234。 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */ #include #include longfun(charp[]) { /***************Begin************/ /***************End************/ } intmain() { FILE*wf,*in; chars[6]; longn; printf("Enterastring: \n"); gets(s); n=fun(s); printf("%ld\n",n); /******************************/ in=fopen("in13.dat","r"); wf=fopen("out13.dat","w"); fscanf(in,"%s",s); fprintf(wf,"%ld",fun(s)); fclose(wf); /*****************************/ return0; } 【参考代码】 longn=0,i=0; intflag=1; if(p[i]=='-')/*负数时置flag为-1*/ {i++;flag=-1;} elseif(p[i]=='+')/*正数时置flag为1*/ i++; while(p[i]! ='\0') {n=n*10+p[i]-'0';/*将字符串转成相应的整数*/ i++; } returnn*flag; =============== 6./*请编写一个函数fun,它的功能是: 求出1到m(含m)之内能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。 例如,若传给m的值为50,则程序输出: 711142122283335424449 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */ #include #include #defineM100 intfun(intm,inta[]) { /***************Begin************/ /***************End************/ } intmain() { FILE*wf,*in; intaa[M],n,k,i; n=fun(50,aa); for(k=0;k if((k+1)%20==0)/*每行输出20个数*/ {printf("%4d",aa[k]); printf("\n"); } else printf("%4d",aa[k]); printf("\n"); /******************************/ in=fopen("in4.dat","r"); wf=fopen("out4.dat","w"); fscanf(in,"%d",&k); n=fun(k,aa); for(i=0;i fprintf(wf,"%d\n",aa[i]); fclose(wf); /*****************************/ return0; } 【参考代码】 inti,j=0; for(i=1;i<=m;i++) if(i%7==0||i%11==0) a[j++]=i; returnj;/*返回这些数的个数*/ ===================== 7./*请编写函数fun,函数的功能是: 求出二维数组周边元素之和,作为函数值返回。 二维数组中的值在主函数中赋予。 例如,若二维数组中的值为 13579 29994 69998 13570 则函数值为61。 注意: 部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */ #include #include #defineM4 #defineN5 intfun(inta[M][N]) { /***************Begin************/ /***************End************/ } voidmain() { FILE*wf,*in; intaa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,10}}; inti,j,y; printf("Theoriginaldatais: \n"); for(i=0;i {for(j=0;j printf("%6d",aa[i][j]); printf("\n"); } y=fun(aa); printf("\nThesun: %d\n",y); printf("\n"); /******************************/ in=fopen("in10.dat","r"); wf=fopen("out10.dat","w"); for(i=0;i for(j=0;j fscanf(in,"%d",&aa[i][j]); y=fun(aa); fprintf(wf,"%d",y); fclose(wf); /*****************************/ } 【参考代码】 inti,j,sum=0; for(i=0;i for(j=0;j if(i==0||i==M-1||j==0||j==N-1) sum=sum+a[i][j]; returnsum; =============== 8./*下列程序定义了NXN的二维数组,并在主函数中赋值。 请编写函数fun,函数的功能是: 求出数组周边元素的平均值并作为函数值返回给主函数中的s。 例如,若a数组中的值为: 01279 19745 23831 45682 59141 则返回主程序后s的值应为3.375000。 注意: 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号注释语句中填入所编写的若干语句。 试题程序: */ #include #include #defineN5 doublefun(intw[][N]) { /************Begin**************/ /************End**************/ } intmain() { FILE*wf,*in; inta[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1}; inti,j; doubles; printf("*****Thearray*****\n"); for(i=0;i {for(j=0;j {printf("%4d",a[i][j]);} printf("\n"); } s=fun(a); printf("*****THERESULT*****\n"); printf("Thesumis: %lf\n",s); /******************************/ in=fopen("in45.dat","r"); for(i=0;i for(j=0;j fscanf(in,"%d",&a[i][j]); wf=fopen("out45.dat","w"); s=fun(a); fprintf(wf,"%lf",s); fclose(wf); fclose(in); /*****************************/ return0; } *【参考答案】 inti,j,k=0; doubleav=0.0; for(i=0;i for(j=0;j if(i==0||i==N-1||j==0||j==N-1) {av=av+w[i][j]; k++; } returnav/k; =============== 三、程序改错 1./*N个有序整数数列已放在一维数组中,给定下列程序中,函数fun的功能是: 利用折半查找算法查找整数m在数组中的位置。 若找到,则返回其下标值;反之,则返回-1。 折半查找的基本算法是: 每次查找前先确定数组中待查的范围: low和high(low 然后把m与中间位置(mid)中元素的值进行比较。 如果m的值大于中间位置元素中的值, 则下一次的查找范围放在中间位置之后的元素中;反之,下次查找范围落在中间位置之前的元素中。 直到low>high,查找结束。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: */ #include #defineN10 /**********ERROR**********/ voidfun(inta[],intm) {intlow=0,high=N-1,mid; while(low<=high) {mid=(low+high)/2;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言题库第5章 数组 语言 题库
![提示](https://static.bingdoc.com/images/bang_tan.gif)