南开一百题文库.docx
- 文档编号:3238678
- 上传时间:2022-11-20
- 格式:DOCX
- 页数:8
- 大小:18.51KB
南开一百题文库.docx
《南开一百题文库.docx》由会员分享,可在线阅读,更多相关《南开一百题文库.docx(8页珍藏版)》请在冰豆网上搜索。
南开一百题文库
南开一百题
(一)(2007-04-0809:
13:
10)
南开大学上机分类
1、大于正数M且紧靠M的K个数
(1)
voidnum(intm,intk,intxx[])/*标准答案*/
{intdata=m+1;/*整数m+1*/
inthalf,n=0,I;
while
(1)/*无限循环*/
{half=data/2;for(I=2;I<=half;I++)
if(data%I==0)break;/*余数为0,则跳出*/
if(I>half)
{xx[n]=data;n++;}/*存入数组后,n++;*/
if(n>=k)break;/*k为输出个数*/
data++;
}}
程序解析:
该题主要是对要素数方法的理解。
n与k之间的关系,需要注意n++放置的位置,特别须要注意因马虎出现的不应该有的失误
或者:
voidnum(intm,intk,intxx[])
{inti,j,s=0;
for(i=m+1;k>0;i++)
{for(j=2;j
if(i%j==0)break;/*注:
素数为只能被自己和1整除的数.如果i%j等于0,说明i不是素数,跳出本层循环*/
if(i==j)
{xx[s++]=i;k--;}
}}
程序解析:
j每次加1,如i%j=0则中途跳出,一直加至i=j,则i为素数,加入数组,同时k--;之后i++,重新进入循环,直至k=0;
比标准答案要来的巧妙,不过有一点点难度,主要是{xx[s++]=i;k--;}使用的比较巧妙
voidnum(intm,intk,intxx[])
{inti=0;
for(m=m+1;k>0;m++)
if(isP(m))
{xx[i++]=m;
k--;}}
程序解析:
看了南开上机题和无忧的模拟盘,竟然发现有不少这种程序学过函数嵌套就应该会,需要注意的是如返回值为0,则判断条件为假,其余都为TRUE;真考试时一定要注意,也许程序就是现成的放在你面前也是
2、把S字符串中所有字母改写成该字母下一个字母(11、63)
voidchg(char*s)
{inti,j,k;
k=strlen(s);
for(i=0;i {if(s[i]=='z'||s[i]=='Z') s[i]=s[i]-25;//25是A到Z的距离 elseif(isalpha(s[i]))//函数ISALPHA,见程序解析 s[i]+=1; } } 程序解析: 该题的思路比较明显,先判断是否是'z'或'Z',若是则转成相应的'a'或'A ',否则再判断是不是字母(已除'z'或'Z')。 函数ISALPHA的功能是判断C是否是一个字母,如果是返回1,否则返回0 STRLEN不用说了吧,测量字符串长度的. 3、统计一个长度为2的字符串在另一个字符串中出现的次数(19) intfindStr(char*str,char*substr) { intn; char*p,*r;//两个指针 n=0; while(*str)//从字符串STR首地址开始 { p=str; r=substr; while(*r) if(*r==*p) {r++;p++} if(*r=='\0')//被查找字符串结束 n++; str++; } returnn; } 程序解析: 比较简单的一道题,先来两指针,把字符串和子字符串的地址放进去,如果相等就++,最后返回N,对指针比较晕的朋友,我 这里有一种更好的算法,在无忧模拟盘中做过,凭记忆重编一下,没时间上机调试, intfindStr(char*str,char*substr) { inti,n; for(i=0;i<=strlen(str);i++) { if(substr[0]==str[i]&&sub[1]==str[i+1]) n++; } returnn; } 最关键的是第是六行的判断,调试一下吧,细节的地方不一定对 4、求Fiboracci数列中大于t的最小一个数(20) intjsvalue(intt) {intf1=0,f2=1,fn;//F(0)=0,F (1)=1 fn=f1+f2;//F(n)=F(n-1)+F(n-2) while(fn<=t) {f1=f2; f2=fn; fn=f1+f2; } returnfn; } 程序解析: 比较简单的,三个变量,注意一个循环的判断条件,分析一下F1,F2,FN各自在Fibonacci数列中扮演什么角色? 5、迭代方法求方程(21) /*注: 该迭代法的基本算法是: 反复赋值直到x0-x1的绝对值小于0.00001。 故而可用do-while循环。 这是一个典型的算法。 */ floatcountvalue() { floatx0,x1=0.0;// (1)取X1初值为0.0; do {x0=x1;// (2)X0=X1,把X1的值赋给X0; x1=cos(x0);//(3)X1=COS(X0),求出一个新的X1; }while(fabs(x0-x1)>=0.000001);//若X0-X1绝对值小0.000001,执行步骤(5),否则执行步 骤 (2); returnx1;//(5)所求X1就是方程cos(X)-X=0的一个实根,作为函数值返回。 } 程序解析: 注意变量要赋成浮点型的,不要用INT用习惯了,题里已经把程序步骤写的差不多了,抽这到题在过不去只能怪自己弱智了.看看注释,实在想不出在简单的的题了.不过DO—WHILE循环不太常用,不习惯的也可以用DO循环,加一个IF—BREAK语句来判断. 函数FABS是求一个浮点数的绝对值,注意,0.0000001也可以用1E-6表示. 6、寻找并输出11到999之间数M,满足M,M平方,M立方均是回数(25) /*标准答案*/ intjsvalue(longn) {inti,strl,half; charxy[20]; itoa(n,xy,10); strl=strlen(xy); half=strl/2; for(I=0;I if(xy[I]! =xy[--strl]break; if(I>=half)return1; elsereturn0; } 程序解析: 先三个变量,一个字符数组,然后用ITOA把N(待判断的数)转换到字符数组中,然后计算一下长度,在用长度除以2,共循环HALF次,***,这程序我看不懂,大家帮着解释吧 函数解析: 函数名: itoa 功能: 把一整数转换为字符串 用法: char*itoa(intvalue,char*string,intradix); 程序例: #include #include intmain(void) { intnumber=12345; charstring[25]; itoa(number,string,10); printf("integer=%dstring=%s\n",number,string); return0; } _________________________________ 只是为了上机能通过,不追求什么算法速度,答案仅供大家参考. intjsvalue(longn) { inti,aa[10],j=0,b=1;/*n为“long”型,n的三次方最多达到10位,所以定义为aa[10]*/ while(n) { aa[j++]=n%10;/*将数拆散后依次按最高位到最低位(万-》千-》百-》十-》个位)的次序放入数组aa中*/ n=n/10; } for(i=0;i { if(aa[i]! =aa[j-i-1])b=0; } returnb; } 程序解析: 看咱这算法,比较容易理解吧,看看注释吧,顺便和大家复习一下笔试, 按照软件工程学的标准,首先应保证源程序代码的可读性,提高程序效率不应该以牺牲程序可读性为代价. 7、选出100---1000内所有个位数与十位数被10除余数是百位数字的素数(29、34) 34. /*注: 内嵌的for()循环用来判断i以前的数有否能整除i的数若能则提前终止循环,第二个if()中j==i的作用是配合前面的for()判断i是否是素数。 */ voidcountvalue() { inti,j; for(i=100;i<1000;i++) {for(j=2;j if(i%j==0)break; if(j==i&&((i%10+i/10%10)%10==i/100)) {cnt++; sum+=i; } } } 程序解析: 素数的程序到是真有不少,这里推荐大家一个素数的小程序,是南开百题中第一题中的一个子程序,算法简单有效,用来做此类题再好也没有. IntIsp(intm) { inti,k=1; for(i=2;i if(m%i==0)k=0; returnk; } 8、整数前两项为A1=1,A2=1以后为An=An-2+2An-1求满足Sn jsvalue() { inta1=1,a2=1,a12,sn,k=2;//a1=1,a2=1; sn=a1+a2;//这里要先把SN赋了值,不然到下面就会出乱子 while (1) {a12=a1+2*a2;//赋值加下面的判断 if(sn<100&&sn+a12>=100)b[0]=k; if(sn<1000&&sn+a12>=1000)b[1]=k; if(sn<10000&&sn+a12>=10000){b[2]=k;break;} sn=sn+a12; a1=a2; a2=a12; k++; } } 程序解析: 看似简单,实际上如果脑子不清楚也很容易晕,这题主要就是要简洁有效的表示出各项间的关系,搞清了是很容易的一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 南开 一百 文库