c语言中的关于数学问题的编程,C语言中具有代表性几种数学问题编程技巧探索.doc...
C語言中具有代表性幾種數(shù)學(xué)問題編程技巧探索
C語言中具有代表性幾種數(shù)學(xué)問題編程技巧探索
[摘要]本文分析了C語言中幾種常見的具有代表性的幾類數(shù)學(xué)問題,從數(shù)學(xué)規(guī)律、語法結(jié)構(gòu)分析、語句優(yōu)化設(shè)計(jì)及應(yīng)用方面,探索同一類編程問題的編程方法和技巧。
[關(guān)鍵詞]數(shù)學(xué)問題;技巧;規(guī)律
[作者簡(jiǎn)介]高大菊(1983-),女,漢族,滁州城市職業(yè)學(xué)院助教。
在C語言程序設(shè)計(jì)過程中,很多的程序設(shè)計(jì)問題和數(shù)學(xué)問題是緊密聯(lián)系的,怎樣分析數(shù)學(xué)規(guī)律,靈活地使用C語言的幾種結(jié)構(gòu)來實(shí)現(xiàn)編程目的,往往帶給高職學(xué)校的學(xué)生不少編程困難,現(xiàn)就在學(xué)習(xí)實(shí)踐中對(duì)幾種常見的具有代表性的數(shù)學(xué)問題的編程技巧總結(jié)一二。
一、序列問題
經(jīng)常遇到這樣的問題:給一組有一定規(guī)律的序列,然后求前n項(xiàng)的和或積的問題,這里簡(jiǎn)稱序列問題。這類問題在編程中可以利用以下兩點(diǎn)技巧:①遇求和設(shè)0自加,遇求積設(shè)1自乘,遇異號(hào)乘-1。②研究數(shù)字規(guī)律。
在設(shè)計(jì)時(shí),如果遇到很多項(xiàng)相加求和的情況,這時(shí)可以設(shè)一個(gè)變量,令其初始值為0,然后做自加運(yùn)算,達(dá)到求和的目的;同樣,如果遇到很多項(xiàng)相乘求積的情況,可以設(shè)一個(gè)變量,令其初始值為1,然后做自乘運(yùn)算,達(dá)到求積的目的;遇到一次加一次減即每一項(xiàng)符號(hào)不一樣的情況,可以直接乘-1,達(dá)到改變符號(hào)目的,最后再找出前一項(xiàng)和后一項(xiàng)之間的聯(lián)系,找到變化規(guī)律,這樣問題就容易解決了。
例題:有一分?jǐn)?shù)序列:1/3-1/3*2/5+1/3*2/5*3/7-1/3*2/5*3/7*4/9+…….求其前20項(xiàng)之和。
分析:這個(gè)例題首先看成是一個(gè)求和運(yùn)算,可以設(shè)變量s=0,然后通過S+=來求和,認(rèn)真分析每一項(xiàng),會(huì)發(fā)現(xiàn)每一項(xiàng)又需要求積運(yùn)算,可以設(shè)變量t=1,做t*=來求積,而且每隔一項(xiàng)符號(hào)就要變化一次,可以設(shè)一個(gè)符號(hào)變量m,每次與-1相乘自然符號(hào)達(dá)到變化要求。最后就剩下分析規(guī)律了,通過分析可以發(fā)現(xiàn),每一項(xiàng)比前一項(xiàng)多出的部分中分子,分母之間都有a=a+1,b=b+2的規(guī)律,這樣問題就好解決了。程序設(shè)計(jì)如下:
main( )
{float s=0,t=1;
intm=1,i,a=1,b=3;
for(i=1;i<=20;i++)
{ t* = a/b; s += m*t;m=(-1)*m; a=a+1; b=b+2;}
printf(“s=%9.6f\n”,s);
}
二、數(shù)字拆分問題
在C語言中,也經(jīng)常接觸到所謂的水仙花數(shù),還有改變一個(gè)數(shù)據(jù)數(shù)字位置這樣一類的問題,這些問題都需要將組成數(shù)據(jù)的每個(gè)數(shù)字作為一個(gè)獨(dú)立的個(gè)體來看,達(dá)到設(shè)計(jì)目的,拆分技巧歸納如下:數(shù)據(jù)除最高位數(shù)(如個(gè)位,百位、千位等)得最高位數(shù)字,剩余數(shù)據(jù)繼續(xù)除,除到個(gè)位才停止。
例如將一個(gè)三位正整數(shù)n拆分。
分析:n是一個(gè)三位數(shù),那么最高位是百位,所以求百位數(shù)字的時(shí)候直接除100即可,依次類推,一直除到個(gè)位就可得出三個(gè)數(shù)字了。類似的問題可以用同樣的方法解決。部分程序設(shè)計(jì)如下:
if(n>=100&&n<1000)
{i=n/100;(*求百位數(shù)字*)
j=(n-i*100)/10;(*求十位數(shù)字*)
k=(n-i*100-j*10)/1;(*求個(gè)位數(shù)字*)
}(注意:這里n,i,j,k均定義為int型,兩個(gè)整形數(shù)據(jù)相除結(jié)果必為整。)
三、遞歸問題
C語言中會(huì)遇到很多的遞歸問題,有時(shí)需要多次重復(fù)循環(huán)或調(diào)用執(zhí)行某個(gè)語句。關(guān)于遞歸的問題,第一步應(yīng)該將問題簡(jiǎn)單化,將問題的規(guī)模縮小到最小,第二步,將問題分解為若干個(gè)小問題,然后通過描述這些較小問題解決原來較大問題的算法。我們?cè)O(shè)計(jì)時(shí)要注意兩個(gè)條件:(1)遞歸形式,(2)遞歸結(jié)束條件,根據(jù)這兩個(gè)條件再寫循環(huán)體或遞歸函數(shù)。
請(qǐng)看下面的例題:
猴子吃桃問題。猴子第一天摘下若干桃子,當(dāng)即吃了一半,還不過癮,又多吃了一個(gè)。第二天又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃了錢一天剩下的一半零一個(gè)。到第10天早上再想吃時(shí)就剩下一個(gè)桃子了,求第一天共摘多少桃子。
分析:(1)到第十天的時(shí)候只剩下一個(gè)桃子,所以結(jié)束條件:f(10)=1。
(2)后一天的桃子數(shù)目總是等于前一天數(shù)目的1/2再減1,所以f(n+1)= f(n)/2-1,也就是f(n)=(f(n+1)+1)*2。
因?yàn)榇藛栴}是一個(gè)從后往前推導(dǎo)的問題,所以在利用循環(huán)結(jié)構(gòu)設(shè)計(jì)時(shí),應(yīng)該從第9天循環(huán)開始,通過9次的循環(huán),數(shù)字不停的疊加,最后一次就可以求出第一天的桃子總數(shù)了,見程序A。
利用遞歸函數(shù)設(shè)計(jì)時(shí),首先還是把握住上面分析的兩個(gè)條件,將這兩個(gè)條件通過判斷的方法寫在遞歸函數(shù)中,通過主函數(shù)來調(diào)用,再用變量將返回值輸出即可。見程序B。
main( )
{ int day=9,x1,x2=1; ea
總結(jié)
以上是生活随笔為你收集整理的c语言中的关于数学问题的编程,C语言中具有代表性几种数学问题编程技巧探索.doc...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言程序存为bin程序,对文件进行加密
- 下一篇: C语言中printf是不是关键字,C语言