首页 上机解题技巧

上机解题技巧

举报
开通vip

上机解题技巧一、填空题 (一)链表类型题目包括:15、42、43、50、56、75、79、85、86、87 技巧解析: 1、 首先看清楚题目要求和意思。看清楚链表有没有带头结点,如果带有头结点,指向数据源的指针内容是p=h—>next;如果是不带有头结点,则填写的是p=h; 2、 如果所要填写的空在循环语句while的括号中的时候,里面的内容填写的是p或者是q,以最近出现的为主;如果是在循环语句的里面的时候,填写的是q=p—>next; 3、如果是排序的时候,从小到大的时候是大于号,从大到小的时候是小于号。 4、如果链表题目中...

上机解题技巧
一、填空题 (一)链 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 类型题目包括:15、42、43、50、56、75、79、85、86、87 技巧解析: 1、 首先看清楚题目要求和意思。看清楚链表有没有带头结点,如果带有头结点,指向数据源的指针内容是p=h—>next;如果是不带有头结点,则填写的是p=h; 2、 如果所要填写的空在循环语句while的括号中的时候,里面的内容填写的是p或者是q,以最近出现的为主;如果是在循环语句的里面的时候,填写的是q=p—>next; 3、如果是排序的时候,从小到大的时候是大于号,从大到小的时候是小于号。 4、如果链表题目 中考 中考数学全套课件中考心理辅导讲座中考语文病句辨析修改中考语文古诗文必背中考单选题精选 到调用 关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函 数,一般只需要填入实参head,例如:fun(head);在构造链表的时候都会有头结点,一般用head来表示,head指向了链表中的第一个数据的地址。 细化分类: 1.​ 将数据域中的数据进行排序,类似题目:15、42 void fun(NODE *h) { NODE *p, *q; int t; /**********found**********/ p = __1__ ;指向数据源,由于h是带头结点的链表,因此需要填入h->next while (p) {判断链表p是否已经到末尾 /**********found**********/ q = __2__ ; 比较两个数的大小,因此需要q指向p中的下一个数据需要填入p->next,也就是说p指向了第一个数据,q指向了第二个数据。 while (q) {判断q是否指向了末尾 /**********found**********/ if (p->data __3__ q->data)从小到大排序,因此填入大于符号 { t = p->data; p->data = q->data; q->data = t; }交换数据 q = q->next; q自增,目的是比较出最小的数据 } p = p->next; p自增 } } 联想记忆 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 1:对一维数组进行从小到大排序 void fun(int b[N]) { int i, j, a; for(i=0;ib[j]){a=b[i];b[i]=b[j];b[j]=a;} } } 联想记忆分析2:对结构体数组按照姓名进行从小到大排序 for(i=0;i0){a=b[i];b[i]=b[j];b[j]=a;} 2.​ 将数据域中的元素逆置,类似的题目:43、50 链表中数据域中的元素逆置,首先将第一个数据取出来放在最后一个位置,也就是将其next置空,表示已经到了末尾。接着将第二个数据放到第一个的前面,依次类推即可将整个数据域逆置。 void fun(NODE *h) { NODE *p, *q, *r; /**********found**********/ p = __1__;指向数据源,由于h是带头结点的链表,因此需要填入h->next /**********found**********/ if (__2__) return;填入p==NULL,判断第一个数据是否为空,如果为空就无需逆置,执行return语句,结束函数的执行。 q = p->next; q指向了p的下一个数据,确保链表的完整性 p->next = NULL; 将第一个数据取出来放在最后一个位置,也就是将其next置空,表示已经到了末尾。 while (q) { r = q->next; 用来跟踪数据,指向了q的下一个数据 q->next = p; 将第二个数据放到第一个的前面,依次类推即可将整个数据域逆置。 /**********found**********/ p = q; q = __3__;这里需要将q指向后面的数据,因此可以填入q->next,或者是r都可以。 } h->next = p; } 联想记忆分析1:数组元素的逆置 int a[10]={1,2,3,4,5,6,7,8,9,10}; int i,j=0,b[10]; for(i=9;i>=0;i--){b[j]=a[i],j++;} 数组的逆置只需从数组长度减一开始往后将元素放在另外一个数组中就行。 联想记忆分析2:字符串的逆置 void fun(char *str) { char *p; int len; len=strlen(str); while(len) { *p=str[len-1]; len--; p++; } } 函数的功能实现了指针p指向了字符串str逆置后的首地址。 3.​ 输出数据,释放结点,缩短链表,类似的题目:56 4.​ 给一个递增有序的链表插入一个新结点,并保持链表有序。类似的题目:87 5.​ 统计结点个数,计算结点之和。类似的题目:75、85 6.​ 删除链表中数据域值相同的节点,保留一个。类似的题目:79 (二)结构体类型的题目:2、9、16、22、23、30、33、47、51、78、80、82、88、92、97 1.对数据进行排序,类似的题目:2、97 注意:排序涉及到数据的经典交换,所要填写的数据有窍门。例如:t=a; a=b;____需要填空,根据交换的“三步曲”很容易确定这个空一定填入b=t。 for(i=0;i0)考点③ {a=b[i];b[i]=b[j];b[j]=a;} 考点①中要求填入i”的使用,大于符号用于从小到大的排序,小于符号用于从大到小的排序。 2.将形参a所指的结构体变量中的数据赋值给结构体变量b,进行相应的修改,类似的题目:9、16、23、33、51、78、82、92 void fun(struct student a) { struct student b; int i; /**********found**********/ b = __1__;将形参a中的值赋值给结构体变量b,因此填入a进去即可 b.sno = 10002;改变结构体变量b中的sno为10002 /**********found**********/ strcpy(__2__, "LiSi");将“LiSi”赋值给变量b中的name,因此填入b.name printf("\nThe data after modified :\n"); printf("\nNo: %ld Name: %s\nScores: ",b.sno, b.name);输出变量b中的学号和姓名 /**********found**********/ for (i=0; i<3; i++) printf("%6.2f ", b.__3__);输出变量b中的成绩,因为成绩是一个数组有三个元素,因此用循环来控制输出,所以填入b.score[i] printf("\n"); } 对比记忆: struct student考点① fun(struct student a) { int i; a->sno=1002;考点② strcpy(a->name,”LiSi”);考点③ for(i=0;i<3;i++)a->scare[i]+=1;考点④ return a;} 3.结构体和文件结合,类似的题目:22、30、47、80、88 void fun(char *filename, long sno) { FILE *fp; STU n; int i; fp = fopen(filename考点①,"rb+"); /**********found**********/ while (!__1__考点②) { fread(&n, sizeof(STU), 1, fp);考点③ /**********found**********/ if (n.sno__2__) break; } if (!feof(fp)) { for (i=0; i<3; i++) n.score[i] += 3; /**********found**********/ fseek(fp, -1L*__3__, SEEK_CUR);考点④ fwrite(&n, sizeof(STU), 1, fp);考点⑤ } fclose(fp); } 考点1需要注意打开的是哪个文件,本题目中指向的是形参filename所指向文件。 考点2 feof(fp)用于判断文件是否结束。 考点3 fread(&n, sizeof(STU), 1, fp)从文件中读取一个数据给变量n。 考点4 fseek(fp, -1L*__3__, SEEK_CUR);将指针移动到当前位置前一位,由于指针指向的是结构体,因此fseek(fp, -1L*sizeof(STU), SEEK_CUR); 考点5 写入数据fwrite(&n, sizeof(STU), 1, fp); (三)文件类型的题目:22、28、30、32、47、63、80、88、94 1、文件类型的题目,看清楚题目意思,定义一个文件的指针,第一个位置出现fp的时候要填FILE *; 2、掌握文件中fopen、fprintf、fscanf、fputs、fputc、fgets、fgetc、fseek、fwrite、fread、rewind函数的使用的格式。 fopen(“文件名”,“打开方式”); fclose(文件指针); fscanf(文件指针,格式控制字符串,输入列表项); fprintf(文件指针,格式控制字符串,输出列表项); fwrite(存入数据的指针,每一个数据占有的字节,输入数据的个数,文件指针); fread(读出数据的指针,每一个数据占有的字节,输出数据的个数,文件指针); 3、文件打开之后要注意关闭文件,关闭文件的函数fclose(文件指针); 4、在循环语句中如果使用到的是while(!feof( ))空格中填写的文件指针,表明判断的是文件指针是否已经指到了文件的末尾。备注:如果文件指针指到了文件的末尾,则feof返回的是非零值,如果没有指在文件的末尾,返回的是0值。 (四)数组类型的题目:3、4、7、20、24、26、39、40、41、54、57、64、68、70、71、76、89、90、99 一维数组中存在这样一些类型: 1、 求一个数值数组中的所有值的平均值和把大于或者小于平均值的数辅导例外一个数组中。在计算机平均值时,首先定义一个变量来存放平均分,平均分一般用av变量来代替,如果av已经定义但是没有赋初值,那么这个空填写的内容的为:av=0; 2、 求算平均值值时有两种方法,第一种是算出总的分数,最后再除以总的个数即可,如算1到6之间的数的平均值,首先算出1到6的和,其次用综合除以总的个数6,即可以得到平均值;第二种方法是用每一个数除以6再把所有的和加起来。即1/6+2/6+3/6+4/6+5/6+6/6;所以在执行的一维数组中算平均值时也是存在来中情况,如果在for语句的后面有av=av/N;则第二个空一般的填写时av+=s[i];如果说没有av=av/N;则填写的是:av+=s[i]/N; 3、 在后面的一个空的填写的时候要注意变量的使用情况,如果变量使用了j和i,那么这一个空的填写的内容为:j++; 4、 如果一维数组中求的是把大于或者是小于平均值的数移动到数组的首部的时候,这种题目的解答时这样的,第一个空一般填写的内容为:j++;第二个空填写的内容是-1; 5、 对数组进行排序时:如果是从大到小的排序的时候,用的是小于符号,如果是从小到大排序时使用的是大于符号。 二维数组中的题目类型以及解决的技巧: 1、 二维数组的题目,填空的时候一般是填在函数调用,函数在调用时候写的应该是而为数组的名字;在定义函数的时候使用的是函数的类型和由m各元素组成一行的指针变量,假设二维数组的名字是ss,那么填写的内容是:(*ss)[M];如果调用的是普通变量则填写的内容为:int n; 2、 二维数组遍历时,使用的是两个循环,使用的是循环的嵌套使用,第二个循环的使用的时候填写的内容为:j=0;(特殊的特殊处理) 3、 交换两个变量的值的使用的格式为: t=a;a=b;b=t; 记住交换变量的格式和顺序。 4、 如果二维数组是字符串的题目的时候,要记住字符串中函数的使用的格式;即:strlen、strcmp、strcpy、sizeof、strcat的使用格式。注意里面的格式中使用的都是和指针。 5、 特殊的特殊处理。第7题的填空的内容记住。 (五)字符串类型的题目:5、8、10、11、12、14、18、19、21、34、35、45、48、49、53、55、62、65、67、72、74、77、81、91、93、100 解题方法: 1、循环的条件是判断该字符是否和结束符(’\0’)相等,如果相等,说明该字符串结束,否则说明没有结束,继续循环。 2、把一个数字字符转变成对应的数值的格式是:ch=ch-‘0’;把大写字母转变为小写字母的格式:ch=ch+32;把小写字母转变为大写字母的格式为: ch=ch-32; 3、 区分好字符数组中的指针(p)和指针所指的值(*p)的关系。在循环语句中,当指针往后走一个位置的时候,用的是指针的自加,而不是指针所指的值的自加。即:p++,不能是(*p)++,后者就是值的自加。 4、 掌握字符数组中的函数的使用的格式。即:strlen、strcmp、strcpy、sizeof、strcat的使用格式。注意里面的格式中使用的都是指针或是地址。 5、 字符数组结束时都有一个结束符:‘\0’;在字符数组中的题目中的结束后要加上一个结束符。也可以用0来代替‘\0’。 6、如果考察的是字符串数组,注意函数定义中形参的定义,例如:定义的是N行M列的二维数组来存放字符串。那么void fun(char (*ss) __1__, int k) fun函数中的形参必须填入的是char (*ss)[M],不能是char (*ss)[N]考试的时候要特别注意。 (六)数学题目:6、13、25、29、36、46、52、60、66、69、73、83、95 解题方法:  1.如果在函数中定义变量,但是没有定义成静态存储变量,即变量前面没有static,应给变量赋初值,如果以后用到的是加减运算,则赋初值为0或者是0.0;如果以后用到的是乘除运算,则赋初值为1或者是1.0;  2.循环条件的填空,分析表达式的规律,看表达式中的最后一项的值是否到了第m项或者是第n项,如果到了第m或者第n项,则在循环中的第二个表达式中用到的是i<=m或者是i<=n;  3.循环条件中如果用的是while语句,则循环变量的初值应该在while的外面定义和赋初值,在循环语句中必须给变量自加或者是自减。如果没有则一般填的是i++;  4.看表达式中的每一项的运算规则,按照运算的规则把每一项中的n值替换为i,特殊情况例外。如果是表达式中用到的是间隔相加减的运算时,注意给中间变量赋初值为1或者是1.0;在后面的运算中给变量乘以一个-1,以改变中间变量的符号。 解题分析: (1)​ 看清题目中要求的题意,题目要求做什么就只需考虑什么。 (2)​ 找出题目中的表达式: 当n=1时,表达式变为 ,当n=2时,表达式为 ,n不断的变化,得到的表达式值也不相同,题目中要求将n=1,n=2…n=n的值进行一个累加,最后得到一个结果赋值给变量s。 (3)​ 通过以上的分析我们可以得到如下的信息: 1)​ 需要一个变量来存储结果值。对应到程序中,我们使用s来表示,因为 计算的结果可能为小数,因此将s定义为实型。 2)​ 需要一个变量从1开始递增到n,对应到程序中用i表示。 3)​ 需要用到循环的知识。 4)​ 函数最后会将s的值进行返回。 double fun(int n) { int i; double s, t; /**********found**********/ s=__1__;需要给s赋初始值,一般赋值为0或是1,这里面有规律,在填空题中一定填入的是0。 /**********found**********/ for(i=1; i<=__2__; i++)需要填入的是i变量的初始值和结束值,结束值一般是通过实参传递给形参的,因此很多时候填入形参名即可。 { t=2.0*i; 将2*i的值赋值给变量t,因此遇到 直接用t*t代替就行。 /**********found**********/ s=s+(2.0*i-1)*(2.0*i+1)/__3__; 需要在(2.0*i-1)*(2.0*i+1)/__3__;中填入适当的值来补充完整表达式 ,比较得知,(2.0*i-1)*(2.0*i+1)/__3__;缺少的是 部分,上面分析过 可以用t*t来代替,因此,第三个填入t*t就行! } return s; } 二改错题分类总结 改错题总的出错分为两大类:语法出错和逻辑出错,此类题目是比较简单的题型,因此也是最容易把握的知识点。 注意:错误都是出现在/**********found**********/下面的这一行。只是下面的这一行,其他行都没有错误。不能修改其他行。 做题方法: 1.首先拿到题目,先将题目详细看看,看清题目对做题时很有帮助的,特别是一些逻辑性较强的题目很有用。有的同学可能会觉得题目太难了不想去读,其实在做改错题目时即便你不会也能把题目做对。 2.按照以下的步骤解决题目中的错误的内容,对应着修改。修改完之后保存即可。 一 语法错误 1.关键字出错:在二级C语言考试中仅仅考查学生对基本的关键字掌握情况,比如:整型就是int不是Int,知识点简单。 (1)6题第二个空:If应该改为if; (2)12题第二个空:If应该改为if; (3)23题第一空:dounle应该改为double; (4)35题第二空:If应该改为if;90 (5)36题第二空:Double应该改为double。51题的第一空double (6)2题第二空:wihle应该改为while。 (7)return为小写,不能使大写的。54、86 2.格式出错:在考试中主要考查学生细心的程度,最喜欢考简单的知识点。 (1)少分号:2题第一空、28题第一空、29题第一空、34题第二空、37题第二空、48题第二空。考查的知识点:分号是语句结束的标志。59、70、79、97、 (2)for语句的格式:for( ; ; )中间用分号隔开不是用逗号隔开。3题第二空、6题第一空、14题第二空都是出现了for语句格式出错的问题。53、73 (3)if语句的格式:if(表达式),if后面必须加上小括号。37题第一空if后面必须加上小括号。 (4)命令行格式出错:17题第一空中include命令少了#,正确的形式应该是#include “stdio.h”; (5)常用函数格式: A 22题第一空中n=strlen[aa]应该改为n=strlen(aa),记住函数名后面一定是花括号,不能是方括号,方括号只有在数组下标中用到。 B 49题第一空int j,c,float xa=0.0;应该改为int j,c;float xa=0.0;记住:要同时定义两种以上不同的数据类型的时候必须在不同类型的数据中间加上分号。 C 41题第二空scanf(“%d”,a[i][j]);应该改为scanf(“%d”,&a[i][j])。考查Scanf输入函数的格式。 (6)数组:所有老师讲到数组时候必须统一将此知识点给学生回顾一遍! A数组下标引用时候只能用反括号。28题第二空t(k)=b(j)应该改为t[k]=b[j]。 B二维数组中的列下标不能省略。46题第一空必须将数组列下标补充完整。 (7)常用符号出错: A C语言中大于等于符号是“>=”,但是在考试的时候可能出现将它写为“=>”,49题第二空就是这样的错误。 B 当题目中需要比较某个字符是否是大写字母或是小写字母、数字时,必须将“与”、“或”、“非”记住。 判断某个字符是否是大写字母:char ch;if(ch>=’A’&&ch<=’Z’)printf(“%c”,ch); 判断某个字符是否是小写字母:char ch;if(ch>=’a’&&ch<=’z’) printf(“%c”,ch); 判断某个字符是否是数字:char ch;if(ch>=’0’&&ch<=’9’)printf(“%c”,ch); 判断某个数字是否能同时被5和7整除: int i=35; if(i%5==0&&i%7==0)printf(“%d”,i); 判断某个数字是否能被5或7整除: int i=35; if(i%5==0||i%7==0)printf(“%d”,i); 判断某个数字是否是偶数或奇数: int i=35; if(i%2==0)printf(“%d是一个偶数”,i); else printf(“%d是一个奇数”,i); 二 逻辑错误 1.使用了没有定义过的变量:这种题目可以通过编译查找出出错的地方并改之。 (1)0(零)和o(字母欧)的区别:19题第一空、23题第二空、43题第二空、51题第二空。77、98、 (2)P(大)和p(小)的区别:33题第一空。82 (3)普通变量大小写的区别: A有的变量在定义的时候是小写但是在使用的时候是大写,或是在定义的时候是大写在使用的时候却是小写。 B 大小写没有出错,程序中直接使用了没有定义过的变量,要求学生更加细心的读题目。45题第二空使用到了i这个变量,但是我们在定义行中没有找到i的定义,因此在做题时候要上下结合来分析题目。22题第二空c=aa[j]中的c没有定义过,参看定义的语句不能发现应该是ch=aa[j]。38题第一空要求将后面用到的变量s1定义完整。 2.运算符号出错: (1)C语言中除号是“/”不是“\” (2)赋值号(=)和等号(= =)混淆,记住在if语句中出现赋值号(=)一般是讲它改为等号(= =)。14题第一空和29题第二空都是这样的错误。87、91、94 3.表达式的取值范围出错: 当遇到计算表达式的累加或是累减时,一定用到循环来完成相应的操作。例如:改错题第七题中要求计算t=1-1/2*2-1/3*3-….-1/m*m这个表达式,在这个题目中第一空有这样的for语句:for(i=2;i)、小于(<)等符号的变化,当你查找出错的地方没有语法错误,也没有使用了未定义的变量时,记住这个口诀:将大于改为小于,将小于改为大于!11题第二空、12题第一空和13题第二空、4题第二空都可以用这样的方法。58 6.函数的返回值及其参数:重点 int fun(int x,int y) main() { { if(x>y)return x; int a,b,c; else return y; scanf(“%d%d”,&a,&b); } c=fun(a,b); printf(“最大值为:%d”,c);} (1)​ 函数的返回类型:在上面的例子中fun函数的返回值是int,如果将int改为double,很明显是错误的。从两个地方来看,首先return x;中x的类型必须和fun函数中的返回值相同,x是整型。其次c=fun(a,b);中fun函数将一个返回值赋值给了变量C,说明函数返回的值一定是整型。记住:函数调用、函数的返回值和ruturn中数据类型必须一致!1.1、3.1、16.1、19.2、34.1、36.1、40.1、48.1、71都死这样的错误,(注1.1表示第一题第一空)。78、89、90、 (2)​ return后面的表达式及其类型:19.2、30.2、39.2 (3)​ 函数传递的参数: int fun(int *x,int *y) main() { { if(*x>*y)return *x; int a,b,c; else return *y; scanf(“%d%d”,&a,&b); } c=fun(&a,&b); printf(“最大值为:%d”,c);} 一定注意:传递的是值还是地址。比较上面两个例子大家很容易区别传递的是值还是地址,第一个例子调用函数的时候传递的是值,因此在fun函数的形参中x和y仅仅是普通的变量,而第二个例子中调用函数的时候传递的是地址,因此在fun函数的形参中x和y就是两个指针变量。5.1、13.1、17.2、20.1、25.2、52.1、56、84、85、依据刚刚讲的方法很快就能找出出错点。100 (4)指针的使用: int fun(int *x,int *y) { if(*x>*y)return *x; else return *y; } 在此例中fun函数的形参是x和y,它们的类型是整型的指针,那么在fun函数的函数体中使用到x和y的值时一定要区分:x>y比较的是x和y所存变量地址的大小,*x>*y才是比较值的大小。如果存在*x=x+y;的类似情况一定是错误的,必须要将赋值号的左右两边的类型变为一致。 5.2、5.3、20.2、24.2、35.1、44.1、72、75、一定特别注意! 7.数组: (1)数组下标的初始值:数组下标从零开始,到长度减一结束。考试技巧:当出错行在定义部分时,先检查该定义语句有没有语法错误,再看定义语句中的变量有没有赋初始值,最后看变量赋的初始值有没有正确。 定义初始值有窍门,遇到累加时,用来存放累加和的变量一般赋值为零,遇到求阶乘时,用来存放阶乘值的变量一般赋值为一。8.1中的变量k赋值为1,但是我们说了数组的下标只能从0开始,因此将1改为0就行了。 (2)普通变量的初始值:依照上面的技巧,我们同样可以将它延伸到普通变量中。41.1中需要将变量的值进行初始化,题目中有这样的要求:“输出主对角线元素之和”,既然这样我们很肯定初始值应该为零,接着我们看看是给哪个变量赋值?看printf(“sum=%d”,sum);输出的是sum的值,说明sum就是我们要补充在横线上的变量。10.1也可以用同样的方法来分析。 (3)数组和字符串长度减一:当使用数组中的元素时,最大值只能到数组长度减一。字符串以’\0’作为字符串的结束标志,因此取值最大也只能到字符串长度减一。25.2中输出printf(“%d”,aa[i]);分析程序知道i在此时就是数组的长度,我们要输出数组中的元素,最大就只能到aa[i-1],因此改为 printf(“%d”,aa[i-1]);就行了。4.1和38.2中考查的是字符串长度减一的问题。 (4)数组下标往后走:当题目要求将一个数组中的元素直接赋值或是以某种方式复制到另一个数组中时,接受数据的数组中的下标要自增。9.1中s[j]=s[i];将s[i]中的值复制给s[j],联系上下函数段发现i是一个变量被for语句控制,从0开始直到遇到’\0’结束。i一直在加但是j没有变化,因此改为s[j++]=s[i];即可。类似的题目有:25.2、26.2、32.1、50.2。 8.特例: 部分题目的解答很特殊,需要根据上下文中的内容来解答题目;例如10.1,在此题目中,定义了变量t=0;根据下面程序中的循环,s=0.0,首先加的是变量t的值,即s的值是从0.0开始的,s得到的值是:s=0.0+0.0+1.0/3+……,观察表达式的值,这个少加了第一项1.0的值,所以变量t的初值不能是0.0,只能是1.0,或者是1; 21.2中的这个题目中,表达式的值是从2/1+3/2+5/3……即表达式的规律是从第一项开始,以后的每一项的分子是前一项的分子和分母的和,分母为前一项的分子。所以该题目的第二个空中的内容应该是:c=a;a+=b;b+=c;这一条语句中 a代表的变量的分子,b代表的是变量的分母,执行第一个表达式的值,把a的值赋值给变量c,第二个表达式是把分子和分母的和相加复制给变量a,第三个表达式是把原来a的值和变量b的值相加之后得到的值赋值给变量b,则变量b得到的值也为分子分母的和,不满足题意,而分母应该为原来分子的值。第三表达式的值应该改为:b=c; 类似的题目有:33.2、40.2、43.1、47.1、50.1 9.素数 11.1 、29、83 掌握求素数的格式: 判断一个数是否是素数的方法很多,的是只用掌握一种即可,首先掌握判断一个素数的方法; 素数的定义:1、是自然数 2、只能被1和本身整除,2到本身减一之间的数不能整除该数。 判断m是否为素数的格式: for(i=2;inext;第二个空改为:p=p->next;. 2、​ 不带头结点的链表 带头结点的链表的第一个空的改为:p=h;第二个空改为:p=p->next;. 三、上机编程题目的总结 编程题目分类: (一)、数学题目:5、6、11、14、34、48、49、67、73、76、89、91、 编程的题目中,如果是数学题目,编程时用到阶乘或者是奇数项的积,则首先给变量赋初值为1,不能赋初值为0,同时把变量的类型定义为实型而不是整型。数学题目中结果都需要返回,如果说函数的类型是void则是通过指针返回,如果不是void,则必须用return返回。 如果是表达式中的值为1,则在编写程序时用去1.0.而不能用1。C语言中的除法的运算原则是整数除以整数,结果还是整数。 数组中存储数据时以下标来存储的,在数组中下标从0开始。 解题详解 : 6、观察表达式,左边求出的是p的值的一半,所以右边的表达式的值的计算好后应该乘以2才能得到p的值,观察表达式的右边 ,右边表达式中有分子、分母以及各表达式的值的和,分子是阶乘、分母是奇数项的积,分子除以分母得到一项的值。由此定义三个变量:s1代表分子,s2代表分母、s3代表各项的和,定义一个整型变量i,让变量i从1开始。知道循环的结束。 int i; double s1=1.0,s2=1.0,s3=0.0; for(i=1;s1/s2>=eps;i++) { s3+=s1/s2; s1*=i; s2*=(2*i+1); } return 2*s3; 注意:此题目中要特别注意,循环语句的表达式2的判断条件是s1/s2>=eps,而不是i<=n,循环语句的语句的顺寻不能颠倒,即先加之后再计算。 11、此题中要求能正处x,那么x应该为分子,而不是分母,把满足条件的数组放到pp所指的数组中,即pp数组应用一个整型的变量来做pp下标,数组下标从0开始,所以定义一个整形变量k并且赋初值为0;满足条件的个数通过形参传回。 int i,k=0; for(i=1;i<=x;i++) if(x%i==0&&i%2==1) pp[k++]=i; *n=k; 备注:此题目中不能把i初值定义为0,否则程序运行时得不到结果。 14、首先看清题意,题目中要求是小于形参n,不包括n,能被3与7整除,两者用逻辑与连接,平方根用平方根的函数sqrt;此题中要求的是自然数的和的平方根,而不是平方根的和,所以要先把满足条件的数加起来后再开方。定义一个整型变量i,让该变量由1直到n-1,用循环实现,一个整形变量s,让该变量存放的是满足条件的数的和,由于s为全局变量,故应该赋初值为0; int i,s=0; for(i=1;i=’A’&&ss[i]<=’Z’ 判断是否是小写字母ss[i]>=’a’&&ss[i]<=’z’。 判断一个字符是数字字符 ss[i]>=’0’&&ss[i]<=’9’; 4、定义一个整型变量i来访问字符数组中的元素。把小写字母改写成大写字母,只用把小字母的ASCII值减去32即可。 int i ; for(i=0;ss[i]!=’\0’;i++) if(i%2==1&&ss[i]>=’a’&&ss[i]<=’z’) ss[i]-=32 代码中:i代表的是访问数组下标的变量。循环的条件是ss[i]!=’\0’,这事字符串是否结束的判断条件。从第一个字符开始,一直到遇到结束符为止。当取出一个字符后,对该字符进行判断,如果该字符满足条件的时候,执行ss[i]-=32;语句,即将小写字母改变成大写字母。 12、先定义一个整型变量k,并且赋初值0,作为数组的下标,一个整型变量i用来访问数组中的元素的下标. int i ,k=0; for(i=0;s[i] !=’\0’;i++) if(!(i%2==0&&s[i]%2==1)) t[k++]=s[i]; t[k]= ’\0’; 备注:if条件中的内容是先将删除的写出来,再前面加上一个!,用来否定,则剩下的就是要保留的内容。把满足条件的存放到数组t中,t也是一个字符数组,所以要够吃呢个字符串,必须在后面赋值结束符。 (三)、素数 20、21、62 判断一个数是否是素数的方法很多,的是只用掌握一种即可,首先掌握判断一个素数的方法; 素数的定义:1、是自然数 2、只能被1和本身整除,2到本身减一之间的数不能整除该数。 判断m是否为素数的格式: for(i=2;i=100) b[10]++; else b[a[i]/10 ]++; 26、解决方法: 1、打开“in.dat”文件 将最长的那一串保留住,其余的全部删除。: 单击 “文件”菜单下面的“另存为”: 在文件名中输入 out.dat: 单击“保存”。 单击“文件”菜单下面的“保存”,单击“文件”菜单下的“退出”。 (十三)将两个数字按照要求合并成一个数字:13、38、44、46、63、69、7
本文档为【上机解题技巧】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_252597
暂无简介~
格式:doc
大小:2MB
软件:Word
页数:37
分类:
上传时间:2011-03-31
浏览量:5