




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語言程序設(shè)計(jì)任務(wù)式教程(微課版)
VisualC++1計(jì)算機(jī)工程學(xué)院模塊3數(shù)組與字符串任務(wù)1一維數(shù)組任務(wù)2二維數(shù)組任務(wù)3字符與字符串2計(jì)算機(jī)工程學(xué)院
任務(wù)1一維數(shù)組
學(xué)習(xí)目標(biāo)了解一維數(shù)組基本概念;掌握數(shù)組類型變量的定義與引用;掌握數(shù)組元素的引用;領(lǐng)會(huì)一維數(shù)組元素的查找、排序、刪除、修改和統(tǒng)計(jì)等算法。
3計(jì)算機(jī)工程學(xué)院案例一競(jìng)賽成績(jī)的錄入和輸出
1.問題描述錄入10名學(xué)生的計(jì)算機(jī)課程的競(jìng)賽成績(jī)并輸出。
1.1.1案例講解4計(jì)算機(jī)工程學(xué)院2.編程分析
一維數(shù)組中的數(shù)組元素是排成一行的一組下標(biāo)變量,用一個(gè)統(tǒng)一的數(shù)組名來標(biāo)識(shí),用下標(biāo)來指示其在數(shù)組中的具體位置。下標(biāo)從0開始排列。一維數(shù)組通常是和一重循環(huán)相配合,對(duì)數(shù)組元素依次進(jìn)行處理。
5a0a1a2a3a4a5a6a7a8a9計(jì)算機(jī)工程學(xué)院3.編寫源程序
/*EX3_1.C*/#include<stdio.h>voidmain(){intintArray[10],intI; printf("請(qǐng)輸入十個(gè)數(shù):\n"); for(intI=0;intI<10;intI++) scanf("%d",&intArray[intI]);for(intI=0;intI<10;intI++) printf("%4d",intArray[intI]); }6計(jì)算機(jī)工程學(xué)院4.運(yùn)行結(jié)果
圖3-1案例1運(yùn)行結(jié)果7計(jì)算機(jī)工程學(xué)院5.歸納分析
數(shù)組是一些具有相同數(shù)據(jù)類型的數(shù)組元素的有序集合。數(shù)組中的每一個(gè)元素(即每個(gè)成員、也可稱為下標(biāo)變量)具有同一個(gè)名稱,不同的下標(biāo),每個(gè)數(shù)組元素可以作為單個(gè)變量來使用。在數(shù)組元素引用時(shí)應(yīng)注意以下幾點(diǎn):
(1)引用時(shí)只能對(duì)數(shù)組中元素引用,而不能對(duì)整個(gè)數(shù)組引用。如【EX3_1】中的a。(2)在引用數(shù)組元素時(shí),下標(biāo)可以是整型常數(shù)、已賦值的變量或含變量的表達(dá)式。如【EX3_1】中intArray[intI]的下標(biāo)intI就是已賦值的變量。(3)由于數(shù)組元素本身可看作同一類型的單個(gè)變量,因此,對(duì)變量的各種操作也都適用于數(shù)組元8計(jì)算機(jī)工程學(xué)院素。如例【EX3_1】中對(duì)數(shù)組元素intArray[intI]的賦值操作和輸出操作(4)引用數(shù)組元素時(shí),下標(biāo)上限(即最大值)不能超界。也就是說,若數(shù)組含有n個(gè)元素,下標(biāo)的最大值為n-1,(因下標(biāo)從0開始);若超出界限,C編譯程序并不給出錯(cuò)誤信息(即其不檢查數(shù)組是否超界),程序仍可以運(yùn)行,但可能會(huì)改變?cè)摂?shù)組以外其它變量或其它數(shù)組元素的值,由此會(huì)造成不正確的結(jié)果。如【EX3_1】,若誤將第一個(gè)for語句中的intI<10寫成intI<=10,就會(huì)出現(xiàn)下標(biāo)超界現(xiàn)象。9計(jì)算機(jī)工程學(xué)院案例二競(jìng)賽成績(jī)的計(jì)算
1.問題描述已錄入10名學(xué)生的計(jì)算機(jī)課程的競(jìng)賽成績(jī),計(jì)算競(jìng)賽成績(jī)的最高分,最低分和平均分。10計(jì)算機(jī)工程學(xué)院2.編程分析先假設(shè)最高分和最低分初值為第1個(gè)學(xué)生的成績(jī),然后比較10次,如果有比當(dāng)前最高分還大的元素,它就替代當(dāng)前最高分,如果有比當(dāng)前最低分還小的元素,它就替代當(dāng)前最低分。并累加各元素的值,最后輸出結(jié)果。11計(jì)算機(jī)工程學(xué)院3.編寫源程序
/*EX3_2.C*/#include<stdio.h>voidmain(){intintArray[10]={90,88,86,84,82,80,78,76,74,72};/*為了簡(jiǎn)單起見用初始化*/intintI,intSum,intMax,intMin;intSum=0;intMax=intMin=intArray[0];/*最高分最低分初值為第0個(gè)元素*/for(intI=0;intI<10;intI++)12計(jì)算機(jī)工程學(xué)院{if(intArray[intI]>intMax)
intMax=intArray[intI];/*如果有比當(dāng)前最高分還大的元素,它就替代當(dāng)前最高分*/ if(intArray[intI]<intMin)intMin=intArray[intI];/*如果有比當(dāng)前低分還小的元素,它就替代當(dāng)前低分*/ intSum+=intArray[intI];/*累加各元素的值*/ } printf("最高分=%d最低分=%d平均分=%d\n",intMax,intMin,intSum/10); }
13計(jì)算機(jī)工程學(xué)院4.運(yùn)行結(jié)果如圖3-2所示。圖3-2案例2運(yùn)行結(jié)果14計(jì)算機(jī)工程學(xué)院5.歸納分析數(shù)組元素是從intArray[0]到intArray[9],千萬不要試圖使用for(intI=1;intI<=10;intI++),因?yàn)檫@樣會(huì)引用intArray[10],而這個(gè)元素是不存在的。15計(jì)算機(jī)工程學(xué)院案例三競(jìng)賽成績(jī)的排序
1.問題描述對(duì)已知的10個(gè)學(xué)生的計(jì)算機(jī)課程的競(jìng)賽成績(jī)從小到大排序,并把排序好的成績(jī)輸出。16計(jì)算機(jī)工程學(xué)院2.編程分析
選擇法排序是從待排序數(shù)列中,每次選出一個(gè)最小的數(shù),和相應(yīng)位置上的元素交換。第一次選最小的元素放到第一個(gè)位置,第二次選次小的元素放到第二個(gè)位置,如此類推就能產(chǎn)生一個(gè)有序序列。
排序方法:快速排序,選擇排序,插入排序,冒泡排序,堆排序,歸并排序,基數(shù)排序17計(jì)算機(jī)工程學(xué)院3.編寫源程序/*EX3_3.C*/#include<stdio.h>#defineNUMBER10/*定義數(shù)列元素個(gè)數(shù)*/#include<conio.h>voidmain(){/*初始化數(shù)組*/intintArray[NUMBER]={90,88,86,84,82,80,78,76,74,72};intintI,intJ,intK,intTemp;18計(jì)算機(jī)工程學(xué)院printf("排序前數(shù)組\n");for(intI=0;intI<NUMBER;intI++)printf("%3d",intArray[intI]);/*打印排序前數(shù)組*/for(intI=0;intI<NUMBER;intI++)
{/*第intI次排序*/intK=intI;/*記錄當(dāng)前位置的下標(biāo)。第一次選擇排序時(shí),intK=0,當(dāng)前位置是intArray[0]*/for(intJ=intI+1;intJ<NUMBER;intJ++)if(intArray[intJ]<intArray[k])intK=intJ;/*某次排序時(shí),如果有任何一個(gè)值intArray[intJ]小于當(dāng)前位置值intArray[k],則intK下標(biāo)指定這個(gè)intJ,intArray[intK]仍是這次排序中的最小值*/
if(intI!=intK)19計(jì)算機(jī)工程學(xué)院{intTemp=intArray[intI];intArray[intI]=intArray[intK];intArray[intK]=intTemp;/*若最小值不在位置intI,則交換intArray[intI]和intArray[intK],交換前array[intK]是本次排序中的最小元素,intArray[intI]是當(dāng)前比較位置*/
}}printf("\n輸出排序后結(jié)果\n");for(intI=0;intI<NUMBER;intI++)
printf("%3d",intArray[intI]);
/*輸出排序后結(jié)果*/getchar(); }20計(jì)算機(jī)工程學(xué)院4.運(yùn)行結(jié)果圖3-3案例3運(yùn)行結(jié)果21計(jì)算機(jī)工程學(xué)院5.歸納分析
如果待排序數(shù)列存放在數(shù)組intArray中,那么:第一次排序時(shí),先假定最小的數(shù)是intArray[0]。然后將它依次和第1個(gè)元素到第NUMBER-1個(gè)元素比較,找出它們中的最小值。將最小值和intArray[0]交換。如果intArray[0]本身最小就不用交換。第二次排序時(shí),intArray[0]已經(jīng)是最小值了,所以這次找出次小值。取出第2到第NUMBER-1個(gè)元素中最小值和intArray[1]交換。這時(shí)intArray[1]上是次小值第三次排序就是取出第3個(gè)到第NUMBER-1個(gè)元素中的最小值和intArray[2]交換。22計(jì)算機(jī)工程學(xué)院
array[2]是第三小值。排序過程如下。粗斜體字表示本次排序中參于交換的兩個(gè)數(shù)。次數(shù)a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]初始9088868482807876747217288868482807876749027274868482807876889037274768482807886889047274767882808486889057274767880828486889023計(jì)算機(jī)工程學(xué)院案例四新隊(duì)員招錄
1.問題描述
有一只足球隊(duì)只有10名隊(duì)員,并按身高排好序,現(xiàn)又招錄一名新的隊(duì)員,組成一只完整的足球隊(duì),并把重新排好序的隊(duì)員按身高由高到低輸出。24計(jì)算機(jī)工程學(xué)院2.編程分析為了把一個(gè)數(shù)按大小插入已排好序的數(shù)組中,則可把欲插入的數(shù)與數(shù)組中各數(shù)逐個(gè)比較,當(dāng)找到第一個(gè)比插入數(shù)小的元素intI時(shí),該元素之前即為插入位置。然后從數(shù)組最后一個(gè)元素開始到該元素為止,逐個(gè)后移一個(gè)單元。最后把插入數(shù)賦予元素intI即可。如果被插入數(shù)比所有的元素值都小則插入最后位置。25計(jì)算機(jī)工程學(xué)院3.編寫源程序
/*EX3_4.C*/
#include<stdio.h>
voidmain()
{
intintI,intJ,intP,intS;
float
floatArr[11]={2.07f,2.03f,1.96f,1.94f,1.85f,1.78f,1.76f,1.70f,
1.69f,1.68f},floatQ,floatN;
for(intI=0;intI<10;intI++)
{
intP=intI;
26計(jì)算機(jī)工程學(xué)院floatQ=floatArr[intI];for(intJ=intI+1;intJ<10;intJ++)if(floatQ<floatArr[intJ]){intP=intJ;floatQ=floatArr[intJ];}if(intP!=intI){intS=floatArr[intI]; floatArr[intI]=floatArr[intP]; floatArr[intP]=intS;}27計(jì)算機(jī)工程學(xué)院printf("%8.2f",floatArr[intI]);}printf("\n輸入新招錄隊(duì)員的身高\(yùn)n");scanf("%f",&floatN);for(intI=0;intI<10;intI++)if(floatN>floatArr[intI])
{
for(intS=9;intS>=intI;intS--)
floatArr[intS+1]=floatArr[intS];
break;
}28計(jì)算機(jī)工程學(xué)院floatArr[intI]=floatN;printf("\n重新排好序的隊(duì)員按身高由高到低輸出\n");for(intI=0;intI<=10;intI++)
printf("%8.2f",floatArr[intI]);printf("\n");}29計(jì)算機(jī)工程學(xué)院4.運(yùn)行結(jié)果如圖3-4所示。圖3-4案例4運(yùn)行結(jié)果5.歸納分析
本程序首先對(duì)數(shù)組floatArr中的10個(gè)數(shù)從大到小排序并30計(jì)算機(jī)工程學(xué)院輸出排序結(jié)果。然后輸入要插入的身高floatN。再用一個(gè)for語句把floatN和數(shù)組元素逐個(gè)比較,如果發(fā)現(xiàn)有floatN>floatArr[intI]時(shí),則由一個(gè)內(nèi)循環(huán)把intI以下各元素值順次后移一個(gè)單元。后移應(yīng)從后向前進(jìn)行(從floatArr[9]開始到floatArr[intI]為止)。后移結(jié)束跳出外循環(huán)。插入點(diǎn)為intI,把floatN賦予floatArr[intI]即可。如所有的元素均大于被插入數(shù),則并未進(jìn)行過后移工作。此時(shí)intI=10,結(jié)果是把n賦于floatArr[10]。最后一個(gè)循環(huán)輸出插入數(shù)后的數(shù)組各元素值。程序運(yùn)行時(shí),輸入數(shù)1.77。從結(jié)果中可以看出1.77已插入到1.78和1.76之間。31計(jì)算機(jī)工程學(xué)院1.一維數(shù)組的的引入
我們先看一個(gè)例子,理解引入數(shù)組的必要性。此例需要編程讀入一系列學(xué)生的成績(jī),然后求最高分,最低分。首先寫一串語句讀入學(xué)生成績(jī),放到一系列變量中:
printf(“請(qǐng)輸入成績(jī)一\n”);scanf(“%d”,&grade1);printf(“請(qǐng)輸入成績(jī)二\n”);scanf(“%d”,&grade2);
3.1.2基礎(chǔ)理論
32計(jì)算機(jī)工程學(xué)院
然后是求最高分最低分的過程,只要寫一系列的if語句,比較輸入的成績(jī)值:
if(grade1>grade2)if(grade1>grade3)......只要有足夠的耐心,最終會(huì)得出最高成績(jī)和最低成績(jī)。如果有10個(gè)學(xué)生的成績(jī)需要處理,if
語句的個(gè)數(shù)和輸入輸出語句的個(gè)數(shù)必然超過十句。程序即使正確也非常復(fù)雜。我們?nèi)绻脭?shù)組,情況就將不同。
33計(jì)算機(jī)工程學(xué)院在C語言中,我們可以定義一個(gè)名叫g(shù)rades的變量,它不代表一個(gè)單一的成績(jī)值,而是代表整個(gè)成績(jī)組。組中的每一個(gè)元素都可以由一個(gè)被稱為索引或者下標(biāo)的數(shù)字來標(biāo)明。在數(shù)學(xué)概念里,下標(biāo)變量xi是指集合x的i個(gè)元素,在C語言中,等價(jià)表示為x[i]。同樣grades[5]表示在grades的數(shù)組里的第五號(hào)元素。單獨(dú)數(shù)組元素的使用方法和任何正常變量一樣。比如我們可以將一個(gè)數(shù)組元素值賦給另一個(gè)變量:
34計(jì)算機(jī)工程學(xué)院
myg=grades[50]這一語句將grades數(shù)組中下標(biāo)為50的元素的值賦給變量myg。如果再一般化一點(diǎn),i是一個(gè)整型變量,那么語句
myg=grades[i];將數(shù)組中的第i號(hào)元素賦給myg。數(shù)組元素當(dāng)然也可以放在等號(hào)左邊。比如
grades[i]=myg;把myg的值存入到元素grades[i]。35計(jì)算機(jī)工程學(xué)院
用單一的數(shù)組代表有關(guān)數(shù)據(jù)項(xiàng)集合,使我們能開發(fā)簡(jiǎn)明而有效的程序。例如通過改變下標(biāo)變量的值,我們可以非常容易地訪問數(shù)組中所有元素。一組學(xué)生成績(jī)可以用下面的語句來輸入:
for(i=0;i<100;i++){printf(“請(qǐng)輸入第%d個(gè)成績(jī):”,i);scanf(“%d”,&grades[i]);}
36計(jì)算機(jī)工程學(xué)院如果要求出所有學(xué)生的總成績(jī)可以這樣寫:
for(i=0;i<100;i++)sum=sum+grades[i];這段代碼順序訪問grades數(shù)組的前100個(gè)元素(0-99),并將每個(gè)元素值加到sum中。如果sum的初值為0,循環(huán)結(jié)束后sum中存放的就是前100個(gè)數(shù)組元素之和。由此可見,使用數(shù)組大大簡(jiǎn)化了處理同一數(shù)據(jù)集合的程序。下面將介紹數(shù)組的具體使用方法。
37計(jì)算機(jī)工程學(xué)院
數(shù)組是一些具有相同數(shù)據(jù)類型的數(shù)組元素的有序集合。數(shù)組中的每一個(gè)元素(即每個(gè)成員、也可稱為下標(biāo)變量)具有同一個(gè)名稱,不同的下標(biāo),每個(gè)數(shù)組元素可以作為單個(gè)變量來使用。
數(shù)組可分為一維數(shù)組和多維數(shù)組(如二維數(shù)組、三維數(shù)組…)。數(shù)組的維數(shù)取決于數(shù)組元素的下標(biāo)個(gè)數(shù),即一維數(shù)組的每一個(gè)元素只有一個(gè)下標(biāo),二維數(shù)組的每一個(gè)元素均有二個(gè)下標(biāo),三維數(shù)組的每一個(gè)元素都有三個(gè)下標(biāo),以此類推。38計(jì)算機(jī)工程學(xué)院2.一維數(shù)組的說明、引用
(1)一維數(shù)組的定義在C語言中,變量必須先定義,后使用。數(shù)組也是如此,使用數(shù)組時(shí)必須先定義,后引用。定義一維數(shù)組的一般形式為:
類型標(biāo)識(shí)符數(shù)組名[常量表達(dá)式];其中類型標(biāo)識(shí)符是數(shù)組中數(shù)組元素的數(shù)據(jù)類型。39計(jì)算機(jī)工程學(xué)院數(shù)組名是用戶定義的數(shù)組標(biāo)識(shí)符。方括號(hào)中的常量表達(dá)式表示數(shù)據(jù)元素的個(gè)數(shù),也稱為數(shù)組的長(zhǎng)度。例如:
inta[10];
說明整型數(shù)組a,有10個(gè)元素。
floatb[10],c[20];
說明實(shí)型數(shù)組b,有10個(gè)元素,實(shí)型數(shù)組c,有20個(gè)元素。
charch[20];
說明字符數(shù)組ch,有20個(gè)元素。40計(jì)算機(jī)工程學(xué)院
(2)一維數(shù)組元素的引用數(shù)組不能整體使用,只能逐個(gè)引用數(shù)組元素。數(shù)組元素的一般引用形式為:
數(shù)組名[下標(biāo)]下標(biāo)可以是整型常數(shù)、整型變量和整型表達(dá)式,其起始值為0。例如a[2+1]表示數(shù)組a中的第四個(gè)元素,a[i+j]表示數(shù)組a中的第i+j+1個(gè)元素(i和j為整型變量)。在引用時(shí)應(yīng)注意下標(biāo)的值不要超過數(shù)組的范圍。數(shù)組的下標(biāo)的最大值為數(shù)組的長(zhǎng)度-1。41計(jì)算機(jī)工程學(xué)院3.一維數(shù)組的初始化所謂數(shù)組的初始化,就是指在定義數(shù)組的同時(shí)對(duì)數(shù)組的各個(gè)元素賦初值。
(1)全部元素的初始化
格式:數(shù)據(jù)類型
數(shù)組名[數(shù)組長(zhǎng)度]={數(shù)組元素值表}“數(shù)組元素值表”是用逗號(hào)分隔的各數(shù)組元素的初值。例如:
42計(jì)算機(jī)工程學(xué)院inta[6]={10,20,30,40,50,60};表示a數(shù)組共有6個(gè)數(shù)組元素。
floatr[]={12.5,-3.11,8.6};表示r數(shù)組共有3個(gè)實(shí)型元素。
(2)部分元素的初始化格式:數(shù)據(jù)類型
數(shù)組名[數(shù)組長(zhǎng)度]={數(shù)組部分元素值表}例如:
intb[10]={1,2,3};表示b數(shù)組共有3個(gè)整型元素。43計(jì)算機(jī)工程學(xué)院(3)一維數(shù)組的存儲(chǔ)任何一個(gè)一維數(shù)組在內(nèi)存中都占用一段連續(xù)的空間,依次存儲(chǔ)它的各元素的值。元素占用的字節(jié)數(shù)由數(shù)組的數(shù)據(jù)類型決定。例如int型數(shù)組a的每個(gè)元素占2字節(jié),6個(gè)元素占12個(gè)字節(jié)。44計(jì)算機(jī)工程學(xué)院上述數(shù)組a的存儲(chǔ)情況如圖3-5所示圖3-5數(shù)組a的存儲(chǔ)情況數(shù)組a→10a[0]20a[1]30a[2]40a[3]50a[4]60a[5]45計(jì)算機(jī)工程學(xué)院我們通過一個(gè)實(shí)例來說明數(shù)組的存放形式和使用方法。如果有語句序列:
intvalues[10];values[0]=197;values[2]=-100;values[5]=350;values[3]=values[0]+values[5];values[9]=values[5]/10;--values[2];語句執(zhí)行后,數(shù)組values[]的存儲(chǔ)情況如表3-146計(jì)算機(jī)工程學(xué)院表3-1數(shù)組values[]執(zhí)行代碼前后的內(nèi)容數(shù)組元素執(zhí)行前的值執(zhí)行前的值values[0]隨機(jī)值197values[0]隨機(jī)值隨機(jī)值values[0]隨機(jī)值-101values[0]隨機(jī)值547values[0]隨機(jī)值隨機(jī)值values[0]隨機(jī)值350values[0]隨機(jī)值隨機(jī)值values[0]隨機(jī)值隨機(jī)值values[0]隨機(jī)值隨機(jī)值values[0]隨機(jī)值3547計(jì)算機(jī)工程學(xué)院從這段程序可以看出:數(shù)組元素和普通變量一樣能使用單目運(yùn)算符;說明一個(gè)數(shù)組后,如果不初始化,數(shù)組元素的值是隨機(jī)值,存取未經(jīng)初始化的數(shù)組元素是沒有意義的。比如存取values[1]就沒有意義。48計(jì)算機(jī)工程學(xué)院【實(shí)驗(yàn)3-1】對(duì)已知的十個(gè)元素,求其最大元素,并把最大元素和所在位置輸出。(1)編程分析①假設(shè)首元素為最大值元素,用max標(biāo)識(shí)。②將其余元素依次與max比較,并將大值保存在max中,將大值元素下標(biāo)保存在m中。③輸出max和m。
3.1.3技能訓(xùn)練
49計(jì)算機(jī)工程學(xué)院(2)編寫源程序
/*EX3_5.C*/#include"stdio.h"#defineN10voidmain(){inta[N]={20,9,10,-16,-9,18,96,7,11,33};inti,max=a[0],m=0;for(i=1;i<N;i++)if(max<a[i])50計(jì)算機(jī)工程學(xué)院
{max=a[i];m=i;}printf("max=%d,為第%d個(gè)元素\n",max,m+1); }(3)在VC++集成環(huán)境中輸入上述程序,文件存成EX3_5.C。如圖3-6所示。圖3-6運(yùn)行結(jié)果51計(jì)算機(jī)工程學(xué)院【實(shí)驗(yàn)3-2】數(shù)據(jù)分類問題。定義一個(gè)長(zhǎng)度是20的一維數(shù)組b,依次對(duì)數(shù)組a中元素進(jìn)行掃描,將負(fù)數(shù)在b中由前到后存儲(chǔ),將其他數(shù)據(jù)在b中由后向前存儲(chǔ)。最終b存儲(chǔ)的是分類后的數(shù)據(jù)。(1)編程分析①定義一個(gè)長(zhǎng)度為20的一維數(shù)組a。②用鍵盤向一維數(shù)組輸入20個(gè)整數(shù),并依次輸出這20個(gè)數(shù)據(jù)。③對(duì)數(shù)據(jù)分類。④輸出分類后的數(shù)據(jù)。
52計(jì)算機(jī)工程學(xué)院(2)編寫源程序
/*EX3_6.C*/#include"stdio.h"#defineN20voidmain(){inta[N],b[N],i,j=0,k=N-1;printf("請(qǐng)輸入數(shù)據(jù):\n");for(i=0;i<N;i++)scanf("%d",&a[i]);53計(jì)算機(jī)工程學(xué)院
for(i=0;i<N;i++){printf("%d",a[i]);if(a[i]<0)b[j++]=a[i];/*將負(fù)數(shù)放在b的前部*/elseb[k--]=a[i];}/*將其他數(shù)放在b的后部*/printf("\n");for(i=0;i<N;i++)printf("%d",b[i]); }54計(jì)算機(jī)工程學(xué)院(3)在VC++集成環(huán)境中輸入上述程序,文件存成EX3_6.C.如圖3-7所示。①調(diào)試程序時(shí)通常先將N定義為一個(gè)小數(shù)值,當(dāng)程序調(diào)試成功后再將N定義為常數(shù)20,這樣可以提高程序的調(diào)試效率②在設(shè)計(jì)調(diào)試用數(shù)據(jù)時(shí),應(yīng)考慮各種數(shù)據(jù)情況,以便提高程序的可靠性。圖3-7運(yùn)行結(jié)果55計(jì)算機(jī)工程學(xué)院【練習(xí)】有15個(gè)數(shù)按由小到大順序存放在一個(gè)數(shù)組中,輸入一個(gè)數(shù),要求用折半查找法找出該數(shù)是數(shù)組中第幾個(gè)元素的值。如果該數(shù)不在數(shù)組中,則打印出“無此數(shù)”。
3.1.4拓展與練習(xí)
56計(jì)算機(jī)工程學(xué)院(1)編程分析折半查找是一種高效的查找方法,它必須在一個(gè)有序的數(shù)列中進(jìn)行,基本原理如下:設(shè)數(shù)列已升序排序,存儲(chǔ)在數(shù)組a中,對(duì)在查找范圍內(nèi)的數(shù)據(jù)設(shè)置3個(gè)特殊點(diǎn),首位置為top,末位置為bot,中間位置為mid=(top+bot)/2,查找過程為:①比較x與a[mid],若x=a[mid],查找成功,結(jié)束;否則,若x>a[mid],則top=mid+1;若x<a[mid],則bot=mid-1。
57計(jì)算機(jī)工程學(xué)院②若top>bot,則查找失敗,結(jié)束;否則轉(zhuǎn)①。如下是在數(shù)列{3,6,7,8,21,23,36,38,67,69,80,82,85,88,96}中查找69時(shí),top、bot、mid的變化情況:圖3-8折半查找法
58計(jì)算機(jī)工程學(xué)院(2)編寫源程序
/*EX3_7.C*/#include"stdio.h"#defineN15main(){inta[N],i,x,top,bot,mid;printf("輸入從小到大排好序的15個(gè)數(shù)");for(i=0;i<N;i++)/*建立升序數(shù)組a,用于折半查找*/scanf("%d",&a[i]);printf("輸入要查找的數(shù)");scanf("%d",&x);/*輸入要查找的數(shù)值*/59計(jì)算機(jī)工程學(xué)院
top=0;/*設(shè)置初始查找邊界*/bot=N-1;do{mid=(top+bot)/2;/*確定中間位置*/if(a[mid]==x)break;/*找到x后終止循環(huán)*/elseif(a[mid]<x)top=mid+1;/*確定后半段為下一次查找的范圍*/elsebot=mid-1;/*確定前半段為下一次查找的范圍*/60計(jì)算機(jī)工程學(xué)院}while(bop<top); if(bot<top) printf(“%d:無此數(shù)\n”,x); else printf(“成功查找到該數(shù)a[%d]是%d.\n”,mid,x);}計(jì)算機(jī)工程學(xué)院(3)在VC++集成環(huán)境中輸入上述程序,文件存成EX3_7.程序運(yùn)行結(jié)果如圖3-9所示。圖3-9運(yùn)行結(jié)果62計(jì)算機(jī)工程學(xué)院1.編程規(guī)范
(1)數(shù)組名的書寫規(guī)則應(yīng)符合標(biāo)識(shí)符的書寫規(guī)定。數(shù)組名不能與其它變量名相同。
3.1.5編程規(guī)范與常見錯(cuò)誤
63計(jì)算機(jī)工程學(xué)院例如:
main(){inta;floata[10];……}變量名與數(shù)組名重名是錯(cuò)誤的。64計(jì)算機(jī)工程學(xué)院2.常見錯(cuò)誤
(1)數(shù)組下標(biāo)從0開始計(jì)算,如a[5]表示數(shù)組a有5個(gè)元素。分別為a[0],a[1],a[2],a[3],a[4]。(2)定義數(shù)組時(shí),數(shù)組長(zhǎng)度值不能為變量。例如:#defineFD5main(){inta[3+2],b[7+FD];……}是合法的。
65計(jì)算機(jī)工程學(xué)院
但是下述說明方式是錯(cuò)誤的。
main(){intn=5;inta[n];……}
(3)允許在同一個(gè)類型說明中,說明多個(gè)數(shù)組和多個(gè)變量。
例如:
inta,b,c,d,k1[10],k2[20];66計(jì)算機(jī)工程學(xué)院數(shù)組的類型實(shí)際上是指數(shù)組元素的取值類型。對(duì)于同一個(gè)數(shù)組,其所有元素的數(shù)據(jù)類型都是相同的。(4)C語言規(guī)定,在對(duì)數(shù)組進(jìn)行定義或?qū)?shù)組元素進(jìn)行引用時(shí)必須要用方括號(hào)(對(duì)二維數(shù)組或多維數(shù)組的每一維數(shù)據(jù)都必須分別用方括號(hào)括起來),例如以下寫法都將造成編譯時(shí)出錯(cuò):inta(10);intb[5,4];
printf(″%d\n″,b[1+2,2]);
67計(jì)算機(jī)工程學(xué)院一維數(shù)組的說明、引用
一維數(shù)組的定義在C語言中,變量必須先定義,后使用。數(shù)組也是如此,使用數(shù)組時(shí)必須先定義,后引用。定義一維數(shù)組的一般形式為:
類型標(biāo)識(shí)符數(shù)組名[常量表達(dá)式];其中類型標(biāo)識(shí)符是數(shù)組中數(shù)組元素的數(shù)據(jù)類型。計(jì)算機(jī)工程學(xué)院
任務(wù)2二維數(shù)組
學(xué)習(xí)目標(biāo)了解二維數(shù)組的基本概念、掌握數(shù)組類型變量的定義與引用、掌握數(shù)組元素的引用。69計(jì)算機(jī)工程學(xué)院案例一案例講解
1.問題描述以矩陣格式輸出一個(gè)二維數(shù)組,數(shù)組的主對(duì)角線上的元素賦值為l,其他元素賦初值為0。3.2.1案例講解70計(jì)算機(jī)工程學(xué)院2.編程分析如果有一個(gè)一維數(shù)組,它的每一個(gè)元素是類型相同的一維數(shù)組時(shí),就形成一個(gè)二維數(shù)組。我們可以把二維數(shù)組看作是一種特殊的一維數(shù)組:它的元素又是一個(gè)一維數(shù)組。
例如:int
intArr[3][4];可以把a(bǔ)看作是一個(gè)一維數(shù)組,它有三個(gè)元素:intArr[0]、intArr[1]、intArr[2],每個(gè)元素又是一個(gè)包含4個(gè)元素的一維數(shù)組??梢园裪ntArr[0]、intArr[1]、intArr[2]看作是一維數(shù)組的名字。71計(jì)算機(jī)工程學(xué)院3.編寫源程序/*EX3_8.C*/voidmain(){intintArr[6][6],intI,intJ;for(intI=1;intI<6;intI++)for(intJ=1;intJ<6;intJ++)
intArr[intI][intJ]=(intI/intJ)*(intJ/intI);for(intI=1;intI<6;intI++){72計(jì)算機(jī)工程學(xué)院
for(intJ=1;intJ<6;intJ++)printf("%2d",intArr[intI][intJ]);printf("\n");}}4.運(yùn)行結(jié)果如圖3-10所示。73圖3-10案例1運(yùn)行結(jié)果計(jì)算機(jī)工程學(xué)院5.歸納分析
與一維數(shù)組元素引用相同,任何二維數(shù)組元素的引用都可以看成一個(gè)變量的使用,可以被賦值,可以參與組成表達(dá)式,也可輸入輸出。但要注意,其下標(biāo)取值應(yīng)限定在數(shù)組大小范圍內(nèi),不能超界使用。74計(jì)算機(jī)工程學(xué)院案例二兩個(gè)矩陣的和
1.問題描述有矩陣a和b如下圖所示,求它們的和矩陣c兩個(gè)M×N階的矩陣a、b,其和矩陣也是一個(gè)M×N
階的矩陣c。75計(jì)算機(jī)工程學(xué)院2.編程分析求和公式如下:
c[i][j]=a[i][j]+b[i][j]
3.編寫源程序76計(jì)算機(jī)工程學(xué)院/*EX3_9.C*/#include<stdio.h>#defineM3#defineN2voidmain(){intintArra[M][N]={9,-16,6,21,25,18};/*數(shù)組a初始化*/intintArrb[M][N]={16,89,26,-27,36,81};/*數(shù)組b初始化*/intintI,intJ,intArrc[M][N];for(intI=0;intI<M;intI++)for(intJ=0;intJ<N;intJ++)77計(jì)算機(jī)工程學(xué)院intArrc[intI][intJ]=intArra[intI][intJ]+intArrb[intI][intJ];/*生成c數(shù)組*/for(intI=0;intI<M;intI++)/*輸出a、b、c三個(gè)數(shù)組*/{for(intJ=0;intJ<N;intJ++)/*輸出a數(shù)組的第intI行*/printf("%5d",intArra[intI][intJ]);printf("");for(intJ=0;intJ<N;intJ++)/*輸出b數(shù)組的第intI行*/printf("%5d",intArrb[intI][intJ]);printf("");for(intJ=0;intJ<N;intJ++)/*輸出c數(shù)組的第intI行*/printf("%5d",intArrc[intI][intJ]);printf("\n");}}78計(jì)算機(jī)工程學(xué)院4.運(yùn)行結(jié)果如圖3-11所示。79圖3-11案例2運(yùn)行結(jié)果計(jì)算機(jī)工程學(xué)院5.歸納分析 二維數(shù)組中的數(shù)組元素被排成行列形式的一組雙下標(biāo)變量,用一個(gè)統(tǒng)一的數(shù)組名和雙下標(biāo)變量來標(biāo)識(shí)、第一個(gè)下標(biāo)表示行,第二個(gè)下標(biāo)表示列。下標(biāo)也從0開始排列。二維數(shù)組通常是和雙重循環(huán)相配合,對(duì)數(shù)組元素依次進(jìn)行處理。80計(jì)算機(jī)工程學(xué)院1.二維數(shù)組的的說明、引用和存儲(chǔ)
(1)二維數(shù)組的說明①語法類型標(biāo)識(shí)符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];②說明常量表達(dá)式包含常量和符號(hào)常量,不能包含變量。
3.2.2基礎(chǔ)理論
81計(jì)算機(jī)工程學(xué)院如果有一個(gè)一維數(shù)組,它的每一個(gè)元素是類型相同的一維數(shù)組時(shí),就形成一個(gè)二維數(shù)組。我們可以把二維數(shù)組看作是一種特殊的一維數(shù)組:它的元素又是一個(gè)一維數(shù)組。例如:float
a[3][4];可以把a(bǔ)看作是一個(gè)一維數(shù)組,它有三個(gè)元素:a[0]、a[1]、a[2],每個(gè)元素又是一個(gè)包含4個(gè)元素的一維數(shù)組??梢园補(bǔ)[0]、a[1]、a[2]看作是一維數(shù)組的名字。C語言中,二維數(shù)組中元素的排列順序是:按行存放,即在內(nèi)存中先順序存放第一行的元素,82計(jì)算機(jī)工程學(xué)院再存放第二行的元素。數(shù)組a在內(nèi)存中的存放順序?yàn)?
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]通常形象的把第一個(gè)下標(biāo)稱為行下標(biāo),第二個(gè)下標(biāo)稱為列下標(biāo)。例如intvar[i][j],i代表行下標(biāo)j代表列下標(biāo);多維數(shù)組的定義方法與二維數(shù)組相仿:例如intvar[3][4][5],代表一個(gè)三維數(shù)組;83計(jì)算機(jī)工程學(xué)院(2)二維數(shù)組的引用①引用形式數(shù)組名[下標(biāo)][下標(biāo)]②說明例如:a[1][1]=3;a[2][1]=a[1][1];printf("%d\n",a[1][1]);數(shù)組不能整體使用,只能逐個(gè)引用數(shù)組元素。下標(biāo)可以是整型常數(shù)、整型變量和整型表達(dá)式。84計(jì)算機(jī)工程學(xué)院(3)二維數(shù)組的存儲(chǔ)對(duì)于m×n的二維數(shù)組a,各元素的存儲(chǔ)次序如下:
a[0][0]、a[0][1]…a[0][n-1]、a[1][0]、a[1][1]…a[1][n-1]……a[m-1][0]、a[m-1][1]…a[m-1][n-1]
系統(tǒng)為其分配的存儲(chǔ)單元數(shù)為m×n,每個(gè)元素占用的存儲(chǔ)單元數(shù)取決于數(shù)組的數(shù)據(jù)類型。例如2×2數(shù)組example的存儲(chǔ)情況如圖3-12所示:
85計(jì)算機(jī)工程學(xué)院圖3-12數(shù)組example的存儲(chǔ)情況
example→example[0][0]example[0][1]example[1][0]example[1][1]86計(jì)算機(jī)工程學(xué)院2.二維數(shù)組的初始化
二維數(shù)組的初始化有以下幾種:
(1)分組初始化
inta[2][5]={{1,3,5,7,9},{2,4,6,8,10}};這種賦值方法比較直觀,把第一個(gè)花括號(hào)內(nèi)的數(shù)據(jù)賦給第一行的元素,第二個(gè)花括號(hào)內(nèi)的數(shù)據(jù)賦給第二行的元素。
87計(jì)算機(jī)工程學(xué)院(2)不分行初始化
inta[2][5]={1,3,5,7,9,2,4,6,8,10};可以將所有數(shù)據(jù)寫在一個(gè)花括號(hào)內(nèi),按數(shù)組排列的順序?qū)Ω髟刭x初值。(3)部分行初始化inta[2][5]={{1,3,5},{2,4,6}};
賦初值后數(shù)組各元素值為:a[0][0]=1,a[0][1]=3,a[0][2]=5,a[0][3]=0,a[0][4]=0,a[1][0]=2,a[1][1]=4,a[1]2]=6,a[1][3]=0,a[1][4]=0,88計(jì)算機(jī)工程學(xué)院
(4)省略行數(shù)
inta[2][3]={1,3,5,7,9,11};
等價(jià)于:inta[][3]={1,3,5,7,9,11};
但不能寫成:inta[2][]={1,3,5,7,9,11};
對(duì)數(shù)組中的全體元素都賦初值時(shí),二維數(shù)組的定義中第一維的長(zhǎng)度也可以省略,但二維的長(zhǎng)度不能省略。89計(jì)算機(jī)工程學(xué)院
如:
在分行初始化時(shí),由于給出的初值已清楚的表明了行數(shù)和各行中元素的個(gè)數(shù),因此第一維的大小可以不定義。如:intb[][3]={{1},{0,2},{3,2,1}};顯然這是一個(gè)三行三列的數(shù)組,其各元素的值為:
1 0 00 2 0
3 2 190計(jì)算機(jī)工程學(xué)院【實(shí)驗(yàn)3.2.1】產(chǎn)生一個(gè)M×N的隨機(jī)數(shù)矩陣(數(shù)值范圍在1~100之間),找出其中的最大值元素。3.2.3技能訓(xùn)練91計(jì)算機(jī)工程學(xué)院(1)編程分析
設(shè)矩陣數(shù)組為a,首先把第一個(gè)元素a[0][0]作為當(dāng)前最大值max,然后把當(dāng)前最大值max與每一個(gè)元素a[i][j]進(jìn)行比較,若a[i][j]>max,把a(bǔ)[i][j]作為新的當(dāng)前最大值,并記錄下其下標(biāo)i和j。當(dāng)全部元素比較完后,max是整個(gè)矩陣全部元素的最大值。92計(jì)算機(jī)工程學(xué)院(2)編程源程序
/*EX3_10.C*/#include<stdio.h>#include"stdlib.h"#defineM3#defineN4voidmain()
{
inti,j,row=0,col=0,max;
inta[M][N];
printf("建立隨機(jī)數(shù)數(shù)組\n");93計(jì)算機(jī)工程學(xué)院for(i=0;i<M;i++)/*建立隨機(jī)數(shù)數(shù)組*/for(j=0;j<N;j++)a[i][j]=rand()%100;max=a[0][0];/*初始化最大值變量*/for(i=0;i<M;i++)/*遍歷a數(shù)組的每一個(gè)元素,以確定最大值*/for(j=0;j<N;j++)if(a[i][j]>max)/*將一個(gè)更大的值保存在max變量中*/{max=a[i][j];
94計(jì)算機(jī)工程學(xué)院row=i; col=j;}for(i=0;i<M;i++)/*輸出隨機(jī)數(shù)數(shù)組*/{
for(j=0;j<N;j++)
printf("%5d",a[i][j]);
printf("\n"); }printf(“隨機(jī)數(shù)矩陣中最大值元素a[%d][%d]=%d\n",row,col,max);/*輸出結(jié)果*/}95計(jì)算機(jī)工程學(xué)院(3)在VC++集成環(huán)境中輸入上述程序,文件存成EX3_10.C。如圖3-13所示。圖3-13運(yùn)行結(jié)果96計(jì)算機(jī)工程學(xué)院【實(shí)驗(yàn)3.2.2】一個(gè)學(xué)習(xí)小組有5個(gè)人,每個(gè)人有三門課的考試成績(jī),如表3-2。求全組分科的平均成績(jī)和各科總平均成績(jī)。表3-2成績(jī)表張王李趙周數(shù)學(xué)8061598576C語言7565638777數(shù)據(jù)結(jié)構(gòu)927170908597計(jì)算機(jī)工程學(xué)院(1)編程分析可定義一個(gè)二維數(shù)組a[5][3]存放五個(gè)人三門課的成績(jī)。再定義一個(gè)一維數(shù)組v[3]存放所求得各分科平均成績(jī),設(shè)變量average為全組各科總平均成績(jī)。98計(jì)算機(jī)工程學(xué)院(2)編程源程序/*EX3_11.C*/#include<stdio.h>voidmain(){inti,j,s=0,average,v[3],a[5][3];printf("輸入五個(gè)學(xué)生三門課的成績(jī)\n");for(i=0;i<3;i++){for(j=0;j<5;j++)99計(jì)算機(jī)工程學(xué)院{scanf("%d",&a[j][i]);s=s+a[j][i];}v[i]=s/5;s=0; }average=(v[0]+v[1]+v[2])/3;printf("數(shù)學(xué)%d\nC語言%d\n數(shù)據(jù)結(jié)構(gòu)%d\n",v[0],v[1],v[2]);printf("各科總平均成績(jī)%d\n",average); }100計(jì)算機(jī)工程學(xué)院(3)在VC++集成環(huán)境中輸入上述程序,文件存成EX3_11.C。如圖3-14所示。圖3-14運(yùn)行結(jié)果101計(jì)算機(jī)工程學(xué)院【練習(xí)1】某年級(jí)共有3個(gè)班級(jí),每班有N名學(xué)生,開設(shè)兩門課程,要求分別對(duì)每個(gè)班級(jí)的學(xué)習(xí)成績(jī)進(jìn)行分等統(tǒng)計(jì),并將統(tǒng)計(jì)結(jié)果保存在一個(gè)二維數(shù)組中。/*EX3_12.C*/#include<stdio.h>#defineM3/*定義班級(jí)數(shù)為3*/#defineN5/*班級(jí)人數(shù)為5*/main(){
3.2.4拓展與練習(xí)
102計(jì)算機(jī)工程學(xué)院floata,b;intave,i,j;staticintresult[M][5];/*定義保存統(tǒng)計(jì)結(jié)果的二維數(shù)組*/for(j=0;j<M;j++){for(i=1;i<=N;i++){printf("Class%dachievement%d(a,b):",j+1,i);scanf("%f,%f",&a,&b);/*輸入一個(gè)學(xué)生的兩門課成績(jī)*/ave=(a+b)/2;
103計(jì)算機(jī)工程學(xué)院switch(ave/10)/*對(duì)第j的班級(jí)的學(xué)習(xí)成績(jī)分等統(tǒng)計(jì)*/{case10:case9:result[j][0]++;break;/*j班優(yōu)秀人數(shù)統(tǒng)計(jì)*/case8:result[j][1]++;break;/*j班良好人數(shù)統(tǒng)計(jì)*/case7:result[j][2]++;break;/*j班中等人數(shù)統(tǒng)計(jì)*/case6:result[j][3]++;break;/*j班及格人數(shù)統(tǒng)計(jì)*/default:result[j][4]++;}}104計(jì)算機(jī)工程學(xué)院}/*j班不及格人數(shù)統(tǒng)計(jì)*/for(j=0;j<M;j++){for(i=0;i<5;i++)printf("%5d",result[j][i]);printf("\n");}}105計(jì)算機(jī)工程學(xué)院
上機(jī)運(yùn)行程序并分析結(jié)果106圖3-15運(yùn)行結(jié)果計(jì)算機(jī)工程學(xué)院1.常見錯(cuò)誤
(1)常量表達(dá)式可以包含常量和符號(hào)常量,但不能包含變量。
例如:①inta[3][4];
②#defineM
3
#defineN
4
inta[M][N];
③inta[3][1+3];
3.2.5編程規(guī)范與常見錯(cuò)誤
107計(jì)算機(jī)工程學(xué)院
都是定義了一個(gè)3*4的二維數(shù)組a
,但不允許有如下定義:
①intn=4,m=3;
inta[m][n]
②intb[3,4]
③intc(2)(3);108計(jì)算機(jī)工程學(xué)院
(2)二維數(shù)組可以看作一個(gè)特殊的一維數(shù)組,它的每個(gè)元素又是一個(gè)一維數(shù)組。例如上面定義二維數(shù)組a可以看作:數(shù)組a包含a[0]、a[1]、a[2]三個(gè)元素,而這三個(gè)元素均為一維數(shù)組。
a[0]包含a[0][0]、a[0][1]、a[0][2]、a[0][3]元素
a[1]包含a[1][1]、a[1][1]、a[1][2]、a[1][3]元素
a[0]包含a[0][0]、a[0][2]、a[0][2]、a[0][3]元素
109計(jì)算機(jī)工程學(xué)院矩陣乘法main(){ inti,j,k,intc[2][2]; inta[2][3]={1,2,3,4,5,6}; intb[3][2]={1,2,3,4,5,6}; for(i=0;i<2;i++) for(j=0;j<3;j++) { c[i][j]=0; for(k=0;k<3;k++) c[i][j]=a[i][k]*b[k][j]+c[i][j]; } for(i=0;i<2;i++) { for(j=0;j<3;j++) if(i==j) printf("%5d",c[i][j]); }}c[i][j]=a[i][k]*b[k][j]+c[i][j];計(jì)算機(jī)工程學(xué)院
任務(wù)3字符與字符串
學(xué)習(xí)目標(biāo)掌握字符與字符串的區(qū)別,字符串的輸入和輸出,領(lǐng)會(huì)字符串操作函數(shù)。111計(jì)算機(jī)工程學(xué)院案例一字符統(tǒng)計(jì)
1.問題描述輸入20個(gè)字符,分別統(tǒng)計(jì)其中的數(shù)字個(gè)數(shù)和其他字符的個(gè)數(shù)。2.編程分析字符數(shù)組中的每個(gè)元素均占一個(gè)字節(jié),且以ASCII代碼的形式來存放字符數(shù)據(jù)。
3.3.1案例講解
112計(jì)算機(jī)工程學(xué)院3.編寫源程序
/*EX3_13.C*/#include<stdio.h>voidmain(){charcharArrS[20];intintI,intNumber=0,intOther=0;printf("輸入20個(gè)字符");for(intI=0;intI<20;intI++)/*建立有20個(gè)元素的字符數(shù)組charArrS*/scanf("%c",&charArrS[intI]);113計(jì)算機(jī)工程學(xué)院
for(intI=0;intI<20;intI++)/*對(duì)charArrS中的數(shù)字和其他字符進(jìn)行分類統(tǒng)計(jì)*/
switch(charArrS[intI])
{case'0':
/*這10個(gè)連續(xù)的case用于判斷數(shù)值型字符*/
case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':
114計(jì)算機(jī)工程學(xué)院case'9':
intNumber++;/*對(duì)數(shù)字字符計(jì)數(shù)*/
break;default:
intOther++;/*對(duì)數(shù)字以外的其他字符計(jì)數(shù)*/}printf("數(shù)字個(gè)數(shù)%d,其他字符的個(gè)數(shù)%d\n",intNumber,intOther); }115計(jì)算機(jī)工程學(xué)院4.運(yùn)行結(jié)果如圖3-16所示。圖3-16案例1運(yùn)行結(jié)果116計(jì)算機(jī)工程學(xué)院5.歸納分析字符串是一種常用的數(shù)據(jù),處理人名,地址,文章等內(nèi)容。單個(gè)字符(常量)放在一個(gè)字符變量中,字符串放在字符數(shù)組中。案例二字符的刪除
1.問題描述由鍵盤任意輸入一字符串和一個(gè)字符,要求從該串中刪除所指定的字符。117計(jì)算機(jī)工程學(xué)院2.編程分析在C語言中沒有專門的字符串變量,通常用一個(gè)字符數(shù)組來存放一個(gè)字符串。前面介紹字符串常量時(shí),已說明字符串總是以'\0'作為串的結(jié)束符。因此當(dāng)把一個(gè)字符串存入一個(gè)數(shù)組時(shí),也把結(jié)束符'\0'存入數(shù)組,并以此作為該字符串的結(jié)束。
118計(jì)算機(jī)工程學(xué)院3.編寫源程序/*EX3_14.C*/#include<stdio.h>main(){charcharx,charArrS[20];intintI,intJ;printf("輸入一字符串");gets(charArrS);printf("要?jiǎng)h除指定的字符\n");119計(jì)算機(jī)工程學(xué)院
scanf("%c",&charx);for(intI=intJ=0;charArrS[intI]!='\0';intI++)if(charArrS[intI]!=charx)charArrS[intJ++]=charArrS[intI];
charArrS[intJ]='\0';
printf("從該串中刪除所指定的字符后新產(chǎn)生的新字符串\n");
puts(charArrS);}120計(jì)算機(jī)工程學(xué)院4.運(yùn)行結(jié)果如圖3-17所示。圖3-17案例2運(yùn)行結(jié)果121計(jì)算機(jī)工程學(xué)院5.歸納分析字符串結(jié)束符'\0'是由C編譯系統(tǒng)自動(dòng)加上的。由于采用了'\0'標(biāo)志,所以在用字符串賦初值時(shí)一般無須指定數(shù)組的長(zhǎng)度,而由系統(tǒng)自行處理。122計(jì)算機(jī)工程學(xué)院
字符數(shù)組是存放字符型數(shù)據(jù)的數(shù)組,其中每個(gè)數(shù)組元素存放的值均是單個(gè)字符。字符數(shù)組也有一維數(shù)組和多維數(shù)組之分。比較常用的是一維字符數(shù)組和二維字符數(shù)組。1.字符數(shù)組的說明、引用和初始化字符數(shù)組的定義、初始化及引用同前面介紹的一維數(shù)組、二維數(shù)組類似,只是類型說明符為char,對(duì)字符數(shù)組初始化或賦值時(shí),數(shù)據(jù)
3.3.2基礎(chǔ)理論
123計(jì)算機(jī)工程學(xué)院使用字符常量或相應(yīng)的ASCII碼值。例如:charc[10],str[5][10];
/*字符數(shù)組的定義*/
又如:charc[3]={'r','e','d'};/*字符數(shù)組的初始化*/
printf("%c%c%c\n",c[0],c[1],c[2]);/*
字符數(shù)組元素的引用*/一個(gè)字符串可以放在一個(gè)一維數(shù)組中。如果有多個(gè)字符串,可以用一個(gè)二維數(shù)組來存放。
124計(jì)算機(jī)工程學(xué)院(1)字符數(shù)組的定義 用來存放字符數(shù)據(jù)的數(shù)組是字符數(shù)組。字符數(shù)組中的一個(gè)元素存放一個(gè)字符。例如:charstr[12];(2)字符數(shù)組的初始化
在定義一個(gè)字符數(shù)組的同時(shí),可以給它指定初值。有兩種初始化的方法:①逐個(gè)為數(shù)組中各元素賦初值。如:125計(jì)算機(jī)工程學(xué)院charstr[8]={'C','o','m','p','u','t','e','r'
};在對(duì)數(shù)組中的全體元素都賦初值時(shí),字符數(shù)組的大小可以省略。
charstr[]={'C','o','m','p','u','t','e','r'
};②對(duì)一個(gè)字符數(shù)組指定一個(gè)字符串初值。例如
charstr[]={“Computer”};注意單個(gè)字符用單引號(hào)括起來,而字符串用雙引號(hào)括起來,在指定字符串初值的情況下,將字符串中的各字符逐個(gè)地按順序賦給數(shù)組中的各126計(jì)算機(jī)工程學(xué)院元素。注意:系統(tǒng)會(huì)自動(dòng)在一個(gè)字符串的后面加一個(gè)“\0”字符,并把它一起存入字符數(shù)組中。因此,上面的數(shù)組雖未定義大小,但系統(tǒng)自動(dòng)將它定義為str[9],而不是str[8];C語言允許在初始化一個(gè)一維字符數(shù)組時(shí),省略字符串外面的花括號(hào)。如:charstr[]="Computer";
str的每個(gè)元素為char型,占1字節(jié)。
127計(jì)算機(jī)工程學(xué)院圖3-18一組字符數(shù)組初始化數(shù)組str→Cstr[0]ostr[1]mstr[2]pstr[3]ustr[4]tstr[5]estr[6]rstr[7]128計(jì)算機(jī)工程學(xué)院(3)字符數(shù)組的引用。與普通數(shù)組相同。(4)字符串和字符串結(jié)束標(biāo)志
C語言允許用字符串的方式對(duì)數(shù)組作初始化賦值。例如:charc[]={'c','','p','r','o','g','r','a','m'};
可寫為:charc[]={"Cprogram"};
或去掉{
}寫為:charc[]="Cprogram";用字符串方式賦值比用字符逐個(gè)賦值要多占一個(gè)字節(jié),用于存放字符串結(jié)束標(biāo)志‘\0’。上面的數(shù)組c在內(nèi)存中的實(shí)際存放情況為:
129計(jì)算機(jī)工程學(xué)院(5)字符串的輸入輸出
①用"%c"格式符輸入輸出字符。②用"%s"格式符輸入輸出字符串。例如:
charc[6];scanf("%s",c);printf("%s",c);說明:C語言中,數(shù)組名代表該數(shù)組的起始地址,cprogram'\0'130計(jì)算機(jī)工程學(xué)院因此,scanf()函數(shù)中數(shù)組名前不再
溫馨提示
- 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)書語文
- 課題申報(bào)書咋寫
- 微課題研究申報(bào)書
- 借款合同范本員工向公司
- 醫(yī)學(xué)課題申報(bào)書 范文
- 學(xué)生曠課課題申報(bào)書
- 業(yè)務(wù)員用車合同范例
- 前后院老屋出租合同范本
- 合同范本文壁紙
- 創(chuàng)新專業(yè)研究課題申報(bào)書
- COP生產(chǎn)一致性控制計(jì)劃
- 2025年電力人工智能多模態(tài)大模型創(chuàng)新技術(shù)及應(yīng)用報(bào)告-西安交通大學(xué)
- 天津2025年天津市機(jī)關(guān)后勤事務(wù)服務(wù)中心分支機(jī)構(gòu)天津市迎賓館招聘2人筆試歷年參考題庫(kù)附帶答案詳解
- 2025年江蘇南京技師學(xué)院招聘工作人員19人高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 華東師大版七年級(jí)數(shù)學(xué)下冊(cè)“第1周周考”
- DBJ50-T-385-2023半柔性復(fù)合路面技術(shù)標(biāo)準(zhǔn)
- 職業(yè)院校教師人工智能素養(yǎng):內(nèi)涵流變、框架構(gòu)建與生成路徑
- 如何在初中數(shù)學(xué)教學(xué)中提升學(xué)生的核心素養(yǎng)
- (完整版)小學(xué)一年級(jí)數(shù)學(xué)20以內(nèi)進(jìn)退位加減法(1600道題)計(jì)算卡
- 學(xué)習(xí)雷鋒主題班會(huì)雷鋒日學(xué)習(xí)雷鋒精神-
- 事故隱患內(nèi)部舉報(bào)獎(jiǎng)勵(lì)制度
評(píng)論
0/150
提交評(píng)論