高考C语言题.docx
《高考C语言题.docx》由会员分享,可在线阅读,更多相关《高考C语言题.docx(36页珍藏版)》请在冰豆网上搜索。
高考C语言题
试卷编号:
8258
所属语言:
计算机基础
试卷方案:
111
试卷总分:
400分
共有题型:
3种
一、程序填空共5题(共计100分)
第1题(分)题号:
650难度:
中第1章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
函数intchange(chars[])将s中的数字字符串转换成整数,
并返回该数。
例如s[]中为"123",转换后为123。
函数intmulti(chars[],chart[])将s字符串转换的整数乘
以t字符串转换的整数,并返回乘积。
---------------------------------------------------------
注意:
请勿改动程序中的其他内容。
-------------------------------------------------------*/
#include<>
intchange(chars[])
{
inti,sum;
sum=0;
for(i=0;s[i];i++)
/**************************SPACE*************************/
sum=sum*10+【】-'0';
returnsum;
}
intmulti(chars[],chart[])
{
intmul;
/**************************SPACE*************************/
mul=【】;
returnmul;
}
intmain()
{
chars1[]="123",s2[]="56";
intmst;
mst=multi(s1,s2);
printf("%d\n",mst);
return0;
}
答案:
=======(答案1)=======
s[i]
=========或=========
*(s+i)
=======(答案2)=======
change(s)*change(t)
=========或=========
change(t)*change(s)
第2题(分)题号:
651难度:
中第1章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
函数voidcheck(longn,intc[])检测长整型正整数n是几
位数,同时找出最小的数字。
将位数和最小的数字存放在数
组c中。
例如n=1256044时,n是7位数,最小的数字是0。
---------------------------------------------------------
注意:
请勿改动程序中的其他内容。
-------------------------------------------------------*/
#include<>
/**************************SPACE*************************/
voidcheck(longn,int【】)
{
intmin,p,k;
min=9;
p=0;
do{
k=n%10;
min=(min>k)k:
min;
n/=10;
p++;
}while(n);
c[0]=p;
c[1]=min;
}
intmain()
{
longn;
intc[2];
printf("输入长整型正整数:
");
scanf("%ld",&n);
check(n,c);
/**************************SPACE*************************/
printf("%ld是%d位数,最小数字是%d\n",【】);
return0;
}
答案:
=======(答案1)=======
c[]
=========或=========
c[2]
=======(答案2)=======
n,c[0],c[1]
第3题(分)题号:
652难度:
中第1章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
函数intconvert(inta,intnsys)将nsys(nsys<10)进制数a,
转换成十进制数并返回。
---------------------------------------------------------
注意:
请勿改动程序中的其他内容。
---------------------------------------------------------*/
#include<>
#defineN5
intconvert(inta,intnsys)
{
intt,p;
if(areturna;
t=0;
p=1;
while(a!
=0)
{
t=t+a%10*p;
/**************************SPACE*************************/
【】;
p*=nsys;
}
returnt;
}
intmain()
{
inti,d;
intnum[N][2]={{704,8},{10011,2},{266,7},{3,5},{22110,3}};
for(i=0;i{
d=convert(num[i][0],num[i][1]);
/**************************SPACE*************************/
printf("%d进制数的%d\t=十进制数的%d\n",【】);
}
return0;
}
答案:
=======(答案1)=======
a/=10
=========或=========
a=a/10
=======(答案2)=======
num[i][1],num[i][0],d
第4题(分)题号:
653难度:
中第1章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
函数voidrearr(inta[],intn)将已经升序排列的一维数
组a中的n个元素重新排列,重新排列的规则是:
将a数组中的最小元素放到a[0],最大元素放到a[1],
将次小元素放到a[2],次大元素放到a[3],...,
以此类推。
例如:
原a数组各元素为:
-11-703815162038
重新排列后a数组各元素为:
-1138-7200163158
---------------------------------------------------------
注意:
请勿改动程序中的其他内容。
-------------------------------------------------------*/
#include<>
#defineN9
voidrearr(inta[],intn)
{
intleft,right,i;
intb[N];
left=0;
right=N-1;
for(i=0;left{
b[i]=a[left++];
/**************************SPACE*************************/
b[i+1]=a[【】];
}
if(left==right)
b[i]=a[left];
for(i=0;i/**************************SPACE*************************/
a[i]=【】;
}
intmain()
{
inti,a[N]={-11,-7,0,3,8,15,16,20,38};
rearr(a,N);
for(i=0;iprintf("%3d",a[i]);
printf("\n");
return0;
}
答案:
=======(答案1)=======
right--
=======(答案2)=======
b[i]
第5题(分)题号:
654难度:
中第1章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
函数voidchange(chars[],chart[])将s字符串中字母和数
字字符按以下规则转换,并将其保存在t中。
其他字符则不作
转换。
大写字母转换规则:
'A'->'z','B'->'y',...,'Z'->'a'
小写字母转换规则:
'z'->'A','y'->'B',...,'a'->'Z'
数字字符转换规则:
'0'->'9','1'->'8',...,'9'->'0'
---------------------------------------------------------
注意:
请勿改动程序中的其他内容。
-------------------------------------------------------*/
#include<>
#include<>
voidchange(chars[],chart[])
{
inti;
for(i=0;s[i];++i)
{
if(isalpha(s[i]))
t[i]=(isupper(s[i])'Z'-s[i]+'a':
'z'-s[i]+'A');
elseif(isdigit(s[i]))
t[i]='9'-s[i]+'0';
else
/**************************SPACE*************************/
【】;
}
t[i]=0;
}
intmain()
{
chart[100]="7984RHhSVVKBVZI,dRHSBLFTLLWOFXP!
";
chars[100];
/**************************SPACE*************************/
【】;
printf("%s\n",s);
return0;
}
答案:
=======(答案1)=======
t[i]=s[i]
=======(答案2)=======
change(t,s)
二、程序改错共5题(共计150分)
第1题(分)题号:
575难度:
中第1章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:
intsort(inta[],intn)函数将n个元素的数组a中互不相
同的元素按升序排列,重新存入数组a中,函数返回按升序
排列后互不相同元素的个数。
例如:
数组a中元素为6,2,7,5,4,3,4,6,5,4,调用sort函数后,
函数值为6,主函数中输出排序后的数组a元素为
2,3,4,5,6,7。
请改正程序中的错误,使它能得出正确的结果。
---------------------------------------------------------
注意:
不得增行或删行,也不得更改程序的结构。
--------------------------------------------------------*/
#include<>
intsort(inta[],intn)
{
inti,j,k,low,high,mid,t;
for(k=i=1;i{
low=0;
high=k-1;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]>=a[i])high=mid-1;
elselow=mid+1;
}
if(low>=k||a[low]!
=a[i])
{
/*******************FOUND*******************/
t=a[i]-1;
/*******************FOUND*******************/
for(j=k;j>=low;j--)
a[j+1]=a[j];
a[low]=t;
k++;
}
}
returnk;
}
intmain()
{
inta[]={6,2,7,5,4,3,4,6,5,4};
inti,n;
n=sizeof(a)/sizeof(int);
for(i=0;iprintf("%d\t",a[i]);
/*******************FOUND*******************/
sort(a,n);
printf("\nAftersorting:
\n");
for(i=0;iprintf("%d\t",a[i]);
printf("\n");
return0;
}
答案:
=======(答案1)=======
t=a[i];
=======(答案2)=======
for(j=k-1;j>=low;j--)
=======(答案3)=======
n=sort(a,n);
第2题(分)题号:
576难度:
中第1章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:
函数unsigneddelbits(unsignedx,unsignedp,unsignedn)
把非负整数x从左端第p(p>1)位开始的n位删除,形成新的数
返回。
例如:
若x为12345,p为3,n为2,形成新的数为125。
若x为12345,p为6,n为2,形成新的数为12345。
若x为12345,p为3,n为4,形成新的数为12。
请改正程序中的错误,使它能得出正确的结果。
---------------------------------------------------------
注意:
不得增行或删行,也不得更改程序的结构。
--------------------------------------------------------*/
#include<>
unsigneddelbits(unsignedx,unsignedp,unsignedn)
{
inta[10],i,j,k;
i=0;
while(x)
{
/*******************FOUND*******************/
a[i]=x%10;
x/=10;
}
k=i;
for(i=0;i{
a[i]+=a[k-i-1];
a[k-i-1]=a[i]-a[k-i-1];
a[i]=a[i]-a[k-i-1];
}
j=p-1;
/*******************FOUND*******************/
for(i=p+n;i<=k-1;i++)
{
a[j]=a[i];
j++;
}
k=j;
for(i=0;i/*******************FOUND*******************/
x+=a[i]*10;
returnx;
}
intmain()
{
unsignedx,p,n;
printf("Inputx(unsignedint):
\n");
scanf("%u",&x);
printf("Inputp(unsignedint):
\n");
scanf("%u",&p);
printf("Inputn(unsignedint):
\n");
scanf("%u",&n);
x=delbits(x,p,n);
printf("Afterdeletingx=%u\n",x);
return0;
}
答案:
=======(答案1)=======
a[i++]=x%10;
=========或=========
a[i]=x%10,i++;
=========或=========
a[i]=x%10,++i;
=========或=========
a[i]=x%10,i=i+1;
=========或=========
a[i]=x%10,i=1+i;
=========或=========
a[i]=x%10,i+=1;
=========或=========
a[i]=x%10;i++;
=========或=========
a[i]=x%10;++i;
=========或=========
a[i]=x%10;i=i+1;
=========或=========
a[i]=x%10;i=1+i;
=========或=========
a[i]=x%10;i+=1;
=======(答案2)=======
for(i=p+n-1;i<=k-1;i++)
=========或=========
for(i=p-1+n;i<=k-1;i++)
=======(答案3)=======
x=x*10+a[i];
=========或=========
x=10*x+a[i];
=========或=========
x=a[i]+x*10;
=========或=========
x=a[i]+10*x;
第3题(分)题号:
577难度:
中第1章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:
voidmove(inta[],intn,intm)函数将n个元素的一维
数组a循环左移m个位置,
voidchange(inta[],intn,intb[][N])函数将数组a按
行存入二维数组b,然后将b按列重新存入数组a。
例如:
数组a的元素为1,2,3,4,5,6,7,8,9,10,11,12,调用move函
数将a循环左移3个位置后,a的元素为
4,5,6,7,8,9,10,11,12,1,2,3,调用change函数后,a的元
素为4,8,12,5,9,1,6,10,2,7,11,3。
请改正程序中的错误,使它能得出正确的结果。
---------------------------------------------------------
注意:
不得增行或删行,也不得更改程序的结构。
--------------------------------------------------------*/
#include<>
#defineM3
#defineN4
voidmove(inta[],intn,intm)
{
inti,t;
while(m)
{
t=a[0];
for(i=0;i/*******************FOUND*******************/
a[i]=a[i+m];
a[n-1]=t;
m--;
}
}
voidchange(inta[],intn,intb[][N])
{
inti,j;
for(i=0;i/*******************FOUND*******************/
b[i/M][i-i/N]=a[i];
for(i=0;ifor(j=0;j/*******************FOUND*******************/
a[j*M+i]=b[i][j];
}
intmain()
{
inta[M*N]={1,2,3,4,5,6,7,8,9,10,11,12};
intb[M][N],i,j,m;
printf("Beforemoving\nArraya:
\n");
for(i=0;iprintf("%d",a[i]);
printf("\nInputm:
\n");
scanf("%d",&m);
move(a,M*N,m);
printf("\nAftermoving\nArraya:
\n");
for(i=0;iprintf("%d",a[i]);
change(a,M*N,b);
printf("\n\nAfterchanging\nArrayb:
\n");
for(i=0;ifor(j=0;jprintf("%d\t",b[i][j]);
printf("\n");
}
printf("Arraya:
\n");
for(i=0;iprintf("%d",a[i]);
printf("\n");
return0;
}
答案:
=======(答案1)=======