已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南开上机分类与解析答案南开大学上机分类1、大于正数M且紧靠M的K个数(1)void num(int m,int k,int xx) /*标准答案*/int data=m+1; /*整数m+1*/int half,n=0,I; while(1) /*无限循环*/ half=data/2;for(I=2;Ihalf) xxn=data;n+;/*存入数组后,n+;*/ if(n=k)break; /*k为输出个数*/ data+; 程序解析: 该题主要是对要素数方法的理解。n与k之间的关系,需要注意n+放置的位置,特别须要注意因马虎出现的不应该有的失误或者:void num(int m,int k,int xx)int i,j,s=0;for(i=m+1;k0;i+)for(j=2;j0;m+)if(isP(m) xxi+=m;k-; 程序解析:看了南开上机题和无忧的模拟盘,竟然发现有不少这种程序学过函数嵌套就应该会,需要注意的是如返回值为0,则判断条件为假,其余都为TRUE;真考试时一定要注意,也许程序就是现成的放在你面前也是2、把S字符串中所有字母改写成该字母下一个字母(11、63)void chg(char *s)int i,j,k;k=strlen(s);for(i=0;ik;i+)if(si=z|si=Z ) si=si-25;/25是A到Z的距离 else if(isalpha(si)/函数ISALPHA,见程序解析 si+=1;程序解析:该题的思路比较明显,先判断是否是z或Z,若是则转成相应的a或A,否则再判断是不是字母(已除z或Z)。函数ISALPHA的功能是判断C是否是一个字母,如果是返回1,否则返回0 STRLEN不用说了吧,测量字符串长度的.3、统计一个长度为2的字符串在另一个字符串中出现的次数(19)int find Str(char *str,char *substr) int n; char *p,*r;/两个指针 n=0; while(*str)/从字符串STR首地址开始 p=str; r=substr; while(*r) if(*r=*p) r+;p+ if(*r=0)/被查找字符串结束 n+; str+; return n;程序解析:比较简单的一道题,先来两指针,把字符串和子字符串的地址放进去,如果相等就+,最后返回N,对指针比较晕的朋友,我这里有一种更好的算法,在无忧模拟盘中做过,凭记忆重编一下,没时间上机调试, int find Str(char *str,char *substr) int i,n; for(i=0;i=strlen(str);i+) if(substr0=stri&sub1=stri+1) n+; return n;最关键的是第是六行的判断,调试一下吧,细节的地方不一定对4、求Fiboracci数列中大于t的最小一个数(20)int jsvalue(int t) int f1=0,f2=1,fn; / F(0)=0,F(1)=1 fn=f1+f2; / F(n)=F(n-1)+F(n-2)while(fn=0.000001);/ 若X0-X1绝对值小0.000001,执行步骤(5),否则执行步骤(2);return x1;/ (5)所求X1就是方程cos(X)-X=0的一个实根,作为函数值返回。程序解析:注意变量要赋成浮点型的,不要用INT用习惯了,题里已经把程序步骤写的差不多了,抽这到题在过不去只能怪自己弱智了.看看注释,实在想不出在简单的的题了.不过DOWHILE循环不太常用,不习惯的也可以用DO循环,加一个IFBREAK语句来判断.函数FABS是求一个浮点数的绝对值,注意,0.0000001也可以用1E-6表示.6、寻找并输出11到999之间数M,满足M,M平方,M立方均是回数(25)/*标准答案*/int jsvalue(long n) int i,strl,half; char xy20; itoa(n,xy,10); strl=strlen(xy); half=strl/2; for(I=0;I=half)return 1; else return 0; 程序解析:先三个变量,一个字符数组,然后用ITOA把N(待判断的数)转换到字符数组中,然后计算一下长度,在用长度除以2,共循环HALF次,*,这程序我看不懂,大家帮着解释吧函数解析: 函数名: itoa 功 能: 把一整数转换为字符串 用 法: char *itoa(int value, char *string, int radix); 程序例: #include #include int main(void) int number = 12345; char string25; itoa(number, string, 10); printf(integer = %d string = %sn, number, string); return 0; _只是为了上机能通过,不追求什么算法速度,答案仅供大家参考.int jsvalue(long n)int i,aa10,j=0,b=1; /*n为“long”型,n的三次方最多达到10位,所以定义为aa10*/while(n)aaj+=n%10; /*将数拆散后依次按最高位到最低位(万-千-百-十-个位)的次序放入数组aa中*/n=n/10;for(i=0;ij/2;i+)if(aai!=aaj-i-1) b=0;return b; 程序解析:看咱这算法,比较容易理解吧,看看注释吧,顺便和大家复习一下笔试,按照软件工程学的标准,首先应保证源程序代码的可读性,提高程序效率不应该以牺牲程序可读性为代价.7、选出100-1000内所有个位数与十位数被10除余数是百位数字的素数(29、34)34./* 注:内嵌的for()循环用来判断i以前的数有否能整除i的数若能则提前终止循环,第二个if()中j=i的作用是配合前面的for()判断i是否是素数。*/void countvalue()int i,j;for(i=100;i1000;i+)for(j=2;ji;j+)if(i%j=0) break;if(j=i&(i%10+i/10%10)%10=i/100)cnt+;sum+=i; 程序解析:素数的程序到是真有不少,这里推荐大家一个素数的小程序,是南开百题中第一题中的一个子程序,算法简单有效,用来做此类题再好也没有.Int Isp(int m) int i,k=1; for(i=2;im;i+) if(m%i=0)k=0;return k;8、整数前两项为A1=1,A2=1以后为An=An-2+2An-1求满足SnM (35)jsvalue()int a1=1,a2=1,a12,sn,k=2;/a1=1,a2=1;sn=a1+a2;/这里要先把SN赋了值,不然到下面就会出乱子while(1)a12=a1+2*a2;/赋值加下面的判断if(sn=100) b0=k;if(sn=1000) b1=k;if(sn=10000) b2=k;break;sn=sn+a12;a1=a2;a2=a12;k+;程序解析:看似简单,实际上如果脑子不清楚也很容易晕,这题主要就是要简洁有效的表示出各项间的关系,搞清了是很容易的一个程序,看下我的注释吧.具体的关系就是a1-a2-a12-sn只要牢记这一点,这题就没问题!9、计算six , nine满足six+six+six=nine+nine (41)/* 注:由于有SIX+SIX+SIX=NINE+NINE */void countvalue() int i;printf(n);for(i=666;i=999;i=i+2)if(i/10%10=(3*i/2)/100%10) /*以I为准*/cnt+;sum+=i+3*i/2;程序解析:这程序一点不难,关键是题意不清楚,我就搞了好长时间才理解题意是这样的:SIX是一个三位数,S是百位的,I是十位,X是个位NINE是一个四位数,N是千位,I是百位,N是十位,E是个位条件是SIX的十位数必须和NINE的百位相等,NINE的千位和十位必须相等.理解了吧可看出SIX的3倍必须大于等于2000(右边是一个四位数字的数可知),因此从666开始循环,再由三个数的和是个偶数(右边为一个数的2倍可知)可循环时步长为2。再由SIX和NINE中有一个共同数字I所以得出第一个if()判断,还有NINE中有一共同数字N所以得出第二个if()判断。void countvalue()int i;cnt=0;sum=0;for(i=1000;i1500;i+)if(i/1000=i/10%10 & (2*i)/3)*3=(i+i) /*以N为准*/ cnt+;sum+=i*5/3;10、n个人站在一圈按顺时针方向从1到N编号,然后出队 (57)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; 程序解析:这题有一定难度,很容易绕来绕去就蒙了,第一个循环不用想了,是给数组P赋初值,注意一下I是等于1,赋值时要减1.然后 注意第二个FOR循环中I是用来控制没有出圈的人数.S1是求出圈的人的下标数,对I求余是为了让报数循环进行,可能有些人晕了(报到最后一个时即S1+M-1=I时,S1为零,所以要重新赋值;最后的FOR比较简单了,将未出圈的人依次向前移动1位.这题我研究了好久没有做出来,绕来绕去晕了,是看的答案才弄清了,理解不是特别透彻,大家有好的算法拿来分享.11、找出所有100以内满足I , I+4, I+10都是素数的整数 (64)Int Isp(int m) int i,k=1; for(i=2;im;i+) if(m%i=0)k=0;return k;void countvalue()int i,j;for(i=1;i=90;i+)if(isp(i)&isp(i+4)&isp(i+10)cnt+;sum+=i;程序解析:又是弱智题,感觉上三级的题难易程度相差很大,这题不用说了,到现在还看不懂这程序就干脆考一级去吧,有一点点需要注意的是I=90而不是100;12、选出500以内自然数要求的题,千+百=十+个 (48、67)13、给数组重新排序其中要求比K1大的在右边,比K1小的在左边的 (90)jsvalue(int a109) /*标准答案*/ int value,I,j,k,num; for(I=0;I10;I+) value=aI0; for(j=0;j9;j+) if (aIj0;k-) num=aIj; for(k=j;k0;k-) aIk=aIk-1; aI0=num; 程序解析:先定义五个变量,二级数组必写的循环是什么?当然是for(i=0;i第一维数组的长度;i+) for(j=0;j第二维的长度;j+) .在这里,value就是K1,接着一个判断,如果aijk1;赋值给NUM一个循环把值依次向前移动.或者:jsvalue(int a109) int i,j,k,m,c,b109; for(i=0;i10;i+) for(j=0;j9;j+) bj=aj; for(i=0;i10;i+) k=b0; for(j=1;j9;j+) if(bj0;m-) am=am-1; a0=c; 程序解析就是在定义一个数组,算法上差不多,应该比第一个好理解点.不多说14、计算500-800内素数个数,素数按从大到小的排序,而且计算也要有间隔的 (66)15、求200个四位数,该四位数连续大于该四位数以后的五个数的题 (14、30、45、46)30./* 标准答案 */错误!void jsVal() int I,j,flag=0; for(I=0;IMAX-5;I+) for(j=I+1;j=I+5;j+) if(aIaj) flag=1; else flag=0; if(flag=0) break; if(flag=1) bcnt=aI; cnt+; for(I=0;Icnt-1;I+) for(j=I+1;jbj) flag=bI; bI=bj; bj=flag; 程序解析:不知做南开的题是谁做的标准答案,习惯于把简单的问题复杂化,虽说我们有更简便的方法,但还是来看一下,首先是来三个变量,然后从遍历数组到倒数第六个,然后是一个循环判断是否小于以后的五个数,如果小于那么返回1,停!妈的,这标准答案又是错的,没有判断是否是偶数,还要加一个%2=0的判断才对啊,接着是排序.麻烦,看看我的算法.void jsVal() int I,j,flag=0; for(I=0;IaI+1&aIaI+2 &aIaI+3 &aIaI+4 &aIaI+5&aI%2=0) bcnt+=aI; for(I=0;Icnt-1;I+) for(j=I+1;jbj) flag=bI; bI=bj; bj=flag; 虽说判断句长一点,但不容易搞混,呵呵16、求200个四位数,千位数字小于百位数字,百位数字小于十位数字的题 (15、78)17、求200个四位数,千位数字和十位数字重新组成一个新的十位数ab的题(28、29、51、52、59、72、76、86 )28.void jsVal() /*标准答案*/int I,thou,hun,ten,data,j;int ab,cd;for(I=0;I=0&(ab-cd)=10&ab%2=1&cd%2=1&ab!=0&cd!=0) bcnt=aI;cnt+;Kfor(I=0;Icnt-1;I+) for(j=I+1;jcnt;j+) if(bIbj) data=bI; bI=bj;bj=data;程序解析:把四个数取出来以后赋值给AB和CD,然后把所有的判断条件写入一个判断句,加入数组,而后排序.18、求300个四位数,千位减百位减十位减个位大于零的题 (27、49、53、69、80、85)19、求300个四位数,千位+个位=百位+十位 的题( 48、67、54、77、81、87、89)20、求300个四位数,是素数个数的题 (55、82)程序解析:用ISP函数判断是否是素数,存入数组,然后排序.简单的题我不会说的太详细,如果有听不懂的可以发贴子问我21、求200个四位数,各位数字均为奇数或偶数的题 (2、68)2.void jsVal() /*标准答案*/int bb4;int I,j,k,flag;for (I=0;I200;I+)bb0=aI/1000; bb1=aI%1000/100; bb2=aI%100/10; bb3=aI%10; for (j=0;j4;j+) if (bbj%2=0) flag=1; else flag=0;break; if (flag=1) bcnt=aI; cnt+; for(I=0;Icnt-1;I+) for(j=I+1;jcnt;j+) if (bIbj) k=bI;bI=bj;bj=k;程序解析: 先求是千百十个位的值,(注意求的方法)然后存入数组BB,写一个循环,如果千百十个位都为偶数的话,就存入数组B,然后CNT+, 最后是简单的排序,起泡法,看不懂的话去查查谭浩强的C程序设计第124页,不要告诉我你没买,还有一个多月就考试了.这题比较简单,主要是求千百十个位数的方法,还有排泡法排序,大家一定要注意排序的方法,起泡法,选择法,二分法都要吃透.我大概看了一下,南开百题里涉及到排序的大概有四分之一左右!22、读取一篇文章,代替关系为f(p)=p*11 mod 256的题 (8、18、36、37、56、62、95、96、97、98)23、读取一篇文章,字符串排序、以及ASCII值转换的题 (9、10、16、17、73、74、88、100)24、读取文章,以行为单位对行的空格删除或标点符号为分隔的单词倒排的题 (4、3)4.void StrOL(void) int n;char line80;int i;for(i=0;imaxline;i+) line0=0; n=strlen(xxi); while(-n) if(!isalpha(xxin) strcat(line,xxi+n+1); strcat(line, ); xxin=0; strcat(line,xxi); strcpy(xxi,line);程序解析:此题有一定难度 ,二个变量,一个数组,需要注意的是XXI+N+1是一下拷贝了一个单词,而不是一个字母, 这点须要特别注意xxi+n+1和xxi+n+1不是一回事儿,不要混了.还有一种算法,我自己写的,应该比较好理解吧;void StrOL(void) int i,j,m,cnt=0; char line80,word20,c;/line是一行word是一个单词 for(i=0;imaxline;i+) for(m=0;m80;m+)/清空数组,马虎不得 linem=0; for(m=0;m=0;j-)/从结尾处开始循环 c=xxij; if(isalpha(c)/如果C为字母 wordcnt+=c;/加入数组,但这时是倒序的,比如COMPUTER是RETUPMOC else if(cnt!=0) strcat(line,strrev(word);/STRREV是关键 strcat(line, ); cnt=0; for(m=0;m20;m+) word20=0; strcat(line,strrev(word); strcpy(xxi,line); 第三题函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请编制函数STROR(),其函数功能是:以行为单位把字符串中的所有小写字母O左边的字符串内容移到该串的右边存放,然后并把小写字母O删除,余下的字符串内容移到已处理字符串的左边存放.最后把已处理的字符串仍按行重新存入字符串数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某中学中考一模语文试题(含答案)
- 2026年镇江京口区社区工作者招聘考试核心押题卷(第3套)(附独家高分解析)
- 潜江仙桃中考试题及答案
- 汽车基本电路试题及答案
- 2026比较仓促的面试题目及答案
- 2026编外会计面试题目及答案
- 2026兵团两委面试题及答案
- 2026病人吃药面试题及答案
- 2026博罗事业编面试题及答案
- 2026博物馆夜游面试题及答案
- 2025届北京市海淀区清华大附中八下英语期末达标检测试题含答案
- 新时代教师思想教育体系建设
- 工程计算方法课件
- 商业银行的金融市场与投资管理
- 《孟子》精读学习通超星期末考试答案章节答案2024年
- 2024全国中考语文试题分类汇编:非连续文本
- 深圳市五年级下册科学期末试卷含答案(5套)
- 电力行业标准《安全工器具柜技术条件》
- MOOC 乒乓球入门与提高-北京体育大学 中国大学慕课答案
- 第十七章-阿法芙·I·梅勒斯的转变理论
- 贴身管家服务流程
评论
0/150
提交评论