版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
會(huì)計(jì)學(xué)1C語(yǔ)言常見(jiàn)算法(2)隨機(jī)數(shù)函數(shù)random(intnum)用于產(chǎn)生[0,num)區(qū)間的一個(gè)整數(shù)。其包含在“stdlib.h”頭文件中為了使每一次運(yùn)行都產(chǎn)生一組新的隨機(jī)數(shù),可以使用randomize()函數(shù)是每次均產(chǎn)生不同的隨機(jī)數(shù)。其包含在頭文件“time.h”中(3)最大值與最小值我們需要將最大值(或最小值)保存在一個(gè)變量中(假設(shè)設(shè)變量名為max和min),變量的初值我們一般設(shè)為數(shù)列中的第一個(gè)值。第1頁(yè)/共41頁(yè)例2:產(chǎn)生20個(gè)50到200之間的隨機(jī)整數(shù),并求出其中的素?cái)?shù)、最大值和最小值。#include"stdlib.h"#include"time.h"main(){inta[20],b[20],max,min,k,i,j=0;
randomize();for(i=0;i<20;i++)a[i]=random(151)+50;產(chǎn)生20個(gè)[50,200]區(qū)間內(nèi)的隨機(jī)數(shù)第2頁(yè)/共41頁(yè)for(i=0;i<20;i++){for(k=2;k<a[i];k++)if(a[i]%k==0)break;
if(k==a[i]){b[j]=a[i];j++;}}for(i=0;i<j;i++)printf("%4d",b[i]);printf("\n");從a數(shù)組中找出其中的素?cái)?shù)放在b數(shù)組中輸出b數(shù)組中的各個(gè)元素
max=a[0];min=a[0];for(i=1;i<20;i++){if(a[i]>max)max=a[i];if(a[i]<min)min=a[i];}printf("max=%4d,min=%4d\n",max,min);}求出a數(shù)組中的最大值與最小值第3頁(yè)/共41頁(yè)二、求累加和的算法1循環(huán)條件次數(shù)控制(加多少項(xiàng)n,20,100)
用誤差控制(直到某一項(xiàng)小于或大于一個(gè)數(shù))使用終止標(biāo)記2循環(huán)體求和求每一項(xiàng):從前一項(xiàng)求出后一項(xiàng)、單獨(dú)求每一項(xiàng)為下一項(xiàng)作準(zhǔn)備3循環(huán)初值:設(shè)為0、設(shè)為第一項(xiàng)注意雙重循環(huán)設(shè)初值的位置第4頁(yè)/共41頁(yè)4-16有一分?jǐn)?shù)序列
的前20項(xiàng)之和main(){inti;floatf1=1,f2=1,f3,s=0;for(i=1;i<=20;i++){
f3=f1+f2;f1=f2;f2=f3;s=s+f2/f1;}printf("s=%f\n",s);}intf1,f2……s=s+1.0*f2/f1s=s+(float)f2/f1第5頁(yè)/共41頁(yè)三、迭代問(wèn)題
這種方法是使用某個(gè)公式反復(fù)校正根的近似值,使之逐步精確化,最后得到滿足精度要求的結(jié)果。第6頁(yè)/共41頁(yè)例:用牛頓迭代法求方程在1.5附近的根(精度為10-5)
2x3-4x2+3x-6=0
迭代公式為:x=x0-f/f1(f1為方程的導(dǎo)數(shù)公式)#include"math.h"main(){floatx,x0,f,f1;x0=1.5;f=((2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;x=x0-f/f1;第7頁(yè)/共41頁(yè)while(fabs(x-x0)>=1e-5)
{
x0=x;f=((2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;x=x0-f/f1;}
printf("%10.8f\n",x);}第8頁(yè)/共41頁(yè)四、數(shù)字分離
有些題中經(jīng)常要求將一個(gè)數(shù)中的每一位數(shù)字或者其中的某些位數(shù)字輸出,就需要使用到數(shù)字分離技術(shù)。如在求解同構(gòu)數(shù)等問(wèn)題時(shí)都需要使用到數(shù)字分離技術(shù)第9頁(yè)/共41頁(yè)例:給出一個(gè)不多于4位的正整數(shù),要求:求出它是幾位數(shù),并且按逆序打印出各位數(shù)字main(){inti,j,k=0;scanf("%d",&i);while(i!=0)
{printf("%4d",i%10);i=i/10;k++;
}printf("\nk=%d\n",k);}第10頁(yè)/共41頁(yè)四、以特殊字符做為終止標(biāo)志例:統(tǒng)計(jì)從鍵盤(pán)輸入字符的個(gè)數(shù),以'#'結(jié)束。#include"stdio.h"main(){charc;inti;c=getchar();for(i=0;c!='#';i++)c=getchar();printf("thenumberis:%d",i);}第11頁(yè)/共41頁(yè)五、排序問(wèn)題常用的排序方法有四種:順序交換法、選擇法、冒泡法、插入法a.順序排序法(n=10)指導(dǎo)思想:先設(shè)定a[0]中存放最小值,然后用a[0]分別與其后的每一個(gè)數(shù)a[j](j=1..9)進(jìn)行比較,在比較過(guò)程中如果發(fā)現(xiàn)有比a[0]小的數(shù),就將a[0]與a[j]互換,一遍掃描之后,a[0]就是10個(gè)數(shù)中最小的數(shù),重復(fù)此算法,只是每次比較時(shí),進(jìn)行比較的數(shù)的范圍向后移一個(gè)位置。反復(fù)執(zhí)行(n-1)次上述操作第12頁(yè)/共41頁(yè)例1:將數(shù)組a中的10個(gè)數(shù)按照由大到小的順序排好(使用順序交換法)#defineN10main(){inta[N],i,j,k,t;for(i=0;i<N;i++)scanf("%d",&a[i]);
for(i=0;i<N-1;i++)for(j=i+1;j<N;j++)if(a[j]<a[i]){t=a[j];a[j]=a[i];a[i]=t;}for(i=0;i<N;i++)printf("%5d",a[i]);}第13頁(yè)/共41頁(yè)b.選擇排序法
指導(dǎo)思想:不急于交換,先找出a[0]到a[9]中的最小數(shù)所在的位置k,一遍掃描完之后,在把a(bǔ)[0]與a[k]進(jìn)行交換,重復(fù)次算法9次。例2:將數(shù)組a中的10個(gè)數(shù)按照由大到小的順序排好(使用選擇法)第14頁(yè)/共41頁(yè)#defineN10main(){inta[N],i,j,k,t;for(i=0;i<N;i++)scanf("%d",&a[i]);
for(i=0;i<N-1;i++){k=i;for(j=i+1;j<N;j++)if(a[j]<a[k])k=j;t=a[i];a[i]=a[k];a[k]=t;}for(i=0;i<N;i++)printf("%5d",a[i]);}第15頁(yè)/共41頁(yè)c.冒泡法指導(dǎo)思想:是將相鄰的兩個(gè)數(shù)進(jìn)行比較,若前一個(gè)數(shù)比后一個(gè)數(shù)大,在交換兩元素的內(nèi)容,否則不交換。從而把最大的數(shù)放在最后位置。第16頁(yè)/共41頁(yè)#defineN10main(){inta[N],i,j,k,t;for(i=0;i<N;i++)scanf("%d",&a[i]);
for(i=0;i<N-1;i++)for(j=0;j<N-i-1;j++)if(a[j+1]<a[j]){t=a[j];a[j]=a[j+1];a[j+1]=t;}for(i=0;i<N;i++)printf("%5d",a[i]);}第17頁(yè)/共41頁(yè)例:有N個(gè)數(shù)已按由小到大的順序排好,要求輸入一個(gè)數(shù),把它插入到原有序列中,而且仍然保持有序。輸入數(shù)據(jù)時(shí),使其數(shù)據(jù)排列仍然有序解題思想:先找到待插入的位置,然后將從該位置起到數(shù)組的最后位置的所有元素均向后移一個(gè)位置。第18頁(yè)/共41頁(yè)
main(){inta[100],i,j,n,x;scanf("%d",&n);/*確定數(shù)組元素中的個(gè)數(shù)*/for(i=0;i<n;i++)scanf("%d",&a[i]);/*給數(shù)組的每個(gè)元素賦初值*/scanf("%d",&x);/*輸入待插入的數(shù)據(jù)*/for(i=0;i<n;i++)if(a[i]>x)break;/*找到待插入的位置i*/for(j=n-1;j>=i;j--)a[j+1]=a[j];/*從a[i]到a[n-1]之間的數(shù)組軍后移一位*/a[i]=x;/*把數(shù)據(jù)x放到a[i]位置處*/for(i=0;i<=n;i++)printf("%5d",a[i]);printf("\n");}第19頁(yè)/共41頁(yè) main() {intx[50],y,n,i; scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&x[i]);printf("%5d",x[i]);}printf("\n"); for(i=0;i<=(n-1)/2;i++) {y=x[i]; x[i]=x[n-1-i]; x[n-1-i]=y;} for(i=0;i<n;i++) printf("%5d",x[i]); printf("\n"); }方法1:例6.將n(n<=50)個(gè)整數(shù)按逆序重放在數(shù)組中。第20頁(yè)/共41頁(yè) main() {intx[100],n,m,i,j; scanf("%d",&n); for(i=0;i<n;i++)scanf("%d",&x[i]); for(j=1;j<=n;j++){m=x[0]; for(i=0;i<n-j;i++)x[i]=x[i+1]; x[n-j]=m; } for(i=0;i<n;i++) printf("%5d",x[i]); printf("\n"); }方法2第21頁(yè)/共41頁(yè)注意:求解水仙花數(shù)、完數(shù)、同構(gòu)數(shù)、最大公約數(shù)和最小公倍數(shù)以及費(fèi)波拉切數(shù)列等內(nèi)容水仙花數(shù):是一個(gè)三位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。如:153=13+53+33完數(shù):一個(gè)數(shù)等于它的所有因子(不包括它本身)之和。如:6=1+2+3同構(gòu)數(shù):一個(gè)數(shù)等于它的平方數(shù)的右端。如5的平方是25最大公約數(shù):使用輾轉(zhuǎn)相除法進(jìn)行求解第22頁(yè)/共41頁(yè)圖形1:(法一)main(){inti,j;for(i=1;i<=5;i++){for(j=1;j<=5;j++)printf(“*”);printf(“\n”);}}*************************六、簡(jiǎn)單圖形打印第23頁(yè)/共41頁(yè)圖形1:(法二)main(){inti;for(i=1;i<=5;i++)printf(“*****\n”);}*************************第24頁(yè)/共41頁(yè)圖形2:(法一)main(){inti,j;for(i=1;i<=5;i++){for(j=1;j<i;j++)printf(““);for(j=1;j<=5;j++)printf(“*”);printf(“\n”);}}*************************第25頁(yè)/共41頁(yè)圖形2:(法二)main(){inti,j;for(i=1;i<=5;i++){for(j=1;j<i;j++)printf(““);printf(“*****\n”);}}*************************第26頁(yè)/共41頁(yè)圖形3:main(){inti,j;for(i=1;i<=5;i++){for(j=1;j<=5-i:j++)printf(““);for(j=1;j<=5;j++)printf(“*”);printf(“\n”);}}*************************第27頁(yè)/共41頁(yè)圖形4:main(){inti,j;for(i=1;i<=5;i++){for(j=1;j<=i;j++)printf(“*”);printf(“\n”);}}***************第28頁(yè)/共41頁(yè)圖形5:main(){inti,j;for(i=1;i<=5;i++){for(j=1;j<=5-i;j++)printf(““);for(j=1;j<=i;j++)printf(“*”);printf(“\n”);}}***************第29頁(yè)/共41頁(yè)*************************圖形6:main(){inti,j,k;for(i=1;i<=4;i++){for(j=1;j<=4-i;j++)printf("");for(k=1;k<=2*i-1;k++)printf("*");printf("\n");}
for(i=1;i<=3;i++){for(j=1;j<=i;j++)printf("");for(k=1;k<=7-2*i;k++)printf("*");printf("\n");}}第30頁(yè)/共41頁(yè)七、字符數(shù)組
在這一部分里要注意字符串的正確的輸入、輸出格式。一般我們使用'\0'做為循環(huán)終止的條件,如想用長(zhǎng)度做為終止條件,則該長(zhǎng)度應(yīng)為字符串的實(shí)際長(zhǎng)度,而不應(yīng)用定義字符數(shù)組時(shí)聲明的長(zhǎng)度
注意:字符串的排序、連接問(wèn)題(5-13、5-16)第31頁(yè)/共41頁(yè)練習(xí)1、在一個(gè)字符串中刪除一個(gè)指定的字符。1、找到要?jiǎng)h除字符的位置,將其后面的字符依次往前移一個(gè)位置。2、利用產(chǎn)生一個(gè)新數(shù)組的方法,對(duì)原串中的不等于指定的字符的字符放到新數(shù)組中。第32頁(yè)/共41頁(yè)#include"stdio.h"main(){charstr[80],c;inti,j;gets(str);c=getchar();j=0;for(i=0;str[i]!='\0';i++)if(str[i]!=c){str[j]=str[i];j++;}str[j]='\0';puts(str);}#include"stdio.h"main(){charstr[80],c;inti,j,k;gets(str);c=getchar();for(i=strlen(str)-1;i>=0;i--)if(str[i]==c){for(k=i;str[k]!='\0';k++)str[k]=str[k+1];str[k]='\0';}puts(str);}第33頁(yè)/共41頁(yè)練習(xí)2、編寫(xiě)程序,比較兩個(gè)字符串的大小。(不能使用strcmp()函數(shù))比較規(guī)則:逐個(gè)字符進(jìn)行比較,直到有兩個(gè)字符不等或有一個(gè)字符串結(jié)束為止。第34頁(yè)/共41頁(yè)main(){chars1[80],s2[80];inti,k;gets(s1);gets(s2);i=0;while(s1[i]!='\0'&&s2[i]!='\0')
if(s1[i]!=s2[i])break;elsei++;
k=s1[i]-s2[i];if(k>0)printf("s1>s2\n");elseif(k<0)printf("s1<s2\n");elseprintf("s1=s2\n");}第35頁(yè)/共41頁(yè)
main(){chars1[80],s2[80];inti,k;gets(s1);gets(s2);i=0;while(s1[i]==s2[i]&&s1[i]!='\0'&&s2[i]!='\0')i++;k=s1[i]-s2[i];if(k>0)printf("s1>s2\n");elseif(k<0)printf("s1<s2\n");elseprintf("s1=s2\n");}第36頁(yè)/共41頁(yè)練習(xí)3、判斷一字符串是否為另一個(gè)字符串的子串,若是則返回第一出現(xiàn)的起始位置,否則則返回0main(){staticchars1[20]="IloveChina!";staticchars2[20]="love";inti,j,k,m=0;for(i=0;s1[i]!='\0';i++)
if(s1[i]==s2[0])
{for(j=1,k=i+1;s2[j]!='\0';j++,k++)if(s1[k]!=s2[j])break;if(s2[j]=='\0'){m=i;break;}
}printf("stationis%d\n",m);}第37頁(yè)/共41頁(yè)八、對(duì)矩陣的操作注意:矩陣的主對(duì)角線、副對(duì)角線的概念如何實(shí)現(xiàn)矩陣轉(zhuǎn)置、求解矩陣中指定的元素之和等問(wèn)題(如求解右上三角、左下三角的元素之和)打印楊輝三角形(用一維和二維分別實(shí)現(xiàn))第38頁(yè)/共41頁(yè)習(xí)題7.6:輸出楊輝三角形(10行)。vo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GBT 34286-2017 溫室氣體 二氧化碳測(cè)量 離軸積分腔輸出光譜法專題研究報(bào)告
- 薪酬稅務(wù)專員面試題目集
- 客戶服務(wù)經(jīng)理面試常見(jiàn)問(wèn)題及答案參考
- 銷售主管筆試題及銷售團(tuán)隊(duì)管理能力評(píng)估含答案
- 廚師長(zhǎng)崗位面試與技能測(cè)試指南
- 2025年移動(dòng)健康監(jiān)測(cè)設(shè)備開(kāi)發(fā)項(xiàng)目可行性研究報(bào)告
- 2025年數(shù)字貨幣技術(shù)應(yīng)用可行性研究報(bào)告
- 2025年智能醫(yī)療健康監(jiān)測(cè)系統(tǒng)建設(shè)可行性研究報(bào)告
- 2025年中小企業(yè)數(shù)字化轉(zhuǎn)型咨詢項(xiàng)目可行性研究報(bào)告
- 2025年數(shù)字化智能鎖研發(fā)項(xiàng)目可行性研究報(bào)告
- 嘉興新嘉愛(ài)斯熱電有限公司工業(yè)廢棄物清潔化處置技改項(xiàng)目環(huán)評(píng)報(bào)告
- 學(xué)校代收代管協(xié)議書(shū)
- xx加油站-反恐應(yīng)急預(yù)案
- GB/T 5709-2025紡織品非織造布術(shù)語(yǔ)
- 小組作業(yè)創(chuàng)新創(chuàng)業(yè)
- 含量測(cè)定技術(shù)知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋天津生物工程職業(yè)技術(shù)學(xué)院
- 架空輸電線路設(shè)計(jì)試題
- 煙草法律法規(guī)零售戶培訓(xùn)
- 社區(qū)警務(wù)工作復(fù)習(xí)測(cè)試附答案
- 2024秋期國(guó)家開(kāi)放大學(xué)《西方行政學(xué)說(shuō)》一平臺(tái)在線形考(任務(wù)一至四)試題及答案
- 【統(tǒng)考】山東省濟(jì)南市2024屆高三下學(xué)期一模英語(yǔ)試題
評(píng)論
0/150
提交評(píng)論