C程序設(shè)計課件4.2_第1頁
C程序設(shè)計課件4.2_第2頁
C程序設(shè)計課件4.2_第3頁
C程序設(shè)計課件4.2_第4頁
C程序設(shè)計課件4.2_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1.一維字符數(shù)組的定義

一維字符型數(shù)組定義的一般形式

char數(shù)組名[常量表達式]

如:charstr[6];定義了一個一維字符數(shù)組,數(shù)組名str,數(shù)組有6個元素,分別為:str[0],str[1],str[2],str[3],str[4],str[5]。

字符數(shù)組中的一個元素存放一個字符

如:字符數(shù)組str最多存放6個字符。一、一維字符數(shù)組的定義和初始化2.一維字符數(shù)組的初始化

如:charstr[5]={'H','e','l','l','o'};charstr[]={'H','e','l','l','o'};Hellostr[0]str[1]str[2]str[3]str[4]如:charstr[7]={'H','e','l','l','o'};②部分元素初始化(此時長度不能省略)

賦值給前面的元素,沒被賦值的數(shù)組元素值為'\0'Hello\0\0str[0]str[1]str[2]str[3]str[4]str[5]str[6]①全部元素初始化(此時長度可以省略)(1)用字符常量初始化(2)用字符串常量初始化如:charstr[6]={"Hello"};charstr[]={"Hello"};charstr[]="Hello";①全部元素初始化(此時長度可以省略)Hello\0str[0]str[1]str[2]str[3]str[4]str[5]②部分元素初始化(此時長度不能省略)等價于:charstr[7]={'H','e','l','l','o'}charstr[7]={'H','e','l','l','o'

,'\0'

,'\0'};

如:charstr[7]="Hello";Hello\0\0str[0]str[1]str[2]str[3]str[4]str[5]str[6]賦值給前面的元素,沒被賦值的數(shù)組元素值為'\0'

數(shù)組長度至少要比字符串的長度多1,用于存放'\0'

功能:將從str開始到第一個'\0'之間的字符串輸出到終端(一般指顯示器),并將'\0'轉(zhuǎn)換為回車換行。1.字符串輸出函數(shù)(puts())一般調(diào)用格式

puts(str)其中,參數(shù)str可以是地址表達式(一般為數(shù)組名或指針變量),也可以是字符串常量。二、字符數(shù)組的輸入和輸出(1)輸出的字符串中可以包含轉(zhuǎn)義字符。(2)輸出到第一個'\0'為止,并將'\0'轉(zhuǎn)換為'\n'。(3)一次只能輸出一個字符串。返回值:成功,返回?fù)Q行符(ASCII為10);失敗,返回EOF(-1)說明#include"stdio.h"voidmain(){charstr1[]="china";charstr2[]="china\nliaoning\0jinzhou";char*p=str2+6;puts(str1);puts(str1+2);puts("Hello");puts(str2);

puts(p);}運行結(jié)果chinainaHellochinaliaoningliaoning程序1?【例】寫出下面程序的運行結(jié)果/*到第1個\0結(jié)束*/一般調(diào)用格式

gets(str)其中,參數(shù)str是地址表達式,一般是數(shù)組名或指針變量。功能:從終端(一般指鍵盤)輸入一個字符串,存放到以str為起始地址的內(nèi)存單元。如:charstr[20];gets(str);返回值:字符串在內(nèi)存中存放的起始地址,即str的值2.字符串輸入函數(shù)(gets())說明①gets()函數(shù)一次只能輸入一個字符串。②系統(tǒng)自動在字符串尾加字符串結(jié)束標(biāo)志'\0'。③遇回車輸入結(jié)束。3.字符數(shù)組的輸出(1)單個字符輸出①用格式輸出函數(shù)printf()的%c的格式。

②用字符輸出函數(shù)putchar()。#include<stdio.h>voidmain(){charstr[81]="string";inti;for(i=0;str[i]!='\0';i++)

printf("%c",str[i]);}putchar(str[i]);程序2?【例】編寫程序輸出字符串str的內(nèi)容。說明(2)將整個字符串一次輸出

①用格式輸出函數(shù)printf()的%s格式。

②用字符串輸出函數(shù)puts()。#include<stdio.h>voidmain(){charstr[81]="string";

printf("%s",str);}puts(str);②兩個函數(shù)都是輸出到第一個'\0'結(jié)束。程序3?【例】編寫程序輸出字符串str的內(nèi)容。①兩個函數(shù)的輸出項參數(shù)都是地址表達式或字符串常量。③puts()函數(shù)輸出后換行,printf()函數(shù)輸出后不換行。#include<stdio.h>voidmain(){charstr[81];inti=0;printf("請輸入一組英文字母:");

str[i]=getchar();while(

str[i]!='\n'

){

}}if(str[i]>='a'&&str[i]<='z')

str[i]

-=32;putchar(str[i]);str[++i]=getchar();4.字符數(shù)組的輸入(1)單個字符輸入

①用格式輸入函數(shù)scanf()的%c格式。②用字符輸入函數(shù)getchar()?!纠繉⒆x入的一組英文字母按大寫輸出,按回車輸入結(jié)束。程序4?scanf("%c",&str[i]);scanf("%c",&str[++i]);#include<stdio.h>voidmain(){charstr[81];

inti=0;printf("請輸入一組英文字母:");

gets(str);while(

str[i]!='\0'

){

}

puts(str);

}(2)將整個字符串一次輸入①用格式輸入函數(shù)scanf()的%s格式。

②用字符串輸入函數(shù)gets()。scanf("%s",str1);【例】將讀入的一組英文字母按大寫輸出,按回車輸入結(jié)束。if(str[i]>='a'&&str[i]<='z')

str[i]

-=32;i++;程序5?charstr1[12];gets(str1);printf("%s",str1);輸入:howareyou↙輸出:howareyou如:charstr1[12];scanf("%s",str1);printf("%s",str1);輸入:howareyou↙輸出:how①scanf()不能輸入含有空格的字符串gets()函數(shù)能夠輸入含有空格的字符串程序6?②用scanf()函數(shù)一次能輸入多個字符串用gets()函數(shù)一次只能輸入一個字符串如:charstr1[4],str2[4],str3[4];scanf("%s%s%s",str1,str2,str3);printf("%s\n%s\n%s",str1,str2,str3);輸入:howareyou↙輸出:howareyou程序7?how\0are\0you\0str1str2str3三、用字符數(shù)組實現(xiàn)字符串1.下標(biāo)法引用(數(shù)組名[表達式])【例】將一個字符串逆置后接到原串的后面。#include"stdio.h"voidmain(){charstr[10];inti,j;gets(str);i=0;while(str[i]!='\0')i++;j=i;i--;

while(i>=0){str[j]=str[i];i--;j++;}

str[j]=

'\0';puts(str);}0123456789abca\0\0bcij程序8?/*輸入*//*逆置連接*//*輸出*/2.用數(shù)組名法引用(*(數(shù)組名+表達式))【例】將字符數(shù)組a中的字符串復(fù)制到字符數(shù)組b。#include<stdio.h>voidmain(){chara[81],b[81];inti;gets(a);i=0;while(a[i]!=

'\0'){b[i]=a[i];i++;}

b[i]='\0';puts(b);}*(b+i)='\0';*(b+i)=*(a+i);while(*(a+i)!=

'\0')程序9?/*輸入*//*復(fù)制*//*輸出*/數(shù)組名法3.用指針變量法引用(*(指針變量+表達式))【例】刪除字符串尾部空格。ab□c□□deg□□□□\0

ab□c□□deg\0#include"stdio.h"voidmain(){charstr[81],*p;gets(str);

/*從頭開始找最后一個字符*/p=str;while(*p)p++;p--;/*從尾開始找左面第一個空格*/while(*p=='

')p--;p++;/*把左面第一個空格改成'\0'

*/*p='\0';printf("%s",str);}\0程序10?p/*輸入*//*刪除尾部空格*//*輸出*/一般形式

char*指針變量=字符串常量;

如:char*str="china";等價于:

char*str;str="china";str四、用字符指針變量實現(xiàn)字符串china\0含義:定義一個字符型指針變量str,并將字符串"china"的首地址賦給它,即str指向字符串的第一個字符'c'。#include<stdio.h>voidmain(){

puts(p1);

p1="hello";

puts(p1);}【例】寫出下列程序的運行結(jié)果char*p1="china";運行結(jié)果p1china\0chinahellohello\0程序11?字符數(shù)組和字符指針變量處理字符串的的區(qū)別

如:charstr[6]="china";字符數(shù)組

系統(tǒng)為字符數(shù)組分配連續(xù)內(nèi)存空間,然后把字符串存入字符數(shù)組中。①存儲內(nèi)容不同如:char*p="china";字符指針變量將字符串的首地址賦給字符型指針變量。strchina\0pchina\0②允許的賦值操作不同如:(1)charstr[6];str="china";(2)char*str;str="china";/*數(shù)組名str是地址常量,不能做賦值運算*/若有定義:charstr1[10]="china",str2[10],*p1,*p2;判斷下面四條賦值語句的合法性。①str2=str1;

②str2="USA";③p1=str1;

④p2="USA";/*str是字符指針變量,將字符串首地址賦給它*/思考題(×)(×)(√)(√)③使用字符指針變量比用字符數(shù)組節(jié)省內(nèi)存④使用未賦值的指針變量是危險的如果指針變量在使用前沒有賦值,其值不確定,使用時容易出錯,嚴(yán)重時會造成系統(tǒng)癱瘓。如:char*p;scanf("%s",p);/*p沒有賦值*/字符指針變量:

把字符串常量的地址賦給字符指針變量。strUSA\0字符數(shù)組:

將字符串常量復(fù)制到字符數(shù)組,字符串常量的地址與字符數(shù)組的地址不同。str如:charstr[]="USA";如:char*str="USA";USA\0USA\0China\01.字符串復(fù)制函數(shù)(strcpy())一般調(diào)用格式

strcpy(str1,str2)

其中,str2是地址表達式或字符串常量;str1是地址表達式

五、常用字符串處理函數(shù)使用時一定要在文件中寫入文件包含命令:#include"string.h"或#include<string.h>功能:將字符串str2復(fù)制到以str1為起始地址的內(nèi)存單元返回值:str1的值。如:charstr2[20]="China\0USA",str1[40];

strcpy(str1,str2);China\0USA\0str2str1①以str1開始的內(nèi)存單元必須定義的足夠大②復(fù)制從str2開始,到第一個'\0'結(jié)束③復(fù)制時連同字符串后面的'\0'一起復(fù)制④實現(xiàn)對字符數(shù)組整體賦值說明Beijing\0China\0Beijing\02.字符串連接函數(shù)(strcat())一般調(diào)用格式

strcat(str1,str2)其中,str1是地址表達式,str2是地址表達式或字符串常量如:charstr1[40]="China",str2[20]="Beijing";strcat(str1,str2);功能:把字符串str2連接到str1指向的字符串的后面返回值:str1的值。str1str2①以str1開始的內(nèi)存單元必須定義的足夠大。②str2的第一個字符覆蓋了str1的第一個'\0',只在新串的最后保留一個'\0'。③str2指向的字符串不變。說明3.字符串比較函數(shù)(strcmp())一般調(diào)用格式

strcmp(str1,str2)其中,str1和str2可以是地址表達式,也可以是字符串常量返回值

TC:

相等,返回0;不相等,返回左起第一次不相同的兩個字符的ASCII碼的差值。

VC++:

相等,返回0;小于,返回-1;大于,返回1。功能:比較兩個字符串是否相同China\0ChiNa\0≠China\0China\0=①字符串比較不能用關(guān)系運算符,只能用strcmp()函數(shù)②不能用strcmp()函數(shù)比較其他類型數(shù)據(jù)說明str1str2str1str24.求字符串長度函數(shù)(strlen())一般調(diào)用格式

strlen(str)其中,str可以是地址表達式,也可以是字符串常量。功能:統(tǒng)計從str開始到第1個'\0'之間字符數(shù)(不包括'\0')返回值:字符串中實際字符的個數(shù)函數(shù)strlen與運算符sizeof的區(qū)別?程序12?思考題:#include"stdio.h"#include"string.h"voidmain(){charstr1[15]="china";charstr2[]="china\0usa";printf("%d\n",strlen(str1));printf("%d\n",strlen(str2));printf("%d\n",sizeof(str1));printf("%d\n",sizeof(str2));}【例】寫出下列程序的運行結(jié)果運行結(jié)果5515105.字符串小寫變大寫函數(shù)(strupr())一般調(diào)用格式

strupr(str)其中,str可以是地址表達式,也可以是字符串常量。功能:將字符串中的小寫英文字母轉(zhuǎn)換成大寫英文字母。返回值:str的值程序13?6.字符串大寫變小寫函數(shù)(strlwr())一般調(diào)用格式

strlwr(str)其中,str可以是地址表達式,也可以是字符串常量。功能:將字符串中的大寫英文字母轉(zhuǎn)換成小寫英文字母。返回值:str的值如:charstr1[]="#ab3CDE";charstr2[]="#ab3CDE";puts(strupr(str1));puts(strlwr(str2));#AB3CDE#ab3cde#include<stdio.h>#include<string.h>voidmain(){charstr1[20],str2[20],str3[60];gets(str1);gets(str2);if(strcmp(str1,str2)<0)/*str1小*/{

}else/*str2小*/{

}puts(str3);}【例】有兩個字符串,按由小到大的順序連接在一起并輸出。

strcpy(str3,str2);strcat(str3,str1);strcpy(str3,str1);strcat(str3,str2);程序14?/*輸入*//*連接*//*輸出*/練習(xí)題1.設(shè)有定義:chara[10]="ABCD",*p=a;,則*(p+4)的值是()。①"ABCD"②'D'③'\0'

④不確定一、單項選擇題③2.設(shè)有定義:chars[12]="string";,則printf("%d",strlen(s));的輸出結(jié)果是()。①6②7③11④12①3.若有如下定義,則正確的敘述為()。charx[]="abcdefg";chary[]={'a','b','c','d','e','f','g'};①數(shù)組x和數(shù)組y等價②數(shù)組x和數(shù)組y的長度相同③數(shù)組x的長度大于數(shù)組y的長度④數(shù)組y的長度大于數(shù)組x的長度③4.以下語句或語句組中,能正確進行字符串賦值的是()。①char*sp;*sp="right!";②chars[10];s="right!";③chars[10];*s="right!";④char*sp="right!";④1.下列程序的功能是將一個字符串str的內(nèi)容顛倒過來。

#include"stdio.h"

#include"string.h"voidmain(){inti,j,k;charstr[81];gets(str);for(i=0,j=

;i<j;i++,j--){k=str[i];str[i]=str[j];str[j]=k;}printf("%s\n",str);}strlen(str)-12.下列程序用以刪除字符串中所有的空格。#include"stdio.h"voidmain(){chars[100]={"OurteacherteachClanguage!"};

inti,j;for(i=j=0;s[i]!='\0';i++)if(s[i]!=''){

;j++;}

s[j]=

;printf("%s\n",s);}'\0's[j]=s[i]二、程序填空題3.程序功能是將字符數(shù)組a中下標(biāo)值為偶數(shù)的元素從小到大排列,其它元素不變。#include<string.h>

#include"stdio.h"voidmain(){chara[]="clanguage",t;inti,j,k;k=strlen(a);

for(i=0;i<=k-2;i+=2)for(j=i+2;j<k;

)

if(

){t=a[i];a[i]=a[j];a[j]=t;}puts(a);}

j+=2a[i]>a[j]4.下列程序的功能是把

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論