二级C语言上机编程题技巧总结_第1页
二级C语言上机编程题技巧总结_第2页
二级C语言上机编程题技巧总结_第3页
二级C语言上机编程题技巧总结_第4页
二级C语言上机编程题技巧总结_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

二级C语言上机编程题技巧、方法总结1、 二级C语言上机编程题在二级上机考试中属于较难题型,因此很多同学都害怕通过不了。综合往年的考试,结合考试大纲,每年考试的编程题都有一定的规律和方法,只要同学们认真熟练使用做题的方法,通过考试是没有问题的。2、 编程题做题方法一:使用C语言特有的函数做题(1) 编程思想:使用C语言函数库中的做题,做题时必须注意包含对应的头文件(2) 考题举例:题库中的第37题,要求将数字字符串转化为对应整数,例如“-1234”转化后为-1234。做题时需要添加头文件#include"stdlib.h",然后在fun函数中写入程序returnatol(p);其中atol(p)表示将p从字符串转化为长整型数。最后编译,运行后输入测试数据后即可得到满分。#include<stdio.h>#include<string.h>#include"stdlib.h"longfun(char*p){returnatol(p);}(3) 方法总结:该类方法可以适用的题目较少,同学们了解即可。3、 编程题做题方法二:使用规律做题(1) 编程思想:部分题目的答案是固定的,不会因为输入的数据改变而改变,因此这部分题目我们直接将答案记住即可,减少编程的麻烦。(2) 考题举例:题库中的70题,求cos(x)-x=0的一个实根。做题时候在fun函数中输入return0.739085;后点击编译和运行即可,无需输入测试数据。(补充:如果需要输入测试数据,程序在输出的黑屏上面会提示,不过一般是英文提示,所以同学们要格外小心)#include<math.h>#include<stdio.h>doublefun(){return0.739085;}(3) 考题总结:该题为每年必考的题目,因此同学们要将答案熟记,以便大家能顺利通过考试。4、 编程题做题方法三:使用C语言编程(1) 编程思想:该种方法是考试中使用频率最多的方法,就是使用学习的C语言进行编程,对C语言的知识进行综合运用,因此难度较大,容易出错。(2)考题举例:题库14题,求小于形参n同时能被3和7整除的所有自然数之和的平方根,并作为函数的返回。做题时时一定要按照三个步骤来:一要定义,二要满足题意,三要看有无返回。#include<math.h>#include<stdio.h>doublefun(intn){inti;intsum=0;for(i=0;i<n;i++){if(i%3==0&&i%7==0){sum=sum+i;}}returnsqrt(sum);}考题总结:该题属于编程方法中较简单的题型,做题时也可以使用简便方法,请参考考试总结中的叙述。5、 编程题做题方法四:使用简便方法做题(1)编程思想:顾名思义这是一种简单而且高效的方法,可是要提醒大家里面的方法不是看一遍就能掌握的,同学们要仔细再仔细,多练习多思考。(2)考题举例:题库第8题,要求除了字符串前导的*号之外,将串中其他的*号全部删除。例女口,字符串的内容:****A*BC*DEF*G*******,删除后为:****ABCDEFG。做题步骤如下:读题目,否则将不能正确做题。该题目的要求很清晰,就是删除*号,但是不能删除前导*号。这里大家要知道什么是前导*号?其实它是指字符串中第一个字母以前的全部*号,该题中有4个前导*号。开始做题,找到NONO函数,了解做题的来龙去脉。以该题为例,以下是NONO函数的全部内容:NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti;chars[81];in=fopen("D:\\k01\\24010001\\in.dat","r");out=fopen("D:\\k01\\24010001\\out.dat","w");for(i=0;i<10;i++){fscanf(in,"%s",s);fun(s);fprintf(out,"%s\n",s);}fclose(in);fclose(out);}分析NONO函数:分析过程有点多,第一次就要将其看懂,后面就可以很轻松!FILE*in,*out;表示定义了两个文件类型的指针in和out,用来指向某个打开的某个文件。inti;chars[81];定义了一个整型的变量i,一般用来表示循环的递增;定义了一个字符类型的一维数组s,这里数组s没有存储任何的数据,因此一般是闲置用来后面题目中存放数据使用的。in=fopen("D:\\k01\\24010001\\in.dat","r");in是上面定义的文件指针,用来指向一个文件in.dat。首先大家要知道open在英语里面表示是“打开”file在英语里面是“文件”因此形象记忆fopen就是打开文件,打开什么文件?看后面的存储目录D:\\k01\\24010001\\in.dat,就是这个路径下面的文件in.dat,以”r”只读的形

式打开,记住不能就行对in.dat的改动。④out=fopen("D:\\k01\\24010001\\out.dat","w");out文件指针用来指向out.dat,打开的方式以”W”写的方式写数据,换句话说:in.dat是考试时候的数据源文件,而out.dat是用来存放答案的文件,所以要确保out.dat中的数据完全正确。for(i=0;i<10;i++)循环语句,该循环将执行10次fscanf(in,"%s",s);从in文件所指向的数据源文件in.dat中读取一行字符串数据给一维数组s,(顺便说下为什么知道是读取一行字符串数据,是因为%s格式是用来控制字符串的,因此不难判断),通过循环语句,将读取10行数据进行处理,该题目总共40分,因此每行就是4分。fun(s);调用函数fun,传入实参s,我们从题目得知fun函数要完成的事情是删除字符串中的*号,但是不删除前导*号,每次传入的数据都会被执行。fprintf(out,"%s\n",s);printf在第二章学习的时候知道是输出的意思,fprintf的意思是将数据输出到out指针指向的文件中,以“%s\n”格式方式输出,输出的数据是s,同学们一定要注意,此时的s是修改过的s,即是删除*号后的字符串。fclose(in);关闭文件指针infclose(out);关闭文件指针out,文件打开后要将其关闭。3) 在VC6.0中fun函数位置输入一些简单的语句,例如:输入定义一个test变量,给其赋值,最好多敲几个回车进去,如果数据有返回值,必须输入返回值。然后点击编译,运行后将出现这个界面:#include<stdio.h>voidfun(char*a){inttest;test=5;}要求输入一个字符串,可以任意的从键盘中输入字符串,例如输入:12345回车得到:程序中出项Pressanykeytocontinue则说明程序已经运行,将在考试文件夹下面生成out.dat文件,否则在考生文件夹下面将不会生成out.dat文件,就没有办法继续做题。打开in.dat①关闭第三步程序运行的界面,打开int.dat文件。

②在VC++6.0界面中“单击File”,在弹出的菜单中选取“Open”,打开考生文件夹D:\\k01\\24010001下面的in.dat文件。截图如下:③查找范围里面选中D盘④找到k01下面的24010001,发现没有in.dat文件,单击文件类型,选择“所有文件(*.*)”即可⑤选中in.dat,然后单击打开,出现下图所示界面为正确打开[flin.datpt###A*BC*DEF*G********JFHG****KHJ***SDFGH****KJKJ*J*K*K*J*****######ogh*gklj*lkj*lkj*klkjhg*dq*lj*kj*****JJKD***JHHKJH*DGH*TDFHG*TVRVTRIU*JGJ***************HKHJLKH***GUHHJ*GFHJ**GJHK***GJKGK****KHKLHKJHKJ*********jhgdfxggjh****jfhgfk**hkh**kjhkl***klh***JDFARTQVU*****HFGUJ**KJHKJ**KJHK***********jkhiluhiugclklkjgh*******hjghg**kjh**jv*jh*m*hjh*********jkh***ghjk*jhgg*ggjk*gjkg*gkj*gh*gk*jk*********KJKHLKJHSQDQDQ*DQDq*DQ*DQLKDKJQ*POUOIUO*LKJL*****将out.dat里面的数据清空,即将out中所有东西都删除,让out没有任何的代码out.dat*将in.dat中第一行数据****A*BC*DEF*G********复制到out.dat中将out.dat第一行数据的中间*和尾部*全部删除,然后敲入回车[flout.dat*****ABCDEFG以此类推将in.dat中剩余9行按照上面的步骤复制到out.dat中进行修改,两行中间没有空行[=l|out.dat*****ABCDEFG**********LKJFHGKHJSDFGHKJKJJKKJ******OGHGKLJLKJLKJKLKJHGDQLJKJ********HJJKDJHHKJHDGHTDFHGTVRVTRIUJGJ####*HKHJLKHGUHHJGFHJGJHKGJKGKKHKLHKJHKJ####*#jhgdfxggjhjfhgfkhkhkjhklklh*#*#*#*#*#*#UVKJDFARTQVWHFGUJKJHKJKJHK********JKHILUHIUGCLKLKJGHHJGHGKJHJVJHMHJH####*JKHGHJKJHGGGGJKGJKGGKJGHGKJK****KJKHLKJHSqDqDqDqDqDqDqLKDKJQPOUOIUOLKJL6)保存交卷①单击左上方的保存,保存结果②保存后关闭vc++6.0方可交卷二、考题总结第一种类型:字符串操作一,字符串删除*号1、 考题库中考题对应编号:8、9、10、19、45、54、57、61、65、71、77、90、92、93、100、56、60、72、75、85、862、 举例:以第10题为例讲解分析题目:使字符串的前导*号不得多于n个,若多于n个,则删除多余的*好,若少于或等于n个,则什么也不做,字符串中间和尾部*号不得删除。分析NONO函数:NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti,n;chars[81];in=fopen("D:\\k01\\24010001\\in.dat","r");out=fopen("D:\\k01\\24010001\\out.dat","w");for(i=0;i<10;i++){fscanf(in,"%s",s);fscanf(in,"%d",&n);fun(s,n);fprintf(out,"%s\n",s);}fclose(in);fclose(out);}NONON函数具体分析方法前面(方法四)已经详细讲解过了,现将不同的点进行分析。fscanf(in,"%s",s);表示从in.dat中读取一个字符串放到数组s中fscanf(in,"%d",&n)表示从in.dat中读取一个整型数据给变量n,从题目中我们不难发现s和n之间的关系,就是如果s字符串中的前导多于n个删除,则删除多余的*号,否则什么也不做。fprintf(out,"%s\n",s);只将修改后的字符串输出在fun函数中输入测试数据,该题函数返回void则无需return语句#include<stdio.h>voidfun(char*a,intn){inttest;test=5;}编译运行,输入一个字符串后还需输入一个n

5)打开in.dat融nDi\k01\24010001\Debug\progl.exen5)打开in.datEnterastring:123456Entern: 3Thestringafterdeleted:123456PressanykeytocontinueHin.dat*******f)*******f)*******f)c*DEF*G****JFHG****KHJ***SDFGH****KJKJ*J*K*K*J**********OGH*GKLJ*LKJ*LKJ*KLKJHG*DQ*LJ*KJ********HJJKD***JHHKJH*DGH*TDFHG*TVRVTRIU*JGJ**********8JFHG****UVKJDFARTQVW*****HFGUJ**KJHKJ**KJHK******JKHILUHIUGCLKLKJGH*******HJGHG**KJH**JV*JH*M*HJH******JKH***GHJK*JHGG*GGJK*GJKG*GKJ*GH*GK*JK*****KHJJHGDFXGGJH****JFHGFK**HKH**KJHKL***KLH***SDFGH****KJKJ*J*K*K*J7) ****UVKJDFARTQVW*****HFGUJ**KJHKJ**KJHK******JKHILUHIUGCLKLKJGH*******HJGHG**KJH**JV*JH*M*HJH******JKH***GHJK*JHGG*GGJK*GJKG*GKJ*GH*GK*JK*****JHGDFXGGJH****JFHGFK**HKH**KJHKL***KLH***7) 保存交卷第二种类型:字符串操作二,移动字符串1、 考题库中对应试题编号:1、42、83、87Q]ABCDEFGHIJK21FkjdlsFhjsdlkfjsdlkfjsdlkfjdsrewoiru29Fdsill<Fj93242dfhdkjFhdskjFhdsjkFdshjfdhFkjdshFkjdsfhdksjfueoSifheufSQUSS19kclsdjFksdlfjsdlkfjdsfw329oruewoifjdslkfdf932dFjhklsujFhd55kdjsFldsjflkdfjdskFjdslkFjweioufeoijFlkdwejfe2wruoiweuFwekFhd10jsdaFhdsFhdsFdsfkjdsFhlkdjFhdfdskjFsd31jfdashFdjksfhfe93tFiuujdFg934r4329ugFi2493ru9fur2Q39ruefoi36FjsdFhdsjkFhsdF3o4irouiwreFu43298ruoit3290rfudkgrejg439tufrl9jFdshFkjdshFdsjkfhsdjkfhsdkjfhds28FjkhdsFkjhdsjfhdsjkfhsdfhsFkhsdkjfhdskjfhdsjFhdslkFjhdslk分析:in.dat结合NONO函数中的fscanf函数可以得到,函数将整数3给了m,将字符串:ABCDEFGHIJK给了数组a6)打开out.dat①将in.dat中第一行中的字符的前3个字母移动到最后JDFARTQVVJ*****HFGUJHKHJLKH***GUHHJ*GFHJ**GJHK***GJKGK****KHKLHKJHKJ***KJHKJ**KJHK***HKHJLKH***GUHHJ*GFHJ**GJHK***GJKGK****KHKLHKJHKJ********JKH***GHJK*JHGG*GGJK*GJKG*GKJ*GH*GK*JK*****分析in.dat中的数据刚好是一行字符串一行整数,总共有20行,通过fscanf(in,"%s",s);fscanf(in,"%d",&n);两个函数每次输入两个数据分别给s和n,例如第一行中输入的时候s字符串就该为:*******A*BC*DEF*G****,n的值就为:4,s字符串中的前导*号为个,多于了n的值,因此需要将多于的3个*号删除。打开out.dat打开out.dat并清空数据,因为fprintf(out,〃%s\n〃,s);只将修改后的字符串输出,将第一个字符串删除3个*号填写到out.dat中,不输出in.dat中的4[=1o此扣t*以此类推将数据进行输入:[=1out.dat*

2、 试题举例:以第1题为例分析题目:把1到第m个字符平移到字符串的最后分析NONO函数:NONO()</*请在此函数內打开文件,输入测试数据,调用Fun函数,输出数据,关闭文件。*/FILE*rf,*wF;chara[N];intm,i;rf=Fopenf'D:\\kB1\\24010801Win.daf/'r");TOC\o"1-5"\h\zwF= 讥2即町盹MXout.d日 ;for(i=B;i<18;i++)<|Fscanf(rF,"^d%s",&m,a); |“Fun(日,m); "『印fintFM;■需W,日);fclose(rF);Fclose(wF)注意fscanf(rf,"%d%s",&m,a);表示从rf指向的文件in.dat中读取两个数据,一个整型数据给变量m,另外一个给数组a。根据题目我们不难判断,程序就完成:将数组a中的字符串从第1个到第m个移动到最后。3)在fun函数中输入测试数据,,该题函数返回void则无需return语句,在执行窗口中需要输入m的值。uoidFun(char*w,intm)inttest;test=5:4)编译,执行,输入测试数据4)编译,执行,输入测试数据nDi\k01\24dl0001\Debug\prfcl.exennDi\k01\24dl0001\Debug\prfcl.exen"D:\k01\24010001\Debug\proTheoriginalstringABCDEFGHIJKEnterm-TheoriginalstringABCDEFGHIJKEnterm-TheoriginalstringABCDEFGHIJKEnterm: 35)打开in.dat[fl5)打开in.dat[flin.datThestringaftermoving[=1out.dat*DEFGHIJKABC②依次类推将得到正确的结果。7)保存交卷第三种类型:数学问题一,将两个数字按照要求合并成一个数字1、对应题库中的题目编号:13、38、44、46、63、69、78、88、94、95、962、试题举例:以13题为例分析题目:将a中十位和个位数依次放在变量c的百位和个位上,b中的十位和个位依次放在变量c的十位和千位上(2)分析NONO函数:N0N0()</*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rF,*wf;inti,a,b;longc;rF=Fopen("D:\\k01\\24010801Win.daf/'r")F FEcmnFfrF,■喘d,盅d“,蛊日,Fun(日,D,He);|Fp广盅d,t)=^(i,c=盅],(i\n・・,日,b,c)3)Fclose(rf);Fclosetwf*在fun函数丿行窗口中需要输入12空格45回车后,出现下图结果。uoidFun(inta,int3)Fclose(rf);Fclosetwf*在fun函数丿行窗口中需要输入12空格45回车后,出现下图结果。uoidFun(inta,intb,long*c)中输入测试数据,编译,执行,该题函数返回void则无需return语句,在执SnDi\k11\24010001\[|ebug\pFogl.exen4)5)inttest;test=B;|Inputa,b:1245Theresultis:-858993460Pressanvkeytocontinue打开in.dat,fscanf(rf,"%d,%d",&a,&b);第一行中将45给了变量a,将12给了变量b打开out.datefprintf(wf,"a=%d,b=%d,c=%ld\n",a,b,c);输出格式一定要注意,如下图所示,否则不得分。6)保存交卷第四种类型:数学问题二,二维数组相关类型题目1、题库中对应题目编号:15、17、24、26、31、32、40、41、43、50、812、考题举例:以15题为例题目分析:将M行N列的二维数组中的数据,按行的顺序依次放到二维数组中NONO函数:NONO()</*请在此函数内打开文件,输入测试数据,调用fun函数,输岀数据,关闭文件。*/FILE*rf,*wf;inti,j,k;intw[18][1B],a[100],n=8,mm,nn;rF= 舶\\2却町盹舶\\in-d日;For(k=B;k<5;k++){[匸二日nF(f*,■喘d盅6",Edim;&nn); [*d1"常;i.(ihwi;i.八) -For(j=O;j<nn;j++)FscanF(rf,"^d",&w[i][j]);For(i=O;i<n;i++)|Fprintf(wF,"^3d",a[i]);fprintF(wf,"\n");|Fclose(rf);fclose(wf);在fun函数中输入测试数据,编译,执行,该题函数返回void则无需return语句,出现下图结果。uoidFun(int(*s)[18],int*b,int*n,intmm,intnn)inttest;test=5:打开in.dat。fscanf(rf,"%d%d",&mm,&nn);从in.dat中第一行输入两个整型数,第一个3给变量mm表示数组中的行,第二个4给变量nn表示数组中的列。for(i=0;i<mm;i++)for(j=0;j<nn;j++)fscanf(rf,"%d",&w[i][j]);将mm*nn个整数放到二维数组w中,即读取二维数组的数据。例如第一行mm为3,nn为4,则应该有一个3行4列的二维数组。[Flin.dat打开out.dat。根据for(i=0;i<n;i++)fprintf(wf,"%3d",a[i]);fprintf(wf,"\n");格式进行数据的输出。for(i=0;i<n;i++)fprintf(wf,"%3d",a[i]);表示将n个二维数组元素以%3d的形式输出到out.dat中,以第一个二维数组为例即将

以行的形式进行输出,结果如下:以行的形式进行输出,结果如下:第一个33前面要加一个空格,因为%3d要求输出的宽度为3,但是33这个数字只占了2个的宽度,因此必须在33前面加一个空格,依次类推,第二33至55都要在前面加一个空格。输完数据后要记得执行fprintf(wf,"\n");输出一个换行符。将题目中其它的二维数组修改后的结果如下:[J]out.dat7)保存交卷7)保存交卷第五种类型:找出数组中的最大值或者最大值所在的下标题库中对应题目编号:18、29、36、66、83、55考题举例:以18题为例题目要求:求出数组中最大数的下标并存放在k所指的存储单元中(2)NONO函数:第五种类型:找出数组中的最大值或者最大值所在的下标题库中对应题目编号:18、29、36、66、83、55考题举例:以18题为例题目要求:求出数组中最大数的下标并存放在k所指的存储单元中(2)NONO函数:NONO()</*本函数用于打开文件,输入测试数据,调用刊0函数,输岀数据,关闭文件。*/inta[1B],i,k,j;FILE,*wF;3)rf= 佃。眄Win.dmt","严);wF=FoDent,,D:\\k01\\24010001\\out.daf/'w"!:For(i=8;i<10;i++){for(j=0;j<10;j++) ■宠d",阴口])订[印广話"(前,吨d;樂d\n“,l<,日[k])訂Fclose(rf);J|在1fun函数中输入测试数据,编译,执行,该题函数返回int则需return语句,

题目中严格要求k返回的是最大值下标,因此必须给*k初始值0出现下图结果。另外ttinclude<stdio.h>intfun(int*s,intt,int*k)*k=0;returnQ;4)打开4)打开in・dat文件。NONNO函数中:333333334444444455551011121211107899111213111213111213910111299988776515221222399989797989912558 777665511221212414342For(j=0;j<18;j++)|FEcmnF(",■宠d”,阴[j])说明的信息是将10个据通过fscanf函数读入到数组a中,从10个数据中找到最大值及其下标

计980121876101276885657543277767589610130140143145191080660549690110110123115144412057627559640120121144140132118017617519620120120123145188828027627529620120128723145155538037637539630130130133135199948047647549620120110113115111158017647529630160180113115111198;加759610304(J434111里面的数据都是10列,总共有10行,因此只要将每一行分析:in.dat可以发现,里面的数据都是10列,总共有10行,因此只要将每一行5)的最大值及其下标找出来存放在out.dat中即可。打开out.dat并清空文件里面的数据5)|印rintFWF,■喘d,盅dVT,K,日[K]);|该语句将最大值下标k及其最大值以%d,%d的形式输出,结合in.dat中的第一行数据不难发现最大值是121,它所在的下标是1(补充下标是从0开始的),因此将1,121输入到out.dat中的第一行,记得在121后面加上回车进行换行。6)[Jout.dat*[=16)[Jout.dat*[=1out.dat*保存交卷字符串操作三。包括统计单词、字符的个数,比较字符串,转换字符串60,字符串操作三。包括统计单词、字符的个数,比较字符串,转换字符串60,74(比较特殊,多练习)1、 题库中对应题目编号:26,30,37,40,53,56,592、 考题举例:以53题为例(1) 题目要求:求出ss所指字符串中指定字符的个数,例如字符串:123412132,输入的字符为:1,则输出为:3。该类型的题目一定要知道哪个字符需要计算个数。(2) NONO函数:uoidNONO()</*本函数用于打开文件,输入测试数据,调用Fun函数,输出数据,关闭文件。*/inti;FILE*rf,*wf;chara[M],b[M],ch;Ifscanf(rf,a);Ifscanffrf.f-ri ■b):rf=Fop即「・叭\\|{町\\2即町盹日t・・,Ifscanf(rf,a);Ifscanffrf.f-ri ■b):fprintf(wf,"^c^dXn",(ch)(fun(a>ch))J;fclose(rf);fclose(wf);3)在fun函数中输入测试数据,编译,执行,该题函数返回int则需return语句,出现下图结果。nDi\k01\24010001\Debug\progl.exenPleaseenterastringnDi\k01\24010001\Debug\progl.exenPleaseenterastring:Pleaseenterastring:123456Pleaseenterachar:S"D:\k01\24010001\Debug\procPleaseenterastring:123456Pleaseenterachar:Pleaseenterastring:123456Pleaseenterachar:lThenumberofthecharis:5.dal^文continue_4)FscanF(rf,"^s",a);FscanF(rf,"^s",b);NONO函数中的两个fscanf分别从in.dat中读取两行数据给数组a和数组b,以第一行和第二行数据为例,数组a存储字符串为:hsfgjkdgfdgfdgkfdjgkldf,数组b存储字符为:h,做题时需要从字符串中找出字符h的个数,为1[=1in.datgdkljgkdfjgiotuiorsmhnFsjfsfjseffksdljfksdjfksdjFkdsjfksdjFdksFdsklfjsdkfdsfksd1:kdsl8904592fkdsjfksdfjdskFjsdklFjsdFjsd(5)打开fkdsjfksdfjdskFjsdklFjsdFjsd(5)打开out.dat文件,并清空里面的数据首先程序先将*b的值赋值给变量ch,通过in.dat中分析可以得到,*b存放的就是指定的字符,以第一行为例就应该为h。数据在写入out.dat时,必须以%c=%d\n的形式输出,其中%c对应ch,即为h,%d对应的是函数的返回值,即为h在字符串中的个数为1。输出的结果为:其它行依次类推6)保存交卷第七种类型:字符串操作四,删除指定字符1、 题库中对应题目编号:4、12、25、28、35、39、52、55、72、75、85、862、 考题举例:以第4题为例(1)题目要求:将ss所指字符串中所有下标为奇数位置上的字母转为大写,若该位置不是字母,则不转换。该类型的题目不难但是必修认真,有耐心!(2)NONO函数:该题中的NONO函数比较难理解,同学们只需将红色方框里面的语句读懂就行,具体的将在第四步中介绍。

NONO()/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关用文件。*/chartt[51],ch;FILE*rf,*wf;intlen,i=0;rf=fopen("D:\\k01W24010001Win.daf/'r");wf= 时讥2即时朋时\\out.d日“旷);uhile(i<10){|Fgets(tt,SB,rf);|len=str±en(tt)-1;ch=tt[len];if(ch==・\n・||ch==0x1a)tt[len]=O;广intF(川F,■喘s\n“,tt); |i++:Fclose(rf);Fclose(wf);3)在fun函数中输入测试数据,编译,执行,该题函数返回void则无需return语句,出现下图结果。uoidFun(charuoidFun(char*ss)inttest;test=5:Pleaseenterancliaracterstringuithin50characters:4)打开in.dat文件fgets(tt,50,rf表示从in.dat中读入一个字符串给tt数组,如果不了解也不要紧,对做题没有太大的影响。[=1in.dat==hdsFFdsFdsUFsdUFdsl.FdsjfdFdsjhFjdshFdsfdsjFdsjkFdsFjsdhffsdjkfdsjkfdskjfdsjsdffFjkFhdsfjdshkfsdhFsFdsjfdsjdsdhfdFdkjshFfdsjkfdskjfsksFdhjdfjkdhFsfdsjhfsdkFsdFsdjFkjdsFfFdjFhdsfsjdkhfsdfdsjkhFsdFsdjkhjFFdshjfdshjFdsfdhjsFhjdsfdshjkhkjFdhjFdhsfdkhjFsdkjdskdffdskFfFfFFdFhjsdkFsdkjhfsdkjfjdshfsdkhkFsd做题时候首先要知道字符的字符的小标是否是奇数,我们可以通过标注数字删除不符合的字符。以第一行为例,将奇数位置的字符改动就行,记住空格占一个字符,在做其它题目时候一定要小心dsffdsfdsljfdslfdsljkfsd0123456789101112131415161718192021222324252627285)打开out.dat文件,清空数据。fprintf(wf,〃%s\n〃,tt);将tt数组中的字符串修改后进行输出,即将下标是奇数位置的小写字符改为大写字母。[=1out.dathDsFFdSFdSlJFsDIJFdSlFDsUkFsD[=1out.dat*[lDsFFdSFdSlJFsDIJFdSlFDsUkFsDjFdFDsJhfJdShfDsFdSjfDsjKfDsFJsDhFFsDjKFdSjKFdSkJFdSJSdFFFjKFHdSFjDsHKFsDhFSFDsJFdSjDsDhFdFDkJsHFFdSjKFdSKjFskSFDHjdFjKdHFSFdSjHFsDkFSdFSdJFKjDsFFFdJFHdSFsJdKhFsDFdSjKhFSdFSdJkHJFFDe町FdShJFdSFd町EF町DsFdShJkHkJFDhJFDhSFdKhJFSdkJdSKdFFdSkfFFFfFDFHjSdKFSdKjHFsDkJFjDsHFsDkHKFSd6)保存交卷第八种类型:结构体1、 题库中对应题目编号:2、3、16、23、33、51、58、64、68、82、97、98、992、 考题举例:以第二题为例(备注第二题是该类型中最典型的例题)题目要求:N名学生的数据已经通过主函数存放在s数组中,函数功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数返回。(注释:该题不仅仅考查题目中要求的内容,在程序段中有特殊的语句需要执行,所以需要特别注意!)main函数:该题没有NONO函数,因此以主函数为准。说明main函数:typedefstruct{charnum[1O];ints;在main函数之前定义了一个结构体STREC,里面有两个成员,分别表示学号和成绩,该题中一定要认清操作的是学号还是成绩,特别是输出的时候,该类型的题目都拥有相同的考点。在主函数中STRECs[N];定义了一个结构体类型的数组,长度为N,并且为其赋值16个数据。STRECh[N],tt;FILE*out;定义了另一个结构体数组h,和结构体变量tt,文件指针。在下图中已经用红色框住的部分需要明白。第一红框到第二个红框之间的部分可以不去理解,对做题没有影响。n=fun(s,h,80,98);最为关键,结合题目可以知道该句话的含义是:从结构体数组s中找到80到98之间的所有数据放到结构体数组中。帅选的数据为:<,,GA005,,,85},{,,GA004,,,85},{,,GA001,,,96},{"GA006,,,87}总共8个,题目中说将分数范围内的人数返回,这样可以得知n的值为8fprintf(out,"%d\n",n);将n以%4的格式输出到out.dat中For(i=B;i<n-1;i++)For(j=i+1;j<n;j++)为冒泡法排序,旨在将h中

的数据按照分数进行从小到大排序,如果不了解排序过程请参考“注意事项”,结构体数组h中的数据进行从小到大的操作后变为:{,,GA005,,,85},{,,GA004,,,85},{"GA015,,,85},{,,GA006,,,87}for(i=8;i<n;i++)|表示将排序后h中的数据以4d%\n的形式输出到out.dat中,并且输出的是h[i].s成绩数据项。3)STRECh[N],tt;FILE*out;STRECS[N1={{,,GA005,,,85},{GA003",76},{GA002",69},{GA004",85},i,i,n.lou.heiqh:printf("Enter2integernumberlou&heighscanFC'^d^d",&lou,&heiqh);if(heiqh<lou){t=heiqh;heigh=low;low=t;}n=Fun(s,h,lou,heigh);printf("Thestudent'sdatabetueen一一:\n",low,heigh);For(i=0:i<n:i++)printF("^s^UdXn'^hril.num,h[i].s);printFC'Xn");n=Fun(s,h,80,98):3)STRECh[N],tt;FILE*out;STRECS[N1={{,,GA005,,,85},{GA003",76},{GA002",69},{GA004",85},i,i,n.lou.heiqh:printf("Enter2integernumberlou&heighscanFC'^d^d",&lou,&heiqh);if(heiqh<lou){t=heiqh;heigh=low;low=t;}n=Fun(s,h,lou,heigh);printf("Thestudent'sdatabetueen一一:\n",low,heigh);For(i=0:i<n:i++)printF("^s^UdXn'^hril.num,h[i].s);printFC'Xn");n=Fun(s,h,80,98):FpnntF(out,"^d\n",n);For(1=1+1;i<n;1++)iF(h[i].s>h[i].s)<tt=h[i];h[i]=h[il;h[i]=tt;]1函数中输入测Itt »u试数据,编译,,执行,该essanykey[题函数返回int则需retu在果都则将不生成该文件语句,出现下图结tocontinue"字样才会生成out.dat文件,凰nDi\k01\24010001\Debug\progl.exenintFun(STRECEnter2integernumberIdh&heigh(4)打开out.dat(因为没有in.dat,所以无须打开它),清空里面的数据。[=1out.dat*首先输出n的值,以%d\n的形式进行输出:I其次将h排序后的第一个数据输出,以%4d\n的形式输出,第一个数据位85,85的宽度为2,但是输出中要求为4,所以必须在85前面加上2个空格。[flout.dat*nr

将剩余数据全部输出:圍out.dat85858587909194965)保存交卷第九种类型:链表类型1、题库中对应题目编号:22、80、842、考题举例:以22为例进行讲解(1)题目要求:N名学生的成绩已经在主函数中放在一个带头结点的链表中,h指向链表的头结点,函数功能是:找出学生的最高分,由函数值返回。(注释:返回值是最高分,不是数据整体)(2)NONO函数:主要观察红框部分,具体解释将在下面介绍。N0N0()</*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti,j;doubles[N],max;STREC*h;in=fop盹町;out= 盹MWout-dmfW);For(i=B:i<1B:i++)<|For(j=8;j<N;j++)Fscanf(in, &s[j]);|max=Fun(h);FprintF(out,"^6.1lf\n",max);Fclose(in);Fclose(out);(3)在fun函数中输入测试数据,编译,执行,该题函数返回double则需return语句,出现下图结果。执行结果中必须出现“Pressanykeytocontinue"字样才会生成out.dat文件,都则将不生成该文件。4)doublefun(STREC*h)int4)doublefun(STREC*h)inttest;test=5;|returnQ.Q;打开in.dat文件。ITDi\k01\24010001\Debug\progl.exen»iead->85->76->69->85->91->72->64->87max=0.0PresseinykeytocontinueHfor(j=0;j<N;j++)fscanf(in,"%lf,",&s[j]);表示从in.dat中输入N个实型数给数组s中,总共有十行。从每行中找到最大值,然后在out.dat中进行输出。H]in.dat85.5,76,69.5,85,91,72,64.5,87.582.5.66.76.5.76.89.76.46.5.78.572.5.56.66.5.66.79.68.46.5.58.592.5.76.86.5.86.99.86.56.5.88.582.66.5.46.5.56.76.75.76.5.63.575.5.74.71.5.85.81.79.64.5.71.592.5.61.72.5.84.79.75.66.5.72.572.5.86.73.5.80.69.63.76.5.53.566.5.71.74.5.70.61.82.86.5.58.576.66.5.75.5.60.76.71.96.5.93.5

max=fun(h);(5)打开out.dat文件。 函数将返回的最大值放在变量max中,然后将max以%6.1f\n的格式进行输出,注意%6.1f表示数据的总宽度为6,小数点占1位,则应该对数据小数点后的第二位进行四舍五入操作。以第一行为例,最大值为91,则输出值为“91.0”,91.0前面加2个空格。\=\out.dat*91.089.079.099.082.085.092.586.086.596.5依次类推将每行中的最大值找出来进行输出即可,结果如上图所示。6)保存交卷第十种类型:数学问题二,素数考题中对应题目编号:20、21、62考题举例:以21为例(1)题目要求:将大于形参m且仅靠m的k个素数存放在xx所指的数组中。分析题目需要同学们了解:什么是素数?素数就是只能被自身和1整除的数,最小的素数是2,例如4不是素数因为它能被2整除,5是素数,因为它只能被1和它自身整除。NONO函数:NONO()</*本函数用于打开文件,输入测试数据,调用刊0函数,输出数据,关闭文件。*/intm,n,zz[1SOO],i;FILE*rf,*wF;rf=fopenf'D:\\kQ1\\24010001Win.daf'/'r");wf=F叩{时讥2即时朋时;勺广fi=O:i<佃:i++)€日■宠d鬼(T,ean,喪n);|Fun(m,n,zz):|For(m=8;m<n;m++)fprintf(wF,"^d",zz[m]);|Fclose(rF);Fclose(wF);在fun函数中输入测试数据,编译,执行,该题函数返回void则无需return语句,出现下图结果。执行时必须输入两个整型数:格式必须为17,5两个数终将要加一个逗号。执行结果中必须出现“Pressanykeytocontinue"字样才会生成out.dat文件,都则将不生成该文件。SnDi\k01\24010001\Debug\progl.EuoidFun(intm,intk,intxx[])SnDi\k01\24010001\Debug\progl.Etest=5:

打开in.dat。fscanf(rf,"%d%d",&m,&n);表示从in.dat中输入两个数给变量m和n,以第一行为例将101给了m,将7给了n,即找出101后面的7个素数放在out.dat中。[=1in.dat101717532153245567669947815226663(5)打开out.dat。for(m=0;m<n;m++)fprintf(wf,"%d",zz[m]);将m个素数以%小的形式输出,注意%d后面有一个空格,输出的时候要原样输出。根据in.dat中的第一行数据我们可以知道101后面的7个素数为:103107109113127131137,计算的时候多带几个数字进去就行,一般个位出现1,3,5,7,9都很难被其它的数字整除。[=1out.dat*103107109113127131137[=1out.dat*10310710911312713113710310710911312713113719232931373313373473493533741434759616771737979838997101103101103107109787797809811821232931374143677173[=1out.dat第十一种类型:数学问题三,公式类型考题中对应题目编号:6、11、14、34、48、49、67、73、76、89、91,该类型题目如果使用特殊方法做题,将不变的复杂,因此该类型题目只能使用编程的方法来执行。考题6和73题一样,题目要求:根据公式求pi的值,要求精度满足0.0005,即某项小于0・0005时停止迭代1X21X2X33X53X5X71X2X3X43X5X7X91X2X--Xn3X5X--x1X21X2X33X53X5X71X2X3X43X5X7X91X2X--Xn3X5X--x(2口+1)观察表达式,左边求出的是pi的值的一半,所以右边的表达式的值的计算好后应该乘以2才能得到pi的值,观察表达式的右边,右边表达式中有分子、分母以及各表达式的值的和,分子是阶乘、分母是奇数项的积,分子除以分母得到一项的值。由此定义三个变量:si代表分子,s2代表分母、s3代表各项的和,定义一个整型变量i,让变量i从1开始。知道循环的结束。(1)将下面的代码写入fun函数体中

doubleFun(doubleeps)inti;doubles1=1.8,s2=1.0,53=0.0;For(i=1;s1/s2>=eps;i++)s3+=s1/s2;s1*=i;s2*=(2*i+1);return2*s3:(2)编译,执行函数◎圍矗•「竺_3)执行过程时输入测试数据0.0005,最后输出PI的值为3.14„..为正确的结果,交卷即可Q"Ci\Exdm\24010001\Debug\progl.exe"nC:\Exam\24010001\Debug\progl.exe"Inputeps:注意:此题目中要特别注意,循环语句的表leps=0.000500,PI=3.140578夕曲側;友nC:\Exam\24010001\Debug\progl.exe"Inputeps:注意:此题目中要特别注意,循环语句的表leps=0.000500,PI=3.140578夕曲側;友q岸:卯科号11号\i<=n,循环语句的语句的顺寻不能颠倒,即先加之后再计算。考题11,题目要求:求出能整除形参x且不是偶数的各个整数,并从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。此题中要求能整除X,那么x应该为分子,而不是分母,把满足条件的数组放到pp所指的数组中,即pp数组应用一个整型的变量来做pp下标,数组下标从0开始,所以定义一个整形变量k并且赋初值为0;满足条件的个数通过形参传回。(1)在fun函数中输入代码:uoidFun(intx,intpp[],int*n)inti,k=0;For(i=1;i<=x;i++)€ if(x^i==0&&i^2==1)*pp[k++]=i;*n=k;(2)'编译运行程序,输入测试数据35,输出1,5,7,35就说明正确,交卷即可"Ci\Exdm\24010001\Debug\progl.exe""Ci\Exdin\24010001\Debug\progl.exe""Ci\Exdm\24010001\Debug\progl.exe""Ci\Exdin\24010001\Debug\progl.exe"PleaseenteranintegernumberPleaseenteranintegernumber35PleaseenteranintegernumberPleaseenteranintegernumber3515735PressanykeytocontinueH备注:此题目中不能把备注:此题目中不能把i初值定义为0,否则程序运行时得不到结果。考题14:求小于形参n能同时被3和7同时整除的所有自然数之和的平方根。67题和14题类似。首先看清题意,题目中要求是小于形参n,不包括n,能被3与7整除,两者用逻辑与连接,平方根用平方根的函数sqrt;此题中要求的是自然数的和的平方根,而不是平方根的和,所以要先把满足条件的数加起来后再开方。定义一个整型变量i,让该变量由1直到n-1,用循环实现,一个整形变量S,让该变量存放的是满足条件的数的和,由于s为全局变量,故应该赋初值为0;inti,s=0;for(i=1;i<n;i++)if(i%3==0&&i%7==0)s+=i;returnsqrt(s);34、观察表达式,表达式的分子为x的n次冥,分母为数字的阶乘,s为表达式的累加和,定义三个变量s1为分子,s2为分母,s为分子除以分母的和。floats1=1.0,s2=1.0,s=1.0;inti;for(i=1;i<=n;i++){s1*=x;s2*=i;s+=s1/s2;}returns;备注:此时s的值不能赋初值为0;如果s得初值为0,此时表达式的值中没有第一项的值。并且必须用return返回。48、该表达式的分子均为1,分母为该项和下一项的积,s为最后表达式的累加和,定义一个整形变量I,用于代表某一项的序号,则i+1到表达的是下一项的序号。floats=0.0;inti;for(i=1;i<=n;i++)s+=1.0/(i*(i+1));returns;备注:分子为1.0,而不能是1;因为c语言中规定,整型除以整型,得到的值仍然为整型,。i+1必须用括号括起来,如果没有用括号括起来,根据乘法运算规则,则先运算i*i,再运算i*i+1的值。49、在该表达式中,分子分母都是阶乘,可以看做是三个数之间的运算,其中的每一个数都是另外一个数的阶乘,定义三个变量,其中si代表的是m的阶乘,s2代表的n的阶乘,s3代表的是m-n的阶乘,表达式的值可以计算为:s1/(s2*s3);三个变量都是代表的是阶乘,所以在赋初值时应该赋初值为1或者是1.0;floats1=1.0,s2=1.0,s3=1.0;inti;for(i=1;i<=m;i++) s1*=i;for(i=1;i<=n;i++) s2*=i;for(i=1;i<=m-n;i++) s3*=i;returns1/(s2*s3);67、题目要求:求出1到1000之间能被7或11整除,但不能同时被7和11整除的所有的整数。分析题目可以知道求出1到1000之间的数字必须使用循环,起始值为1,终止值为1000,否则太复杂,不能同时被7和11整除即时不能被7和11的乘积77整除,最后通过n返回满足条件的个数。程序如下,经过编译执行后得到的结果如下:uoidFun(int*a,int*n)inti,cnt=0;For(i=1;i<1O00;i++)if((iV==0||i^11==0)fe&iV7?=0)

a[cnt]=i;cnt++;*n=cnt;?111421222833354249555663667084889199105110112119121126132133143147161165168175176182187196198203209210217220224238245252253259264266273275280287294297301315319322329330341343350352357363364371374392396399406407413418420427434440441448451455469473476484490495497504506511517518528532546550553560561567572581583588594595602605609623630637638644649651658660665672679682686700704707714715726?28735737742748749?5675977778178479179279880380S812819825826833836840854858861869875880882889891896902903913917931935938945946952957966968973979980987990994Press"D:\kOl\24OlOOOl\Debug\pr0gl.exe"编写函数Hit,它的功能是:求Fibonacci数列中大于t的摄小的一个数,结果由函数返回口苴中Fibonacci数列Fg〕的定义対:F(O)=OfF(l)=l9. 76、分析题目知道F(0)和F(1)是两个初始值为0和1,假设F(0)为变量a,F(1)为变量1,假设F(n)为c,则:a=0,b=1;F(3)=F(2)+F(1)即:F(3)=b+a=1 即:c=b+aF(4)=F(3)+F(2)即:F⑷二(b+a)+b=2即:c=(b+a)+b换种形式:c=b+a,即b的值应该为上一步中c的值,a应该为上一步中b的值,依次类推即可使用循环来实现结果。使用C语言编程时,必须给

温馨提示

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

评论

0/150

提交评论