預(yù)習(xí)嵌入式課程chapter6數(shù)組_第1頁
預(yù)習(xí)嵌入式課程chapter6數(shù)組_第2頁
預(yù)習(xí)嵌入式課程chapter6數(shù)組_第3頁
預(yù)習(xí)嵌入式課程chapter6數(shù)組_第4頁
預(yù)習(xí)嵌入式課程chapter6數(shù)組_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

數(shù)組回顧for循環(huán)逗號運(yùn)算符嵌套循環(huán)while和do-while循環(huán)goto、break和continue語句exit()函數(shù)目標(biāo)理解數(shù)組的存儲機(jī)制掌握數(shù)組的定義和使用掌握數(shù)組的初始化理解二維和多維數(shù)組什么時候需要使用數(shù)組當(dāng)我們需要存儲一個分?jǐn)?shù)時,可以聲明變量:float

score;但是當(dāng)我們需要存放30個人的分?jǐn)?shù)時,應(yīng)該怎么辦?數(shù)組是具有相同類型的數(shù)據(jù)元素的集合。數(shù)組中的元素在內(nèi)存中連續(xù)存放。例如:float

score[30];聲明數(shù)組數(shù)組元素和索引數(shù)組元素由索引或下標(biāo)標(biāo)識數(shù)組維數(shù)由索引數(shù)決定索引存放從0

開始的整數(shù)一個包含11

個元素的數(shù)組player[0]player[1]player[2]…

…player[10]聲明數(shù)組2-1數(shù)組的特性必須在使用前定義存儲類型(static

register auto

extern

…)數(shù)據(jù)類型數(shù)組名數(shù)組大小注意:數(shù)組名的命名規(guī)范和變量的命名規(guī)范一樣。這里數(shù)組長度必須是一個常量表達(dá)式,且值為正整數(shù)聲明數(shù)組2-2聲明數(shù)組的格式:存儲類型例如:#define

N

5數(shù)據(jù)類型數(shù)組名[數(shù)組長度];int

player[N];包括的數(shù)組元素:player[0],player[1],player[2]float

salary[2+3];包括的數(shù)組元素:salary[0],salary[1],salary[2],salary[3],salary[4]而int

n=10;–

char

name[n];則是不正確的(不能在方括號中用變量來表示元素的個數(shù))數(shù)組的規(guī)范所有數(shù)組元素具有相同的類型允許使用變量的地方都可以使用數(shù)組元素?cái)?shù)組的下標(biāo)可以是有有效值的整型表達(dá)式在C語言中使用數(shù)組2-1在C語言中處理數(shù)組的方式與處理變量的方式不同:即使兩個數(shù)組的類型和大小相同,也不能檢驗(yàn)其是否相等不能直接將一個數(shù)組賦給另一個數(shù)組除了數(shù)組聲明時初始化外,不能在程序其它地方對數(shù)組進(jìn)行整體賦值數(shù)組的初始化#include

<stdio.h>int

c[5];intg;void

main(){static

int

a[5],s;int

b[5],l;inti;printf("數(shù)組a的元素值:\n");for(i=0;i<5;i++)printf("%d\t",a[i]);//靜態(tài)變量會初始化為0printf("\n數(shù)組b的元素值:\n");for(i=0;i<5;i++)printf("%d\t",b[i]);//局部變量會初始化為隨機(jī)值

printf("\n數(shù)組c的元素值:\n");for(i=0;i<5;i++)printf("%d\t",c[i]);//全局變量會初始化為0printf("g=%d

s=%d

l=%d",g,s,l);}初始化數(shù)組1(給數(shù)組元素賦值)數(shù)組也可以進(jìn)行初始化,數(shù)組的初始化就是在數(shù)組聲明時對所有的數(shù)組元素賦初值。extern和static數(shù)組元素自動初始化為0聲明數(shù)組時對數(shù)組元素賦以初值–

舉例:int

data[5]=

{2,4,6,8,10};可以給一部分元素賦值,其它元素自動賦值為0–

int

data[5]

=

{2,4,6};–

局部變量的數(shù)組,如果沒賦初值,則會自動賦隨機(jī)值對全部數(shù)組元素賦初值時,可以不指定數(shù)組長度 例如:int

data[]={11,23,22,45,66};此時數(shù)組的元素個數(shù)為5初始化數(shù)組24)使用for

循環(huán)為數(shù)組元素賦值#include

<stdio.h>void

main(){float

score[5];int

i;for(i=0;

i<5;

i++)score[i]=i;//此處若改為使用鍵盤輸入5個分?jǐn)?shù)呢?for(i=0;i<5;i++)printf(“%d\t”,score[i]);}在C語言中使用數(shù)組例1:從鍵盤輸入5個數(shù)存入數(shù)組,計(jì)算5個數(shù)之和并輸出.在C語言中使用數(shù)組例1:從鍵盤輸入5個數(shù)存入數(shù)組,計(jì)算5個數(shù)之和并輸出#include

<stdio.h>void

main(){ int

cnt,num[5],sum;for(cnt=0,sum=0;cnt<5;cnt++){printf("enter

the

%d

number:",cnt+1);scanf("%d",&num[cnt]);sum+=num[cnt];}printf("the

sum

of

the

five

numbers

is

%d",sum);}在C語言中使用數(shù)組練習(xí)1:從鍵盤輸入10個數(shù),計(jì)算10個數(shù)的平均值,并求最大值。例1

答案:#include

<stdio.h>void

main()

{int

ary[10];int

i,

total,

high,aver;for(i=0;

i<10;

i++){

printf(“Entervalue:%d:”,i+1);scanf("%d",&ary[i]);

}high

=

ary[0];for(i=1;

i<10;

i++){

if(ary[i]

>

high)high

=

ary[i];}for(i=0,total=0;

i<10;

i++)total

=

total

+

ary[i];aver

=

total/10;printf(“\n

The

max

is

%d\nThesum

is

%d\n”

high

aver);聲明賦值比較,求最大值從鍵盤輸入10個數(shù),計(jì)算10個數(shù)的平均值,并求最大值。練習(xí)2:要求計(jì)算Fibonacci數(shù)列的前20個數(shù),并輸出注意:數(shù)列的前兩個數(shù)都是1,從第三個數(shù)開始,每個數(shù)是前兩個數(shù)之和。11

2

3

5

8

13

…練習(xí)2

答案:要求計(jì)算Fibonacci數(shù)列的前20個數(shù),并輸出注意:數(shù)列的前兩個數(shù)都是1,從第三個數(shù)開始,每個數(shù)是前兩個數(shù)之和。void

main(){ int

i;int

f[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%5==0)

printf("\n");printf("%12d",f[i]);}}字符串/字符數(shù)組2-1字符數(shù)組是用來存放多個字符的。字符串是以”\0”結(jié)尾的字符型數(shù)組字符串中每個字符占一個字節(jié)void

main(){char

alpha[26];int

i,

j;for(i=65,j=0;

i<91;

i++,j++){if(j%5==0)printf("\n

");alpha[j]

=

i;printf("

%c

",

alpha[j]);}}字符串/字符數(shù)組2-2ary[0]ary[1]ary[2]ary[3]ary[4]從鍵盤輸入字符串存入字符數(shù)組中,之后顯示該字符串:#include

<stdio.h>void

main(){char

ary[5];int

i=2;printf("\nEnter

string

:

");scanf("%s",ary); //當(dāng)輸入的個數(shù)(含回車)>5時,會把后面的變量賦給,如果大于這段代碼的棧空間,就會出現(xiàn)段錯誤printf("\n

The

string

is

%s

\n\n",

ary);for

(i=0;

i<7;

i++)printf("\t%c",

ary[i]);printf("\ni=%d",i);}字符串函數(shù)在C語言中沒有用于字符串計(jì)算的運(yùn)算符,主要是采用函數(shù)進(jìn)行計(jì)算:名稱作用strcpy(s1,s2)將s2復(fù)制到s1strcat(s1,s2)將s2附加到s1的末尾strlen(s1)返回s1的長度strcmp(s1,s2)判斷s1和s2是否相等strchr(s1,ch)返回s1中第一次出現(xiàn)字符ch的位置(內(nèi)存地址)strst在r(標(biāo)s1準(zhǔn),s頭2)文件返回s1中第一次出現(xiàn)字符串s2的位置(內(nèi)存<地s址tri)ng.h>中定義strcpy#include"string.h"main(){char

st1[15],st2[]="CLanguage";strcpy(st1,st2);puts(st1);printf("\n");}strcmp格式:strcmp(字符數(shù)組名1,字符數(shù)組名2)功能:按照ASCII碼順序比較兩個數(shù)組中的字符串,并由函數(shù)返回值返回比較結(jié)果。字符串1=字符串2,返回值=0;字符串1〉字符串2,返回值〉0;(一般是1)字符串1〈字符串2,返回值〈0。(一般是-1)strcmp#include"string.h"main(){ int

k;static

char

st1[15],st2[]="C

Language";printf("input

a

string:\n");gets(st1);k=strcmp(st1,st2);if(k==0)

printf("st1=st2\n");if(k>0)

printf("st1>st2\n");if(k<0)

printf("st1<st2\n");}strlen格式:strlen(字符數(shù)組名)功能:測字符串的實(shí)際長度(不含字符串結(jié)束標(biāo)志

‘\0’)

并作為函數(shù)返回值。#include"string.h"main(){ int

k;static

char

st[]="C

language";k=strlen(st);printf("The

lenth

of

the

string

is

%d\n",k);}Strchr、strstr#include

<stdio.h>#include

<string.h>main(){char*k1,*k2;int

i1,i2;chara='g';static

char

st1[]="language";static

char

st2[]="age";k1=strchr(st1,a);i1=k1-st1;????}k2=strstr(st1,st2);i2=k2-st1;//printf("k1=

%dst1=%d

偏移%d\n",k1,st1,i1);//內(nèi)存地址printf("k2=%d st1=%d

偏移%d\n\n",k2,st1,i2);//偏移地址練習(xí)2:從鍵盤輸入一個字符串,若是“end”則結(jié)束程序,否則繼續(xù)輸入練習(xí)2

答案:從鍵盤輸入一個字符串,若是“End”則結(jié)束程序,否則繼續(xù)輸入#include

<stdio.h>#include

<string.h>void

main(){char

flag[10];do{printf("please

Enter

a

string:");scanf("%s",flag);}while(strcmp(flag,“end")!=0);}二維數(shù)組最常用的多維數(shù)組可以看成是由多個一維數(shù)組組成的數(shù)組類似于一個由行和列組成的表格二維數(shù)組的聲明方式:int

temp[4][3];//4行3列數(shù)據(jù)二維數(shù)組的初始化3-1int

ary[3][4]

={{1,2,3,4},{5,6,7,8},{9,10,11,12}};ary0123012341567829101112二維數(shù)組的初始化3-2int

ary[3][4]={{1,2,3},{4,5,6},{7,8,9}};ary0123012301456027890數(shù)組練習(xí):用數(shù)組存放3個人的考試成績(每人4科),從鍵盤輸入,最后顯示到屏幕上:數(shù)組示例1:用數(shù)組存放3個人的考試成績(每人4科),從鍵盤輸入,最后顯示到屏幕上:#include

<stdio.h>void

main(){float

score[3][4];int

i,j;for(i=0;i<3;i++){for(j=0;j<4;j++){printf("第%d人的科目%d",i+1,j+1);scanf("%f",&score[i][j]);}}for(i=0;i<3;i++){for(j=0;j<4;j++){printf("第%d人的科目%d

是%f\t",i+1,j+1,score[i][j]);}printf("\n\n");}}數(shù)組示練習(xí)2:從鍵盤輸入多個字符串,直到輸入的是

“END”,升序排列字符串:數(shù)組示練習(xí)

2

答案:#include

<stdio.h>#include

<string.h>void

main

(){int

i,

n

=

0;int

item;char

x[10][12];char

temp[12];printf("Enter

string\n\n");printf("Type

'END'

whenover\n\n");do{printf("String

%d:",n+1);scanf("%s",

x[n]);}while(strcmp(x[n++],"END"));n

=

n

-1;for(item=0;

item<n-1;

++item){for(i=item+1;

i<n;

i++){if(strcmp

(x[item],

x[i])

>0){strcpy

(temp,

x[item]);strcpy

(x[item],

x[i]);strcpy

(x[i],

temp);}}}printf("Recorded

list

ofstrings:\n");for(i

=

0;

i

<

n

;

++i){printf("\nString

%d

is%s",i+1,x[i]);}}排序從鍵盤輸入多個字符串,直到輸入的是“END”,升序排列字符串:補(bǔ)充:#include

"stdio.h"void

main(){int

k;//char

a[100]=“hkjhf”;//整體賦值,則字符串后的全自動為’\n’,即ASIC碼為0。char

a[100];//”sdafsadf\0”printf("please

input

words:");scanf(“%s”,a);//逐個賦值,則字符串后的自動加一個’\0’,其他的是隨機(jī)值。printf("%d

%d

%d

%d\n",a[3],a[6],a[80],a[99]);}作業(yè)1:十進(jìn)制轉(zhuǎn)二進(jìn)制#include<stdio.h>#include<string.h>//十進(jìn)制轉(zhuǎn)二進(jìn)制

void

main(){int

num;int

arr[100];//用于存放010101int

i=0;//數(shù)組下標(biāo)printf("請輸入一個正整數(shù)");scanf("%d",&num);//除2取余商0為止倒序輸出while(num!=0)//商0為止{arr[i]=num%2;//取余num=num/2;//除2,減少一半,如果不為0則繼續(xù)除2取余

i++;//數(shù)組下標(biāo)增加一個}i--;//倒序輸出

for(;i>=0;i--)printf("%d",arr[i]);printf("\n");}作業(yè)2:接受鍵盤輸入一個字符串,將之反轉(zhuǎn)如abcd->dcba#include

"stdio.h"#include

"string.h"voidmain(){char

names[100];char

names2[100];puts("請輸入一個字符串");gets(names);int

j=0;int

i=strlen(names);printf("strlennames=%d\n",i);//方法一/*for(

i=i-1;i>=0;i--){names2[j]=names[i];j++;}names2[j]='\0';puts("倒序后的結(jié)果如下:");printf("%s\n",names2);

//puts(names[i]);//==*///方法二

for(i=i-1;i>=0;i--)putchar(names[i]);}作業(yè)3:用rand()產(chǎn)生10個5--20期間的隨機(jī)整數(shù),不能有重復(fù)項(xiàng),如果重復(fù)則重新產(chǎn)生隨機(jī)數(shù)#include

<stdio.h>

#include

<string.h>

#include<stdlib.h>

#include

<math.h>

#include

<time.h>

void

rand10(void);voidmain(){rand10();}//產(chǎn)生10個5到20之間的隨機(jī)整數(shù),不能有重復(fù)項(xiàng)

void

rand10(void){int

isRepeat(int

a[],int

num);//此涵數(shù)先使用,后定義,故在此聲明此涵數(shù)

intarr[10];srand((unsigned)time(

NULL));//Sets

a

random

starting

point.給rand輸入一個種子for(int

i=0;i<10;i++)//產(chǎn)生10個隨機(jī)數(shù){int

num=rand()%16+5;//先產(chǎn)生一個5到20之間的隨機(jī)數(shù)while(isRepeat(arr,num))//如果重復(fù),則{num=rand()%16+5;//則重新產(chǎn)生此隨機(jī)數(shù)}arr[i]=num;//把不重復(fù)的隨機(jī)數(shù)放入數(shù)組printf("%d

",num);}}int

isRepeat(int

a[],int

num){for(int

i=0;i<10;i++){if(a[i]==num)return

1;

//1表示重復(fù),如果有任意一個相等則重復(fù)}return

0;//0表示不重復(fù),//如果全部比較一次后還沒發(fā)現(xiàn)重復(fù)項(xiàng)則返回0表示沒有重復(fù)項(xiàng)}作業(yè)4:在主涵數(shù)中輸入圓的半徑,定義一個函數(shù),計(jì)算圓的面積和周長,然后又在主函數(shù)中輸出圓的面積和周長double

l,s;void

round

(double

x);//函數(shù)聲明void

main(){round(8);printf("\nl

=

%f

s

=%f",l,s);}void

round

(double

x){l=2*3.14*x;s=x*x*3.14;}作業(yè)5:實(shí)現(xiàn)自定義的string函數(shù):mystringfuntion.cpp//mystrlen

mystrcmp

mystrcpy

mystrcat??????#include

<stdio.h>

#include

<string.h>

#include

<stdlib.h>

#include<assert.h>//int

isRepeat(int

a[],int

num);int

mystrlen(char

a[]){????????int

i=0;

while(a[i]!='\0'){i++;}return

i;}??????????????????int

mystrcmp(char

a[],char

b[]){int

alen=mystrlen(a);

int

blen=mystrlen(b);

int

i=0;//字符串下標(biāo)int

maxlen=alen>blen?alen:blen;

while(i<maxlen)//逐個比較//求出最長字符串的長度{if(a[i]>b[i])//如果前面比后面大,返回1return

1;else

if(a[i]<b[i])//如果前面比后面小,返回-1return

-1;else

if(a[i]==b[i])//如果前面與后面相同,i++比較下一個i++;}return

0;//如果全部比較一次后還沒分出大小,則返回0表示相等}????????????????????int

mystrcmp2(char

a[],char

b[]){int

i=0;//字符串下標(biāo)

while(1){if(a[i]>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論