版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
C語言程序設計第6章利用數(shù)組處理批量數(shù)據(jù)C語言程序設計第6章利用數(shù)組處理批量數(shù)據(jù)C語言程序設計@SoochowUniversity2主要內(nèi)容引言一維數(shù)組的定義和引用二維數(shù)組的定義和引用字符數(shù)組與字符串C語言程序設計@SoochowUniversity2主要內(nèi)C語言程序設計@SoochowUniversity3引言基本數(shù)據(jù)類型整型實型字符型構(gòu)造數(shù)據(jù)類型(用戶自定義數(shù)據(jù)類型)數(shù)組結(jié)構(gòu)體共用體C語言程序設計@SoochowUniversity3引C語言程序設計@SoochowUniversity4引言數(shù)組數(shù)組是有序數(shù)據(jù)的集合特點所有數(shù)據(jù)元素類型相同數(shù)據(jù)元素類型可以是基本數(shù)據(jù)類型和構(gòu)造數(shù)據(jù)類型由數(shù)組名和下標確定具體的數(shù)據(jù)元素C語言程序設計@SoochowUniversity4引C語言程序設計@SoochowUniversity5一維數(shù)組的定義一維數(shù)組的定義格式:類型數(shù)組名[數(shù)組長度];長度——只能為常量、常量表達式類型——數(shù)組中元素的類型數(shù)組名——遵循標識符命名規(guī)則,表示數(shù)組中元素的起始位置例如:inta[6];分配了六個單元,每個單元存放一個int(即4個Byte),而且各單元連續(xù)!注意:
c不允許對數(shù)組的大小作動態(tài)定義。350x78240x78280x78340x783846175781000x782C0x7830aa[0]a[1]a[2]a[3]a[4]a[5]C語言程序設計@SoochowUniversity5一維數(shù)一維數(shù)組的定義舉例:inta[4+6];合法不合法intn=10;inta[n];#defineN10floatarry[N];合法結(jié)論:定義數(shù)組時,數(shù)組長度必須是常量或者常量表達式,不能為變量。C語言程序設計6@SoochowUniversity一維數(shù)組的定義舉例:不合法intn=10;#definC語言程序設計@SoochowUniversity7一維數(shù)組的使用一維數(shù)組的使用格式:名稱[下標];說明:1)下標范圍:0~長度-12)越界問題:C中不檢查越界,但越界寫數(shù)據(jù)可能造成系統(tǒng)崩潰3)數(shù)組不能整體引用,只能引用其中的元素例如:inta[3];
a[2]=19; 4)下標可以是常量、變量、表達式或函數(shù)C語言程序設計@SoochowUniversity7一維數(shù)一維數(shù)組元素的引用舉例:inta[10];a[0]=a[5]+a[7]-a[2*3]合法C語言程序設計8@SoochowUniversityintn=5;inta[10];a[n]=20;intn=5;inta[5];a[n]=20;不正確注意:使用數(shù)組時,程序員必須自己檢查數(shù)組越界問題。使用數(shù)組時,數(shù)組下標可以是常量,變量,表達式,甚至是函數(shù)。合法一維數(shù)組元素的引用舉例:合法C語言程序設計8@SoochowC語言程序設計@SoochowUniversity9一維數(shù)組的初始化部分初始化:例如:inta[20]={3,2,5,6,9};其余元素為0全部初始化:——數(shù)組長度可以省略例如:inta[3]={3,4,6}; intb[]={23,45,67,89};對數(shù)組全部元素初始化為0方式例如:inta[5]={0,0,0,0,0};
或者:inta[5]={0};不能:inta[5]={0*10};說明:如果不給數(shù)組設置初值,則為隨機數(shù)C語言程序設計@SoochowUniversity9一維數(shù)一維數(shù)組的初始化在定義數(shù)組的同時,給各數(shù)組元素賦值inta[10]={0,1,2,3,4,5,6,7,8,9};inta[10]={0,1,2,3,4};相當于inta[10]={0,1,2,3,4,0,0,0,0,0};inta[10]={0,0,0,0,0,0,0,0,0,0};相當于inta[10]={0};inta[5]={1,2,3,4,5};可寫為inta[]={1,2,3,4,5};C語言程序設計10@SoochowUniversity一維數(shù)組的初始化在定義數(shù)組的同時,給各數(shù)組元素賦值C語言程序C語言程序設計@SoochowUniversity11一維數(shù)組程序舉例用數(shù)組來處理求fibonacci數(shù)列問題冒泡排序選擇排序插入排序統(tǒng)計數(shù)字序列中0-9中各數(shù)值出現(xiàn)的次數(shù)任意從鍵盤上輸入一個正整數(shù)(最大為65535),請將它逆序輸出C語言程序設計@SoochowUniversity11一維一維數(shù)組程序舉例
例6.2用數(shù)組處理求Fibonacci數(shù)列問題解題思路:例5.8中用簡單變量處理的,缺點不能在內(nèi)存中保存這些數(shù)。假如想直接輸出數(shù)列中第25個數(shù),是很困難的。如果用數(shù)組處理,每一個數(shù)組元素代表數(shù)列中的一個數(shù),依次求出各數(shù)并存放在相應的數(shù)組元素中C語言程序設計12@SoochowUniversity一維數(shù)組程序舉例例6.2用數(shù)組處理求FibonaccC語言程序設計@SoochowUniversity13例題(1)用數(shù)組來處理求fibonacci數(shù)列問題。#include<stdio.h>voidmain(){inti;intf[20]={1,1};for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if((i+1)%5==0)printf("\n");printf("%12d",f[i]);}}C語言程序設計@SoochowUniversity13例題
例6.3有6個地區(qū)的面積,要求對它們按由小到大的順序排列。解題思路:排序的規(guī)律有兩種:一種是“升序”,從小到大;另一種是“降序”,從大到小把題目抽象為:“對n個數(shù)按升序排序”常用的排序算法起泡排序(冒泡排序)選擇排序插入排序一維數(shù)組程序舉例C語言程序設計14@SoochowUniversity例6.3有6個地區(qū)的面積,要求對它們按由小到大的順序985420895420859420854920854290854209大數(shù)沉淀,小數(shù)起泡a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<5;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}起泡排序C語言程序設計15@SoochowUniversity988888大數(shù)沉淀,小數(shù)起泡a[0]for(i=0;i<5854209584209548209542809542089a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<4;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}起泡排序C語言程序設計16@SoochowUniversity85555a[0]for(i=0;i<4;i++)542089452089425089420589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<3;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}起泡排序C語言程序設計17@SoochowUniversity5444a[0]for(i=0;i<3;i++)420589240589204589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<2;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}起泡排序C語言程序設計18@SoochowUniversity422a[0]for(i=0;i<2;i++)204589024589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<1;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}起泡排序C語言程序設計19@SoochowUniversity20a[0]for(i=0;i<1;i++)for(i=0;i<5;i++)if(a[i]>a[i+1]){……}for(i=0;i<4;i++)if(a[i]>a[i+1]){……}for(i=0;i<1;i++)if(a[i]>a[i+1]){……}……for(i=0;i<5-j;i++)if(a[i]>a[i+1]){……}for(j=0;j<5;j++)結(jié)論:如果有n個數(shù),則要進行n-1趟比較。在第1趟比較中要進行n-1次兩兩比較,在第j趟比較中要進行n-j次兩兩比較。C語言程序設計20@SoochowUniversityfor(i=0;i<5;i++)C語言程序設計@SoochowUniversity21程序流程圖如下:冒泡排序C語言程序設計@SoochowUniversity21程序C語言程序設計@SoochowUniversity22冒泡排序源程序#include<stdio.h>#defineN10voidmain(){intarray[N];inti,j,t;printf("Input10numbers:\n");for(i=0;i<N;i++) scanf("%d",&array[i]);printf("\n");for(j=0;j<N;j++){ for(i=0;i<(N-j);i++) {
if(array[i]>array[i+1]) { t=array[i]; array[i]=array[i+1]; array[i+1]=array[i]; } }}printf("Thesortednumbers:\n");for(i=0;i<N;i++){ printf("%d",array[i]); if((i+1)%5==0) printf("\n");} }C語言程序設計@SoochowUniversity22冒泡985420a[0]a[1]a[2]a[3]a[4]a[5]index=0;for(i=1;i<6;i++)if(a[index]<a[i])
{index=i}max=a[index];a[index]=a[5];a[5]=max;選擇排序985420985420985420985420085429C語言程序設計23@SoochowUniversity9a[0]index=0;選擇排序99990C語言程序設計2085429a[0]a[1]a[2]a[3]a[4]a[5]max=a[0];index=0;for(i=1;i<5;i++)if(max<a[i]){max=a[i];index=i}a[index]=a[4];a[4]=max;選擇排序085429085429085429025489index=0;for(i=1;i<5;i++)if(a[index]<a[i])
{index=i}max=a[index];a[index]=a[4];a[4]=max;C語言程序設計24@SoochowUniversity0a[0]max=a[0];index=0;選擇排序00025489a[0]a[1]a[2]a[3]a[4]a[5]選擇排序025489025489024589index=0;for(i=1;i<4;i++)if(a[index]<a[i])
{index=i}max=a[index];a[index]=a[3];a[3]=max;C語言程序設計25@SoochowUniversity0a[0]選擇排序000index=0;C語言程序設計25@024589a[0]a[1]a[2]a[3]a[4]a[5]選擇排序024589024589index=0;for(i=1;i<3;i++)if(a[index]<a[i])
{index=i}max=a[index];a[index]=a[2];a[2]=max;C語言程序設計26@SoochowUniversity0a[0]選擇排序00index=0;C語言程序設計26@S024589a[0]a[1]a[2]a[3]a[4]a[5]選擇排序024589結(jié)論:如果有n個數(shù),則要進行n-1趟比較。在第1趟比較中要進行n-1次兩兩比較,在第j趟比較中要進行n-j次兩兩比較。index=0;for(i=1;i<2;i++)if(a[index]<a[i])
{index=i}max=a[index];a[index]=a[1];a[1]=max;C語言程序設計27@SoochowUniversity0a[0]選擇排序0結(jié)論:index=0;C語言程序設計27C語言程序設計@SoochowUniversity28選擇排序原理每次循環(huán)選擇沒有排序的元素中的最小元素置于元素序列的開始N-S圖輸入數(shù)組aindex=kfori=k+1ton-1a[i]<a[index]index=ia[index]<==>a[k]YNfork=0ton-2輸出數(shù)組aC語言程序設計@SoochowUniversity28選擇C語言程序設計@SoochowUniversity29選擇排序程序voidmain(){
inti,index,k,n,temp,a[10]; for(i=0;i<10;i++)scanf(“%d”,&a[i]);for(k=0;k<10;k++){index=k;for(i=k+1;i<10;i++)if(a[i]<a[index])index=i;temp=a[index];a[index]=a[k];a[k]=temp;}for(i=0;i<10;i++)printf(“%d”,a[i]);}選擇數(shù)組元素選擇排序大循環(huán)交換元素C語言程序設計@SoochowUniversity29選擇C語言程序設計@SoochowUniversity30插入排序原理:把數(shù)組中的元素插入到適當位置。步驟:將數(shù)組中的開始兩個元素按要求(降序/升序)排序。把其余所有元素依次插入到已排序序列中的適當位置原始數(shù)據(jù)
BEDCA第一輪
BEDCA第二輪
BDECA第三輪
BCDEA第四輪ABCDEC語言程序設計@SoochowUniversity30插入C語言程序設計@SoochowUniversity31插入排序流程圖輸入數(shù)組atemp=a[k]fori=k-1to0a[i]>tempa[i+1]=a[i]YNfork=2ton-1輸出數(shù)組a排序a[0],a[1]a[i+1]=tempbreak;i<0a[0]=tempYNC語言程序設計@SoochowUniversity31插入C語言程序設計@SoochowUniversity32一維數(shù)組應用舉例統(tǒng)計數(shù)字序列中0-9中各數(shù)值出現(xiàn)的次數(shù)數(shù)字序列保存于一個整型數(shù)組中任意從鍵盤上輸入一個正整數(shù)(最大為65535),請將它逆序輸出如:輸入:64934;則輸出:43946對每一個數(shù)進行如下處理提取個位數(shù)字:讓數(shù)字序列對10求余控制循環(huán)每次循環(huán)讓整數(shù)減去個位數(shù),并除以10當(1)結(jié)果的個位數(shù)為0時,表示整數(shù)數(shù)字檢測完畢。C語言程序設計@SoochowUniversity32一維C語言程序設計@SoochowUniversity33二維數(shù)組多維數(shù)組的空間想象二維數(shù)組:一個表格或一個平面矩陣一維數(shù)組:一列長表或一個向量多維數(shù)組:多維空間的一個數(shù)據(jù)列陣三維數(shù)組:三維空間的一個方陣C語言程序設計@SoochowUniversity33二維C語言程序設計@SoochowUniversity34二維數(shù)組的定義格式<類型>名稱[長度1][長度2];說明:1)長度1和長度2——常量表達式,其中長度1表示行數(shù),長度2表示列數(shù)2)內(nèi)存中二維數(shù)組的元素按行存放C語言程序設計@SoochowUniversity34二維C語言程序設計@SoochowUniversity35地址
值
數(shù)組元素b[0][0]b[0][1]b[0][2]b[1][0]b[1][1]b[1][2]b[2][0]b[2][1]b[2][2]3000H3004H3008H300CH3010H3014H3018H301CH3020H例如:整型數(shù)組b[3][3]={{1,2,3},{4,5,6},{7,8,9}};123456789C語言程序設計@SoochowUniversity35地址C語言程序設計@SoochowUniversity36問題:有了二維數(shù)組的基礎,那么多維數(shù)組如何定義呢?
定義三維數(shù)組:
floata[2][3][4];注意:多維數(shù)組元素在內(nèi)存中的排列順序:第一維的下標變化最慢,最右邊的下標變化最快。二維數(shù)組的定義C語言程序設計@SoochowUniversity36問題C語言程序設計@SoochowUniversity37二維數(shù)組的使用
格式:
名稱[下標1][下標2]
——下標范圍0~下標1-1;0~下標2-1
——下標可以為常量、變量、表達式或函數(shù)C語言程序設計@SoochowUniversity37二維C語言程序設計@SoochowUniversity38二維數(shù)組的說明重要的理解嚴格區(qū)分在定義數(shù)組時用的a[3][4]和引用元素時的a[3][4]的區(qū)別。前者a[3][4]用來定義數(shù)組的維數(shù)和各維的大小,后者a[3][4]中的3和4是下標值,a[3][4]代表某一個元素。記?。?1)數(shù)組下標總是從0開始!(2)一維數(shù)組的最大下標總是數(shù)組長度減1!(3)二維數(shù)組或多維數(shù)組的最大下標總是其維數(shù)減1和各維大小減1。C語言程序設計@SoochowUniversity38二維C語言程序設計@SoochowUniversity39二維數(shù)組的初始化1、按行初始化:例如:inta[3][2]={{2},{3,2},{4}};
2、整體初始化:
例如:inta[2][3]={2,3,4,1,8,9};
3、全部元素初始化:——行可以省略
例如:inta[][3]={2,3,4,5,6,7};C語言程序設計@SoochowUniversity39二維inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};inta[3][4]={{1},{5},{9}};等價于inta[3][4]={{1,0,0,0},{5,0,0,0},{9,0,0,0}};inta[3][4]={{1},{5,6}};相當于inta[3][4]={{1},{5,6},{0}};二維數(shù)組的初始化C語言程序設計40@SoochowUniversityinta[3][4]={{1,2,3,4},{5,6,7,inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};等價于:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};inta[][4]={{0,0,3},{},{0,10}};合法二維數(shù)組的初始化C語言程序設計41@SoochowUniversityinta[3][4]={1,2,3,4,5,6,7,8,9C語言程序設計@SoochowUniversity42二維數(shù)組與一維數(shù)組的關系
兩維數(shù)組和一維數(shù)組的關系:例inta[3][4];a[0][0]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]每個元素a[i]由包含4個元素的一維數(shù)組組成二維數(shù)組a是由3個元素組成014523a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[0][0]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[1][2]67101189a[0]a[1]a[2]C語言程序設計@SoochowUniversity42二維C語言程序設計@SoochowUniversity43二維數(shù)組程序舉例(1)將一個二維數(shù)組行和列元素互換,存到另一個二維數(shù)組中。原理:b[j][i]=a[i][j]#include<stdio.h>voidmain(){inta[2][3]={{1,2,3},{4,5,6}};intb[3][2],i,j;printf("arraya:\n");for(i=0;i<=1;i++){for(j=0;j<=2;j++){printf("%5d",a[i][j]);b[j][i]=a[i][j];} printf("\n");}printf("arrayb:\n");for(i=0;i<=2,i++){for(j=0;j<=1;j++)printf("%5d",b[i][j]);printf("\n");}}C語言程序設計@SoochowUniversity43二維C語言程序設計@SoochowUniversity44二維數(shù)組程序舉例(2)問題有一個3×4的矩陣,要求編程序求出其中值最大的那個元素的值,以及其所在的行號和列號。N-S流程圖C語言程序設計@SoochowUniversity44二維C語言程序設計@SoochowUniversity45例(2)源程序#include<stdio.h>voidmain(){inti,j,row=0,colum=0,max;inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};max=a[0][0];for(i=0;i<=2;i++)for(j=0;j<=3;j++)if(a[i][j]>max){max=a[i][j];row=i;colum=j;
}
/*ifend*/printf(“max=%d,row=%d,colum=%d\n”,max,row,colum);}C語言程序設計@SoochowUniversity45例(C語言程序設計@SoochowUniversity46二維數(shù)組程序舉例(2)編程打印下列形式的楊輝三角(10行) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 11 5 10105 1 1 6 15 20 156 1n[i][j]=n[i-1][j-1]+n[i-1][j]C語言程序設計@SoochowUniversity46二維C語言程序設計@SoochowUniversity47字符數(shù)組與字符串字符數(shù)組存放字符數(shù)據(jù)的數(shù)組,字符數(shù)組中的一個元素存放一個字符。字符串字符串:雙引號括起的多個字符序列,例如:“abc”,“1”,“abc123”字符串尾:系統(tǒng)自動添加’\0’//ASCII為零的字符字符串的含義:字符串的起始位置字符串的存儲:——利用字符數(shù)組chars[10]={“Hello”};chars[]=”Hello”; //數(shù)組的長度為6chars[10]={‘2’,’3’,’4’,’5’,’\0’};//字符形式的串chars[10]={‘2’,’3’,’4’,’5’};//字符形式,不是字符串C語言程序設計@SoochowUniversity47字符C語言程序設計@SoochowUniversity48字符串的輸入/輸出利用scanf/printf進行:
charstr[20]=“Helloworld”; scanf(“%s”,str);//str數(shù)組名,表示起始位置,代表串的起始位置
printf(“%s”,str); //輸出從str開始的串說明:
(1)scanf中不需要求地址運算,直接用數(shù)組名;
(2)printf中給出數(shù)組名,輸出遇到’\0’結(jié)束;
(3)scanf輸入串,以空格和回車鍵和Tab鍵進行分割例如
charstr[13];scanf("%S",Str);如果輸入以下12個字符
Howareyou?How\0C語言程序設計@SoochowUniversity48字符C語言程序設計@SoochowUniversity49字符串的輸入/輸出利用puts/gets進行:
puts(數(shù)組名);—輸出字符串,并將’\0’轉(zhuǎn)換成換行輸出。
gets(數(shù)組名);—輸入字符串;只能以回車鍵作為分割符說明:一般情況下,字符串的輸入采用gets函數(shù)使用這兩個函數(shù)時,需要#include<stdio.h>用puts函數(shù)輸出的字符串中可以包含轉(zhuǎn)義字符C語言程序設計@SoochowUniversity49字符C語言程序設計@SoochowUniversity50例如:charstr[]={″China\nBeijing″};puts(str);輸出結(jié)果:ChinaBeijing
在輸出時,將字符串結(jié)束標志′\0′轉(zhuǎn)換成′\n′,即輸出完字符串后換行。字符串的輸入/輸出C語言程序設計@SoochowUniversity50例如C語言程序設計@SoochowUniversity51字符串數(shù)組:二維字符數(shù)組二維字符數(shù)組初始化
例
charfruit[][7]={“Apple”,”O(jiān)range”,”Grape”,”Pear”,”Peach”};fruit[0]fruit[1]fruit[2]fruit[3]fruit[4]Apple\0\0Orange\0Grape\0\0Pear\0\0\0Peach\0\0C語言程序設計@SoochowUniversity51字符C語言程序設計@SoochowUniversity52字符串相關的系統(tǒng)函數(shù)(string.h)
例如:
charstr1[30]={“People’sRepublicof”};charstr2[]={“China”}; printf(“%s”,strcat(str1,str2));字符串連接函數(shù)strcat格式:strcat(字符數(shù)組1,字符數(shù)組2)功能:把字符數(shù)組2連到字符數(shù)組1后面返值:返回字符數(shù)組1的首地址說明:字符數(shù)組1必須足夠大連接前,兩串均以‘\0’結(jié)束;連接后,串1的‘\0’取消,新串最后加‘\0’C語言程序設計@SoochowUniversity52字符C語言程序設計@SoochowUniversity53字符串拷貝函數(shù)strcpy格式:strcpy(字符數(shù)組1,字符串2)功能:將字符串2,拷貝到字符數(shù)組1中去返值:返回字符數(shù)組1的首地址說明:字符數(shù)組1必須足夠大拷貝時‘\0’一同拷貝不能使用賦值語句為一個字符數(shù)組賦值字符串相關的系統(tǒng)函數(shù)(string.h)
例如:
charstr1[30]={“People’sRepublicof”};charstr2[]={“China”}; printf(“%s”,strcpy(str1,str2));C語言程序設計@SoochowUniversity53字符C語言程序設計@SoochowUniversity54字符串比較函數(shù)strcmp格式:strcmp(字符串1,字符串2)功能:比較兩個字符串比較規(guī)則:對兩串從左向右逐個字符比較(ASCII碼),直到遇到不同字符或‘\0’為止返值:返回int型整數(shù),a.若字符串1<字符串2,返回負整數(shù)b.若字符串1>字符串2,返回正整數(shù)c.若字符串1==字符串2,返回零說明:字符串比較不能用“==”,必須用strcmp字符串相關的系統(tǒng)函數(shù)(string.h)C語言程序設計@SoochowUniversity54字符C語言程序設計@SoochowUniversity55字符串長度函數(shù)strlen格式:strlen(字符數(shù)組)功能:計算字符串長度返值:返回字符串實際長度,不包括‘\0’在內(nèi)例對于以下字符串,strlen(s)的值為:(1)chars[10]={‘A’,’\0’,’B’,’C’,’\0’,’D’};(2)chars[]=“\t\v\\\0will\n”;(3)chars[]=“\x69\072\n”;字符串相關的系統(tǒng)函數(shù)(string.h)C語言程序設計@SoochowUniversity55字符strlwr函數(shù)----轉(zhuǎn)換為小寫的函數(shù)其一般形式為strlwr(字符串)函數(shù)的作用是將字符串中大寫字母換成小寫字母字符串相關的系統(tǒng)函數(shù)(string.h)C語言程序設計56@SoochowUniversitystrlwr函數(shù)----轉(zhuǎn)換為小寫的函數(shù)字符串相關的系統(tǒng)函數(shù)strupr函數(shù)----轉(zhuǎn)換為大寫的函數(shù)其一般形式為strupr(字符串)函數(shù)的作用是將字符串中小寫字母換成大寫字母字符串相關的系統(tǒng)函數(shù)(string.h)C語言程序設計57@SoochowUniversitystrupr函數(shù)----轉(zhuǎn)換為大寫的函數(shù)字符串相關的系統(tǒng)函數(shù)C語言程序設計@SoochowUniversity58字符串的應用舉例(1)問題有3個字符串,要求找出其中最大者。今設一個二維的字符數(shù)組str,大小為3×20,即有3行20列,每一行可以容納20個字符。下圖表示此二維數(shù)組的情況。解題思路:可以把str[0]、str[1]、str[2]看作3個一維字符數(shù)組,它們各有20個元素。可以把它們?nèi)缤痪S數(shù)組那樣進行處理??梢杂胓ets函數(shù)分別讀入3個字符串。經(jīng)過二次比較,就可得到值最大者,把它放在一維字符數(shù)組String中。C語言程序設計@SoochowUniversity58字符C語言程序設計@SoochowUniversity59例題(1)源程序#include<stdio.h>voidmain(){charstring[20],str[3][20];inti;for(i=0;i<3;i++)gets(str[i]);/*初始化三個字符串*/if(strcmp(str[0],str[1])>0)strcpy(string,str[0]);elsestrcpy(string,str[1]);if(strcmp(str[2],string)>0)strcpy(string,str[2]);printf(“\nthelargeststringis∶\n%s\n",string);}C語言程序設計@SoochowUniversity59例題C語言程序設計@SoochowUniversity60字符串的應用舉例(2)問題輸入一行字符,統(tǒng)計其中有多少個單詞,單詞之間用空格分隔開。C語言程序設計@SoochowUniversity60字符C語言程序設計@SoochowUniversity61例題(2)源程序#include<Studio.h>voidmain(){ charstring[81]; inti,num=0,word=0; charc; gets(string); for(i=0;(c=string[i])!='\0';i++) if(c==‘’)word=0;elseif(word==0) { word=1;num++; }printf("Thereare%dwordsintheline.\n",num);}C語言程序設計@SoochowUniversity61例題C語言程序設計第6章利用數(shù)組處理批量數(shù)據(jù)C語言程序設計第6章利用數(shù)組處理批量數(shù)據(jù)C語言程序設計@SoochowUniversity63主要內(nèi)容引言一維數(shù)組的定義和引用二維數(shù)組的定義和引用字符數(shù)組與字符串C語言程序設計@SoochowUniversity2主要內(nèi)C語言程序設計@SoochowUniversity64引言基本數(shù)據(jù)類型整型實型字符型構(gòu)造數(shù)據(jù)類型(用戶自定義數(shù)據(jù)類型)數(shù)組結(jié)構(gòu)體共用體C語言程序設計@SoochowUniversity3引C語言程序設計@SoochowUniversity65引言數(shù)組數(shù)組是有序數(shù)據(jù)的集合特點所有數(shù)據(jù)元素類型相同數(shù)據(jù)元素類型可以是基本數(shù)據(jù)類型和構(gòu)造數(shù)據(jù)類型由數(shù)組名和下標確定具體的數(shù)據(jù)元素C語言程序設計@SoochowUniversity4引C語言程序設計@SoochowUniversity66一維數(shù)組的定義一維數(shù)組的定義格式:類型數(shù)組名[數(shù)組長度];長度——只能為常量、常量表達式類型——數(shù)組中元素的類型數(shù)組名——遵循標識符命名規(guī)則,表示數(shù)組中元素的起始位置例如:inta[6];分配了六個單元,每個單元存放一個int(即4個Byte),而且各單元連續(xù)!注意:
c不允許對數(shù)組的大小作動態(tài)定義。350x78240x78280x78340x783846175781000x782C0x7830aa[0]a[1]a[2]a[3]a[4]a[5]C語言程序設計@SoochowUniversity5一維數(shù)一維數(shù)組的定義舉例:inta[4+6];合法不合法intn=10;inta[n];#defineN10floatarry[N];合法結(jié)論:定義數(shù)組時,數(shù)組長度必須是常量或者常量表達式,不能為變量。C語言程序設計67@SoochowUniversity一維數(shù)組的定義舉例:不合法intn=10;#definC語言程序設計@SoochowUniversity68一維數(shù)組的使用一維數(shù)組的使用格式:名稱[下標];說明:1)下標范圍:0~長度-12)越界問題:C中不檢查越界,但越界寫數(shù)據(jù)可能造成系統(tǒng)崩潰3)數(shù)組不能整體引用,只能引用其中的元素例如:inta[3];
a[2]=19; 4)下標可以是常量、變量、表達式或函數(shù)C語言程序設計@SoochowUniversity7一維數(shù)一維數(shù)組元素的引用舉例:inta[10];a[0]=a[5]+a[7]-a[2*3]合法C語言程序設計69@SoochowUniversityintn=5;inta[10];a[n]=20;intn=5;inta[5];a[n]=20;不正確注意:使用數(shù)組時,程序員必須自己檢查數(shù)組越界問題。使用數(shù)組時,數(shù)組下標可以是常量,變量,表達式,甚至是函數(shù)。合法一維數(shù)組元素的引用舉例:合法C語言程序設計8@SoochowC語言程序設計@SoochowUniversity70一維數(shù)組的初始化部分初始化:例如:inta[20]={3,2,5,6,9};其余元素為0全部初始化:——數(shù)組長度可以省略例如:inta[3]={3,4,6}; intb[]={23,45,67,89};對數(shù)組全部元素初始化為0方式例如:inta[5]={0,0,0,0,0};
或者:inta[5]={0};不能:inta[5]={0*10};說明:如果不給數(shù)組設置初值,則為隨機數(shù)C語言程序設計@SoochowUniversity9一維數(shù)一維數(shù)組的初始化在定義數(shù)組的同時,給各數(shù)組元素賦值inta[10]={0,1,2,3,4,5,6,7,8,9};inta[10]={0,1,2,3,4};相當于inta[10]={0,1,2,3,4,0,0,0,0,0};inta[10]={0,0,0,0,0,0,0,0,0,0};相當于inta[10]={0};inta[5]={1,2,3,4,5};可寫為inta[]={1,2,3,4,5};C語言程序設計71@SoochowUniversity一維數(shù)組的初始化在定義數(shù)組的同時,給各數(shù)組元素賦值C語言程序C語言程序設計@SoochowUniversity72一維數(shù)組程序舉例用數(shù)組來處理求fibonacci數(shù)列問題冒泡排序選擇排序插入排序統(tǒng)計數(shù)字序列中0-9中各數(shù)值出現(xiàn)的次數(shù)任意從鍵盤上輸入一個正整數(shù)(最大為65535),請將它逆序輸出C語言程序設計@SoochowUniversity11一維一維數(shù)組程序舉例
例6.2用數(shù)組處理求Fibonacci數(shù)列問題解題思路:例5.8中用簡單變量處理的,缺點不能在內(nèi)存中保存這些數(shù)。假如想直接輸出數(shù)列中第25個數(shù),是很困難的。如果用數(shù)組處理,每一個數(shù)組元素代表數(shù)列中的一個數(shù),依次求出各數(shù)并存放在相應的數(shù)組元素中C語言程序設計73@SoochowUniversity一維數(shù)組程序舉例例6.2用數(shù)組處理求FibonaccC語言程序設計@SoochowUniversity74例題(1)用數(shù)組來處理求fibonacci數(shù)列問題。#include<stdio.h>voidmain(){inti;intf[20]={1,1};for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if((i+1)%5==0)printf("\n");printf("%12d",f[i]);}}C語言程序設計@SoochowUniversity13例題
例6.3有6個地區(qū)的面積,要求對它們按由小到大的順序排列。解題思路:排序的規(guī)律有兩種:一種是“升序”,從小到大;另一種是“降序”,從大到小把題目抽象為:“對n個數(shù)按升序排序”常用的排序算法起泡排序(冒泡排序)選擇排序插入排序一維數(shù)組程序舉例C語言程序設計75@SoochowUniversity例6.3有6個地區(qū)的面積,要求對它們按由小到大的順序985420895420859420854920854290854209大數(shù)沉淀,小數(shù)起泡a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<5;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}起泡排序C語言程序設計76@SoochowUniversity988888大數(shù)沉淀,小數(shù)起泡a[0]for(i=0;i<5854209584209548209542809542089a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<4;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}起泡排序C語言程序設計77@SoochowUniversity85555a[0]for(i=0;i<4;i++)542089452089425089420589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<3;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}起泡排序C語言程序設計78@SoochowUniversity5444a[0]for(i=0;i<3;i++)420589240589204589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<2;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}起泡排序C語言程序設計79@SoochowUniversity422a[0]for(i=0;i<2;i++)204589024589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<1;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}起泡排序C語言程序設計80@SoochowUniversity20a[0]for(i=0;i<1;i++)for(i=0;i<5;i++)if(a[i]>a[i+1]){……}for(i=0;i<4;i++)if(a[i]>a[i+1]){……}for(i=0;i<1;i++)if(a[i]>a[i+1]){……}……for(i=0;i<5-j;i++)if(a[i]>a[i+1]){……}for(j=0;j<5;j++)結(jié)論:如果有n個數(shù),則要進行n-1趟比較。在第1趟比較中要進行n-1次兩兩比較,在第j趟比較中要進行n-j次兩兩比較。C語言程序設計81@SoochowUniversityfor(i=0;i<5;i++)C語言程序設計@SoochowUniversity82程序流程圖如下:冒泡排序C語言程序設計@SoochowUniversity21程序C語言程序設計@SoochowUniversity83冒泡排序源程序#include<stdio.h>#defineN10voidmain(){intarray[N];inti,j,t;printf("Input10numbers:\n");for(i=0;i<N;i++) scanf("%d",&array[i]);printf("\n");for(j=0;j<N;j++){ for(i=0;i<(N-j);i++) {
if(array[i]>array[i+1]) { t=array[i]; array[i]=array[i+1]; array[i+1]=array[i]; } }}printf("Thesortednumbers:\n");for(i=0;i<N;i++){ printf("%d",array[i]); if((i+1)%5==0) printf("\n");} }C語言程序設計@SoochowUniversity22冒泡985420a[0]a[1]a[2]a[3]a[4]a[5]index=0;for(i=1;i<6;i++)if(a[index]<a[i])
{index=i}max=a[index];a[index]=a[5];a[5]=max;選擇排序985420985420985420985420085429C語言程序設計84@SoochowUniversity9a[0]index=0;選擇排序99990C語言程序設計2085429a[0]a[1]a[2]a[3]a[4]a[5]max=a[0];index=0;for(i=1;i<5;i++)if(max<a[i]){max=a[i];index=i}a[index]=a[4];a[4]=max;選擇排序085429085429085429025489index=0;for(i=1;i<5;i++)if(a[index]<a[i])
{index=i}max=a[index];a[index]=a[4];a[4]=max;C語言程序設計85@SoochowUniversity0a[0]max=a[0];index=0;選擇排序00025489a[0]a[1]a[2]a[3]a[4]a[5]選擇排序025489025489024589index=0;for(i=1;i<4;i++)if(a[index]<a[i])
{index=i}max=a[index];a[index]=a[3];a[3]=max;C語言程序設計86@SoochowUniversity0a[0]選擇排序000index=0;C語言程序設計25@024589a[0]a[1]a[2]a[3]a[4]a[5]選擇排序024589024589index=0;for(i=1;i<3;i++)if(a[index]<a[i])
{index=i}max=a[index];a[index]=a[2];a[2]=max;C語言程序設計87@SoochowUniversity0a[0]選擇排序00index=0;C語言程序設計26@S024589a[0]a[1]a[2]a[3]a[4]a[5]選擇排序024589結(jié)論:如果有n個數(shù),則要進行n-1趟比較。在第1趟比較中要進行n-1次兩兩比較,在第j趟比較中要進行n-j次兩兩比較。index=0;for(i=1;i<2;i++)if(a[index]<a[i])
{index=i}max=a[index];a[index]=a[1];a[1]=max;C語言程序設計88@SoochowUniversity0a[0]選擇排序0結(jié)論:index=0;C語言程序設計27C語言程序設計@SoochowUniversity89選擇排序原理每次循環(huán)選擇沒有排序的元素中的最小元素置于元素序列的開始N-S圖輸入數(shù)組aindex=kfori=k+1ton-1a[i]<a[index]index=ia[index]<==>a[k]YNfork=0ton-2輸出數(shù)組aC語言程序設計@SoochowUniversity28選擇C語言程序設計@SoochowUniversity90選擇排序程序voidmain(){
inti,index,k,n,temp,a[10]; for(i=0;i<10;i++)scanf(“%d”,&a[i]);for(k=0;k<10;k++){index=k;for(i=k+1;i<10;i++)if(a[i]<a[index])index=i;temp=a[index];a[index]=a[k];a[k]=temp;}for(i=0;i<10;i++)printf(“%d”,a[i]);}選擇數(shù)組元素選擇排序大循環(huán)交換元素C語言程序設計@SoochowUniversity29選擇C語言程序設計@SoochowUniversity91插入排序原理:把數(shù)組中的元素插入到適當位置。步驟:將數(shù)組中的開始兩個元素按要求(降序/升序)排序。把其余所有元素依次插入到已排序序列中的適當位置原始數(shù)據(jù)
BEDCA第一輪
BEDCA第二輪
BDECA第三輪
BCDEA第四輪ABCDEC語言程序設計@SoochowUniversity30插入C語言程序設計@SoochowUniversity92插入排序流程圖輸入數(shù)組atemp=a[k]fori=k-1to0a[i]>tempa[i+1]=a[i]YNfork=2ton-1輸出數(shù)組a排序a[0],a[1]a[i+1]=tempbreak;i<0a[0]=tempYNC語言程序設計@SoochowUniversity31插入C語言程序設計@SoochowUniversity93一維數(shù)組應用舉例統(tǒng)計數(shù)字序列中0-9中各數(shù)值出現(xiàn)的次數(shù)數(shù)字序列保存于一個整型數(shù)組中任意從鍵盤上輸入一個正整數(shù)(最大為65535),請將它逆序輸出如:輸入:64934;則輸出:43946對每一個數(shù)進行如下處理提取個位數(shù)字:讓數(shù)字序列對10求余控制循環(huán)每次循環(huán)讓整數(shù)減去個位數(shù),并除以10當(1)結(jié)果的個位數(shù)為0時,表示整數(shù)數(shù)字檢測完畢。C語言程序設計@SoochowUniversity32一維C語言程序設計@SoochowUniversity94二維數(shù)組多維數(shù)組的空間想象二維數(shù)組:一個表格或一個平面矩陣一維數(shù)組:一列長表或一個向量多維數(shù)組:多維空間的一個數(shù)據(jù)列陣三維數(shù)組:三維空間的一個方陣C語言程序設計@SoochowUniversity33二維C語言程序設計@SoochowUniversity95二維數(shù)組的定義格式<類型>名稱[長度1][長度2];說明:1)長度1和長度2——常量表達式,其中長度1表示行數(shù),長度2表示列數(shù)2)內(nèi)存中二維數(shù)組的元素按行存放C語言程序設計@SoochowUniversity34二維C語言程序設計@SoochowUniversity96地址
值
數(shù)組元素b[0][0]b[0][1]b[0][2]b[1][0]b[1][1]b[1][2]b[2][0]b[2][1]b[2][2]3000H3004H3008H300CH3010H3014H3018H301CH3020H例如:整型數(shù)組b[3][3]={{1,2,3},{4,5,6},{7,8,9}};123456789C語言程序設計@SoochowUniversity35地址C語言程序設計@SoochowUniversity97問題:有了二維數(shù)組的基礎,那么多維數(shù)組如何定義呢?
定義三維數(shù)組:
floata[2][3][4];注意:多維數(shù)組元素在內(nèi)存中的排列順序:第一維的下標變化最慢,最右邊的下標變化最快。二維數(shù)組的定義C語言程序設計@SoochowUniversity36問題C語言程序設計@SoochowUniversity98二維數(shù)組的使用
格式:
名稱[下標1][下標2]
——下標范圍0~下標1-1;0~下標2-1
——下標可以為常量、變量、表達式或函數(shù)C語言程序設計@SoochowUniversity37二維C語言程序設計@SoochowUniversity99二維數(shù)組的說明重要的理解嚴格區(qū)分在定義數(shù)組時用的a[3][4]和引用元素時的a[3][4]的區(qū)別。前者a[3][4]用來定義數(shù)組的維數(shù)和各維的大小,后者a[3][4]中的3和4是下標值,a[3][4]代表某一個元素。記?。?1)數(shù)組下標總是從0開始!(2)一維數(shù)組的最大下標總是數(shù)組長度減1!(3)二維數(shù)組或多維數(shù)組的最大下標總是其維數(shù)減1和各維大小減1。C語言程序設計@SoochowUniversity38二維C語言程序設計@SoochowUniversity100二維數(shù)組的初始化1、按行初始化:例如:inta[3][2]={{2},{3,2},{4}};
2、整體初始化:
例如:inta[2][3]={2,3,4,1,8,9};
3、全部元素初始化:——行可以省略
例如:inta[][3]={2,3,4,5,6,7};C語言程序設計@SoochowUniversity39二維inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};inta[3][4]={{1},{5},{9}};等價于inta[3][4]={{1,0,0,0},{5,0,0,0},{9,0,0,0}};inta[3][4]={{1},{5,6}};相當于inta[3][4]={{1},{5,6},{0}};二維數(shù)組的初始化C語言程序設計101@SoochowUniversityinta[3][4]={{1,2,3,4},{5,6,7,inta[3][4]={1,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鋼結(jié)構(gòu)安裝精度控制技術要點
- 2022~2023自考專業(yè)(人力資源管理)考試題庫及答案第216期
- 2020-2021年部編版二年級數(shù)學上冊期中考試題及答案【完美版】
- 2026屆江蘇省揚州市高三上學期期末考試歷史試題(含答案)
- 市場營銷考試題型及答案
- 鉗工考試題庫寶典及答案
- 人教版地理八年級上學期期末綜合測試(含答案)
- 輔警法治培訓
- 蛋種鴨養(yǎng)殖技術培訓課件
- 2026年深圳中考語文考前3天預測試卷(附答案可下載)
- 萬科施工管理辦法
- 2025至2030中國養(yǎng)老健康行業(yè)深度發(fā)展研究與企業(yè)投資戰(zhàn)略規(guī)劃報告
- Roland羅蘭樂器AerophoneAE-20電吹管ChineseAerophoneAE-20OwnersManual用戶手冊
- 2025年保安員資格考試題目及答案(共100題)
- 黨群工作部室部管理制度
- 2025至2030年中國兔子養(yǎng)殖行業(yè)市場現(xiàn)狀調(diào)查及投資方向研究報告
- 委外施工安全試題及答案
- DBT29-320-2025 天津市建筑工程消能減震隔震技術規(guī)程
- 產(chǎn)品技術維護與保養(yǎng)手冊
- 2024年國家電網(wǎng)招聘之電工類考試題庫(突破訓練)
- 中建公司建筑機電設備安裝工程標準化施工手冊
評論
0/150
提交評論