文档库 最新最全的文档下载
当前位置:文档库 › C语言考试题及答案

C语言考试题及答案

C语言考试题及答案
C语言考试题及答案

一、单项选择题:(10分,每题2分)

1. char*p[10]; 该语句声明了一个:。

A) 指向含有10个元素的一维字符型数组的指针变量p

B) 指向长度不超过10的字符串的指针变量p

C) 有10个元素的指针数组p,每个元素可以指向一个字符串

D) 有10个元素的指针数组p,每个元素存放一个字符串

2 .若intx;且有下面的程序片断,则输出结果为:。

for(x=3;x<6;x++)

{

prin tf((x%2)"##%d":"**%d\n" ,x);

}

A) ##3 B)**3 C) **3 D)##3**4

**4##4##4**5 ##5

##5**5

3 .在while (!x )语句中的!x与下面条件表达式等价的是:。

A)x!=0B)x==1 C)x!=1 D)x==0

4 .已知

structpoi nt

{

intx;

inty;

};

structrect

{

structpoi ntpt1;

structpoi ntpt2;

};

structrectrt;

structrect*rp 二&rt;

则下面哪一种引用是不正确的__________ 。

A) r t.pt1.xB) (*rp).pt1.xC) rp->pt1.x

D)rt->pt1.x

5 .若二维数组a有m行n列,则下面能够正确引用元素a[i][j]的为:。

A)*(a+j* n+i)B)*(a+i* n+j) C)*(*(a+i)+j) D)*(*a+i) +j

CDDDC

二、分析程序并写出运行结果。(25分,每题5分)

1 . #include

main ()

{intn;

staticchar*monthName[]=

{"Illegalmonth","January","February",

"March","April","May","June","July","August",

"September","October","November","December"};

for(n=1;n<=12;n++)

{

printf("%s\n",monthName[n]);

}

}

运行结果是:

January

February

March

April

May

June

July

August

September

October

November

December

2.#include

#defineARR_SIZE7

voidYH(inta[][ARR_SIZE],intn);

voidPrintYH(inta[][ARR_SIZE],intn);

main()

{inta[ARR_SIZE][ARR_SIZE];

YH(a,ARR_SIZE-1);

PrintYH(a,ARR_SIZE-1);

}

voidYH(inta[][ARR_SIZE],intn)

{inti,j;

for(i=1;i<=n;i++)

{

for(j=1;j<=i;j++)

{

if(j==1||i==j)

{

a[i][j]=1;

}

else

{ a[i][j]=a[i-1][j-1]+a[i-1][j];

}

}

}

}

voidPrintYH(inta[][ARR_SIZE],intn)

{

inti,j;

for(i=1;i<=n;i++)

{

for(j=1;j<=i;j++)

{

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

}

printf("\n");

}

}

运行结果是:

1

11

121

1331

14641

15101051

3.

#include

main()

{

inti,n;

for(i=1;i<=5;i++)

{ printf("Pleaseentern:"); scanf("%d",&n); if(n<=0)continue;

printf("n=%d\n",n);

}

printf("Programisover!\n");

}

程序运行时输入:1-23-45 /

运行结果是:

n=1

Pleaseentern:Pleaseentern:n=3

Pleaseentern:Pleaseentern:n=5 Programisover!

4.

#include voidFunc(intn);

main()

{

inti;

for(i=0;i<2;i++)

{

Func(i);

}

}

voidFunc(intn)

{

staticintt=1;

printf("t=%d\n",t++);

}

运行结果是:

t=1

t=2

5.

#include

intFunc(inti);

main()

{

inti;

for(i=3;i<5;i++)

prin tf("%d",Fu nc(i));

}

prin tf("\n");

}

intFun c(i nti)

{

statici ntk=10;

for(;i>0;i--)

{

k++;

}

retur n(k);

}

运行结果是:

1317

三、阅读并完成程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(20分,每空2分)

1.下面程序用于读入10个字符串,然后找出最大的字符串并打印。

#i nclude

#i ncludevstri ng.h>

main ()

{

charstr[10][80],maxstri ng[80];

in ti;

prin tf("E nterte nstri ngs:\n");

for(i=0;i<10;i++)

{

scanf("%s",str[i] _____

}

strcpy(maxstri ng,str[O]);

for(i=1;i<10;i++)

{

if(str __________ 或

strcmp(str[il,maxstring)>0

strcpy(ma _______

}

}

prin tf("Themaxstri ngis:%s\ n",maxstri ng);

}

2. 下面这个程序用于交换两个数组的对应元素的值。

#i nclude

#defin eARRAY_SIZE10

voidSwap(i nt*x,i nt*y); voidExcha nge(i nta[],i ntb[],i ntn); void In putArray(i nta[],i ntn); voidPri ntArray(i nta[],i ntn); main ()

{

in ta[ARRAY_SIZE],b[ARRAY_SIZE], n; prin tf("I nputarrayle nthnv=10:"); sca nf("%d",&n);

prin tf("I nputarraya:\n");

In putArray(a, n);

prin tf("I nputarrayb:\n");

In putArray(b ,n);

Excha nge(a,b ,n);

prin tf("Afterswap:\n");

prin tf("Arraya:\n");

Prin tArray(a, n);

prin tf("Arrayb:\n");

Prin tArray(b, n);

}

voidSwap(i nt*x,i nt*y)

{

in ttemp;

temp二*x;

*x=*y;

*y=temp;

}

voidExcha nge(i nta[],i ntb[],i ntn)

{inti;

for(i=0;i

Swap(&a[i],&b[i]);

}

void In putArray(i nta[],i ntn)

{inti;

for(i=0;i

scanf("%d",&a[i]); ____

}

voidPri ntArray(i nta[],i ntn)

{inti;

for(i=0;i

prin tf("%d",a[i]);

prin tf("\n");

}

3. 从键盘任意输入一个年号,判断它是否是闰年。若是闰年,输出"Yes",否则输出"No"。已知符合下列条件之一者是闰年:

能被4整除,但不能被100整除。

能被400整除。

#i nclude

main ()

{in tyear,flag;

prin tf("E nteryear:");

sca nf("%d",&year);

if(ye _______

flag=1;

else

flag=0;

if(flag) __

prin tf("Yes!\n");

else

prin tf("No!\n");

}

四、在下面给出的4个程序中,共有15处错误(包括语法错误和逻辑错误),请找出其中的错误,并改正之。 (在错误的代码下边画一根横线,把正确的代码写在旁边;漏掉的代码正确插入合适的位置。

30分,每找对1个错误,加1分,每修改正确1个错误,再加1分。)

1 .编程计算矩阵相乘之积。

#i nclude

#defi neROW2

#defin eCOL3

〃voidMultiplyMatrix(i nta[ROW][COL],i ntb[COL][R

OW],i ntc[ROW][ROW]) ;

main ()

{i nta[ROW][COL],b[COL][ROW],c[ROW][ROW],i,j;

prin tf("I nputarraya:\n");

for(i=0;i

for(j=0;j

sca nf("d",&p[i][j]); //%d_

prin tf("I nputarrayb:\n");

for(i=0;i

for(j=0;j

sca nf("d",&b[i][j]);

MultiplyMatrix(a,b,c);

prin tf("Results:\n");

for(i=0;i

for(j=0;j

prin tf("%6d",&c[i][j]); 〃c[i][j]

printf("\n");

}

voidMultiplyMatrix(i nta[ROW][COL],i ntb[COL][ROW

],i ntc[ROW][ROW])

{inti,j,k;

for(i=0;i

for(j=0;j

c[i][j]=c[曲]+a[i][k]*b[j][k]; _______ 〃b[k][j]

}

}

2 .编程输入10个数,找出其中的最大值及其所在的数组下标位置。

#i nclude

in tFi ndMax(i ntnu m[],i ntn ,i nt*pMaxPos);

main ()

{i ntnu m[10],maxValue,maxPos,mi nV alue,mi nPos,i

//;

prin tf("I nput10 numbers:\n"); for(i=0;i<10;i++)

scanf("%d",num[i]); //& num[i]

maxValue=F in dMax (nu m,10,*maxPos); //&maxPos

prin tf("Max=%d,Positi on=%d\n",maxValue,maxPos)

J

}

intFin dMax(i ntnu m[],i ntn,in t*pMaxPos)

{in ti,max;

max二num [0];

for(i=1,i

if(nu m[i]>max)

{

max二nu m[i]; *pMaxPos=i;

}

retur nm ax;

}

3 .韩信点兵。韩信有一队兵,他想知道有多少人,便让士兵排队报

相关文档