二、读程序回答问题(每个选择3分,共45分)
1.读下面程序并回答问题:
(考点:
函数参数的传递方式(普通值传递、地址值传递))
#include
voidfun1(intx,inty)
{intt;
t=x;x=y;y=t;
}
voidfun2(intx[])
{intt;
t=x[0];x[0]=x[1];x[1]=t;
}
voidmain()
{inta[2]={1,2},b[2]={1,2};
fun1(b[0],b[1]);fun2(a);
printf("%d,%d,%d,%d\n",a[0],a[1],b[0],b[1]);
}
(1)下列说法错误的是(26)。
26(A)数组名作为函数参数进行传递,传递的是数组的首地址
(B)数组名作为函数参数时,形参数组与实参数组共用内存空间
(C)普通变量作为函数参数进行传递,实参与形参之间发生的是单向值传递
(D)数组名作为函数参数时,传递的是数组元素的值
(2)程序的运行结果是(27)。
27(A)1,2,1,2(B)1,2,2,1(C)2,1,1,2(D)2,1,2,1
2.读程序并回答问题。
(考点:
命令行参数、静态变量)
#include
intfun()
{staticintc=0;
c++;
returnc;
}
voidmain(intargc,char*argv[])
{intx,i,j;
for(i=1;ifor(j=0;argv[i][j]!
='\0';j++)
x=fun();
printf("%d\n",x*argc);//7*3=21,输出21
}
(1)若程序经编译连接后生成可执行文件2_3.exe,若键入以下命令行:
2_3abcd123
则程序的运行结果为(28)。
28(A)3(B)21(C)9(D)0
(2)若将函数fun中的static去掉,变为intc=0;程序经编译后连接生成可执行文件2_3.exe,若键入以下命令行:
2_3abcd123
则程序的运行结果为(29)。
29(A)3(B)30(C)22(D)10
3.读程序并回答问题(考点:
字符数组、函数(指针参数)、逆置算法)
#include
#include
voidfun(char*s,intp1,intp2)//逆置s指向数组中的元素值
{chart;
while(p1{
t=*(s+p1);*(s+p1)=*(s+p2);*(s+p2)=t;
p1++;p2--;
}
}
voidmain()
{charstr[10];
inti;
for(i=0;i<9;i++)
str[i]='A'+i;
str[i]='\0';
puts(str);
fun(str,0,strlen(str)-1);
puts(str);
}
(1)第一个puts(str)的输出结果为(30)。
30(A)AHCFEDGBI(B)IBGDEFCHA
(C)ABCDEFGHI(D)IHGFEDCBA
(2)第二个puts(str)的输出结果为(31)。
31(A)AHCFEDGBI(B)IBGDEFCHA
(C)ABCDEFGHI(D)IHGFEDCBA
4.阅读下面程序,回答问题。
(考点:
循环应用、阶乘求和算法)
voidmain()
{intn,m,s=0,t=1;
scanf("%d",&m);
for(n=1;n<=m;n++)
{t*=n;//t为当前n的阶乘值
s+=t;//累加t
}
printf("%d\n",s);
}
程序的功能是(32)
32(A)实现1的阶乘至m的阶乘的求和
(B)求m的阶乘
(C)1到m的求和
(D)实现1至m-1的阶乘的求和
5.读程序,回答问题。
(考点:
字符数组、删除字符算法)
#include
voidmain()
{chars[80];
inti,j;
gets(s);
for(i=j=0;s[i]!
='\0';i++)
if(s[i]!
='c')s[j++]=s[i];
s[j]='\0';
puts(s);
}
程序运行时输入cctv10,其输出结果为(33)。
33(A)cc(B)tv10(C)ctv10(D)tv10cc
6.有下列程序:
(考点:
函数(地址参数)、指针运算)
#include
charfunc(char*s)
{char*p=s;
while(*p!
='\0')
p++;//将指针p移到字符串的末尾
returnp-s;//两个指针相减得之间相差的元素个数
}
voidmain()
{printf("\n%d\n",func("Hello!
"));
getch();//接收一个字符但不显示,作用为方便查看结果
}
(1)程序的运行结果是(34)。
34(A)3(B)Hello!
6(C)无输出(D)6
(2)指针变量的运算不可以(35)。
35(A)指针变量加整形变量(B)指针变量减整形变量
(C)指针变量加指针变量(D)指针变量减指针变量
7.以下是一个C++程序,读程序写出程序运行结果。
(*考点:
C++)
#include
voidmain()
{intnum=0,i=8;
do
{i--;
num++;
}while(--i);
cout<}
程序的运行结果是(36)。
36(A)2(B)0(C)4(D)5
8.有下列程序:
(考点:
switch语句、循环)
#include
voidmain()
{charc='A';
intk=0;
do
{switch(c++)
{case'A':
k++;break;
case'B':
k--;
case'C':
k+=2;break;
case'D':
k%=2;continue;
case'E':
k*=10;break;
default:
k/=3;
}
k++;
}while(c<'G');
printf("k=%d\n",k);
getch();
}
(1)程序输出结果是(37)。
37(A)k=3(B)k=4(C)k=2(D)k=0
(2)本程序中continue的作用(38)。
38(A)与break一样(B)不起任何作用
(C)开始下一次循环(D)出现语法错误
9.有下列程序(考点:
递归函数、全局变量和局部变量)
intw=3;
intfun(intk)
{if(k==0)returnw;//w为全局变量
return(fun(k-1)*k);
}
voidmain()
{intw=10;
printf("%d\n",fun(5)*w);//w为局部变量
}
输出结果是(39)。
39(A)360(B)3600(C)1080(D)1200
10.有下列程序(考点:
指针数组、字符转换处理)
voidmain()
{charch[2][5]={"6934","8254"},*p[2];
inti,j,s=0;
for(i=0;i<2;i++)
p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>'\0'&&p[i][j]<='9';j+=2)//p[i][j]ch[i][j]
s=10*s+p[i][j]-'0';//将取得的数字字符串转换为整数
printf("%d\n",s);
}
输出结果是(40)。
40(A)6385(B)69825(C)63825(D)693825
注意:
①请把下面“程序填空”中各小题答案写在主观题答题纸上
②每一个空只填一个语句或一个语句所缺的部分内容
三、程序填空(每空2分,共30分)
1.函数fun的功能是:
找出N行M列二维数组元素中的最大值,并作为函数值返回,最大值的行列下标通过形参指针带回main函数中。
请填空。
(考点:
函数(指针参数)、求最值算法)
#include
#defineN3
#defineM4
intfun(inta[N][M],int*row,int*col)
{inti,j,r,c;
r=c=0;
for(i=0;ifor(j=0;jif(a[i][j]>①a[r][c]){r=i;c=j;}
②*row=r;
*col=c;
③returna[r][c];
}
voidmain()
{inta[N][M]={1,2,3,4,5,6,7,8,9,10,11,12};
introw,col,max;
max=fun(a,&row,&col);
printf("max=%d,row=%d,col=%d\n",max,row,col);
}
2.程序的功能是:
求出分数序列2/1,3/2,5/3,8/5,13/8……前20项之和,请填空。
(考点:
循环、序列求和算法)
#include
voidmain()
{doublex=2,y=1,t,s=0;
inti;
for(i=1;i<=20;i++)
{s=①s+x/y;
t=②x;
x=③x+y;
y=t;
}
printf("s=%f\n",s);
}
3.有5个学生的成绩需要保存在文件score.dat文件中,保存格式如下:
(考点:
文件)
姓名,年龄,成绩请填空。
#include
voidmain()
{FILE*fp;
inti;
charname[80];
intage;
floatscore;
fp=fopen(①“score.dat”,"w");
for(i=0;i<5;i++)
{printf("请输入第%d个学生的信息\n",i);
printf("姓名:
");
scanf("%s",name);
printf("年龄:
");
scanf("%d",&age);
printf("成绩:
");
② scanf(“%f”,&score);
fprintf(fp,"%s,%d,%f\n",name,age,score);
}
③fclose(fp);
}
4.下列程序的功能是:
从5个字符串中找出最长的那个字符串。
请填空。
(考点:
二维字符数组、行指针参数、返回指针值函数、字符串处理函数)
#include
#include
#defineN5
#defineM81
char*fun(char(*sq)[M])//sq为行指针变量,函数fun为返回指向char类型的指针
{inti;
①char*sp;
sp=sq[0];//sq[0]&sq[0][0]&str[0][0]
for(i=1;iif(②strlen(sq[i])>strlen(sp))sp=sq[i];
returnsp;
}
voidmain()
{charstr[N][M],*longest;//二维数组的名字是行指针常量
inti;
printf("pleaseenter5string:
");
for(i=0;igets(str[i]);
for(i=0;iputs(str[i]);
longest=③fun(str);//调用函数
printf("\nThelongeststring:
");
puts(longest);
}
5.下面程序的功能是:
由25人坐成圆圈,先从任一人出发用1到25顺时针依次编号,然后从1号开始顺时针报数(1,2,3,4,…),数到5的倍数的出圈,剩下的继续报数,求最后出圈的编号。
(考点:
数组、循环、约瑟夫环算法)
#include
voidmain()
{inta[26],j,n,count;
for(j=1;j<=25;j++)a[j]=j;//编号
j=1;
count=0;
①n=0;
do
{if(a[j]!
=0)//条件为真表示在圈内
{n++;//n是报数器
if(n%5==0)//条件为真表示报到5的倍数,以下作出圈处理
{②a[j]=0;//a[j]退出圈子
if(count==24)printf("%d\n",j);//如果之前已经退出24个人,则当前的j为最后出圈的编号
count++;//计退出圈的人数
}
}
j++;
if(j>25)j=1;//处理成循环,当报完最后一个人后,又从第一个人开始报数
}
while(③count<25);
}