C语言题库第5章 数组.docx

上传人:b****9 文档编号:28965724 上传时间:2023-07-20 格式:DOCX 页数:39 大小:71.41KB
下载 相关 举报
C语言题库第5章 数组.docx_第1页
第1页 / 共39页
C语言题库第5章 数组.docx_第2页
第2页 / 共39页
C语言题库第5章 数组.docx_第3页
第3页 / 共39页
C语言题库第5章 数组.docx_第4页
第4页 / 共39页
C语言题库第5章 数组.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

C语言题库第5章 数组.docx

《C语言题库第5章 数组.docx》由会员分享,可在线阅读,更多相关《C语言题库第5章 数组.docx(39页珍藏版)》请在冰豆网上搜索。

C语言题库第5章 数组.docx

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;

if(m

high=mid-1;

/**********ERROR**********/

elseif(m>=a[mid])

low=mid+1;

elsereturn(mid);

}

return(-1);

}

intmain()

{inti,a[N]={-3,4,7,9,13,24,67,89,100,180},k,m;

printf("a数组中的数据如下:

");

for(i=0;i

printf("%d",a[i]);

printf("Enterm:

");

scanf("%d",&m);

k=fun(a,m);

if(k>=0)

printf("m=%d,index=%d\n",m,k);

else

printf("Notbefound!

\n");

return0;

}

【参考答案】

intfun(inta[],intm)

m>a[mid]

2./*下列给定程序中,函数fun的功能是:

输出M行、M列整数方阵,然后求两条对角线上的各元素之和,返回此和数。

请改正程序中的错误

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1