高考C语言题
试卷编号:8258
所属语言:计算机基础
试卷方案:111
试卷总分:400分
共有题型:3种
一、程序填空 共5题 (共计100分)
第1题 (20.0分) 题号:650 难度:中 第1章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
函数int change(char s[])将s中的数字字符串转换成整数,
并返回该数。例如s[]中为"123",转换后为123。
函数int multi(char s[],char t[])将s字符串转换的整数乘
以t字符串转换的整数,并返回乘积。
---------------------------------------------------------
注意:请勿改动程序中的其他内容。
-------------------------------------------------------*/
#include
int change(char s[])
{
int i,sum;
sum=0;
for(i=0;s[i];i++)
/**************************SPACE*************************/
sum=sum*10+【?】-'0';
return sum;
}
int multi(char s[],char t[])
{
int mul;
/**************************SPACE*************************/
mul=【?】;
return mul;
}
int main()
{
char s1[]="123",s2[]="56";
int mst;
mst=multi(s1,s2);
printf("%dn",mst);
return 0;
}
答案:
=======(答案1)=======
s[i]
=========或=========
*(s+i)
=======(答案2)=======
change(s)*change(t)
=========或=========
change(t)*change(s)
第2题 (20.0分) 题号:651 难度:中 第1章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
函数void check(long n, int c[])检测长整型正整数n是几
位数,同时找出最小的数字。将位数和最小的数字存放在数
组c中。
例如n=1256044时,n是7位数,最小的数字是0。
---------------------------------------------------------
注意:请勿改动程序中的其他内容。
-------------------------------------------------------*/
#include
/**************************SPACE*************************/
void check(long n, int 【?】)
{
int min,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;
}
int main()
{
long n;
int c[2];
printf("输入长整型正整数:");
scanf("%ld",&n);
check(n, c);
/**************************SPACE*************************/
printf("%ld是%d位数,最小数字是%dn",【?】);
return 0;
}
答案:
=======(答案1)=======
c[]
=========或=========
c[2]
=======(答案2)=======
n,c[0],c[1]
第3题 (20.0分) 题号:652 难度:中 第1章
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
函数int convert(int a,int nsys)将nsys(nsys<10)进制数a,
转换成十进制数并返回。
---------------------------------------------------------
注意:请勿改动程序中的其他内容。
---------------------------------------------------------*/
#include
#define N 5
int convert(int a,int nsys)
{
int t,p;
if(a
#define N 9
void rearr(int a[], int n)
{
int left,right,i;
int b[N];
left=0;
right=N-1;
for(i=0; left'z','B'->'y',...,'Z'->'a'
小写字母转换规则:'z'->'A','y'->'B',...,'a'->'Z'
数字字符转换规则:'0'->'9','1'->'8',...,'9'->'0'
---------------------------------------------------------
注意:请勿改动程序中的其他内容。
-------------------------------------------------------*/
#include
#include
void change(char s[],char t[])
{
int i;
for(i=0;s[i];++i)
{
if(isalpha(s[i]))
t[i]=(isupper(s[i]) ? 'Z'-s[i]+'a' : 'z'-s[i]+'A');
else if(isdigit(s[i]))
t[i]='9'-s[i]+'0';
else
/**************************SPACE*************************/
【?】;
}
t[i]=0;
}
int main()
{
char t[100]="7984 RH hSVVK BVZI,dRHS BLF TLLW OFXP!";
char s[100];
/**************************SPACE*************************/
【?】;
printf("%sn",s);
return 0;
}
答案:
=======(答案1)=======
t[i]=s[i]
=======(答案2)=======
change(t,s)
二、程序改错 共5题 (共计150分)
第1题 (30.0分) 题号:575 难度:中 第1章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:int sort(int a[],int n)函数将n个元素的数组a中互不相
同的元素按升序排列,重新存入数组a中,函数返回按升序
排列后互不相同元素的个数。
例如:数组a中元素为6,2,7,5,4,3,4,6,5,4,调用sort函数后,
函数值为6,主函数中输出排序后的数组a元素为
2,3,4,5,6,7。
请改正程序中的错误,使它能得出正确的结果。
---------------------------------------------------------
注意:不得增行或删行,也不得更改程序的结构。
--------------------------------------------------------*/
#include
int sort(int a[],int n)
{
int i,j,k,low,high,mid,t;
for(k=i=1;i=a[i]) high=mid-1;
else low=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++;
}
}
return k;
}
int main()
{
int a[ ]={6,2,7,5,4,3,4,6,5,4};
int i,n;
n=sizeof(a)/sizeof(int);
for(i=0;i=low;j--)
=======(答案3)=======
n=sort(a,n);
第2题 (30.0分) 题号:576 难度:中 第1章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:函数unsigned delbits(unsigned x,unsigned p,unsigned n)
把非负整数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
unsigned delbits(unsigned x,unsigned p,unsigned n)
{
int a[10],i,j,k;
i=0;
while(x)
{
/*******************FOUND*******************/
a[i]=x%10;
x/=10;
}
k=i;
for(i=0;i
#define M 3
#define N 4
void move(int a[],int n,int m)
{
int i,t;
while(m)
{
t=a[0];
for(i=0;i
#include
void reverse(char s[])
{
int i,len;
char t;
/*******************FOUND*******************/
len=strlen(s-1);
for(i=0;i=0||j>=0)
{
if(i<0)
t=b[j]-48+flag;
else if(j<0)
t=a[i]-48+flag;
else
t=a[i]-48+b[j]-48+flag;
/*******************FOUND*******************/
c[k]=t/2;
k++;
flag=0;
if(t>1)
flag=1;
i--;
j--;
}
/*******************FOUND*******************/
if(flag==0)
c[k++]='1';
c[k]=' ';
reverse(c);
}
int main()
{
char a[50],b[50],c[51];
printf("Input a(binary):n");
scanf("%s",a);
printf("Input b(binary):n");
scanf("%s",b);
add(a,b,c);
printf("After adding a+b=%sn",c);
return 0;
}
答案:
=======(答案1)=======
len=strlen(s);
=======(答案2)=======
c[k]=t%2+48;
=========或=========
c[k]=48+t%2;
=========或=========
c[k]=t%2+'0';
=========或=========
c[k]='0'+t%2;
=======(答案3)=======
if(flag)
=========或=========
if(flag==1)
=========或=========
if(flag!=0)
=========或=========
if(t>1)
=========或=========
if(t>=2)
第5题 (30.0分) 题号:580 难度:中 第1章
/*-------------------------------------------------------
【程序改错】
---------------------------------------------------------
题目:int find(char a[],char b[],int c[])统计字符串a中出
现字符串b的次数,并将字符串b每次在字符串a中出现的起
始下标依次保存在数组c中。
例如:若字符串a为"You are a P.R.C citizen or other P.R.C person"
字符串b为"P.R.C" ,字符串b在a中出现2次,起始下标依
次为10,33。若字符串a为"bcde aeeeq mneec",字符串b为
"ee" ,字符串b在a中出现3次,起始下标依次为6,7,13。
请改正程序中的错误,使它能得出正确的结果。
---------------------------------------------------------
注意:不得增行或删行,也不得更改程序的结构。
--------------------------------------------------------*/
#include
#include
int find(char a[],char b[],int c[])
{
int i,j,n=0;
i=0;
while(a[i])
{
j=0;
while(a[i]==b[j]&&a[i]&&b[j])
{
i++;j++;
}
if(b[j]==' ')
{
/*******************FOUND*******************/
c[n]=i;
n++;
}
/*******************FOUND*******************/
i=j;
}
/*******************FOUND*******************/
return n-1;
}
int main()
{
char a[80]="You are a P.R.C citizen or other P.R.C person";
char b[10]="P.R.C";
int c[80];
int i,n;
printf("String a:n");
puts(a);
printf("Substring b:n");
puts(b);
n=find(a,b,c);
if(n)
{
printf("nAfter counting:n%d timesn",n);
printf("Location:n");
for(i=0;i
#include
#include
#define N 5
void change(double sci[][3])
{
/**********Program**********/
/********** End **********/
}
void sort(double sci[][3])
{
/**********Program**********/
/********** End **********/
}
int main()
{
double sci[N][3]={{4.76,2},{-9.007,-4},{6.789,0},{-0.8145,3},{9.007,-4}};
int i;
FILE *fp;
if((fp=fopen("DATA.TXT","w"))==NULL)
{
printf("File open errorn");
exit(0);
}
change(sci);
sort(sci);
for(i=0;i=0 ?sci[i][1]:-sci[i][1];
for(j=0;jsci[j+1][2])
{
t=sci[j][0];sci[j][0]=sci[j+1][0];sci[j+1][0]=t;
t=sci[j][1];sci[j][1]=sci[j+1][1];sci[j+1][1]=t;
t=sci[j][2];sci[j][2]=sci[j+1][2];sci[j+1][2]=t;
}
}
第2题 (30.0分) 题号:544 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
主函数main()的char s[]中为测试数据,保存了形如
" 9/4 6/13 56/21 8/9 13/5 7/13 "字符串。将字
符串中类似"9/4"这样的子串视为一个分数,将其转换为整数
9和4,其中9为分子,4为分母。将分子分母分别保存在二维
数组frica的第一列和第二列。并根据分数值的大小,对数组
frica进行升序排序。
编写函数:
1.编写函数int abstract(char s[],int frica[][2]),将字
符串s中类似"9/4"这样的子串转换成两个整数,分别存放在
frica数组的第一列和第二列,函数返回这样的子串个数(即
分数个数)。
2.编写函数void sort(int frica[][2],int n),根据分数值
大小,对frica数组中n个分数进行升序排序。
---------------------------------------------------------
注意:请勿改动主函数main()中的任何语句。
---------------------------------------------------------*/
#include
#include
#include
#include
int abstract(char s[],int frica[][2])
{
/**********Program**********/
/********** End **********/
}
void sort(int frica[][2],int n)
{
/**********Program**********/
/********** End **********/
}
int main()
{
char s[]=" 9/4 6/13 56/21 8/9 13/5 7/13 ";
int frica[10][2],i,n;
FILE *fp;
if((fp=fopen("DATA.TXT","w"))==NULL)
{
printf("File open errorn");
exit(0);
}
n=abstract(s,frica);
sort(frica,n);
for(i=0;ifrica[j+1][0]*frica[j][1])
{
t=frica[j][0];frica[j][0]=frica[j+1][0];frica[j+1][0]=t;
t=frica[j][1];frica[j][1]=frica[j+1][1];frica[j+1][1]=t;
}
}
第3题 (30.0分) 题号:545 难度:中 第1章
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
主函数main()的char s[]中为测试数据,保存了形如
" 59,63 83,85 94,74 100,80 99,95 77,81 "字符
串。将字符串中类似"59,63"这样的子串视为一个学生的语文
和数学成绩,将其转换为整数59和63,其中59为语文成绩,
63为数学成绩。将这两个成绩分别保存在二维数组score的第
一列和第二列。并根据总成绩和语文成绩的大小,对score数
组进行降序排序。
编写函数:
1.编写函数int abstract(char s[],int score[][2]),将s
字符串中类似"59,63"这样的子串转换成两个整数,分别存放
在score数组第一列和第二列,函数返回这样的子串个数(即
学生的人数)。
2.编写函数void sort(int score[][2],int n),对score数
组中n个成绩进行降序排序,排序依据是:先按总成绩降序排
序,如总成绩相同,则再按语文成绩降序排序。
---------------------------------------------------------
注意:请勿改动主函数main()中的任何语句。
---------------------------------------------------------*/
#include
#include
#include
#include
int abstract(char s[],int score[][2])
{
/**********Program**********/
/********** End **********/
}
void sort(int score[][2],int n)
{
/**********Program**********/
/********** End **********/
}
int main(){
char s[]=" 59,63 83,85 94,74 100,80 99,95 77,81 ";
int score[10][2],i,n;
FILE *fp;
if((fp=fopen("DATA.TXT","w"))==NULL)
{
printf("File open errorn");
exit(0);
}
n=abstract(s,score);
sort(score,n);
for(i=0;i
#include
#include
#include
int abstract(char s[],int ser[][4])
{
/**********Program**********/
/********** End **********/
}
void sum(int ser[][4] , int n){
/**********Program**********/
/********** End **********/
}
int main()
{
char s[]=" 13,2;4 1,12;5 3,4;10 5,8;6 ";
int i,j,n,ser[10][4];
FILE *fp;
if((fp=fopen("DATA.TXT","w"))==NULL)
{
printf("File open errorn");
exit(0);
}
n=abstract(s,ser);
sum(ser,n);
for(i=0;i
#include
#include
void cal(int num[][3],int n)
{
/**********Program**********/
/********** End **********/
}
void sort(int num[][3],int n)
{
/**********Program**********/
/********** End **********/
}
int main()
{
int num[6][3]={{4,12},{0,11},{6,-3},{12,7},{5,1},{13,9}};
int i;
FILE *fp;
if((fp=fopen("DATA.TXT","w"))==NULL)
{
printf("File open errorn");
exit(0);
}
cal(num,6);
sort(num,6);
for(i=0;i<6;i++){
printf("%5d%5d%5dn",num[i][0],num[i][1],num[i][2]);
fprintf(fp,"%5d%5d%5dn",num[i][0],num[i][1],num[i][2]);
}
fclose(fp);
return 0;
}
答案:int i,k;
for(i=0;inum[j+1][2])
{
t=num[j][0];num[j][0]=num[j+1][0];num[j+1][0]=t;
t=num[j][1];num[j][1]=num[j+1][1];num[j+1][1]=t;
t=num[j][2];num[j][2]=num[j+1][2];num[j+1][2]=t;
}
}