高考C语言题 29页

  • 83.00 KB
  • 2021-05-14 发布

高考C语言题

  • 29页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
  4. 网站客服QQ:403074932
试卷编号: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;‎ ‎ }‎ ‎ }‎