当前位置:首页 > 全国计算机等级考试二级C语言资料(机试) - 图文
#include
void fun(int a[],int n) { }
void main()
{int a[N]={9,6,8,3,-1},i,m=5; printf(\排序前的数据:\
for(i=0;i printf(\排序后的顺序:\ for(i=0;i 【参考答案】 void fun(int a[],int n) { int i,j,t; for(i=0;i {t=a[p]; a[p]=a[j]; a[j]=t; } } 【解题思路】 题中所提到的是\从小到大\的顺序。这类题可以利用选择法,即从后N个比较过程中,选择一个最小的与第一个元素交换,依此类推,即用第二个元素与后N-1个进行比较,并进行交换。该题与我们常见的C语言排序题类似,也是改错和编程题中的重点,请参看同类试题,以便达到举一反三的目的。 另附字符串中字符的排序 如:请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码值升序排列。 第 17 页 例如,原来的字符串为Bdsihad,则排序后输出为Badhisd。 #include void fun(char *s, int num) { } void main() {char s[10]; char b[10]=\ printf(\输入7个字符的字符串:\ gets(s); fun(s,7); printf(\} 【参考答案】 int fun(char *s, int num) { char t; int i, j; for(i=1;i 符*/ for(j=i+1;j /*如果后面字符的ASCII码值小于该字符的ASCII码值*/ { t=s[i];/*则交换这两个字符*/ s[i]=s[j]; s[j]=t; } } 【解题思路】本题考查利用循环来控制数组元素的操作,首尾元素除外,因此,数组的下标值要从1开始,用循环变量i来依次取得数组中的元素,用数组中的元素s[i]和s[j]进行比较,如果后一个元素的ASCII码值小于前一个元素的ASCII码 共 30 页 值,则交换这两个数组元素的值。 ? 题型四:元素平移问题 4、请编写函数fun, 函数的功能是: 移动一维数组中的内容; 若数组中有n个整数, 要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。 例如, 一维数组中的原始内容为: 1,2,3,4,5,6,7,8,9,10; p的值为3。移动后, 一维数组中的内容应为: 5,6,7,8,9,10,1,2,3,4。 #include void fun(int *w, int p, int n) { } main() { int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; int i,p,n=15;void printf(\ for(i=0; i printf(\ for(i=0; i 【参考答案】 void fun(int *w, int p, int n) { int i,j,t; for(i=0;i<=p;i++) /*循环左移p+1次*/ { t=w[0]; /*将0下标元素备份到t中*/ for(j=1;j 【解题思路】本题采用\循环左移\的算法,即从第2个字符开始以后的每个字符都依次前移一个字符,而原来的第1个字符放在串中的最后一个字符。当要平移p个字符时,则要进行p次的循环左移。 ? 题型五:数组去掉值重复的元素 5、请编写函数fun,该函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如:若一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10,删除后,数组中的内容应是:22 3 4 5 6 7 8 9 10 # include int fun(int a[], int n) { } main() { int a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10}, i,n=20; printf(\ for(i=0; i printf(\ n=fun(a,n); printf(\ for(i=0;i printf(\} 【参考答案】 int fun(int a[], int n) { 共 30 页 int i,t,j=0,*p=a; t=p[0]; for(i=0;i<=n;i++) if(t==p[i]) ; else { a[j]=t; t=p[i]; j++; } if(i>=n) a[j]=t; return j; } 【解题思路】由于数组是已经排好序的,相同的指定在一起,所以从前往后比,只要发现一个不和前面相同,后面就不再会有和前面相同的了。 题目中把准备保存下来的数存着t中,然后他后面的数顺序与他比较,如果不相等,那么就把这个数存起来,此时数组下标用另一个j来表示,只要出现不相等的情况,j才++,同时t换成这个和他不相等的新数。 提示:如果没排好序的我们可以先排序然后进行上面的操作。 ? 题型六:数组元素的查找 6、请编写函数fun,函数的功能是查找x在s所指数组中下标的位置作为函数值返回,若x不存在,则返回-1。 #include int fun( int *s, int x) { } main() { int a[N]={ 29,13,5,22,10,9,3,18,24,25,14,15,2,7,27},i,x,index; 第 19 页 printf(\数组中的数据 :\\n\ for(i=0;i printf(\} 【参考答案】 int fun( int *s, int x) { int i; for(i = 0; i < N; i++) if(s[i] == x) return i; if(i == N) return -1; } 【解题思路】查找数组元素值为x的下标,只需要把数组的每个元素a[i](i从0到N-1)与x比较,如果相等则返回i的值,否则返回-1。 注意:改错中还有一个二分查找法需要掌握。 分类三:二维数组操作 ? 题型一:二维数组周边元素 1、下列程序定义了的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的s。例如,若a 数组中的值为: 0 1 2 7 9 1 9 7 4 5 2 3 8 3 1 4 5 6 8 2 5 9 1 4 1 则返回主程序后s的值应为3.375。 #include 共 30 页 #include double fun (int w[][N]) { } void main() { int a[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1}; int i, j; double s; printf(\ for (i=0; i {printf(\ printf(\ } s=fun(a); printf(\ printf(\} 【参考答案】 double fun (int w[][N]) { int i,j,k=0; double av=0.0; for(i=0;i 【解题思路】该题采用逐一判断的方式,周边元素的下标一定有一个是0或N-1,所以只要下标中有一个为0或N-1,那么它一定是周边元素。计算周边元素个数的方式是当给av加一个值时,k也加1,k也可用2*N+2*N-4求得。 ? 题型二:二维数组对角线、上三角和下三角元素的操作 2、程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N],int n),该函数的功能是:使数组左下半三角元素中的值乘以n。例如:或n的值为3,a数组中的值为 1 9 7 3 9 7 a= 2 3 8 则返回主程序后a数组中的值应为:6 9 8 4 5 6 12 15 18 #include void fun ( int a[][N], int n ) { } main() { int a[N][N], i, j; printf(\ for ( i=0; i for(j=0; j a[i][j]=rand(); printf(\ } printf(\ } 共 30 页
共分享92篇相关文档