全国计算机等级考试二级C语言上机10题.doc_第1页
全国计算机等级考试二级C语言上机10题.doc_第2页
全国计算机等级考试二级C语言上机10题.doc_第3页
全国计算机等级考试二级C语言上机10题.doc_第4页
全国计算机等级考试二级C语言上机10题.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

全国计算机等级考试二级C语言上机10题1、个十百千位加减并大小排序问题:求出个位数上的数减千位数上的数减百位数上的数减十位数上的数大于零的个数cnt, 再把所有满足此条件的四位数依次存入数组b中, 然后对数组b的四位数按从大到小的顺序进行排序。int i,j,k,t;for(i=0; i 0)bcnt+=ai;for(i=0; i cnt-1; i+) k=i;for(j=i+1; j cnt; j+)if(bk cd, ab必须是偶数且能被5整除, cd必须是奇数,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中, 并要计算满足上述条件的四位数的个数cnt。void jsVal()int i,j,k,A,B,C,D;for(i=0; i 10*C+D)bcnt+=ai;for(i=0; i cnt-1; i+) k=i;for(j=i+1; j cnt; j+)if(bk bj) k=j;if(k!=i) A=bk; bk=bi; bi=A;3、求符合条件的数的总和和平均值问题:求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数cnt, 再求出所有满足此条件的四位数平均值pjz1, 以及所有不满足此条件的四位数平均值pjz2。int i;for(i=0; i 0) cnt+; pjz1+=ai; else pjz2+=ai;if(cnt) pjz1/=cnt;if(cnt300) pjz2/=300-cnt;4、求共有几个数以及各位数相加为基数的个数并求平均值问题:1. 求出这文件中共有多少个正整数totNum; 2.求出这些数中的各位数字之和是奇数的数的个数totCnt, 以及满足此条件的这些数的算术平均值totPjz。void Calvalue(void)while(xxtotNum!=0) if(xxtotNum/1000+xxtotNum/100%10+xxtotNum/10%10+xxtotNum%10)%2) totCnt+; totPjz+=xxtotNum; totNum+;if(totCnt) totPjz/=totCnt;5、报数出圈void Josegh(void)int i,j,s1,w;s1=s;for(i=1;i=2;i-)s1=(s1+m-1)%i;if(s1=0)s1=i;w=ps1-1;for(j=s1;ji;j+)pj-1=pj;pi-1=w;NextPage6、以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排,同时去除标点符号,之后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中。void StrOL(void)int i,j,k,m,n,ll;char yy80;for(i=0; i =0; j- -) if(isalpha(xxij) k+;else for(m=1; m=k; m+)yyn+=xxij+m;k=0;if(xxij= ) yyn+= ;for(m=1; m=k; m+)yyn+=xxij+m;/* 上面两行处理每行的第一个单词。如果漏写,结果显然不正确,但并不影响得分。 */yyn=0;strcpy(xxi,yy);/* 标准答案与此法结果相比,每行后面多一个空格。 */7、以行为单位把字符串中的第一个字符的ASCII值加第二个字符的ASCII值, 得到第一个新的字符, 第二个字符的ASCII值加第三个字符的ASCII值,得到第二个新的字符, 以此类推一直处理到最后第二个字符, 最后一个字符的ASCII值加原第一个字符的ASCII值, 得到最后一个新的字符, 得到的新字符分别存放在原字符串对应的位置上,之后把已处理的字符串逆转后仍按行重新存入字符串数组xx中。void ChA(void)/int i,j; char ch;for(i=0; i maxline; i+) ch=xxi0;for(j=0; j strlen(xxi)-1; j+)xxij+=xxij+1;xxij+=ch;strrev(xxi); 8、以行为单位依次把字符串中所有小写字母o 左边的字符串内容移到该串的右边存放, 然后并把小写字母o删除,余下的字符串内容移到已处理字符串的左边存放,之后把已处理的字符串仍按行重新存入字符串数组xx中。void StrOR(void)int i,j; char yy80,*p;for(i=0; ifor(j=0; jif(xxij=o) p=&xxij+1;strcpy(yy,p);strncat(yy,xxi,j);strcpy(xxi,yy);j=0;9、以行为单位把字符串中的最后一个字符的ASCII值右移4位后加最后第二个字符的ASCII值, 得到最后一个新的字符, 最后第二个字符的ASCII值右移4位后加最后第三个字符的ASCII值,得到最后第二个新的字符, 以此类推一直处理到第二个字符, 第一个字符的ASCII值加原最后一个字符的ASCII值, 得到第一个新的字符, 得到的新字符分别存放在原字符串对应的位置上,之后把已处理的字符串仍按行重新存入字符串数组xx中。void CharConvA(void)/*/int i,j,ll; char ch;for(i=0; i 4)+xxij-1;xxi0+=ch;10、以行为单位把字符串中的所有小写字母改写成该字母的上一个字母, 如果是字母a, 则改写成字母z,大写字母和其它字符保持不变。把已处理的字符串仍按行重新存入字符串数组xx中。void ConvertCharD(void)/*/int i,j;for(i=0; i maxline; i+)for(j=0; j strlen(xxi); j+)if(xxij=a) xxij=z;else if(islower(xxij) xxij-=1;计算机等级二级C语言上机考试改错题分析总结以下对改错题的改错方式做一些总结,当然这些总结只能对大部分改错行有效。1、若错误行是函数首部,可分为以下几种情况:A、该行最后若有分号则删除,中间若有分号则改成逗号B、形参类型不一致的问题,特别是指针类型,若后面用到某形参时有指针运算则该形参必为指针类型;若形参是二维数组或指向m个元素的指针变量,则第二维的长度必须与main中对应数组的第二维长度相同C、函数类型不一致的问题,若函数中没有return语句则函数类型为void,若有return语句则函数的类型必须与return后变量的类型一致。2、若错误行是if或while语句,则首先看有没有用小括号将整个表达式括起,若没有则加上小括号。3、若错误行中有if、while、for则要特别注意条件表达式的错误问题:A、指针变量的应用,若表达式中有指针变量且没有指针运算符,则加上指针运算符B、若条件表达式中只有一个等于号,则改成两个等于号,若为其它比较运算符则一般是进行逆转或加一个等于号C、for中要用分号分隔表达式,而不是用逗号4、语法错误A、语句缺少分号,若错误行中有语句没有用分号结束,则加上分号。B、大小写不对,若错误行中有大写字母则一般都改成小写字母。5、指针变量的运用,若错误行中有指针变量,并且该变量名前没有指针运算符则一般都是加上指针运算符6、若错误行为return语句,则首先看是否是缺少分号若是则加上分号即可;否则就是return后的变量或表达式错误(此时可通过看题意,来分析该返回哪一变量或表达式)7、若错误行中见到整型1除以某个表达式时,一概改成1.0。但若是整型变量或表达式则只能用强制转换8、复合运算符写错9、字符串结束符写错,若有字符串结束符则要特别注意有没有写错,但第11题例外,因为该题是要将数字字符转换成对应的数字。10、若错误行是定义语句,则首先看类型是否符合;再看所赋初值是否正确;若以上均不是,则看是否少定义了某个变量或少了花括号。11、表达式错误(占的份量最多,并且没有统一的改法,我们只能通过题目要求来分析并修改)12、若错误行中有一条横线,则必须将横线删除再填空。填空题中亦是如此。例题一;请编一个函数fun,它的功能是:根据以下公式求的值(要求满足精度0.0005,即,某项小于0.0005时停止迭代):程序运行后,如果输入精度0.0005,则程序输出多少。注意:部分源程序存在PROG1.C中,请勿改动主函数和其他函数中的内容,仅在函数fun的指定的部位填入你编写的若干语句。试题源程序如下:#include stdio.h#include math.hdouble fun(double eps)main() double x;printf(Input eps:);scanf(%lf,&x); printf(neps=%lf, PI=%lfn,x,fun(x);分析:(1)本题所用基本算法应为累加。假设累加值放在变量s中,累加项放在变量t中,累加操作由语句s=s+t;来实现。(2)若称 为第1累加项,则其前的1为第0累加项,其后的一项为第2累加项,按给定的公式可知,从第1累加项开始,后一项的累加项是前一项的值乘以 。所以当前的累加项应当是:t=t*n/(2.0*n+1.0)。表达式右边的t中是前一项的值,表达式左边的t为当前的每累加累加项。请注意,不要写成:t*n/(2*n+1)而进行整除。(3)若第0累加项的1作为s的初值,语句:s=s+t;执行n次,就把第1到第n项累加到了s中。每进行一次累加,n值增1。(4)把以上操作放在循环中。按本题规定,当某项小于eps(0.0005)时停止迭代,因此若用while循环,可用t=eps作为控制循环进行的条件:while( t=eps ) s+=t; n+; t=t*n/(2.0*n+1); (5)注意应给所用变量赋适当的初值。(6)退出循环后,函数的返回值应是:2*s。例题二:请编写一个函数void fun(char m,int k,int xx),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。例如,若输入17和5,则应输出:19,23,29,31,37。注意:部分源程序存在PROG1.C中,请勿改动主函数和其他函数中的内容,仅在函数fun的指定的部位填入你编写的若干语句。试题源程序如下:#include void fun(int m, int k, int xx)main() int m, n, zz100;printf(nPlease enter two integers(m & n): );scanf(%d%d,&m,&n);fun(m, n, zz);for(m=0; mn; m+) printf(%d ,zzm);printf(nn);分析:(1)本题的基本算法是求素数。假设有整数i,若i不能被2到i之间的任意一个数除尽,则i就是素数;若一旦能被某个数除尽就不是素数。(2)以下是求i是否为素数的基本算法:变量ok用作i是素数的标志,ok为1,则i是素数。ok=1;for(p=2; pi/2; p+)if( i%p=0) ok=0; break; if(ok)(3)本题要求把大于m的k个素数存入xx所指的数组中。所以,i的值应大于m;取大于m的值逐一进行判断,若是素数就放入xx所指数组中。把以上语句放入一个循环中:for( i=m+1,j=0; ? ; i+ ) ok=1;for(p=2; p=i/2; p+)if( i%p=0 ) ok=0; break; if (ok) xxj=i;j+; 此处,变量i统计存入数组中元素的个数,同时作为下标。(4)按本题的要求,外循环结束的条件应当是:jk(j的值从0到k-1)。只要求得了k个素数,就可退出循环。因此在?处应填入jk。例题三:请编一个函数fun,其中n所指存储单元中存放了数组中元素的个数。函数的功能是:删除所有值为y的元素。已在主函数中给数组元素赋值,y的值由主函数通过键盘读入。注意:部分源程序存在PROG1.C中,请勿改动主函数和其他函数中的内容,仅在函数fun的指定的部位填入你编写的若干语句。试题源程序如下:#include stdio.h#define M 20void fun(int bb,int *n, int y)main() int aaM=1,2,3,3,2,1,1,2,3,4,5,4,3,2,1, n=15, y, k;printf(The original data is: n);for(k=0; kn; k+ ) printf(=,aak);printf(nEnter a number to deleted: ); scanf(%d,&y);fun(aa, &n, y);printf(The data after deleted %d: n,y);for(k=0; kn; k+ ) printf(=,aak);printf(nn);考试用书分析:(1)本题的基本算法是查找和删除。(2)若

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论