中國(guó)科技大學(xué)C語(yǔ)言講義.ppt
《中國(guó)科技大學(xué)C語(yǔ)言講義.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《中國(guó)科技大學(xué)C語(yǔ)言講義.ppt(51頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、數(shù)組是一組有序數(shù)據(jù)的集合,數(shù)組中每一個(gè)元素的類型相同。用數(shù)組名和下標(biāo)來唯一確定數(shù)組中的元素。 6.1 1維數(shù)組的定義和引用 6.2 2維數(shù)組的定義和引用 6.3 字符數(shù)組與字符串,第6章 數(shù) 組,1、一維數(shù)組的定義,定義方式:,存儲(chǔ)類型符 數(shù)據(jù)類型符 數(shù)組變量名整型常量表達(dá)式;,數(shù)組中各元素的存儲(chǔ)類別,數(shù)組元素的數(shù)據(jù)類型,合法的標(biāo)識(shí)符,表示元素個(gè)數(shù) 下標(biāo)從0開始,用分號(hào)結(jié)尾,例如: int a10; //定義了有10個(gè)數(shù)據(jù)元素的int型數(shù)組a float f20; //定義了有20個(gè)數(shù)據(jù)元素的float型數(shù)組f char str110, str220; //定義了有10個(gè)
2、和20個(gè)數(shù)據(jù)元素的char型 數(shù)組str1和str2,6.1 1維數(shù)組的定義和引用,定義說明:,(1) 數(shù)組定義時(shí),必須指定數(shù)組的大小(或長(zhǎng)度),數(shù)組大小必須是整型常量表達(dá)式,不能是變量或變量表達(dá)式。 (2) 數(shù)組定義后,系統(tǒng)將給其分配一定大小的內(nèi)存單元,其所占內(nèi)存單元的大小與數(shù)組元素的類型和數(shù)組的長(zhǎng)度有關(guān)。,數(shù)組所占內(nèi)存單元的字節(jié)數(shù) = 數(shù)組大小 sizeof(數(shù)組元素類型),,例如,下面對(duì)數(shù)組的定義是錯(cuò)誤的: int n = 10; int an; //數(shù)組的大小不能是變量 int b10.3; //數(shù)組的大小不能是浮點(diǎn)常量 int cn+10;
3、//數(shù)組的大小不能是變量表達(dá)式,例如:short int a20; 則數(shù)組a所占內(nèi)存單元的大小為:20 * sizeof(short) = 20 * 2 = 40(字節(jié)),2、一維數(shù)組的引用,引用格式:,數(shù)組變量名下標(biāo),引用說明:,(1) 下標(biāo)可以是整型常量、整型變量或整型表達(dá)式。C語(yǔ)言規(guī)定,下標(biāo)的最小值是0,最大值則是數(shù)組大小減1。注意越界問題。 (2) 只能逐個(gè)引用數(shù)組元素,不能一次引用整個(gè)數(shù)組 (3) 數(shù)組定義以后,數(shù)組中的每一個(gè)元素其實(shí)就相當(dāng)與一個(gè)變量,所以我們有時(shí)也把數(shù)組元素稱為下標(biāo)變量。對(duì)變量的一切操作同樣也適合于數(shù)組元素。 (4) 數(shù)組必須先定義,后使用,存儲(chǔ)單元有效地址 = 數(shù)
4、組的起始地址 + 下標(biāo) sizeof(數(shù)組元素類型) short int a10; short x = a10; //引用越界,a10的地址為:2000 + 10 * 2 = 2020, 只能引用a0a9,例 int a10; printf (“%d”, a); () 必須 for (j = 0; j < 10; j++) printf (“%dt”, aj); (),例:int a3; a0 = 2; //將數(shù)組a的第1個(gè)元素賦值為2 a1 = 4; //將數(shù)組a的第2個(gè)元素賦值為4 a2 = a0 + a1; //將數(shù)組a的第
5、1個(gè)元素的值與第2個(gè)元 素的值相加賦給第3個(gè)元素(值為6),例 int x = a1; //錯(cuò)誤,應(yīng)先定義數(shù)組a,再引用 int a10;,例 使數(shù)組元素a0a9的值為09,然后逆序輸出。 #include “stdio.h” void main() int i,a10; for (i=0;i=0; i--) printf(%d ,ai); 運(yùn)行輸出:9 8 7 6 5 4 3 2 1 0,3、一維數(shù)組的初始化 1、一般初始化, 例、static int a10 = 0,1,2,3,4,5,6,7,8,9; int array10 = 1,2,3,4,5,6
6、,7,8,9,10; 2、部分元素初始化, 例、static int a10 = 0,1,2,3,4; 3、全部元素均初始化為0,不允許簡(jiǎn)寫。 例、 static int a10 = 0,0,0,0,0,0,0,0,0,0; 不能簡(jiǎn)寫為:static int a10 = 0*10; 4、如果全部元素均指定初值,定義中可以省略元素的個(gè)數(shù), 例、static int a = 1,2,3,4,5;,一維數(shù)組在程序中賦值,C語(yǔ)言除了在定義數(shù)組變量時(shí)用初值列表對(duì)數(shù)組整體賦值以外,無法再對(duì)數(shù)組變量進(jìn)行整體賦值。,例 int a5; a = 1, 2, 3, 4, 5; a = 1, 2, 3,
7、4, 5; a5 = 1, 2, 3, 4, 5;,錯(cuò)誤!,數(shù)組定義后,如何對(duì)數(shù)組進(jìn)行賦值呢? 只能通過C語(yǔ)句對(duì)數(shù)組中的數(shù)組元素逐一賦值。,使用賦值語(yǔ)句來逐一賦值,例 int a4; a0 = 1; a1 = 2; a2 = 3; a3 = 4; char str80; str0 = b; str1 = y; str2 = e; str3 = 0; //將數(shù)組str賦值為一字符串bye,這種方法是一種簡(jiǎn)單而且行之有效的方法,它適用于長(zhǎng)度較小的數(shù)組或?qū)﹂L(zhǎng)度較大的數(shù)組部分元素賦值,而且可對(duì)每個(gè)數(shù)組元素賦不同的值。,一維數(shù)組在程序中賦值,使用循環(huán)語(yǔ)句來逐一賦值,例如,將數(shù)組a的各元素賦
8、值成奇數(shù)序列。 int a10, i; for (i = 0; i < 10; i++) ai = 2* i + 1;,例如,接受用戶鍵盤輸入賦值給數(shù)組各元素。 int a10, i; for (i = 0; i < 10; i++) scanf(%d, ,判斷下列賦值是否正確? int a3; scanf (%d%d%d, a);,,這種方法是在編程中普遍使用的一種方法,它適用于對(duì)某數(shù)組元素進(jìn)行有規(guī)律的賦值或接受用戶通過鍵盤輸入對(duì)數(shù)組元素的賦值 。,4、一維數(shù)組應(yīng)用舉例,【例1】輸入一行字符,統(tǒng)計(jì)其中各個(gè)大寫字母出現(xiàn)的次數(shù)。,#include void main ( vo
9、id ) char ch; int num26=0, i; while ((ch = getchar( )) != n) //輸入字符串,判斷統(tǒng)計(jì) if (ch = A ,運(yùn)行結(jié)果: AABBCCxyYzEEE A(2) B(2) C(2) D(0) E(3) F(0) G(0) H(0) I(0) J(0) K(0) L(0) M(0) N(0) O(0) P(0) Q(0) R(0) S(0) T(0) U(0) V(0) W(0) X(0) Y(1) Z(0),4、一維數(shù)組應(yīng)用舉例,【例2】用冒泡排序法將10個(gè)整數(shù)按照從小到大的順序排序,排序過程: (1) 比較第一個(gè)數(shù)與第
10、二個(gè)數(shù),若為逆序a0a1,則交換;然后比較第二個(gè)數(shù)與第三個(gè)數(shù);依次類推,直至第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ù)上述過程,共經(jīng)過n-1趟冒泡排序后,排序結(jié)束,,38,49,76,97,97,97,97,13,27,30,13,76,76,76,27,30,13,65,65,65,27,30,13,49,49,49,27,30,13,38,38,38,27,30,冒泡排序圖示效果,#include #define NUM 10 void main
11、( ) int aNUM, i, j, t; printf (input %d numbers: n, NUM); for (i = 0; i aj+1) //交換aj和aj+1 t = aj; aj = aj+1; aj+1 = t; //輸出排好序的數(shù)據(jù) printf (the sorted numbers:n); for (i = 0; i < NUM; i++) printf (%d , ai); ,運(yùn)行結(jié)果: input 10 numbers: 10 1 2 7 6 8 9 3 4 5 the sorted numbers: 1 2 3
12、4 5 6 7 8 9 10,不足之處:對(duì)已排好序的序列仍然要進(jìn)行9輪冒泡操作,盡管不會(huì)有任何數(shù)據(jù)交換操作。,如何修改呢?,對(duì)冒泡排序的改進(jìn): 當(dāng)一次冒泡過程中發(fā)現(xiàn)沒有交換操作時(shí),表明序列已經(jīng)排好序了,便終止冒泡操作。為了標(biāo)記在比較過程中是否發(fā)生了數(shù)據(jù)交換,在程序中設(shè)立一個(gè)標(biāo)志變量flag,在每趟比較前,把flag變量置為0,如果在這趟比較過程中發(fā)生了交換,把變量flag的值置為1。在這一趟比較結(jié)束后判斷如果flag變量取值等于0表示可以結(jié)束排序過程,否則進(jìn)行下一趟比較。,#include #define NUM 10 void main ( ) int aNUM, i, j, t, f
13、lag; printf (input %d numbers: n, NUM); for (i = 0; i aj+1) //交換aj和aj+1 t = aj; aj = aj+1; aj+1 = t; flag = 1; if (flag = = 0) break; printf (the sorted numbers:n); //輸出排好序的數(shù)據(jù) for (i = 0; i < NUM; i++) printf (%d , ai); ,4、一維數(shù)組應(yīng)用舉例,【例3】用選擇排序法將10個(gè)整數(shù)按照從小到大的順序排序,排序過程: (1) 首先通過n-1次比較,從n個(gè)
14、數(shù)中找出最小的, 將它與第一個(gè)數(shù)交換第一趟選擇排序,結(jié)果最小的數(shù)被安置在第一個(gè)元素位置上; (2) 再通過n-2次比較,從剩余的n-1個(gè)數(shù)中找出關(guān)鍵字次小的記錄,將它與第二個(gè)數(shù)交換第二趟選擇排序; (3) 重復(fù)上述過程,共經(jīng)過n-1趟排序后,排序結(jié)束。,,,初始: 49 38 65 97 76 13 27 ,i = 1,13,49,一趟: 13 38 65 97 76 49 27 ,i = 2,27,38,二趟: 13 27 65 97 76 49 38 ,三趟: 13 27 38 97 76 49 65 ,四趟: 13 27 38 49
15、 76 97 65 ,五趟: 13 27 38 49 65 97 76 ,六趟: 13 27 38 49 65 76 97 ,,,,選擇排序圖示效果,#include void main( ) int a11, i, j, k, x; printf (Input 10 numbers: n); for (i = 1; i < 11; i++) scanf (%d, ,【例4】 用數(shù)組求Fibonacci數(shù)列 前20個(gè)數(shù),#include void main( ) int i; int f20 = 1, 1; for (i = 2; i < 20;
16、 i++) fi = fi-2 + fi-1; for (i = 0; i < 20; i++) if (i % 5 == 0) printf (n); printf (%12d, fi); ,4、一維數(shù)組應(yīng)用舉例,1、 二維數(shù)組的定義 定義方式: 數(shù)據(jù)類型數(shù)組名常量表達(dá)式1常量表達(dá)式2;,數(shù)組元素的存放順序 原因:內(nèi)存是一維的 二維數(shù)組:按行序優(yōu)先 多維數(shù)組:最右下標(biāo)變化最快,,例 int a34; float b25; int c234; int a3,4; (),行數(shù),列數(shù),元素個(gè)數(shù)=行數(shù)*列數(shù),,6.2 2維數(shù)組的定義和引用,二維數(shù)組理解,二維數(shù)組a是由
17、3個(gè)元素組成,每個(gè)元素ai由包含4個(gè)元素 的一維數(shù)組組成,2、二維數(shù)組元素的引用 形式: 數(shù)組名下標(biāo)1下標(biāo)2 3、二維數(shù)組元素的初始化 分行初始化:,存儲(chǔ)類型符 數(shù)據(jù)類型 數(shù)組變量名行常量表達(dá)式列常量表達(dá)式 第0行初值表,第1行初值表,,最后1行初值表;,按元素排列順序初始化,存儲(chǔ)類型符 數(shù)據(jù)類型 數(shù)組變量名行常量表達(dá)式列常量表達(dá)式 初值表 ;,4、二維數(shù)組在程序中賦值,例: 通過鍵盤輸入對(duì)二維數(shù)組a各元素賦值 int i, j, a23; for (i = 0; i < 2; i++) for (j = 0; j < 3; j++) scanf (%d, ,5
18、、二維數(shù)組的應(yīng)用舉例,【例1】 輸入多個(gè)學(xué)生多門課程的成績(jī),分別求每個(gè)學(xué)生的平均成績(jī)和每門課程的平均成績(jī)。,程序設(shè)計(jì)思想: 要滿足上述程序的要求,必須定義一個(gè)二維數(shù)組,用來存放學(xué)生各門課的成績(jī)。這個(gè)數(shù)組的每一行表示某個(gè)學(xué)生的各門課的成績(jī)及其平均成績(jī),每一列表示某門課的所有學(xué)生成績(jī)及該課程的平均成績(jī)。因此,在定義這個(gè)學(xué)生成績(jī)的二維數(shù)組時(shí)行數(shù)和列數(shù)要比學(xué)生人數(shù)及課程門數(shù)多1。成績(jī)數(shù)據(jù)的輸入輸出以及每個(gè)學(xué)生的平均成績(jī)、各門課程的平均成績(jī)的計(jì)算方法比較簡(jiǎn)單。,#include #define NUM_std 5 //定義符號(hào)常量學(xué)生人數(shù)為5 #define NUM_course 4 //定義符號(hào)
19、常量課程門數(shù)為4 void main ( ) int i, j; //定義成績(jī)數(shù)組,各元素初值為0 float scoreNUM_std+1NUM_course+1 = 0; for (i = 0; i < NUM_std; i++) for (j = 0; j < NUM_course; j++) printf (input the mark of %dth courseof %dth student: , j+1, i+1); scanf (%f, //輸入第i個(gè)學(xué)生的第j門課的成績(jī) ,for (i = 0; i < NUM_std; i++) for (j =
20、 0; j < NUM_course; j++) scoreiNUM_course += scoreij; //求第i個(gè)學(xué)生的總成績(jī) scoreNUM_stdj += scoreij; //求第j門課的總成績(jī) scoreiNUM_course /= NUM_course; //求第i個(gè)人的平均成績(jī) for (j = 0; j < NUM_course; j++) scoreNUM_stdj /= NUM_std; //求第j門課的平均成績(jī),printf ( NO. C1 C2 C3 C4 AVERn); //輸出每個(gè)學(xué)生的各科成績(jī)和平均成績(jī) for (i = 0
21、; i < NUM_std; i++) printf (STU%dt, i+1); for (j = 0; j < NUM_course+1; j++) printf (%6.1ft, scoreij); printf (n); printf (---------------------------------------); //輸出1條短劃線 printf (nAVER_C ); for (j = 0; j < NUM_course; j++) //輸出每門課程的平均成績(jī) printf (%6.1ft, scoreNUM_stdj); printf (n); ,【例2】讀入
22、下表中值到數(shù)組,分別求各行、各列及表中所有數(shù)之和,#include void main ( ) int x54, i, j; for (i = 0; i < 4; i++) for (j = 0; j < 3; j++) scanf (%d, ,for (i = 0; i < 5; i++) for (j = 0; j < 4; j++) printf (%5dt, xij); printf (n); ,例 有一個(gè)34的矩陣,要求編程序以求出其中值最大的那個(gè)元素的值及其所在的行號(hào)和列號(hào)。 算法: 首先把第一個(gè)元素a00作為 臨時(shí)最大值max,然后把臨時(shí)最 大值ma
23、x與每一個(gè)元素aij進(jìn) 行比較,若aijmax, 把a(bǔ)ij作為新的臨時(shí)最大值, 并記錄下其下標(biāo)i和j。 當(dāng)全部元素比較完后, max是整個(gè)矩陣全部元素的最大值。,main() int i,j,row=0,colum=0,max; static int a34=1,2,3,4,9,8,7,6,-10,10,-5,2; max = a00; for(i=0; i max ) max = aij;row = i;colum = j; printf(max=%d, row=%d, colum=%dn,max,row,colum); ,6.3 字符數(shù)組與字符串,一、定義字符數(shù)組 例、 char
24、 c10; /* 定義c為字符數(shù)組,包含10個(gè)元素 */ c0=I; c1= ; c2=a; c3=m; c4= ; c5=h; c6=a; c7=p; c8=p; c9=y; 注意: 字符型與整型可以通用,但有區(qū)別: char c10; /* 在內(nèi)存中占10字節(jié) */ int c10; /* 在內(nèi)存中占20字節(jié) */,二、字符數(shù)組的初始化 1、逐個(gè)字符賦初值 static char c10 = I, ,a,m, ,h,a,p,p,y; static char c10 = c, ,p,r,o,g,r,a,m; /* 9 */ static char c = I, ,a,m, ,h,a,p,p,
25、y; 注意: 初始化數(shù)據(jù)少于數(shù)組長(zhǎng)度,多余元素自動(dòng)為“空”(0,二進(jìn)制0)。 指定初值時(shí),若未指定數(shù)組長(zhǎng)度,則長(zhǎng)度等于初值個(gè)數(shù)。 花括號(hào)中字符的個(gè)數(shù)數(shù)組長(zhǎng)度,語(yǔ)法錯(cuò),以字符串常量賦初值 static char c11 = I am happy; static char c11 = I am happy; 注意: 數(shù)組長(zhǎng)度字符串中的字符數(shù) 若數(shù)組長(zhǎng)度字符串中的字符數(shù),則出錯(cuò) 若數(shù)組長(zhǎng)度字符串中的字符數(shù),則后加 數(shù)組長(zhǎng)度可省略,static char c = I am happy; static char c = I, ,a,m, ,h,a,p,p,y; 這兩種初始化不等價(jià)為何? 字符數(shù)組本身不
26、要求最后是 而字符串常量一定最后是,三、引用 引用一個(gè)元素,得到一個(gè)字符。 例:c2,,四、字符數(shù)組的輸入輸出 1、用“%c”格式符逐個(gè)輸入輸出。 2、用“%s”格式符按字符串輸入輸出 注意: %c 輸出,常用于字符數(shù)組中無標(biāo)記的情況 %s輸出,用于字符數(shù)組中有標(biāo)記的情況,。,void main() char c10; int i ; for( i =0; i<10; i++ ) scanf(“%c”, */ ,scanf(“%s”, c);,,,printf(“%s”, c);,例 輸出一個(gè)鉆石圖形。 void main() static char diamond5= , ,*, ,*,
27、 ,*, *, , , ,*, ,*, ,*, , ,* ; int i, j; for(i=0;i<5;i++) for(j=0;j<5;j++) printf(%c,diamondij); printf(n); ,void main() static char diamond= “ *n**n **n **n *n”; printf(“%s”,diamond); ,案例 字符數(shù)組的整體輸入與輸出。 /*功能:將2維字符數(shù)組進(jìn)行初始化,并在屏幕上輸出*/ void main() int i; char name59= 張三山, 李四季, 王五魁, 劉六順
28、, 趙七巧; for(i=0;i<5;i++) printf(n%st,namei); /*namei代表該行數(shù)組元素的首地址*/ ,字符串的輸入,格式:gets(字符數(shù)組) //應(yīng)包含的.h文件為stdio.h 功能:從鍵盤輸入一以回車結(jié)束的字符串放入字符數(shù)組中, 并自動(dòng)加0 說明:輸入串長(zhǎng)度應(yīng)小于字符數(shù)組維數(shù),例:char str80; gets (str); 當(dāng)輸入:Ilovechina!(表示空格,表示回車)時(shí),str中的字符串將是:I love china!,gets函數(shù),scanf函數(shù),格式:scanf(%s, 字符數(shù)組) //應(yīng)包含的.h文件為stdio.h
29、功能:從鍵盤輸入一以空格或回車結(jié)束的字符串放入字符數(shù) 組中,并自動(dòng)加0 說明:輸入串長(zhǎng)度應(yīng)小于字符數(shù)組維數(shù),例:char str80; scanf (%s, str); 當(dāng)輸入:hellochina時(shí),str將是:hello,注意與gets的區(qū)別!,常用的字符串處理函數(shù),scanf函數(shù)的使用:,例:利用scanf函數(shù)可以連續(xù)輸入多個(gè)字符串,輸入時(shí),字符串間用空格分隔。 char str140, str240, str40; scanf (%s%s%s, str1, str2, str3); 輸入:Ilovechina! str1:I,str2:love,str3:china
30、!。,例:使用%ns格式控制符 限制輸入的字符個(gè)數(shù)。 char str10; scanf (%9s, str); //最多可讀入9個(gè)非空格字符到str中,字符串的輸出,格式:puts(字符串地址) //應(yīng)包含的.h文件為stdio.h 功能:向顯示器輸出字符串(輸出完,換行) 說明:如果是字符數(shù)組,則必須以0結(jié)束,puts函數(shù),printf函數(shù),格式:printf(%s, 字符串地址) //應(yīng)包含的.h文件為stdio.h 功能:依次輸出字符串中的每個(gè)字符直到遇到字符0 (0不會(huì)被輸出),例: char name = John Smith; printf (The name i
31、s: %sn, name); printf (Last name is: %sn, ,輸出結(jié)果: The name is: John Smith Last name is: Smith First name is: John,3、字符及字符串操作的常用函數(shù),字符串的長(zhǎng)度,格式:strlen(字符串地址) //應(yīng)包含的.h文件為string.h 功能:計(jì)算字符串長(zhǎng)度 返值:返回字符串實(shí)際長(zhǎng)度,不包括0在內(nèi),strlen函數(shù),例: char str = 0123456789; printf (%d, strlen(str)); //輸出結(jié)果為10 printf (%d, strlen(
32、 //輸出結(jié)果為5,3、字符及字符串操作的常用函數(shù),字符串的復(fù)制,格式:strcpy (字符數(shù)組1,字符串2) //應(yīng)包含的.h文件為string.h 功能:將字符串2拷貝到字符數(shù)組1中去 返值:返回字符數(shù)組1的首地址 說明:字符數(shù)組1必須足夠大 拷貝時(shí)0一同拷貝 不能使用賦值語(yǔ)句為一個(gè)字符數(shù)組賦值,strcpy函數(shù),例: char str120, str220; scanf (%s, str2); strcpy (str1, str2);,例: char str120, str220; str1 = Hello!; () str2 = str1; ()
33、,3、字符及字符串操作的常用函數(shù),字符串比較,格式:strcmp (字符串1, 字符串2) //應(yīng)包含的.h文件為string.h 功能:比較兩個(gè)字符串 比較規(guī)則:對(duì)兩串從左向右逐個(gè)字符比較(ASCII碼), 直到遇到不同字符或0為止 返值:返回int型整數(shù)。a. 若字符串1 字符串2, 返回正整數(shù) c. 若字符串1== 字符串2, 返回零 說明:字符串比較不能用“==”,必須用strcmp,strcmp函數(shù),例: strcmp (“abcd”, “abCD”); //將返回一正整數(shù); strcmp (“1234”, “12345”); //將返回一負(fù)整數(shù);
34、 strcmp (hello, hello); //將返回0。,例:下面的程序要求用戶輸入密碼,如果輸入正確,則進(jìn)行相應(yīng)的程序運(yùn)行,否則返回。 char password20; printf (input the password: ); scanf (%15s, password); if ( strcmp(password, administrator) != 0 ) return; ,,不能寫成 if (password==administrator),3、字符及字符串操作的常用函數(shù),字符串的連接,格式:strcat (字符數(shù)組1, 字符數(shù)組2) //應(yīng)包含的.h文件
35、為string.h 功能:把字符數(shù)組2連到字符數(shù)組1后面 返值:返回字符數(shù)組1的首地址 說明:字符數(shù)組1必須足夠大 連接前,兩串均以0結(jié)束;連接后,串1的0取 消,新串最后加0,例:char str120 = 12345, str2 = 6789; strcat (str1, str2); printf (%s, str1); //將輸出123456789,將字符串中大寫字母轉(zhuǎn)換成小寫strlwr()函數(shù) (1)調(diào)用方式:strlwr(字符串) (2)函數(shù)功能:將字符串中的大寫字母轉(zhuǎn)換成小寫,其它字符(包括小寫字母和非字母字符)不轉(zhuǎn)換。 將字符串中小寫字母轉(zhuǎn)換成大寫stru
36、pr()函數(shù) (1)調(diào)用方式:strupr(字符串) (2)函數(shù)功能:將字符串中小寫字母轉(zhuǎn)換成大寫,其它字符(包括大寫字母和非字母字符)不轉(zhuǎn)換。,【例】輸入一行字符,統(tǒng)計(jì)其中單詞的個(gè)數(shù),單詞之間用空格間隔。,設(shè)計(jì)分析: 按照題義,連續(xù)的一段不含空格類字符的字符串就是單詞。將連續(xù)的若干個(gè)空格作為出現(xiàn)一次空格,那么單詞的個(gè)數(shù)可以由空格出現(xiàn)的次數(shù)(連續(xù)的若干個(gè)空格看作一次空格,一行開頭的空格不統(tǒng)計(jì))來決定。如果當(dāng)前字符是非空格類字符,而它的前一個(gè)字符是空格,則可看作是“新單詞”開始,累計(jì)單詞個(gè)數(shù)的變量加1;如果當(dāng)前字符是非空格類字符,而前一個(gè)字符也是非空格類字符,則可看作是“舊單詞”的繼續(xù),累計(jì)單詞
37、個(gè)數(shù)的變量取值保持不變。,#include #define IN 1 #define OUT 0 void main ( ) char string80, c; int i, num=0, word = OUT; gets (string); for (i = 0; (c = stringi) != 0; i++) if (c == ) //判斷c是否為空格 word = OUT; else if (word == OUT) word = IN; num++; printf (There are %d words in the line.n,
38、 num); ,運(yùn)行結(jié)果: I am a student There are 4 words in the line,2維字符數(shù)組存放字符串,例:char city 10 = BeiJing, ShangHai, TianJin, GuangZhou, WuHan ;,字符串結(jié)束標(biāo)志,多余空位補(bǔ)0,【例2】輸入多個(gè)城市的名字,按升序排列輸出 。,#include #include #define CITYNUM 10 void main ( ) int i, j, k, num; char cityCITYNUM20; char str80; num = 0;
39、//實(shí)際輸入的城市數(shù)初始化為0 //輸入城市名字符串(長(zhǎng)度不能超過19) for (i = 0; i 19) //城市名字符串超過19時(shí),重輸 i--; continue; strcpy (cityi, str); //將輸入的城市名保存到字符串?dāng)?shù)組中 num++; //實(shí)際輸入的城市數(shù)增1 ,for (i = 0; i 0) k = j; if (k != i) //將最小城市名的字符串cityk與cityi交換 strcpy (str, cityi); strcpy (cityi, cityk); strcpy (cityk, str);
40、 for (i = 0; i < num; i++) //顯示排序后的結(jié)果 printf (%s , cityi); printf (n); ,運(yùn)行結(jié)果: 輸入為:beijing wuhan shanghai guangzhou tianjin beijing guangzhou shanghai tianjin wuhan,常見錯(cuò)誤,int a10,i ; for(i=1;i<=10;i++) .,下標(biāo)越界,上機(jī): 教材:P168-169, 1,7,8,9 實(shí)驗(yàn):P144, 7,補(bǔ)充,求解幻方問題。 幻方是一種古老的數(shù)字游戲,n階幻方就是把整數(shù)1n2排成nn的方陣,使得每行中的各元素
41、之和,每列中各元素之和,以及兩條對(duì)角線上的元素之和都是同一個(gè)數(shù)S,S稱為幻方的幻和。在中世紀(jì)的歐洲,對(duì)幻方有某種神秘的概念,許多人配戴幻方以圖避邪,奇數(shù)階幻方的構(gòu)造方法很簡(jiǎn)單,我們先來看一個(gè)三階幻方:,各數(shù)在方陣中的位置可以這樣確定: 首先把1放在最上一行正中間的方格中,然后把下一個(gè)整數(shù)放置到右上方,如果到達(dá)最上一行,下一個(gè)整數(shù)放在最后一行,就好象它在第一行的上面,如果到達(dá)最右端,則下一個(gè)整數(shù)放在最左端,就好象它在最右一列的右側(cè)。當(dāng)?shù)竭_(dá)的方格中填上數(shù)值時(shí),下一個(gè)整數(shù)就放在剛填寫上數(shù)碼的方格的正下方,照著三階幻方,從1至9走一下,就可以明白它的構(gòu)造方法。,#include #define MA
42、X 15 void main ( ) int m, mm, i, j, k, ni, nj; int magicMAXMAX = 0; printf (Enter the number you wanted: ); scanf (%d, ,for (k = 1; k <= mm; k++) magicij = k; //求右上方方格的坐標(biāo) if (i = = 0) //最上一行 ni = m - 1; //下一個(gè)位置在最下一行 else ni = i - 1; if (j = = m - 1) //最右端 nj = 0; //下一個(gè)位置在最左端 else nj = j + 1; //判斷右上方方格是否已有數(shù) if (magicninj == 0) //右上方無值 i = ni; j = nj; else //右上方方格已填上數(shù) i++; ,for (i = 0; i < m; i++) //顯示填充的結(jié)果 for (j = 0; j < m; j++) printf (%4d, magicij); printf (n); ,
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫(kù)試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫(kù)試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫(kù)試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫(kù)及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫(kù)含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案