




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
6.1一維數組6.2二維數組6.3字符數組與字符串一、數組的引入為了便于處理一批類型相同的數據,引入了數組類型.
假設現在要保存每個學生的成績,那就需要40個變量,但這樣一來輸入、輸出、計算都會變得繁瑣。
在這種情況下,我們可以使用數組類型,聲明一個含有40個元素的數組,每個數組元素存放一個成績,成績的輸入、輸出、計算都可通過循環來實現。例:某班有40名學生,求該班成績的平均分#include<stdio.h>main(){intj,sum,s;floatave;sum=0;
for(j=1;j<=40;j++)
{scanf(“%d”,&s);sum=sum+s;
}ave=sum/40;printf(“ave=%f”,ave);}二、數組的概念構造數據類型之一1.數組:由具有相同類型的有序數據的集合。用數組名標識。#include<stdio.h>main(){intj,sum,s[40];
floatave;
sum=0;
for(j=0;j<=39;j++)
{scanf(“%d”,&s[j]);sum=sum+s[j];
}ave=sum/40;printf(“ave=%f”,ave);}2.數組元素:每一個數組元素都是一個變量,為了與一般的變量相區別,我們稱數組元素為下標變量3.下標變量在數組中的位置序號稱下標,c語言中下標
從0開始
6.1一維數組6.1.1一維數組的定義
定義方式:數據類型數組名[常量表達式];
合法標識符表示元素個數下標從0開始例
inta[10];數組名表示數組所在內存首地址也是a[0]的地址,是地址常量84:668095a[0]a[1]a[2]:a[9]a6.1.2數組元素的引用數組必須先定義,后使用下標可以是常量或整型表達式如:a[1],a[2*3]只能逐個引用數組元素,不能一次引用整個數組下標不要超范圍(越界)區分:數組定義:inta[10],數組元素引用t=a[6];例inta[10];printf(“%d”,a);(
)必須
for(j=0;j<10;j++)printf(“%d\t”,a[j]);(
)引用形式:數組名[下標]
例intdata[5];data[5]=10;(
)
//C語言對數組不作越界檢查,使用時要注意6.1.3數組元素的初始化與賦值在定義數組時,為數組元素賦初值(在編譯階段使之得到初值)inta[5]={1,2,3,4,5};等價于:a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;說明:
數組不初始化,其元素值為隨機數
對static數組元素不賦初值,系統會自動賦以0值
當全部數組元素賦初值時,可不指定數組長度
可以只給部分數組元素賦初值
一維數組的賦值是指數組已經定義完畢,對數組元素作動態賦值。例如:
inta[5]; /*定義一維數組a,每個元素的值是不確定的*/a[0]=1;a[1]=2;a[2]=3; /*逐個賦值*/3.inta[5];a={1,2,3,4,5};×4.inta[10];floati=3;a[i]=10;×1.charname[0];×floatweight[10.3];×intarray[-100];×6.inti,a[5];for(i=0;i<5;i++)scanf(“%d”,&a[i]);for(i=0;i<5;i++)printf(“%d”,a[i]);√2.inti=5;inta[i]={1,2,3,4,5};×5.inta[5];scanf(“%d”,&a);printf(“%d”,a);×討論:以下幾種用法是否正確?一維數組的賦值【例6.1】編程,輸入10個整數,計算最大值并輸出。源程序:#include<stdio.h>main(){ inti,max,a[10]; printf("Input10numbers:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); max=a[0];
for(i=1;i<10;i++) if(a[i]>max) max=a[i]; printf("Max=%d\n",max);}控制輸入10個數據核心算法語句【例6.2】用冒泡排序法對N個數進行排序(從小到大),用6個演示冒泡排序方法:依次比較相鄰的兩個數,將小數放前面,大數放后面.經過第1輪(共5次比較與交換)后最大的數9已“沉底”。再對余下的前面5個數進行第二輪比較,次大的數又被安置。n個數排序需要進行n-1輪比較,從第1輪到第n-1輪,各輪的比較次數依次為:n-1次、n-2次…1次,第i輪比較中要進行n-i次兩兩比較。972541a[0]a[1]a[2]a[3]a[4]a[5]72541
927754712541794515241
5
7921
4
5
7
914129725419999972541初始狀態第1輪第2輪第3輪第4輪第5輪76.2二維數組姓名高等數學大學英語C程序設計王青808286陳丹788980趙樂767281李磊536770羅鵬878291該表共有15個數值,我們可以把它看作是由5行3列組成的矩陣。在數學中,我們使用雙下標變量來表示矩陣中的某個值,其中一個變量表示行,另一個變量表示列。在C語言中可以使用二維數組來定義這樣的表。該表在C中可以這樣來定義:intv[5][3];/*v是二維數組名稱,5表示行數,3表示列數,int表示元素類型*/6.2.1二維數組的定義定義形式:
類型說明符數組名[常量表達式1][常量表達式2];
如:inta[3][4];
6.2.2二維數組的引用
數組元素的表示形式:
數組名[下標][下標]
注意:(1)每個下標都要用[]括起來,如a[2][1]不能寫成a[2,1](2)下標從0開始,且不要超過定義的范圍6.2.3二維數組的初始化與賦值1.分行初始化
inta[3][4]={
{1,2,3,4},{5,6,7,8},{9,10,11,12}};
此方法較直觀,第一對{}內的數據賦給第一行數組元素,依次類推2.按數據的排列順序對數組元素賦初值
inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
將數據依次賦給元素a[0][0],a[0][1]……a[2][3]123456789101112注意:此方法數據無明顯的界限,當數據較多時容易出錯3.對數組的部分元素賦初值,未賦值元素自動取0
inta[3][4]={{1,2},{3},{4,5,6}};
inta[3][4]={1,2,3,4,5,6};1200300045601234560000004.對數組的全部元素賦初值時可以省略第一維的長度(行下標),
系統會根據數據的個數和第二維的長度自動求出第一維長度,
但第二維下標不可省.
intb[][2]={1,2,3,4,5,6,7,8};數組a第一維長度為3
數組b第一維長度為4
如僅對部分元素賦初值,要想省略數組的行數,則必須分行賦值。
inta[][4]={{1,2},{0,3,4},{5}};【例6.3】求一個4×4矩陣的主對角線上各元素之和。#include<stdio.h>main(){ inta[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; inti,j,sum=0; for(i=0;i<4;i++) for(j=0;j<4;j++)
if(i==j) sum=sum+a[i][j]; printf("sum=%d",sum);}方陣主對角線上元素的特征是:行標值等于列標值。6.3字符數組與字符串一、字符數組1.定義 例charc[10],ch[3][4];
例charch[5];ch[0]=‘H’;ch[1]=‘e’;ch[2]=‘l’;ch[3]=‘l’;ch[4]=‘o’;ch[0]Hello逐個字符賦值ch[1]ch[2]ch[3]ch[4]注意{}
例charch[5]={‘H’,’e’,’l’,’l’,’o’};ch[0]Hello逐個字符賦值ch[1]ch[2]ch[3]ch[4]
例charch[5]={‘B’,’o’,’y’};ch[0]Boy\0\0逐個字符賦值ch[1]ch[2]ch[3]ch[4]
例charch[5]=“Boy”;ch[0]Boy\0\0用字符串常量ch[1]ch[2]ch[3]ch[4]
例charch[6]={“Hello”};charch[6]=“Hello”;charch[]=“Hello”;用字符串常量ch[0]Helloch[1]ch[2]ch[3]ch[4]\0ch[5]
例chardiamond[][5]={{'.','.','*'},{'.','*','.','*'}, {'*','.','.','.','*'},{'.','*','.','*'},{'.','.','*'}};二維字符數組初始化..*\0\0.*.*\0*...*.*.*\0..*\0\0diamond[0]diamond[1]diamond[2]diamond[3]diamond[4]
例charfruit[][7]={“Apple”,”Orange”,”Grape”,”Pear”,”Peach”};二維字符數組初始化fruit[0]fruit[1]fruit[2]fruit[3]fruit[4]Apple\0\0Orange\0Grape\0\0Pear\0\0\0Peach\0\0例輸出一個字符數組#include<stdio.h>main(){charc[10]={'I','','a','m','','a','','b','o','y'};inti;for(i=0;i<10;i++)printf("%c",c[i]);printf("\n");}Iamaboy0123456789二、字符串1、字符串存放及其結束標志無字符串變量,用字符數組處理字符串字符串結束標志:‘\0’例“hello”共5個字符,在內存占6個字節字符串長度5
'h'
'e'
'l'
'l'
'o'
'\0'
1041011081081110內存存放字符ASCII碼等價于:chars1[]={'C','h','i','n','a','\0'};chars2[10]={'C','h','i','n','a'};chars1[]=“China”
;
chars2[10]="China"
;字符串在字符數組中的存放s2[4]s2[5]s2[7]s2[6]s2[8]s2s2[0]s2[2]s2[1]s2[3]10個字節'C''i''n''a''h''\0's2[9]'\0'
'\0'
'\0'
'\0''\0's3[5]s1s3[0]s3[2]s3[1]s3[3]6個字節s3[4]'C''i''n''a''h'
數組名:字符數組(字符串)在內存的首地址。
作為字符串進行存儲時,字符串與字符數組的長度可以不等,系統自動加‘\0’為結束標志。ss1[0]s1[2]s1[1]s1[3]5個字節s1[4]'C''i''n''a''h''\0's3[5]s1s3[0]s3[2]s3[1]s3[3]6個字節s3[4]'C''i''n''a''h'字符串在字符數組中的存放不等價于:chars[5]={'C','h','i','n','a'};chars1[]=“China”
;
不能寫成:chars1[5]="China"
;
用字符串作初值時,數組的長度應足夠大以便能容納全部字符和‘\0’。2、字符串的輸入輸出逐個字符I/O:%c整個字符串I/O:%s例用%cmain(){charstr[5];inti;for(i=0;i<5;i++)scanf(“%c”,&str[i]);for(i=0;i<5;i++)printf(“%c”,str[i]);}例用%smain(){charstr[5];scanf(“%s”,str);printf(“%s”,str);}main(){chara[5]={‘H’,’e’,’l’,’l’,’o’};printf(“%s”,a);}main(){chara[]=“Hello”;printf(“%s”,a);}結果:因為沒有‘\0’結束符,輸出Hello,后面的字符不確定。結果:Helloprintf的%s輸出字符串main(){chara[]={'h','e','l','\0','l','o','\0'};printf("%s",a);}輸出:hel
hel\0lo\0數組中有多個‘\0’時,遇第一個結束用“%s”輸出時,遇‘\0’結束hello02314main(){inti;chara[5];scanf("%s",a);for(i=0;i<5;i++)printf("%d,",a[i]);}運行情況:(1)若輸入hel,正常(2)若輸入hell,正常(3)若輸入hello,用%s輸出時,會出現問題輸入字符串長度<數組維數scanf的%s輸入字符串
hel\0
hell\0
helloscanf的%s輸入字符串#include<stdio.h>main(){chara[15],b[5],c[5];
scanf("%s%s%s",a,b,c);printf("a=%s\nb=%s\nc=%s\n",a,b,c);
scanf("%s",a);printf("a=%s\n",a);}運行情況:輸入:Howareyou?輸出:a=Howb=arec=you?輸入:Howareyou?輸出:a=Howscanf中%s輸入時,遇空格或回車結束
How\0
are\0
you?\0
3、常用的字符串處理函數除puts和gets外,包含在頭文件string.h(1)字符串輸出函數puts格式:puts(字符數組)功能:向顯示器輸出字符串(輸出完,換行)說明:字符數組必須以‘\0’結束(2)字符串輸入函數gets格式:gets(字符數組)功能:從鍵盤輸入一以回車結束的字符串放入字符數組中,并自動加‘\0’說明:輸入串長度應小于字符數組維數例#include<stdio.h>main(){charstring[80];printf(“Inputastring:”);gets(string);puts(string);}輸入:Howareyou?輸出:Howareyou?
#include<stdio.h>main(){chara[15],b[5],c[5];scanf("%s",a);printf("a=%s\n",a);}運行情況:輸入:Howareyou?輸出:a=How#include<stdio.h>main(){chara[15],b[5],c[5];gets(a);printf("a=%s\n",a);}
使用scanf()的%s整體輸入,空格或回車結束使用gets()函數,只以回車鍵結束輸入運行情況:輸入:Howareyou?輸出:a=Howareyou?討論:scanf()的%s與gets()函數的區別?(3)字符串連接函數strcat格式:strcat(字符
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商品訂金合同協議
- 武漢奔馳銷售合同協議
- 總經理招聘合同協議
- 商務崗勞動合同協議
- 毛坯排屋出售合同協議
- 2025勞動合同協議書
- 2025股權轉讓合同范本示例
- 2025屆湖北省部分高中協作體高三下學期期中聯考政治試題及答案
- 2025大連房屋租賃合同范本
- 微電影拍攝協議書
- 民用爆破器材產品出廠基準價格表
- 最新2013版建設工程量清單計價規范及房建工程量計算規范應用解讀(實例講解350P)
- 情緒管理和壓力疏導講稿課件
- 新版導師制度課件
- 中職STOLL電腦橫機操作
- 耳部疾病 課件
- 紫色卡通萬圣節節日活動策劃PPT模板
- 《跨境電商美工實務》完整版課件全套ppt教學教程-最全電子講義(最新)
- 藍海華騰變頻器說明書
- 空氣質量連續監測系統日常巡檢維護記錄表
- 第二套全國中小學校園集體舞圖解
評論
0/150
提交評論