C語(yǔ)言程序設(shè)計(jì)第十一講_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)第十一講_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)第十一講_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)第十一講_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)第十一講_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

會(huì)計(jì)學(xué)1C語(yǔ)言程序設(shè)計(jì)第十一講例5:輸入若干個(gè)正整數(shù),以0或負(fù)數(shù)結(jié)束,將其中個(gè)位不為0的數(shù)輸出,并統(tǒng)計(jì)滿(mǎn)足條件的數(shù)據(jù)個(gè)數(shù)。輸入xn=0

count++

fori=0ton-1a[i]%10!=0T輸出a[i]F

x>0a[n]=xcount=0n++輸入x#include<iostream.h>voidmain(){inta[100],x,n,i,count;n=0;count=0;cin>>x;while(x>0){ a[n]=x;n++; cin>>x;}for(i=0;i<n;i++) if(a[i]%10!=0) {cout<<a[i]<<""; count++; }cout<<"個(gè)數(shù)是:"<<count;}輸出count第1頁(yè)/共29頁(yè)例6:輸入任意n個(gè)數(shù),將其中能被5整除的數(shù)組成一個(gè)新的數(shù)組。舉例3106525715ab01234561052515mmmmm第2頁(yè)/共29頁(yè)#include"iostream.h"voidmain(){ inta[100],b[100],n,m,i; cin>>n; for(i=0;i<n;i++) cin>>a[i]; m=0; for(i=0;i<n;i++) if(a[i]%5==0) { b[m]=a[i]; m++; } for(i=0;i<m;i++) cout<<b[i]<<"";}輸入nm=0

m++

fori=0ton-1a[i]%5==0Tb[m]=a[i]F

fori=0ton-1輸入a[i]

fori=0tom-1輸出b[i]第3頁(yè)/共29頁(yè)

基本思想:假設(shè)數(shù)組a已經(jīng)按由小到大的順序排好序,設(shè)三個(gè)變量low,high和mid分別代表首元素,最后一個(gè)元素以及中間元素的下標(biāo),初值分別為:low=0、high=n-1、mid=(low+high)/2。從中間元素開(kāi)始查找,用x和a[mid]比較,此時(shí)有三種情況:1)若x==a[mid],則查找成功;2)若x<a[mid],則令high=mid-13)若x>a[mid],則令low=mid+1折半查找法第4頁(yè)/共29頁(yè)例:數(shù)組元素為:{5,13,19,21,37,56,64,75,80,88,92}1.查找x=21的情況(1)low=0;high=10;mid=(0+10)/2=5513192137566475808892lowmidhigh因?yàn)閍[mid]>x,所以向左找,令high=mid-1=4(2)low=0;high=4;mid=(0+4)/2=2513192137566475808892lowmidhigh因?yàn)閍[mid]<x,所以向右找,令low=mid+1=3(3)low=3;high=4;mid=(3+4)/2=3513192137566475808892lowmidhigh因?yàn)閍[mid]==x,查找成功,所查元素的下標(biāo)為mid012345678910012345678910012345678910第5頁(yè)/共29頁(yè)(1)low=0;high=10;mid=(0+10)/2=5因?yàn)閍[mid]<x,所以向右找,令low=mid+1=6(2)low=6;high=10;mid=(6+10)/2=8513192137566475808892lowmidhigh因?yàn)閍[mid]<x,所以向右找,令low=mid+1=9(3)low=9;high=10;mid=(9+10)/2=9513192137566475808892lowmidhigh因?yàn)閍[mid]>x,所以向左找,令high=mid-1=82.查找x=85的情況513192137566475808892lowmidhigh此時(shí)low>high,查找失敗012345678910012345678910012345678910第6頁(yè)/共29頁(yè)#include<iostream.h>voidmain(){ inta[100],i,n,x,low,high,mid;

cin>>n; for(i=0;i<n;i++) cin>>a[i]; cin>>x;

low=0; high=n-1; while(low<=high) { mid=(low+high)/2; if(x==a[mid]) break; elseif(x<a[mid]) high=mid-1; else low=mid+1; } if(x==a[mid]) cout<<"YES:"<<mid; else cout<<"NO";}第7頁(yè)/共29頁(yè)#include<iostream.h>voidmain(){inti,j,temp,n,a[100];

cin>>n;for(i=0;i<n;i++)cin>>a[i];

for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(a[i]>a[j]) {temp=a[i];a[i]=a[j]; a[j]=temp;}

for(i=0;i<n;i++) cout<<a[i]<<"";}例:將任意n個(gè)數(shù)由小到大排序。排序#include<iostream.h>voidmain(){inti,j,n,temp,di,a[100];

cin>>n;for(i=0;i<n;i++)cin>>a[i];

for(i=0;i<n-1;i++)

di=i;for(j=i+1;j<n;j++)if(a[di]>a[j]) di=j;if(i!=di){temp=a[i];a[i]=a[di]; a[di]=temp;}

for(i=0;i<n;i++) cout<<a[i]<<"";}{選擇排序法}第8頁(yè)/共29頁(yè)例:用冒泡法對(duì)n個(gè)數(shù)進(jìn)行排序(從小到大)排序過(guò)程:(1)比較第一個(gè)數(shù)與第二個(gè)數(shù),若為逆序a[0]>a[1],則交換;然后比較第二個(gè)數(shù)與第三個(gè)數(shù);依次類(lèi)推,直至第n-1個(gè)數(shù)和第n個(gè)數(shù)比較為止——第一趟冒泡排序,結(jié)果最大的數(shù)被安置在最后一個(gè)元素位置上;(2)對(duì)前n-1個(gè)數(shù)進(jìn)行第二趟冒泡排序,結(jié)果使次大的數(shù)被安置在第n-1個(gè)元素位置;(3)重復(fù)上述過(guò)程,共經(jīng)過(guò)n-1趟冒泡排序后,排序結(jié)束。相鄰兩數(shù)比較,大數(shù)小數(shù)

第9頁(yè)/共29頁(yè)3 8 4 2 13 8 4 2 13 8 4 2 13 4 8 2 13 4 2 8 13 4 2 1 8第一趟3 4 2 1 83 4 2 1 83 2 4 1 83 2 1 4 8第二趟3 2 1 4 82 3 1 4 82 1 3 4 8第三趟2 1 3 4 81 2 3 4 8第四趟a[1]a[2]a[3]a[4]a[5]

j=1to4

j=1to3

j=1to2

j=1to1由小到大排序第10頁(yè)/共29頁(yè)#include<stdio.h>voidmain(){inta[100],n,i,j,temp;scanf("%d",&n);for(i=1;i<=n;i++) scanf("%d",&a[i]);for(i=1;i<n;i++) for(j=1;j<=n-i;j++) if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; }for(i=1;i<=n;i++) printf("%5d",a[i]);}第11頁(yè)/共29頁(yè)1 3 4 98 5 2 35 2 4 67 6 2 1a0a1a2a30 1 2 3a0[0] a0[1] a0[2] a0[3]a1[0] a1[1] a1[2] a1[3]a2[0] a2[1] a2[2] a2[3]a3[0] a3[1] a3[2] a3[3]a第12頁(yè)/共29頁(yè)二維數(shù)組的基本概念類(lèi)型名數(shù)組名[常量1][常量2];例如:inta[3][4];整型二維數(shù)組名字為a3行a[0]a[0]

存儲(chǔ)結(jié)構(gòu)

邏輯結(jié)構(gòu)a[0][0]數(shù)組a

定義4列共12個(gè)元素a[0]a[0]a[1][0]a[1][1]

a[1][2]

a[1][3]

a[2][0]

a[2][1]

a[2][2]

a[2][3]是一個(gè)矩陣或一張表格第0行第1行第2行第0列第1列第2列第3列a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]按行存儲(chǔ)a[0]a[1]a[2][0][1][2][3]一維數(shù)組個(gè)數(shù)一維數(shù)組中元素的個(gè)數(shù)第13頁(yè)/共29頁(yè)分行初始化例inta[2][3]={{1,2},{4}};例inta[][3]={{1,2},{4}};部分初始化a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]120400行長(zhǎng)度可以省略例inta[2][3]={{1,2,3},{4,5,6}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]120400第14頁(yè)/共29頁(yè)按存儲(chǔ)順序初始化例inta[2][3]={1,2,4};例inta[2][3]={1,2,3,4,5,6};全部初始化部分初始化例inta[][3]={1,2,3,4,5};行長(zhǎng)度可以省略a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]124000a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123450第15頁(yè)/共29頁(yè)123456789101112二維數(shù)組的輸入和輸出例1:將一個(gè)3×4矩陣輸入到數(shù)組中并按行輸出。#include"stdio.h"voidmain(){inta[3][4],i,j;for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++){for(j=0;j<4;j++)printf("%3d",a[i][j]);printf("\n");}}01 2 3012第16頁(yè)/共29頁(yè)舉例例2:寫(xiě)結(jié)果。#include<stdio.h>voidmain(){ inti,x[3][3]={{6,5},{4,3},{2,1}}; for(i=0;i<3;i++) printf("%d",x[i][2-i]);}650430210012012032第17頁(yè)/共29頁(yè)例3:程序功能是求二維數(shù)組每列元素的平均值,修改程序中的錯(cuò)誤。#include"iostream.h"#defineM3;voidmain(){inta[M][M]={1,2,3,4,5,6,7}inti,j;for(i=0;i<M;i++){for(j=0;j<M;j++) ave[i]=ave[i]+a[i][j];ave[i]=ave[i]/M;}for(j=0;j<M;j++)cout<<""<<ave[j];}#include"iostream.h"#defineM3voidmain(){inta[M][M]={1,2,3,4,5,6,7};inti,j;floatave[M];for(i=0;i<M;i++){for(j=0;j<M;j++) ave[i]=ave[i]+a[j][i];ave[i]=ave[i]/M;}for(j=0;j<M;j++) cout<<""<<ave[j];}={0}第18頁(yè)/共29頁(yè)#include<stdio.h>voidmain(){inta[50][50],m,n,i,j,row,column,max;cin>>m>>n;for(i=0;i<m;i++)for(j=0;j<n;j++)scanf("%d",&a[i][j]);

max=a[0][0];

for(i=0;i<m;i++)for(j=0;j<n;j++)

if(max<a[i][j])

{max=a[i][j]; row=i; column=j;}

printf("max=%d,row=%d,column=%d",max,row,column);}例4:求二維數(shù)組中最大元素值及其行列號(hào)row=0;column=0;第19頁(yè)/共29頁(yè)例5:將二維數(shù)組行列元素互換,存到另一個(gè)數(shù)組中a=123456b=142536舉例#include<iostream.h>#include<iomanip.h>voidmain(){inta[50][50],b[50][50];intm,n,i,j;cin>>m>>n;for(i=0;i<m;i++)for(j=0;j<n;j++) cin>>a[i][j];for(i=0;i<n;i++)for(j=0;j<m;j++) b[i][j]=a[j][i];for(i=0;i<n;i++){for(j=0;j<m;j++)cout<<setw(3)<<b[i][j];cout<<endl;}}沿主對(duì)角線(xiàn)將矩陣a翻轉(zhuǎn)所得到的矩陣就是a的轉(zhuǎn)置矩陣第20頁(yè)/共29頁(yè)

矩陣的和運(yùn)算123456789+111654987=234101010161616

矩陣的積運(yùn)算123456789321654987=?????????1*3+2*6+3*9i行上的元素分別與j列上的元素相乘后的累加和作為結(jié)果矩陣的[i][j]矩陣的運(yùn)算

矩陣的差運(yùn)算123456789+111654987=012-202-202第21頁(yè)/共29頁(yè)例6:打印楊輝三角形。(a+b)n……111121133114641#include<stdio.h>#defineM30voidmain(){inta[M][M]={0},i,j,n;scanf("%d",&n);for(i=0;i<n;i++){a[i][0]=1; a[i][i]=1; }

for(i=2;i<n;i++)for(j=1;j<i;j++) a[i][j]=a[i-1][j]+a[i-1][j-1];for(i=0;i<n;i++){ for(j=0;j<=i;j++) printf("%5d",a[i][j]); printf("\n"); }}舉例0123401234第22頁(yè)/

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論