关闭

关闭

关闭

封号提示

内容

首页 上机解题技巧.doc

上机解题技巧.doc

上机解题技巧.doc

上传者: 莫爱 2011-10-19 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《上机解题技巧doc》,可适用于考试题库领域,主题内容包含一、填空题(一)链表类型题目包括:、、、、、、、、、技巧解析:、首先看清楚题目要求和意思。看清楚链表有没有带头结点如果带有头结点指向数据源的指针内容符等。

一、填空题(一)链表类型题目包括:、、、、、、、、、技巧解析:、首先看清楚题目要求和意思。看清楚链表有没有带头结点如果带有头结点指向数据源的指针内容是p=h>next如果是不带有头结点则填写的是p=h、如果所要填写的空在循环语句while的括号中的时候里面的内容填写的是p或者是q,以最近出现的为主如果是在循环语句的里面的时候填写的是q=p>next、如果是排序的时候从小到大的时候是大于号从大到小的时候是小于号。、如果链表题目中考到调用函数一般只需要填入实参head,例如:fun(head)在构造链表的时候都会有头结点一般用head来表示head指向了链表中的第一个数据的地址。细化分类:​ 将数据域中的数据进行排序类似题目:、voidfun(NODE*h){NODE*p,*qintt**********found**********p=指向数据源由于h是带头结点的链表因此需要填入h>nextwhile(p){判断链表p是否已经到末尾**********found**********q=比较两个数的大小因此需要q指向p中的下一个数据需要填入p>next也就是说p指向了第一个数据q指向了第二个数据。while(q){判断q是否指向了末尾**********found**********if(p>dataq>data)从小到大排序因此填入大于符号{t=p>datap>data=q>dataq>data=t}交换数据q=q>nextq自增目的是比较出最小的数据}p=p>nextp自增}}联想记忆分析:对一维数组进行从小到大排序voidfun(intbN){inti,j,afor(i=i<Ni)for(j=ij<Nj){if(bi>bj){a=bibi=bjbj=a}}}联想记忆分析:对结构体数组按照姓名进行从小到大排序for(i=i<Ni)for(j=ij<Nj){if(strcmp(ainame,ajname)>){a=bibi=bjbj=a}​ 将数据域中的元素逆置类似的题目:、链表中数据域中的元素逆置首先将第一个数据取出来放在最后一个位置也就是将其next置空表示已经到了末尾。接着将第二个数据放到第一个的前面依次类推即可将整个数据域逆置。voidfun(NODE*h){NODE*p,*q,*r**********found**********p=指向数据源由于h是带头结点的链表因此需要填入h>next**********found**********if()return填入p==,判断第一个数据是否为空如果为空就无需逆置执行return语句结束函数的执行。q=p>nextq指向了p的下一个数据确保链表的完整性p>next=将第一个数据取出来放在最后一个位置也就是将其next置空表示已经到了末尾。while(q){r=q>next用来跟踪数据指向了q的下一个数据q>next=p将第二个数据放到第一个的前面依次类推即可将整个数据域逆置。**********found**********p=qq=这里需要将q指向后面的数据因此可以填入q>next或者是r都可以。}h>next=p}联想记忆分析:数组元素的逆置inta={,,,,,,,,,}inti,j=,bfor(i=i>=i){bj=ai,j}数组的逆置只需从数组长度减一开始往后将元素放在另外一个数组中就行。联想记忆分析:字符串的逆置voidfun(char*str){char*pintlenlen=strlen(str)while(len){*p=strlenlenp}}函数的功能实现了指针p指向了字符串str逆置后的首地址。​ 输出数据释放结点缩短链表类似的题目:​ 给一个递增有序的链表插入一个新结点并保持链表有序。类似的题目:​ 统计结点个数计算结点之和。类似的题目:、​ 删除链表中数据域值相同的节点保留一个。类似的题目:(二)结构体类型的题目:、、、、、、、、、、、、、、对数据进行排序类似的题目:、注意:排序涉及到数据的经典交换所要填写的数据有窍门。例如:t=aa=b需要填空根据交换的“三步曲”很容易确定这个空一定填入b=t。for(i=i<N考点i)for(j=ij<N考点j){if(strcmp(ainame,ajname)>)考点{a=bibi=bjbj=a}考点中要求填入i<N,但是填入i<N也不会出错考试的时候最好填入i<N考点必须填入i<N不能填入i<N考点注意两点一是strcmp(ainame,ajname)比较ai和aj中的name谁大二是“>”的使用大于符号用于从小到大的排序小于符号用于从大到小的排序。将形参a所指的结构体变量中的数据赋值给结构体变量b进行相应的修改类似的题目:、、、、、、、voidfun(structstudenta){structstudentbinti**********found**********b=将形参a中的值赋值给结构体变量b因此填入a进去即可bsno=改变结构体变量b中的sno为**********found**********strcpy(,"LiSi")将“LiSi”赋值给变量b中的name因此填入bnameprintf("nThedataaftermodified:n")printf("nNo:ldName:snScores:",bsno,bname)输出变量b中的学号和姓名**********found**********for(i=i<i)printf("f",b)输出变量b中的成绩因为成绩是一个数组有三个元素因此用循环来控制输出所以填入bscoreiprintf("n")}对比记忆:structstudent考点fun(structstudenta){intia>sno=考点strcpy(a>name,”LiSi”)考点for(i=i<i)a>scarei=考点returna}结构体和文件结合类似的题目:、、、、voidfun(char*filename,longsno){FILE*fpSTUnintifp=fopen(filename考点,"rb")**********found**********while(!考点){fread(n,sizeof(STU),,fp)考点**********found**********if(nsno)break}if(!feof(fp)){for(i=i<i)nscorei=**********found**********fseek(fp,L*,SEEKCUR)考点fwrite(n,sizeof(STU),,fp)考点}fclose(fp)}考点需要注意打开的是哪个文件本题目中指向的是形参filename所指向文件。考点feof(fp)用于判断文件是否结束。考点fread(n,sizeof(STU),,fp)从文件中读取一个数据给变量n。考点fseek(fp,L*,SEEKCUR)将指针移动到当前位置前一位由于指针指向的是结构体因此fseek(fp,L*sizeof(STU),SEEKCUR)考点写入数据fwrite(n,sizeof(STU),,fp)(三)文件类型的题目:、、、、、、、、、文件类型的题目看清楚题目意思定义一个文件的指针第一个位置出现fp的时候要填FILE*、掌握文件中fopen、fprintf、fscanf、fputs、fputc、fgets、fgetc、fseek、fwrite、fread、rewind函数的使用的格式。fopen(“文件名”“打开方式”)fclose(文件指针)fscanf(文件指针格式控制字符串输入列表项)fprintf(文件指针格式控制字符串输出列表项)fwrite(存入数据的指针每一个数据占有的字节输入数据的个数文件指针)fread(读出数据的指针每一个数据占有的字节输出数据的个数文件指针)、文件打开之后要注意关闭文件关闭文件的函数fclose(文件指针)、在循环语句中如果使用到的是while(!feof())空格中填写的文件指针表明判断的是文件指针是否已经指到了文件的末尾。备注:如果文件指针指到了文件的末尾则feof返回的是非零值如果没有指在文件的末尾返回的是值。(四)数组类型的题目:、、、、、、、、、、、、、、、、、、一维数组中存在这样一些类型:、求一个数值数组中的所有值的平均值和把大于或者小于平均值的数辅导例外一个数组中。在计算机平均值时首先定义一个变量来存放平均分平均分一般用av变量来代替如果av已经定义但是没有赋初值那么这个空填写的内容的为:av=、求算平均值值时有两种方法第一种是算出总的分数最后再除以总的个数即可如算到之间的数的平均值首先算出到的和其次用综合除以总的个数即可以得到平均值第二种方法是用每一个数除以再把所有的和加起来。即所以在执行的一维数组中算平均值时也是存在来中情况如果在for语句的后面有av=avN则第二个空一般的填写时av=si如果说没有av=avN则填写的是:av=siN、在后面的一个空的填写的时候要注意变量的使用情况如果变量使用了j和i,那么这一个空的填写的内容为:j、如果一维数组中求的是把大于或者是小于平均值的数移动到数组的首部的时候这种题目的解答时这样的第一个空一般填写的内容为:j第二个空填写的内容是、对数组进行排序时:如果是从大到小的排序的时候用的是小于符号如果是从小到大排序时使用的是大于符号。二维数组中的题目类型以及解决的技巧:、二维数组的题目填空的时候一般是填在函数调用函数在调用时候写的应该是而为数组的名字在定义函数的时候使用的是函数的类型和由m各元素组成一行的指针变量假设二维数组的名字是ss,那么填写的内容是:(*ss)M如果调用的是普通变量则填写的内容为:intn、二维数组遍历时使用的是两个循环使用的是循环的嵌套使用第二个循环的使用的时候填写的内容为:j=(特殊的特殊处理)、交换两个变量的值的使用的格式为:t=aa=bb=t记住交换变量的格式和顺序。、如果二维数组是字符串的题目的时候要记住字符串中函数的使用的格式即:strlen、strcmp、strcpy、sizeof、strcat的使用格式。注意里面的格式中使用的都是和指针。、特殊的特殊处理。第题的填空的内容记住。(五)字符串类型的题目:、、、、、、、、、、、、、、、、、、、、、、、、、解题方法:、循环的条件是判断该字符是否和结束符(’’)相等如果相等说明该字符串结束否则说明没有结束继续循环。、把一个数字字符转变成对应的数值的格式是:ch=ch‘’把大写字母转变为小写字母的格式:ch=ch把小写字母转变为大写字母的格式为:ch=ch、区分好字符数组中的指针(p)和指针所指的值(*p)的关系。在循环语句中当指针往后走一个位置的时候用的是指针的自加而不是指针所指的值的自加。即:p不能是(*p)后者就是值的自加。、掌握字符数组中的函数的使用的格式。即:strlen、strcmp、strcpy、sizeof、strcat的使用格式。注意里面的格式中使用的都是指针或是地址。、字符数组结束时都有一个结束符:‘’在字符数组中的题目中的结束后要加上一个结束符。也可以用来代替‘’。、如果考察的是字符串数组注意函数定义中形参的定义例如:定义的是N行M列的二维数组来存放字符串。那么voidfun(char(*ss),intk)fun函数中的形参必须填入的是char(*ss)M不能是char(*ss)N考试的时候要特别注意。(六)数学题目:、、、、、、、、、、、、解题方法: 如果在函数中定义变量但是没有定义成静态存储变量即变量前面没有static应给变量赋初值如果以后用到的是加减运算则赋初值为或者是如果以后用到的是乘除运算则赋初值为或者是 循环条件的填空分析表达式的规律看表达式中的最后一项的值是否到了第m项或者是第n项如果到了第m或者第n项则在循环中的第二个表达式中用到的是i<=m或者是i<=n 循环条件中如果用的是while语句则循环变量的初值应该在while的外面定义和赋初值在循环语句中必须给变量自加或者是自减。如果没有则一般填的是i 看表达式中的每一项的运算规则按照运算的规则把每一项中的n值替换为i,特殊情况例外。如果是表达式中用到的是间隔相加减的运算时注意给中间变量赋初值为或者是在后面的运算中给变量乘以一个以改变中间变量的符号。解题分析:()​ 看清题目中要求的题意题目要求做什么就只需考虑什么。()​ 找出题目中的表达式:当n=时表达式变为当n=时表达式为n不断的变化得到的表达式值也不相同题目中要求将n=,n=…n=n的值进行一个累加最后得到一个结果赋值给变量s。()​ 通过以上的分析我们可以得到如下的信息:)​ 需要一个变量来存储结果值。对应到程序中我们使用s来表示因为计算的结果可能为小数因此将s定义为实型。)​ 需要一个变量从开始递增到n对应到程序中用i表示。)​ 需要用到循环的知识。)​ 函数最后会将s的值进行返回。doublefun(intn){intidoubles,t**********found**********s=需要给s赋初始值一般赋值为或是这里面有规律在填空题中一定填入的是。**********found**********for(i=i<=i)需要填入的是i变量的初始值和结束值结束值一般是通过实参传递给形参的因此很多时候填入形参名即可。{t=*i将*i的值赋值给变量t因此遇到直接用t*t代替就行。**********found**********s=s(*i)*(*i)需要在(*i)*(*i)中填入适当的值来补充完整表达式比较得知(*i)*(*i)缺少的是部分上面分析过可以用t*t来代替因此第三个填入t*t就行!}returns}二改错题分类总结改错题总的出错分为两大类:语法出错和逻辑出错此类题目是比较简单的题型因此也是最容易把握的知识点。注意:错误都是出现在**********found**********下面的这一行。只是下面的这一行其他行都没有错误。不能修改其他行。做题方法:首先拿到题目先将题目详细看看看清题目对做题时很有帮助的特别是一些逻辑性较强的题目很有用。有的同学可能会觉得题目太难了不想去读其实在做改错题目时即便你不会也能把题目做对。.按照以下的步骤解决题目中的错误的内容对应着修改。修改完之后保存即可。一语法错误关键字出错:在二级C语言考试中仅仅考查学生对基本的关键字掌握情况比如:整型就是int不是Int知识点简单。()题第二个空:If应该改为if()题第二个空:If应该改为if()题第一空:dounle应该改为double()题第二空:If应该改为if()题第二空:Double应该改为double。题的第一空double()题第二空:wihle应该改为while。()return为小写不能使大写的。、格式出错:在考试中主要考查学生细心的程度最喜欢考简单的知识点。()少分号:题第一空、题第一空、题第一空、题第二空、题第二空、题第二空。考查的知识点:分号是语句结束的标志。、、、、()for语句的格式:for()中间用分号隔开不是用逗号隔开。题第二空、题第一空、题第二空都是出现了for语句格式出错的问题。、()if语句的格式:if(表达式)if后面必须加上小括号。题第一空if后面必须加上小括号。()命令行格式出错:题第一空中include命令少了#正确的形式应该是#include“stdioh”()常用函数格式:A题第一空中n=strlenaa应该改为n=strlen(aa)记住函数名后面一定是花括号不能是方括号方括号只有在数组下标中用到。B题第一空intj,c,floatxa=应该改为intj,cfloatxa=记住:要同时定义两种以上不同的数据类型的时候必须在不同类型的数据中间加上分号。C题第二空scanf(“d”,aij)应该改为scanf(“d”,aij)。考查Scanf输入函数的格式。()数组:所有老师讲到数组时候必须统一将此知识点给学生回顾一遍!A数组下标引用时候只能用反括号。题第二空t(k)=b(j)应该改为tk=bj。B二维数组中的列下标不能省略。题第一空必须将数组列下标补充完整。()常用符号出错:AC语言中大于等于符号是“>=”但是在考试的时候可能出现将它写为“=>”,题第二空就是这样的错误。B当题目中需要比较某个字符是否是大写字母或是小写字母、数字时必须将“与”、“或”、“非”记住。判断某个字符是否是大写字母:charchif(ch>=’A’ch<=’Z’)printf(“c”,ch)判断某个字符是否是小写字母:charchif(ch>=’a’ch<=’z’)printf(“c”,ch)判断某个字符是否是数字:charchif(ch>=’’ch<=’’)printf(“c”,ch)判断某个数字是否能同时被和整除:inti=if(i==i==)printf(“d”,i)判断某个数字是否能被或整除:inti=if(i==||i==)printf(“d”,i)判断某个数字是否是偶数或奇数:inti=if(i==)printf(“d是一个偶数”,i)elseprintf(“d是一个奇数”,i)二逻辑错误使用了没有定义过的变量:这种题目可以通过编译查找出出错的地方并改之。()(零)和o(字母欧)的区别:题第一空、题第二空、题第二空、题第二空。、、()P(大)和p(小)的区别:题第一空。()普通变量大小写的区别:A有的变量在定义的时候是小写但是在使用的时候是大写或是在定义的时候是大写在使用的时候却是小写。B大小写没有出错程序中直接使用了没有定义过的变量要求学生更加细心的读题目。题第二空使用到了i这个变量但是我们在定义行中没有找到i的定义因此在做题时候要上下结合来分析题目。题第二空c=aaj中的c没有定义过参看定义的语句不能发现应该是ch=aaj。题第一空要求将后面用到的变量s定义完整。运算符号出错:()C语言中除号是“”不是“”()赋值号(=)和等号(==)混淆记住在if语句中出现赋值号(=)一般是讲它改为等号(==)。题第一空和题第二空都是这样的错误。、、表达式的取值范围出错:当遇到计算表达式的累加或是累减时一定用到循环来完成相应的操作。例如:改错题第七题中要求计算t=**…m*m这个表达式在这个题目中第一空有这样的for语句:for(i=i<mi)y=(i*i)从题目中不难发现i是一个变量它的取值范围从整数开始到m结束最终计算的结果为y=**…(m)*(m)和题目要求的不符因此将i<m改为i<=m。做这样的题目看两点:一看题目中的表达式二看for语句中变量的取值范围。题第二空同样的考点。、、、C语言中的除法运算:这个考点同样考查表达式的相关知识。例如:改错题第七题中要求计算t=**…m*m这个表达式在这个题目中第一空有这样的for语句:for(i=i<mi)y=(i*i)刚才我们将了表达式的范围现在我们考虑y=(i*i)是否正确?赋值号左边问题不大我们看看右边(i*i)其中i是整数那么i*i也是整数在C语言中除以比它大的数时值为零。这样和题目的要求就不相符。记住:的值为零只有或是的值为。题第一空也同样是这种错误。、找最大值和排序问题:遇到这种题目在改错题中最容易考查的是大于(>)、小于(<)等符号的变化当你查找出错的地方没有语法错误也没有使用了未定义的变量时记住这个口诀:将大于改为小于将小于改为大于!题第二空、题第一空和题第二空、题第二空都可以用这样的方法。函数的返回值及其参数:重点intfun(intx,inty)main(){{if(x>y)returnxinta,b,celsereturnyscanf(“dd”,a,b)}c=fun(a,b)printf(“最大值为:d”,c)}()​ 函数的返回类型:在上面的例子中fun函数的返回值是int如果将int改为double很明显是错误的。从两个地方来看首先returnx中x的类型必须和fun函数中的返回值相同x是整型。其次c=fun(a,b)中fun函数将一个返回值赋值给了变量C说明函数返回的值一定是整型。记住:函数调用、函数的返回值和ruturn中数据类型必须一致!、、、、、、、、都死这样的错误(注表示第一题第一空)。、、、()​ return后面的表达式及其类型:、、()​ 函数传递的参数:intfun(int*x,int*y)main(){{if(*x>*y)return*xinta,b,celsereturn*yscanf(“dd”,a,b)}c=fun(a,b)printf(“最大值为:d”,c)}一定注意:传递的是值还是地址。比较上面两个例子大家很容易区别传递的是值还是地址第一个例子调用函数的时候传递的是值因此在fun函数的形参中x和y仅仅是普通的变量而第二个例子中调用函数的时候传递的是地址因此在fun函数的形参中x和y就是两个指针变量。、、、、、、、、、依据刚刚讲的方法很快就能找出出错点。()指针的使用:intfun(int*x,int*y){if(*x>*y)return*xelsereturn*y}在此例中fun函数的形参是x和y它们的类型是整型的指针那么在fun函数的函数体中使用到x和y的值时一定要区分:x>y比较的是x和y所存变量地址的大小*x>*y才是比较值的大小。如果存在*x=xy的类似情况一定是错误的必须要将赋值号的左右两边的类型变为一致。、、、、、、、、一定特别注意!数组:()数组下标的初始值:数组下标从零开始到长度减一结束。考试技巧:当出错行在定义部分时先检查该定义语句有没有语法错误再看定义语句中的变量有没有赋初始值最后看变量赋的初始值有没有正确。定义初始值有窍门遇到累加时用来存放累加和的变量一般赋值为零遇到求阶乘时用来存放阶乘值的变量一般赋值为一。中的变量k赋值为但是我们说了数组的下标只能从开始因此将改为就行了。()普通变量的初始值:依照上面的技巧我们同样可以将它延伸到普通变量中。中需要将变量的值进行初始化题目中有这样的要求:“输出主对角线元素之和”既然这样我们很肯定初始值应该为零接着我们看看是给哪个变量赋值?看printf(“sum=d”,sum)输出的是sum的值说明sum就是我们要补充在横线上的变量。也可以用同样的方法来分析。()数组和字符串长度减一:当使用数组中的元素时最大值只能到数组长度减一。字符串以’’作为字符串的结束标志因此取值最大也只能到字符串长度减一。中输出printf(“d”,aai)分析程序知道i在此时就是数组的长度我们要输出数组中的元素最大就只能到aai因此改为printf(“d”,aai)就行了。和中考查的是字符串长度减一的问题。()数组下标往后走:当题目要求将一个数组中的元素直接赋值或是以某种方式复制到另一个数组中时接受数据的数组中的下标要自增。中sj=si将si中的值复制给sj联系上下函数段发现i是一个变量被for语句控制从开始直到遇到’’结束。i一直在加但是j没有变化,因此改为sj=si即可。类似的题目有:、、、。.特例:部分题目的解答很特殊需要根据上下文中的内容来解答题目例如在此题目中定义了变量t=根据下面程序中的循环s=首先加的是变量t的值即s的值是从开始的s得到的值是:s=……,观察表达式的值这个少加了第一项的值所以变量t的初值不能是只能是或者是中的这个题目中表达式的值是从……即表达式的规律是从第一项开始以后的每一项的分子是前一项的分子和分母的和分母为前一项的分子。所以该题目的第二个空中的内容应该是:c=aa=bb=c这一条语句中a代表的变量的分子b代表的是变量的分母执行第一个表达式的值把a的值赋值给变量c第二个表达式是把分子和分母的和相加复制给变量a,第三个表达式是把原来a的值和变量b的值相加之后得到的值赋值给变量b,则变量b得到的值也为分子分母的和不满足题意而分母应该为原来分子的值。第三表达式的值应该改为:b=c类似的题目有:、、、、素数、、掌握求素数的格式:判断一个数是否是素数的方法很多的是只用掌握一种即可首先掌握判断一个素数的方法素数的定义:、是自然数、只能被和本身整除到本身减一之间的数不能整除该数。判断m是否为素数的格式:for(i=i<mi)if(mi==)breakif(m==i)表明m是素数素数只能被和m那么用到m之间的数除m,如果有一个数能整除m,说明m不是一个素数就不用再判断后面的数值了用一条break语句提前结束函数如果一直都不能整除则说明m是一个素数。那么用循环语句表示到m之间的数的语句为:for(i=i<mi)如果在这个范围内的数值有一个数值能整除m说明m不是一个素数则可以提前结束循环break那么结束之后这个循环中的变量I的值小于m,如果m是一个素数的时候则一直都不执行break语句则循环语句结束的时候是在i==m的时候退出循环。结束循环以后进行i和m的比较如果i小于m则表明m不是一个素数如果i等于m则表明m是一个素数。求素数的题目只要把格式给带进去就可以了。这个题目中只用改为“==”。题也是一样的解答方法。、链表、链表的题目分为带头结点的和不带头结点的链表、​ 带头结点的链表带头结点的链表的第一个空的改为:p=h>next第二个空改为:p=p>next、​ 不带头结点的链表带头结点的链表的第一个空的改为:p=h第二个空改为:p=p>next三、上机编程题目的总结编程题目分类:(一)、数学题目:、、、、、、、、、、、、编程的题目中如果是数学题目编程时用到阶乘或者是奇数项的积则首先给变量赋初值为不能赋初值为同时把变量的类型定义为实型而不是整型。数学题目中结果都需要返回如果说函数的类型是void则是通过指针返回如果不是void则必须用return返回。如果是表达式中的值为则在编写程序时用去而不能用。C语言中的除法的运算原则是整数除以整数结果还是整数。数组中存储数据时以下标来存储的在数组中下标从开始。解题详解:、观察表达式左边求出的是p的值的一半所以右边的表达式的值的计算好后应该乘以才能得到p的值观察表达式的右边右边表达式中有分子、分母以及各表达式的值的和分子是阶乘、分母是奇数项的积分子除以分母得到一项的值。由此定义三个变量:s代表分子s代表分母、s代表各项的和定义一个整型变量i让变量i从开始。知道循环的结束。intidoubles=,s=,s=for(i=ss>=epsi){s=sss*=is*=(*i)}return*s注意:此题目中要特别注意循环语句的表达式的判断条件是ss>=eps而不是i<=n,循环语句的语句的顺寻不能颠倒即先加之后再计算。、此题中要求能正处x那么x应该为分子而不是分母把满足条件的数组放到pp所指的数组中即pp数组应用一个整型的变量来做pp下标数组下标从开始所以定义一个整形变量k并且赋初值为满足条件的个数通过形参传回。inti,k=for(i=i<=xi)if(xi==i==)ppk=i*n=k备注:此题目中不能把i初值定义为否则程序运行时得不到结果。、首先看清题意题目中要求是小于形参n不包括n,能被与整除两者用逻辑与连接平方根用平方根的函数sqrt此题中要求的是自然数的和的平方根而不是平方根的和所以要先把满足条件的数加起来后再开方。定义一个整型变量i让该变量由直到n,用循环实现一个整形变量s让该变量存放的是满足条件的数的和由于s为全局变量故应该赋初值为inti,s=for(i=i<ni)if(i==i==)s=ireturnsqrt(s)、观察表达式表达式的分子为x的n次冥分母为数字的阶乘s为表达式的累加和定义三个变量s为分子s为分母s为分子除以分母的和。floats=,s=,s=intifor(i=i<=ni){s*=xs*=is=ss}returns备注:此时s的值不能赋初值为如果s得初值为此时表达式的值中没有第一项的值。并且必须用return返回。、该表达式的分子均为分母为该项和下一项的积s为最后表达式的累加和定义一个整形变量I,用于代表某一项的序号则i到表达的是下一项的序号。floats=intifor(i=i<=ni)s=(i*(i))returns备注:分子为而不能是因为c语言中规定整型除以整型得到的值仍然为整型。i必须用括号括起来如果没有用括号括起来根据乘法运算规则则先运算i*i,再运算i*i的值。、在该表达式中分子分母都是阶乘可以看做是三个数之间的运算其中的每一个数都是另外一个数的阶乘定义三个变量其中s代表的是m的阶乘s代表的n的阶乘s代表的是mn的阶乘表达式的值可以计算为:s(s*s)三个变量都是代表的是阶乘所以在赋初值时应该赋初值为或者是floats=,s=,s=intifor(i=i<=mi)s*=ifor(i=i<=ni)s*=ifor(i=i<=mni)s*=ireturns(s*s)(二)、把满足条件的数放到数组中、、、、、在做该类题目时看清题目的要求根基题目的要求解题若只是把满足条件的删除或者是保留则该类题目首先要定义一个整型变量并且赋初值根据题目意思把满足条件的存放到数组中数组的下标同时加一往后走一个位置如果是字符串类型的题目在最后还要加上字符串的结束符’’如果是把字母的大小写进行改变则根据原则:小写改大写减大写改小写加只要涉及到数组的题目都要定义一个整型变量i访问数组中的元素在循环语句中如果是字符串时循环的条件是判断字符是否是结束符而不是i<=n判断一个字母是否是大写字母ssi>=’A’ssi<=’Z’判断是否是小写字母ssi>=’a’ssi<=’z’。判断一个字符是数字字符ssi>=’’ssi<=’’、定义一个整型变量i来访问字符数组中的元素。把小写字母改写成大写字母只用把小字母的ASCII值减去即可。intifor(i=ssi!=’’i)if(i==ssi>=’a’ssi<=’z’)ssi=代码中:i代表的是访问数组下标的变量。循环的条件是ssi!=’’,这事字符串是否结束的判断条件。从第一个字符开始一直到遇到结束符为止。当取出一个字符后对该字符进行判断如果该字符满足条件的时候执行ssi=语句即将小写字母改变成大写字母。、先定义一个整型变量k,并且赋初值作为数组的下标一个整型变量i用来访问数组中的元素的下标inti,k=for(i=si!=’’i)if(!(i==si==))tk=sitk=’’备注:if条件中的内容是先将删除的写出来再前面加上一个!用来否定则剩下的就是要保留的内容。把满足条件的存放到数组t中t也是一个字符数组所以要够吃呢个字符串必须在后面赋值结束符。(三)、素数、、判断一个数是否是素数的方法很多的是只用掌握一种即可首先掌握判断一个素数的方法素数的定义:、是自然数、只能被和本身整除到本身减一之间的数不能整除该数。判断m是否为素数的格式:for(i=i<mi)if(mi==)breakif(m==i)表明m是素数素数只能被和m那么用到m之间的数除m,如果有一个数能整除m,说明m不是一个素数就不用再判断后面的数值了用一条break语句提前结束函数如果一直都不能整除则说明m是一个素数。那么用循环语句表示到m之间的数的语句为:for(i=i<mi)如果在这个范围内的数值有一个数值能整除m说明m不是一个素数则可以提前结束循环break那么结束之后这个循环中的变量I的值小于m,如果m是一个素数的时候则一直都不执行break语句则循环语句结束的时候是在i==m的时候退出循环。结束循环以后进行i和m的比较如果i小于m则表明m不是一个素数如果i等于m则表明m是一个素数。、把素数存放到数组中先定义一个整型变量k,并且赋值为小于或者等于lim的条件为:for(m=m<=limm)所以代码为:intm,k=,ifor(m=m<=limm){for(i=i<mi)if(mi==)breakif(m==i)aak=m}returnk、大于m的整数m就大于m,,找k个素数那么循环的条件找到k个为止用j代表找到素数的个数则程序的代码:inti,j=for(m=mj<=km){for(i=i<mi)if(mi==)breakif(m==i)xxj=m}(四)、字符串题目的解答方法:、、、、、、、、、、、、、、、、、、、、、该类题目的解答方法是用简便方法。具体步骤如下:以第题为例。、单击上面的答题按钮。、启动好了visualc、单击“文件”菜单下面的“打开”、找到“progc”,双击打开:、不编写任何程序代码直接编译程序编译程序时、编译好程序之后直接连接程序:、运行程序出现运行窗口运行程序以后输入如果说窗口中没有出现“pressanykeytocontinue”的文字提示时随便键入就可以了之后按回车键结束。出现上面的窗口再按回车键结束。、单击“文件”中的“打开”、找到“outdat”这一个文件双击打开“outdat”文件将每一行中的内容根据题意进行修改。即将每一行中的星号除了开始的外其余的全部删除。得到的结果为:、单击“文件”菜单中的“保存”、单击“文件”菜单下的“退出”回到了开始的界面就可以交卷了。星号的其他题目也是一样的做法。(五)、结构题类型、、、、、、、、、、、、所有的结构题的类型的题目中都可以用简便方法进行解答结构体的解答时要主要看程序中是否有nono()函数如果有要以该函数为准如果没有该函数则以main()函数为主。以第题为例:观察程序代码中的内容:首先该程序代码中没有nono()函数那么就以main()函数为主。根据题意观察主函数中的内容主要看主函数中的数据也就是结构体中的数据。sN={{"GA",},{"GA",},{"GA",},{"GA",},{"GA",},{"GA",},{"GA",},{"GA",},{"GA",},{"GA",},{"GA",},{"GA",},{"GA",},{"GA",},{"GA",},{"GA",}}找到主函数中的fprintf函数的内容:求的就是到范围内的数据满足的个数以及写到outdat文件中。只用数就可以了。有个观察代码中的这些代码记住这是排序的格式如果是小于号那么说明是降序排列如果是大于号是升序排序。此题中是升序。观察后米的代码的内容都是找到fprintf函数的内容:该函数的把排序后的内容写到outdat文件中。还要注意的是d的功能这是按照格式写到文件中只是这个是后输入的数据占有个宽度并且是右对齐。最后写到outdat文件中的内容应该是:保存程序后退出程序即可。(六)、数值平移、、、数值平移的题目可以用简便方法解决其步骤和上面所写的一样只是在打开“outdat”文件之后的操作有所不同具体的为:以题为例:打开了“outdat”文件之后打开的是“indat”文件。在“indat”这个文件中前面的数字代表的是平移的个数。根据题目要求是把前面的字符平移到最后在“outdat”文件中进行修改最后的结果为:单击“文件”菜单下面的“保存”单击“文件”菜单下的“退出”。(七)、找出数组中的最大值或者最大值所在的下标、、、、、该类型题目可以用简便方法解决解决此类题目时首先要找到源程序中的以下内容、找到nono()函数如果没有nono()函数则找到主函数。、找到fprintf函数。、打开“indat”文件和“outdat”文件。、进行相应的修改之后保存和退出。以题为例。首先找到nono()函数再找到fprintf函数打开“indat”文件根据“indat”文件中的内容进行选择。以第一行为例最大的是所在的下表是所以在“outdat”文件中的内容根据fprintf函数的格式应该先把下标写到文件中再把数值写到文件中。所以“outdat”文件中的内容为:要特别注意fprintf函数的格式:其中的两个d之间是用逗号隔开所以在把满足条件的数值存放到文件中时应该必须用逗号将两河数值隔开并且先把满足条件的数的下标写到文件中再把该最大数写到文件中。单击“文件”菜单下面的“保存”单击“文件”菜单下的“退出”。(八)、链表题目、、链表题目很难在解决该类问题的时候可以用简便方法。步骤和上面所写的一样首先要找到源程序中的以下内容、找到nono()函数如果没有nono()函数则找到主函数。、找到fprintf函数。、打开“outdat”文件和“indat”文件。、进行相应的修改之后保存和退出。该题目是把分数最高的学生的分数写到文件中。fprintf(out,"lfn",max)其中最高分在写到文件中时要注意lf写入的数据带有一个小数并且该数字占有个宽度并且为右对齐。打开“indat”文件根据“indat”文件中的内容进行选择。以第一行为例最大的是所以在“outdat”文件中的内容根据fprintf函数的格式应该先把下标写到文件中再把数值写到文件中。所以“outdat”文件中的内容为:单击“文件”菜单下面的“保存”单击“文件”菜单下的“退出”。(九)、判断是否是回文数此题是判断一个字符串是否为回文步骤和上面的一样一直到打开“outdat”文件打开后根据内容进行相应的修改和操作。根据内容修改为:单击“文件”菜单下面的“保存”单击“文件”菜单下的“退出”。(十)、统计单词的个数、此题是判断一个字符串是否为回文步骤和上面的一样一直到打开“outdat”文件和“indat”文件打开后根据内容进行相应的修改和操作。以第一行为例第一行中出项的单词个数为:则把“outdat”文件的内容改为:单击“文件”菜单下面的“保存”单击“文件”菜单下的“退出”。(十一)、二维数组、、、、、、、、、、、做该类题目的时候首先检查一下该源程序中是否有nono()函数如果有则要打开“indat”文件如果没有则只用看主函数中的内容。该类题目可以用简便方法解决。步骤和上面的一样一直到打开“outdat”文件和“indat”文件打开后根据内容进行相应的修改和操作。打开“indat”文件里面的内容为:其中第一行中的代表的是行列那么根据题目要求应该改为:单击“文件”菜单下面的“保存”单击“文件”菜单下的“退出”。(十二)、特例、、、、题在答题时只用在函数中写入的代码为:atol(p)即可题该题目是本册书中的重点本题中要求把满足条件存放到数组中其中岁以上的存放到数组元素d中到之间的存放到d中依次往后推C语言中的除法运算当两个对象的类型都是整型时相除得到的结果为整型()=()=()=()=用一个整型变量i访问数组中的元素。则ai代表的是某一个具体的年龄ai得到的结果为以上的()之间的一个数值。bai相当于bb之间的数组元素。数组b是一个整型数组数组中的元素为动态存储变量元素的值为随机值。所以在判断之前要给数组元素赋初值。inti,k=for(k=k<=k)bk=for(i=i<ni)if(ai>=)belsebai、解决方法:、打开“indat”文件将最长的那一串保留住其余的全部删除。:单击“文件”菜单下面的“另存为”:在文件名中输入outdat:单击“保存”。单击“文件”菜单下面的“保存”单击“文件”菜单下的“退出”。(十三)将两个数字按照要求合并成一个数字:、、、、、、

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +2积分

资料评价:

/37
1下载券 下载 加入VIP, 送下载券

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部