if(s[p]>s[*k])*k=p;
}
main()
{inta[10],i,k;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
abc(a,10,&k);
printf("%d,%d\n",k,a[k]);
}
以上程序的功能是(29):
29(A)查询并输出数组中最大值的位置及最大值
(B)查询并输出数组中最小值的位置及最小值
(C)计算数组中各元素之和
(D)计算数组中各元素之乘积
4.读下列程序并回答问题。
#include
voidmain(intargc,char*argv[])
{charch;
FILE*in,*out;
if(argc!
=3)
exit
(1);
if((out=fopen(argv[1],"r"))==NULL)
{printf("Cannotopenthefile.\n");
exit(0);
}
if((in=fopen(argv[2],"w"))==NULL)
{printf("Cannotopenthefile.\n");
fclose(out);
exit(0);
}
while((ch=fgetc(out))!
=EOF)
if(ch>='a'&&ch<='z')
{ch='A'+ch-'a';
fputc(ch,in);
}
elsefputc(ch,in);
fclose(in);
fclose(out);
}
上述C程序经编译、连接后生成一个可执行文件,文件名为myfile.exe。
假设磁盘上有一个文件file1.dat,其内容为Thisisanexample,若在DOS提示符下键入:
myfilefile1.datfile2.dat<回车>,请回答下面两个问题。
(1)按上述要求运行后,文件file1.dat的内容为(30)。
30(A)Thisisanexample(B)THISISANEXAMPLE
(C)thisisanexample(D)ThisIsAnExample
(2)按上述要求运行后,文件file2.dat的内容为:
(31)。
31(A)Thisisanexample(B)THISISANEXAMPLE
(C)thisisanexample(D)ThisIsAnExample
5.阅读如下程序:
main()
{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)
s=10*s+p[i][j]-'0';
printf("%d\n",s);
}
程序运行的结果是(32):
32(A)6385(B)69825(C)63825(D)693825
6.下列程序运行的结果为(33)。
#include
fun(intx,inty,int*cp,int*dp)
{*cp=x+y;
*dp=x-y;
}
main()
{inta,b,c,d;
a=30;b=50;
fun(a,b,&c,&d);
printf("%d,%d\n",c,d);
}
33(A)50,30(B)30,50(C)80,-20(D)80,20
7.读下列程序,回答问题。
#include
voidf(ints[][4])
{inti,j,k;
for(i=0;i<3;i++)
for(j=i+1;j<4;j++)
{k=s[i][j];s[i][j]=s[j][i];s[j][i]=k;}
}
main()
{ints[4][4],i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
s[i][j]=i-j;
f(s);
for(i=0;i<4;i++)
{printf("\n");
for(j=0;j<4;j++)
printf("%4d",s[j][i]);
}
}
(1)程序的运行结果是(34)。
34(A)
(B)
(C)
(D)
(2)若将函数f中的for(j=i+1;j<4;j++)改为for(j=0;j<3-i;j++)运行结果是(35)。
35(A)
(B)
(C)
(D)
8.阅读程序回答问题:
main()
{inti,j,k,m=0;
for(i=1;i<4;i++)
for(j=1;j<4;j++)
for(k=1;k<4;k++)
m++;
printf("M=%d",m);
}
(1)以上程序输出M=(36)。
36(A)3(B)6(C)9(D)27
(2)如果在以上程序中语句m++;之前增加一条语句:
if(!
(i==j||i++k||j++k)),则输出M=(37)。
37(A)3(B)6(C)9(D)27
9.下列程序运行的结果为(38)。
#include
main()
{voidpic(intlen,charc);
inti=4,j;
pic(27,'');
j=i;
pic(i+2*j-1,'*');
putchar('\n');
for(j=2;j>=0;j--)
{pic(30-j,'');
pic(i+2*j,'*');
putchar('\n');
}
}
voidpic(intlen,charc)
{intk;
for(k=1;k<=len;k++)
putchar(c);
}
38(A)(B)(C)(D)
*************************
***************************
*****************************
*******************************
10.读程序,回答问题。
#include
char*cat(char*str1,char*str2)
{char*pt;
for(pt=str1;*pt!
='\0';pt++);
while(*str2!
='\0')
*pt++=*str2++;
*pt='\0';
return(pt);
}
main()
{char*p,s1[30]="210",s2[30]="45";
p=cat(s1,s2);
printf("%d\n",p-s1);
p=cat(s1,s2);
printf("%d\n",*(p-1)-*s1);
}
(1)本程序中第一次调用cat函数后,输出为(39)。
39(A)2(B)3(C)5(D)7
(2)本程序中第二次调用cat函数后,输出为(40)。
40(A)2(B)3(C)5(D)7
注意:
①请把下面“程序填空”中各小题答案写在主观题答题纸上
②每一个空只填一个语句或一个语句所缺的部分内容
三、程序填空(每空2分,共30分)
1.下面程序的功能是:
将给定的整数x按指定的位置插入已有的10个整数序列并输出,插入操作在被调函数insert中完成。
(指定的位置应大于等于0且小于等于10)
#include
voidinsert(①,inti,intx)
{intj;
for(j=9;j>=i;j--)
②;
p[i]=x;
}
voidmain()
{inti,a[11]={1,2,3,4,56,7,8,9,10},wz,x;
printf("Inputtheinsertingposition,>=0&<=10\n");
scanf("%d",&wz);
printf("Inputainsertingdata\n");
scanf("%d",&x);
③;
for(i=0;i<=10;i++)
printf("%d",a[i]);
}
2.函数fun的功能是求x的y次方(y>=1),请填空。
doublefun(doublex,inty)
{①;
doublez;
for(i=1,z=1;②;i++)
z=z*x;
③;
}
3.下面程序的功能是:
从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。
请填空。
main()
{floatx,max,min;
scanf("%f",&x);
max=x;
min=x;
while(①)
{if(x>max)max=x;
if(②)min=x;
scanf("%f",③);
}
printf("\nMax=%f\nMin=%f\n",max,min);
}
4.下面程序是利用插入排序法对数组a进行降序排列。
插入排序的思路是:
先对数组的头两个元素进行排序,然后把第三个元素插入已排好序的前两个元素,再插入第四个,依次完成全部元素的插入排序。
请填空。
#include
voidmain()
{inta[10];
inti,j,t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++)
{t=a[i];
j=①;
while(j>=0&&t>a[j])
{②;
j--;
}
③;
}
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n");
}
5.下面程序从一个二进制文件中读入结构体数据,并把结构体数据显示在屏幕上。
请填空。
#include
structrec
{intnum;
floattotal;
};
reout(①)
{structrecr;
while(!
feof(f))
{fread(&r,②,1,f);
printf("%d,%f\n",③);
}
}
voidmain()
{FILE*f;
f=fopen("bin.dat","rb");
reout(f);
fclose(f);
}
四川省普通高等学校计算机应用知识和能力
第二十四次等级考试
二级(C与C++语言)上机考试试卷(第一套)参考答案
一、程序调试题(文件名为test1-1.c)(40分)
#include
voidspacenum(char*a,int*n)
{
inti;
n=0;/*改为*n*/
for(i=0;i='\0'*/
if(*(a+i)=='')
*n++;/*改为(*n)++*/
}
main()
{
charstr[100];
intcount;
puts(str);/*改为gets(str)*/
spacenum(str,count);/*改为&count*/
printf("space=%d\n",count);
}
评分标准:
每改对一处得8分
二、编程题(程序文件取名为test1-2.c)(60分)
评分标准:
1.found函数编写30分:
(1)函数定义、形参书写正确(10分)
(2)函数中能正确求出同构烽,并存入一维数组中,能正确返回函数值(20分)
2.main函数30分:
(1)正确定义实参一维数组,并能正确调用found函数(10分)
(2)文件打开和操作正确(10分)
(3)输出结果正确(10分)
参考程序:
#include
intfound(inta[])
{inti;
intn=0;
for(i=1;i<100;i++)
{if(i*i%10==i||i*i%100==i)
{a[n]=i;
n++;
}
}
returnn;
}
voidmain()
{inta[10];
intcount,i;
FILE*fp;
if((fp=fopen("test1_2.dat","w"))==NULL)
{printf("Cannotopenthefile.\n");
exit(0);
}
count=found(a);
for(i=0;i{printf("%4d",a[i]);
fprintf(fp,"%4d",a[i]);
if((i+1)%5==0)
{printf("\n");
fprintf(fp,"\n");
}
}
printf("\n");
fprintf(fp,"\n");
printf("count=%d\n",count);
fprintf(fp,"count=%d\n",count);
fclose(fp);
}
四川省普通高等学校计算机应用知识和能力
第二十四次等级考试
二级(C与C++语言)上机考试试卷(第二套)参考答案
一、程序调试题(文件名为test2-1.c)(40分)
磁盘上有一个名为text2-1.c的C程序,其功能是:
统计一个无符号整数各位数值为零的个数,并把该无符号整数各位上最大的数值作为函数值返回。
例如:
若输入无符号整数30800,则数字值为零的个数为3,各位上数值最大的是8。
请改正程序中错误,使其能输出正确结果。
注意:
不得增加行或删除行,不得更改main函数和原程序结构。
#include
intfun(unsignedn,intzero)/*改为*zero*/
{
intcount=0,max=0,t;
do
{t=n/10;/*改为n%10*/
if(t=0)/*改为t==0*/
count++;
if(maxmax=t;
n=n%10;/*改为n/10*/
}while(n);