一、单项选择题:(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
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 .韩信点兵。韩信有一队兵,他想知道有多少人,便让士兵排队报