2010c语言题目解答剖析

上传人:今*** 文档编号:106022032 上传时间:2019-10-14 格式:DOC 页数:16 大小:110KB
返回 下载 相关 举报
2010c语言题目解答剖析_第1页
第1页 / 共16页
2010c语言题目解答剖析_第2页
第2页 / 共16页
2010c语言题目解答剖析_第3页
第3页 / 共16页
2010c语言题目解答剖析_第4页
第4页 / 共16页
2010c语言题目解答剖析_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《2010c语言题目解答剖析》由会员分享,可在线阅读,更多相关《2010c语言题目解答剖析(16页珍藏版)》请在金锄头文库上搜索。

1、2010高考真题详解第一套【程序填空】题目:对只包含-和字母字符的字符串str进行如下处理: 删除str中前导和尾部连续的-字符,保留串中字母字符以及字母间的-字符。 例如,str中初始字符串为-C-Language-Test-。 处理后,str中的字符串为C-Language-Test。 程序中isalpha函数功能是判断参数是否是字母,是字母,函数值为真,否则函数值为假。#include #include void main() char str=-C-Language-Test-; int i,start,end; i=0; while(stri+=-) ; /*该循环体为空,由前往后,

2、不等于-,则退出循环,i还多加1,实质i指向非减号的第二个字符*/ start=i-1; /*start指实非减号的第一个字符*/ while(stri != 【?】) /*继续向后遍历字符串*/ if(isalpha(stri) /*如果是字母,则end=-1,表示不是结尾的地方*/ end=-1; else if(isalpha(stri-1) /*不是字母,如果前一个是字母,则结束的位置为当前的前一个,即end=i-1*/ end=i-1; /*由于由前往后的,遍历结束后,end只能保存最后一个结束的位置*/ i+; strend+1=0; /*在最后一个结束位置的字符后人工补0,相当于

3、去除尾部减号*/ for(i=start;i=end+1;i+) /*通过循环,将从start开始到人工补的0的所有字符前移*/ stri-【?】 = stri; /*填start,这样i的初值为start,相当于第一个字符移到srt0*/ printf(%sn,str);答案: 1). 0 或 0 2). start【程序改错】题目:函数unsigned fun(long s, int w)返回长整型变量s中第w位的值,例如调用fun(216783,1) 函数返回3,调用fun(216783,3)函数返回7。main()从键盘接收一个长整数给变量s,通过调用fun()函数求s奇数位之和,例如

4、数216783各奇数位数字为1,7和3,它们的和为11。下面给定的程序存在错误,请改正。#include unsigned fun(long s, int w) int d; while(w0) d %= 10; /*d=s%10;取出s的最后一位*/ s /=10; /*去除s的最后一位*/ w-; return d;main() unsigned tot, w; /*累加器要赋初值0,w要赋初值1*/ long s, step; printf( Enter a long integer number:); scanf(%ld, &s); step = s; while (step!=0)

5、tot = fun( s ,w); /*进行累加tot+=fun(s,w)*/ w+=2; /*w每次加2,这样正好全为奇数*/ step /=100; printf(tot=%dn, tot); return 0;答案: 1). d = s % 10; 2). unsigned tot=0, w=1; 或 int tot=0, w=1; 或 unsigned int tot=0, w=1; 或 char tot=0, w=1; 或 unsigned char tot=0, w=1; 3). tot += fun(s,w); 或 tot = fun(s,w) + tot; 或 tot = to

6、t + fun(s,w);【程序设计】题目:找出二维整型数组a44中每行元素的最大值,并将该元素移动至该行首列。编写程序: 1、编写void findmax(int aN, int n)函数:找出二维数组a中每行元素的最大值,并将该元素的列下标存入数组n中,即第0行元素最大值的列下标存入n0,.,第3行元素最大值的列下标存入n3。 2、编写void move(int aN,int n)函数:根据数组n中保存的数据,将a数组中每行最大值元素移动到该行首列,要求移动后该元素与该行其他元素的相对位置不变。例如: a数组的初始数据为: -2 13 6 9 25 4 0 11 -8 3 10 16 4

7、7 5 20 经过处理后a数组中数据为: 13 6 9 -2 25 4 0 11 16 -8 3 10 20 4 7 5#include #include #define N 4void findmax(int aN,int n) int i,j,k; for(i=0;iN;i+) /*二维数组,逐行处理*/ k=0; /*用记位置法,求该行最大值所在的位置*/ for(j=1;jaik)k=j; ni=k; /*将该行最大值所在的位置存入n数组*/ void move(int aN,int n)int i,j,k,l;for(i=0;iN;i+)/*逐行处理*/ k=ni; /*记住位置*/

8、while(k!=0)/*位置不在0,即不在第一列*/ l=ai0; /*以下几行,完成一行的循环移动,此处采用向左移*/for(j=1;jN;j+)aij-1=aij;ai3=l;k-; /*最大值向前移了,所以位置减1*/void main() int i,j; int aNN=-2,13,6,9,25,4,0,11,-8,3,10,16,4,7,5,20,n4; FILE *fp; findmax(a,n); move(a,n); if(fp=fopen(data.txt,w)=NULL) printf(open file errorn); exit(0); for(i=0;iN;i+)

9、 for(j=0;jN;j+) fprintf(fp,%dt,aij); printf(%dt,aij); fprintf(fp,n); printf(n); fclose(fp);第二套【程序填空】题目:随机产生10个范围在0,99之间,互不相同的正整数存入数组t,并求出这10个数据的最小值和次小值。其中最小值存入min1,次小值存入min2。程序中rand()函数功能是产生一个随机正整数。#include #include void main() int n100=0,t10; /*n数组全部赋初值0,相当于标志数组,是0表示该数还未产生,是1表示该数已经产生,用来确保互不相同*/ int

10、 i=0,k; int min1=100, min2=100; /*用极端的思想,设置最小值及次小值的初值*/ srand(32767); /*设置随机种子数,但该值固定,所以每次运行产生的结果是一样的*/ while(i10) /*循环10次*/ do k=rand()%100; while(nk); /*产生互不相同,如己经产生过的,则重新产生*/ nk=1; /*更改产生标记*/ t【?】=k; /*存入数组ti,然后i加1,应填i+ */ for(i=0;i10;i+) printf(%dt,ti); /*打印t数组*/ if(timin1) /*同时求出最小值及次小值*/ 【?】;

11、/*如果是最小值,则最小值为次小值,该数为最小值*/ min1=ti; else if(timin2) min2=ti; printf(nmin1= %d,min2= %dn,min1,min2);答案: 1). i+ 2). min2=min1【程序改错】题目:函数main()首先从键盘接收10个整数,依次存放在a数组中;其次,调用fun()函数在这10个整数中找出第一个奇数,并返回该数的下标值,如果在这10个数中无奇数,则返回-1;第三,如果fun()函数返回值不等于-1则把找到的数与第1个数对换位置。#include#define N 20int fun(int a) int i; for (i=0; i10; i+) if (ai & 1 = 0) /*遍历数组,从前向后第一个奇为,应用%2=1*/ break; if (i=10) return 1; /*应该10,说明有奇数,应带回奇数的下标*/ else return -1;main() int aN,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号