2015高考C语言题
更新时间:2023-10-31 17:50:01 阅读量: 综合文库 文档下载
试卷编号:8258 所属语言:计算机基础 试卷方案:111 试卷总分:400分 共有题型:3种
一、程序填空 共5题 (共计100分)
第1题 (20.0分) 题号:650 难度:中 第1章 /*------------------------------------------------------- 【程序填空】
---------------------------------------------------------
函数int change(char s[])将s中的数字字符串转换成整数, 并返回该数。例如s[]中为\,转换后为123。
函数int multi(char s[],char t[])将s字符串转换的整数乘 以t字符串转换的整数,并返回乘积。
--------------------------------------------------------- 注意:请勿改动程序中的其他内容。
-------------------------------------------------------*/
#include
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[]=\ int mst;
mst=multi(s1,s2); printf(\ 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;
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(\ check(n, c);
/**************************SPACE*************************/ printf(\是%d位数,最小数字是%d\\n\【?】); 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
int convert(int a,int nsys) {
int t,p;
if(a t=t+a*p; /**************************SPACE*************************/ 【?】; p*=nsys; } return t; } int main() { int i,d; int num[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\\t = 十进制数的%d\\n\【?】); } return 0; } 答案: =======(答案1)======= a/=10 =========或========= a=a/10 =======(答案2)======= num[i][1],num[i][0],d 第4题 (20.0分) 题号:653 难度:中 第1章 /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 函数void rearr(int a[], int n)将已经升序排列的一维数 组a中的n个元素重新排列,重新排列的规则是: 将a数组中的最小元素放到a[0],最大元素放到a[1], 将次小元素放到a[2],次大元素放到a[3],..., 以此类推。 例如: 原a数组各元素为: -11 -7 0 3 8 15 16 20 38 重新排列后a数组各元素为: -11 38 -7 20 0 16 3 15 8 --------------------------------------------------------- 注意:请勿改动程序中的其他内容。 -------------------------------------------------------*/ #include void rearr(int a[], int n) { int left,right,i; int b[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]=【?】; } int main() { int i,a[N]={-11,-7,0,3,8,15,16,20,38}; rearr(a,N); for(i=0;i 答案: =======(答案1)======= right-- =======(答案2)======= b[i] 第5题 (20.0分) 题号:654 难度:中 第1章 /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 函数void change(char s[],char t[])将s字符串中字母和数 字字符按以下规则转换,并将其保存在t中。其他字符则不作 转换。 大写字母转换规则:'A'->'z','B'->'y',...,'Z'->'a' 小写字母转换规则:'z'->'A','y'->'B',...,'a'->'Z' 数字字符转换规则:'0'->'9','1'->'8',...,'9'->'0' --------------------------------------------------------- 注意:请勿改动程序中的其他内容。 -------------------------------------------------------*/ #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]=\ char s[100]; /**************************SPACE*************************/ 【?】; printf(\ 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 i,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; 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 printf(\ /*******************FOUND*******************/ sort(a,n); printf(\ for(i=0;i =======(答案1)======= t=a[i]; =======(答案2)======= for(j=k-1;j>=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; 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; return x; } int main() { unsigned x,p,n; printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ x=delbits(x,p,n); printf(\ return 0; } 答案: =======(答案1)======= a[i++]= x; =========或========= a[i]=x,i++; =========或========= a[i]=x,++i; =========或========= a[i]=x,i=i+1; =========或========= a[i]=x,i=1+i; =========或========= a[i]=x,i+=1; =========或========= a[i]=x;i++; =========或========= a[i]=x;++i; =========或========= a[i]=x;i=i+1; =========或========= a[i]=x;i=1+i; =========或========= a[i]=x;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题 (30.0分) 题号:577 难度:中 第1章 /*------------------------------------------------------- 【程序改错】 --------------------------------------------------------- 题目:void move(int a[],int n,int m)函数将n个元素的一维 数组a循环左移m个位置, void change(int a[],int n,int b[][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 void move(int a[],int n,int m) { int i,t; while(m) { t=a[0]; for(i=0;i /*******************FOUND*******************/ a[i]=a[i+m]; a[n-1]=t; m--; } } void change(int a[],int n,int b[][N]) { int i,j; for(i=0;i /*******************FOUND*******************/ b[i/M][i-i/N]=a[i]; for(i=0;i /*******************FOUND*******************/ a[j*M+i]=b[i][j]; } int main() { int a[M*N]={1,2,3,4,5,6,7,8,9,10,11,12}; int b[M][N],i,j,m; printf(\ for(i=0;i printf(\ for(i=0;i printf(\ for(i=0;i printf(\ printf(\ } printf(\ for(i=0;i =======(答案1)======= a[i]=a[i+1]; =========或========= a[i]=a[1+i]; =======(答案2)======= b[i/N][i%N]=a[i]; =========或========= b[i/N][i-i/N*N]=a[i]; =======(答案3)======= a[i*M+j]=b[j][i]; =========或========= a[M*i+j]=b[j][i]; =========或========= a[j+i*M]=b[j][i]; =========或========= a[j+M*i]=b[j][i]; 第4题 (30.0分) 题号:579 难度:中 第1章 /*------------------------------------------------------- 【程序改错】 --------------------------------------------------------- 题目:void add(char a[],char b[],char c[])函数将由'0','1' 组成的字符串a,b按二进制数加法规则相加,和仍以'0','1' 组成的字符串形式保存到字符串c中。 例如:字符串a为\字符串b为\调用add函数后字符串c 为\。 请改正程序中的错误,使它能得出正确的结果。 --------------------------------------------------------- 注意:不得增行或删行,也不得更改程序的结构。 --------------------------------------------------------*/ #include int i,len; char t; /*******************FOUND*******************/ len=strlen(s-1); for(i=0;i t=s[i]; s[i]=s[len-i-1]; s[len-i-1]=t; } } void add(char a[],char b[],char c[]) { int i,j,k,t,flag; i=strlen(a)-1; j=strlen(b)-1; k=flag=0; while(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]='\\0'; reverse(c); } int main() { char a[50],b[50],c[51]; printf(\ scanf(\ printf(\ scanf(\ add(a,b,c); printf(\ 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为\ 字符串b为\,字符串b在a中出现2次,起始下标依 次为10,33。若字符串a为\字符串b为 \,字符串b在a中出现3次,起始下标依次为6,7,13。 请改正程序中的错误,使它能得出正确的结果。 --------------------------------------------------------- 注意:不得增行或删行,也不得更改程序的结构。 --------------------------------------------------------*/ #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]=='\\0') { /*******************FOUND*******************/ c[n]=i; n++; } /*******************FOUND*******************/ i=j; } /*******************FOUND*******************/ return n-1; } int main() { char a[80]=\ char b[10]=\ int c[80]; int i,n; printf(\ puts(a); printf(\ puts(b); n=find(a,b,c); if(n) { printf(\ printf(\ for(i=0;i printf(\ return 0; } 答案: =======(答案1)======= c[n]=i-j; =========或========= c[n]=i-strlen(b); =======(答案2)======= i=i-j+1; =========或========= i+=1-j; =========或========= i+=-j+1; =========或========= i=i+1-j; =========或========= i=-j+i+1; =========或========= i=-j+1+i =========或========= i=1+i-j; =========或========= i=1-j+i; =======(答案3)======= return n; =========或========= return (n); 三、程序设计 共5题 (共计150分) 第1题 (30.0分) 题号:543 难度:中 第1章 /*------------------------------------------------------- 【程序设计】 --------------------------------------------------------- c语言中实数有小数表示法和科学表示法两种形式。 例如: 小数表示法的实数203400.0,用科学表示法为2.034e5,其中 2.034称为尾数,5称为阶码; 小数表示法的实数-0.00769,用科学表示法为-0.769e-2,其 中-0.769称为尾数,-2称为阶码。 主函数main()中二维数组double sci[N][3]为测试数据。sci 数组各行前两列保存了用科学表示法表示的实数的尾数和阶 码,程序先将sci数组中用科学表示法表示的实数转换成小数 表示法表示的实数,再依据小数表示法的实数大小,对sci数 组进行升序排序。 编写函数: 1.编写函数void change(double sci[][3]),根据sci数组前 两列的尾数和阶码,计算出小数表示法的实数,将其保存在 sci数组的第三列。 2.编写函数void sort(double sci[][3]),依据sci数组中第 三列,即小数表示法表示的实数大小进行升序排序。 在函数中不允许使用系统提供的任何库函数。 --------------------------------------------------------- 注意:请勿改动主函数main()中的任何语句。 ---------------------------------------------------------*/ #include 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(\ { printf(\ exit(0); } change(sci); sort(sci); for(i=0;i printf(\ fprintf(fp,\ } fclose(fp); getch(); return 0; } 答案: int i; double j,k; for(i=0;i sci[i][2]=sci[i][0]; k=sci[i][1]>=0 ?sci[i][1]:-sci[i][1]; for(j=0;j sci[i][2]=(sci[i][1]< 0 ? sci[i][2]*0.1 : sci[i][2]*10); } int i,j; double t; for(i=0;i if(sci[j][2]>sci[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,其中9为分子,4为分母。将分子分母分别保存在二维 数组frica的第一列和第二列。并根据分数值的大小,对数组 frica进行升序排序。 编写函数: 1.编写函数int abstract(char s[],int frica[][2]),将字 符串s中类似\这样的子串转换成两个整数,分别存放在 frica数组的第一列和第二列,函数返回这样的子串个数(即 分数个数)。 2.编写函数void sort(int frica[][2],int n),根据分数值 大小,对frica数组中n个分数进行升序排序。 --------------------------------------------------------- 注意:请勿改动主函数main()中的任何语句。 ---------------------------------------------------------*/ #include /**********Program**********/ /********** End **********/ } int main() { char s[]=\ int i,j,n,ser[10][4]; FILE *fp; if((fp=fopen(\ { printf(\ exit(0); } n=abstract(s,ser); sum(ser,n); for(i=0;i printf(\ fprintf(fp,\ } printf(\ fprintf(fp,\ } fclose(fp); getch(); return 0; } 答案:int i,k,sum; for(k=i=0;s[i];i++) if(isdigit(s[i])) { sum=0; for(;isdigit(s[i]);i++) sum=sum*10+s[i]-'0'; if(s[i]==',') ser[k][0]=sum; else if(s[i]==';') ser[k][1]=sum; else ser[k++][2]=sum; } return k; int i; for(i=0;i ser[i][3]=ser[i][2]*ser[i][0]+ser[i][2]*(ser[i][2]-1)*ser[i][1]/2; } 第5题 (30.0分) 题号:547 难度:中 第1章 /*------------------------------------------------------- 【程序设计】 --------------------------------------------------------- 主函数main()中二维数组int num[6][3]为测试数据,num数 组各行第一、二列已经赋值为 {{4,12},{0,11},{6,-3},{12,7},{5,1},{13,9}}。 程序计算num数组各行第三列数据,并根据第三列数的大小 对num数组进行升序排序。 num数组各行第三列数等于下列a、b两个整数之和: a=该行第一列数+最小非负整数,使得a为3的倍数, 例如,num数组第一行第一列数为4,则最小非负整数为2; 第二行第一列数为0,则最小非负整数为0; 第五行第一列数为5,则最小非负整数为1; b=该行第二列数*该数所在行、列下标之和。 编写函数: 1)编写函数void cal(int num[][3],int n),根据上述计算 方法,计算num数组各行第三列数。 2)编写函数void sort(int num[][3],int n),根据num数组 第三列数据的大小,对num数组进行升序排序。 --------------------------------------------------------- 注意:请勿改动主函数main()中的任何语句。 ---------------------------------------------------------*/ #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(\ { printf(\ exit(0); } cal(num,6); sort(num,6); for(i=0;i<6;i++){ printf(\ fprintf(fp,\ } fclose(fp); return 0; } 答案:int i,k; for(i=0;i if((k=num[i][0]%3)==0) num[i][2]=num[i][0]; else num[i][2]=num[i][0]+3-k; num[i][2]+=(i+1)*num[i][1]; } int i,j,t; for(i=0;i if(num[j][2]>num[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; } }
正在阅读:
2015高考C语言题10-31
1 国内外研究现状和发展趋势03-20
小学数学公式总复习07-08
感谢父母歌曲02-07
中小企业筹资存在的问题与对策分析01-09
安全教育第一课教案08-17
社会学概论12-18
2011年初级会计师考试初级会计实务全真模拟试题3套05-31
中国人寿基本法10-10
国际金融第三次作业12-04
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 语言
- 高考
- 2015
- 机电传动控制第五版课后答案
- 小抄打印版 0540-外国文学史
- 轮滑协会章程
- 2017年山东省高校教师资格证《高等教育学》题库及答案
- 省市建筑施工安全文明标准化示范工地创建指南
- 继续教育《美丽中国与生态文明建设》题库
- 餐饮空间设计
- 东师2015年春季《行政法与行政诉讼法(高起专)》期末考核答案
- 办公室低值易耗现状及管理情况汇报
- 附-江苏经济和信息化委员会
- 广东科粤版化学九年级下册总复习:溶液、溶解度和溶质的质量分数(基础) 巩固练习
- 长恨歌(最新修改)(1)(1)
- 创建国家级水利工程管理单位经验与思考
- 管廊及设备基础施工方案
- 新视野大学英语Uni3
- 寡人之于国也
- 汽车理论习题课讲解的题目
- 30号《赶圩归来啊哩哩》说课稿
- -实验5-PT测试
- 艺术设计史