C語言程序設計-進階篇:第4章 C語言基本語法_第1頁
C語言程序設計-進階篇:第4章 C語言基本語法_第2頁
C語言程序設計-進階篇:第4章 C語言基本語法_第3頁
C語言程序設計-進階篇:第4章 C語言基本語法_第4頁
C語言程序設計-進階篇:第4章 C語言基本語法_第5頁
已閱讀5頁,還剩68頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第4章

C語言基本語法

C語言程序設計

—進階篇2022/11/2內容概述C語言基本數據類型整型、實型、字符型的常量形式及變量定義整型、實型、字符型變量的格式化輸入輸出C語言的類型轉換運算符及表達式2022/11/2教學目標掌握數據類型的概念,了解C語言能夠處理的數據類型。掌握各種類型常量的特點及表示形式。掌握各種類型變量的定義及使用掌握數據的輸入輸出的基本方法。掌握C語言的運算符、表達式及運用方法。2022/11/2

在C語言中,任何數據呈現給用戶的形式只有兩種:常量和變量。而無論數據是常量還是變量,都必須屬于各種不同的數據類型。在一個具體的C語言系統里,每個數據類型都有固定的表示方式,這個表示方式實際上就確定了可能表示的數據范圍和它在內存中的存放形式。C語言為數據提供了豐富的類型,這些數據類型主要分為:基本數據類型、構造數據類型、指針類型和空類型四大類。

4.1C語言的數據類型

2022/11/2C基本數據類型

基本數據類型最主要的特點是,其值不可以再分解為其它類型。基本類型整型字符型浮點型單精度雙精度枚舉短整型長整型2022/11/2

整型常量即整數,按不同的進制區分,整數有三種表示方法:八進制數:以0開始的數,如:06、0106、0677等。十六進制數:以0X或0x開始的數,如:0X0D、0XFF、0x4e、0x123等。十進制數:以非0開始的數,如:220、-560、+369等。4.2.1整型常量4.2整型數據2022/11/21、整型變量的分類整型變量分為四種:基本型、短整型、長整型、無符號型基本型: 用“int”定義,在不同的編譯系統中它的長度可能不同,如在TurboC下int變量占2個字節,而在VC++下6.0環境下int變量占4個字節。

4.2.2整型變量2022/11/2短整型:用“shortint”或“short”定義,占2個字節。長整型:用“long”或“longint”定義,占4個字節。無符號型:用“unsigned”定義

不存放符號,數據不帶符號數。 無符號整型:“unsignedint”

無符號短整型:“unsignedshortint”

無符號長整型:“unsignedlongint”

注意:如無指定,則為有符號數。2022/11/2整型變量取值范圍類型說明符數的范圍 分配字節數

int-2147483648~2147483647 ■■■■

shortint-32768~32767 ■■

signedint-32768~32767 ■■

unsignedint0~4294967295 ■■■■

longint-2147483648~2147483647 ■■■■

unsignedlong0~4294967295 ■■■■

int根據特定的系統對應shortint或longintunsignedint根據特定的系統對應unsignedshortint或unsignedlongint超過變量所能表示的范圍,產生計算錯誤:溢出.2022/11/22、整型變量的定義一般形式:

類型說明符變量名標識符例如:

inta,b,c;longx,y;unsignedp,q;2022/11/2在定義變量時,應注意以下幾點:

允許在一個類型說明符后,說明多個相同類型的變量。各變量名之間用逗號間隔,類型說明符與變量名之間至少用一個空格間隔。最后一個變量名之后必須以“;”結尾。變量定義必須放在變量使用之前。2022/11/2十進制數形式由數碼0~9和小數點組成。例如:

0.0、25.0、5.789、0.13、5.0、300.、-267.8230等均為合法的實數。注意,必須有小數點。

4.3.1實型常量

實型常量也稱為實數或浮點數。在C語言中,實數只采用十進制,它有兩種形式:十進制數形式和指數形式。

4.3實型數據2022/11/2指數形式

由十進制數,加階碼標志“e”或“E”以及階碼(只能為整數,可以帶符號)組成。其一般形式為:

aEn(a為十進制數,n為十進制整數)其值為a*10n。如:

2.1E5(等于2.1*105) 3.7E-2(等于3.7*10-2) 0.5E7(等于0.5*107) -2.8E-2(等于-2.8*10-2)2022/11/2以下則不是合法的實數: 345(無小數點)

E7(階碼標志E之前無數字) -5(無階碼標志) 53.-E3(負號位置不對) 2.7E(無階碼)

標準C允許浮點數使用后綴。后綴為“f”或“F”即表示該數為浮點數。

如356.f和356.是等價的。2022/11/2注意:實型常量不分單、雙精度,都按雙精度double型處理。

因此:(1)十進制小數形式:必須有小數點。(2)指數形式:字母e前必須有數字,字母e后必須為整數,規范化的指數形式輸出。

2022/11/2#include<stdio.h>main(){

printf("%f\n",356.);

printf("%f\n",356);

printf("%f\n",356.f);}結果為:

356.0000000.000000356.000000課堂練習1:分析下面程序的運行結果。2022/11/24.3.2實型變量

1實型數據在內存中的存放形式

實型數據一般占4個字節(32位)內存空間,按指數形式存儲。如實數3.14159在內存中的存放形式如下:+.3141591

數符小數部分指數小數部分占的位(bit)數愈多,數的有效數字愈多,精度愈高。指數部分占的位數愈多,則能表示的數值范圍愈大。2022/11/2

實型變量分為:單精度(float型)、雙精度(double型)。

實型變量定義的格式和書寫規則與整型相同。例如:

floatx,y;

doublea,b,c;2.實型變量的分類2022/11/23實型數據的舍入誤差

由于實型變量是由有限的存儲單元組成的,因此能提供的有效數字總是有限的。不同的編譯器下處理的精度不同。課堂練習2:分析下面程序的運行結果。#include<stdio.h>main(){ floata,b; a=123456.789e5; b=a+20;

printf("%f\n",a);

printf("%f\n",b);}運行結果(VC++):12345678848.00000012345678848.000000

可見一個大數與一小數間運算會產生什么結果?2022/11/25.4.1字符常量

4.4字符型數據1、字符常量字符常量是用單引號括起來的一個字符。例如:

'a'、'A'、'3'、'='、'+'、'?'

注意英文字母區分大小寫。C字符常量特點:字符常量只能用單引號括起來。字符常量只能是單個字符,不能是字符串。字符可以是字符集中任意字符。如‘5’不同于5。2022/11/22、轉義字符

轉義字符是一種特殊的字符常量。轉義字符以反斜線“\”開頭,后跟一個或幾個字符。 轉義字符具有特定的含義,不同于字符原有的意義,故稱“轉義”字符。轉義字符主要用來表示那些用一般字符不便于表示的控制代碼。常用的轉義字符及其含義如下表:2022/11/2轉義字符轉義字符的意義ASCII代碼\n換行10\t橫向跳到下一制表位置9\b退格8\r回車13\f走紙換頁12\\反斜線符"\"92\'單引號符39\"雙引號符34\a鳴鈴7\ddd1~3位八進制數所代表的字符

\xhh1~2位十六進制數所代表的字符

2022/11/2

廣義地講,C語言字符集中的任何一個字符均可用轉義字符來表示。表中的\ddd和\xhh正是為此而提出的。ddd和hh分別為八進制和十六進制的ASCII代碼。如\101表示字母“A”(見附錄I),\102表示字母“B”,\134表示反斜線,\X0A表示換行等。

常見字符的值:

20H-空格 30H-‘0’-----39H-‘9' 41H-'A' 61H-'a'內碼(ASCII碼)在32~126范圍內為可顯示字符。

2022/11/2#include"stdio.h"voidmain(){charc1='\101',c2='\x42';

printf("a\tbc\bABC\n");printf("xyz\t%c%c\n",c1,c2);}運行結果:abABC

xyzAB

【例4.1】分析以下程序的執行結果。2022/11/2

字符串常量是由一對雙引號括起來的字符序列。例如,“CHINA”、“CLanguage”、“$abc!”等都是合法的字符串常量。

字符串常量和字符常量之間的區別:字符常量由單引號括起來,字符串常量由雙引號括起來。字符常量只能是單個字符,字符串常量則可以含一個或多個字符。可以把一個字符常量賦予一個字符變量,但不能把一個字符串常量賦予一個字符變量。在C語言中沒有相應的字符串變量,但是可以用一個字符數組來存放一個字符串常量。3、字符串常量2022/11/2字符常量占一個字節的內存空間。字符串常量占的內存字節數等于字符串中字符數加1。增加的一個字節中存放字符‘\0’(ASCII碼為0)。例如:字符串"Cprogram"在內存中所占的字節為:C

program\0‘a’和“a”的區別是:“A”存儲方式為A\0但‘A’存儲方式為:A2022/11/2舉例"TEST""""a"'T''E''S''T'\08469838400\0'a'\00097002022/11/2

在C語言中,可以用一個標識符來表示一個常量,稱為符號常量。符號常量在使用之前必須先定義。其一般形式為:

#define標識符常量

例如:#definePI3.1415926符號常量一經定義,以后在程序中所有出現該標識符的地方均以該常量值代替。符號常量的標識符習慣上用大寫字母表示,變量標識符用小寫字母表示,以示區別。

4、符號常量

2022/11/2運行結果:s=19.634954

#include"stdio.h"#definePI3.1415926voidmain(){floats,r;r=2.5;s=PI*r*r;

printf("s=%f\n",s);}【例4.2】符號常量的使用。2022/11/24.4.2字符變量

字符變量用來存儲字符常量,即單個字符。說明形式:

char字符變量名;字符變量在內存中占一個字節,其定義的格式和書寫規則都與整型變量相同。例如:chara,b;2022/11/2例如定義字符型變量charch;若賦值ch=‘x’;則在內存為變量分配一個字節的空間,并存放‘x’的ASCII碼值120。所以也可以給字符型變量賦整型值ch=120;011110002022/11/2#include"stdio.h"voidmain(){ chara,b; a=120; b=121;

printf("%c,%c\n",a,b);

printf("%d,%d\n",a,b);}【例4.3】整型數據與字符數據的相互輸出。2022/11/2#include"stdio.h"voidmain(){ chara,b; a='a'; b='b';

a=a-32; b=b-32;

printf("%c,%c\n%d,%d\n",a,b,a,b);}【例4.4】大小寫字母轉換。2022/11/2#include"stdio.h"voidmain(){chara,b;

printf("inputcharactera,b:");

scanf("%c%c",&a,&b);

printf("%c%c\n",a,b);}

【例4.5】運行并分析程序的執行結果。運行時輸入MN和MN各輸出什么結果?試一試:“%c%c”中加上空格會怎樣?(即“%c%c”)2022/11/24.4.3字符數據的輸入輸出輸入輸出字符型數據可以用scanf()函數和printf()函數,使用格式苻“%c”。實際應用中,有很多字符輸入輸出的情況,為此,C語言提供了更為簡潔的庫函數。2022/11/21、putchar

函數(字符輸出函數)功能:在顯示器上輸出單個字符。一般形式為:

putchar(字符變量);例如:

putchar('A');(輸出大寫字母A)

putchar(x);(輸出字符變量x的值)

putchar(‘\101’);(也是輸出字符A)

putchar('\n');(換行)2022/11/22.getchar函數(鍵盤輸入函數)功能:從鍵盤上輸入一個字符。其一般形式為:

getchar();通常把輸入的字符賦予一個字符變量,構成賦值語句,如:

charc; c=getchar();2022/11/2【例4.6】輸入輸出單個字符。#include"stdio.h"voidmain(){charc;

printf("inputacharacter:");c=getchar();

putchar(c);

putchar('\n');}2022/11/2使用putchar和getchar函數應注意的問題:Getchar()函數只能接受單個字符,輸入數字也按字符處理。輸入多于一個字符時,只接收第一個字符。使用putchar()輸出控制字符則執行控制功能,不在屏幕上顯示,如putchar('\n');使用本函數前必須包含文件“stdio.h”。2022/11/24.5格式化輸入輸出

C語言不提供輸入/輸出語句,數據的輸入/輸出是通過函數調用語句來實現的。在C標準函數庫中提供了一些輸入/輸出函數,它是以標準的輸入/輸出設備(鍵盤、顯示器等)為輸入/輸出對象的。常用的輸出函數有printf()函數和putchar()函數。輸入函數有scanf()和getchar()。2022/11/2

使用標準輸入輸出庫函數時要用到“stdio.h”文件,因此源文件開頭應有以下預編譯命令: #include<stdio.h>或 #include"stdio.h"二者的區別:使用尖括號表示在包含文件目錄中去查找(包含目錄是由用戶在設置環境時設置的),而不在源文件目錄去查找;使用雙引號則表示首先在當前的源文件目錄中查找,若未找到才到包含目錄中去查找。用戶編程時可根據自己文件所在的目錄來選擇某一種命令形式。

2022/11/2功能:按用戶指定的格式,把指定的數據顯示到顯示器屏幕上。一般形式:

printf(“格式控制字符串”,輸出表列);其中

格式控制字符串用于指定輸出格式;

輸出表列中給出了各個輸出項;要求格式字符串和各輸出項在數量和類型上應該一一對應。

4.5.1printf函數(格式輸出函數)2022/11/2類型:類型字符用以表示輸出數據的類型;標志:-、+分別表示輸出數據左、右對齊;輸出最小寬度:用十進制整數來表示輸出的最少位數。精度:精度格式符以“.”開頭,后跟十進制整數。本項的意義是:如果輸出數字,則表示小數的位數;如果輸出的是字符,則表示輸出字符的個數;若實際位數大于所定義的精度數,則截去超過的部分。長度:長度格式符為h,l兩種,h表示按短整型量輸出,l表示按長整型量輸出。在C中格式字符串的一般形式為:

[標志][輸出最小寬度][.精度][長度]類型2022/11/2格式字符意

義d以十進制形式輸出帶符號整數(正數不輸出符號)o以八進制形式輸出無符號整數(不輸出前綴0)x,X以十六進制形式輸出無符號整數(不輸出前綴Ox)u以十進制形式輸出無符號整數f以小數形式輸出單、雙精度實數e,E以指數形式輸出單、雙精度實數g,G以%f或%e中較短的輸出寬度輸出單、雙精度實數c輸出單個字符s輸出字符串2022/11/2【例4.7】運行并分析程序的執行結果。#include"stdio.h"voidmain(){

inta=15;floatb=138.3576278;doublec=35648256.3645687;chard='p';

printf("a=%d,%5d,%o,%x\n",a,a,a,a);

printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b);printf("c=%lf,%f,%8.4lf\n",c,c,c);printf("d=%c,%8c\n",d,d);}2022/11/2功能:按用戶指定的格式從鍵盤上把數據輸入到指定的變量之中。一般形式

scanf(“格式控制字符串”,地址表列);

其中,格式控制字符串的作用與printf函數相同,但不能顯示非格式字符串。地址表列中給出各變量的地址。例如:

scanf(“%d,%d”,&a,&b);4.5.2scanf函數(格式輸入函數)2022/11/2變量的地址和變量值的關系如下:在賦值表達式中給變量賦值,如:

a=3則a為變量名,567是變量的值,&a是變量a的地址。2022/11/2使用scanf()函數還必須注意以下幾點

(1)scanf()函數中沒有精度控制。例如,

scanf("%5.2f",&a);×不能企圖用此語句輸入小數為2位的實數。(2)scanf()中要求給出變量地址,如給出變量名則會出錯。例如,scanf("%d",a);×應改為scanf("%d",&a);√2022/11/2(3)在輸入多個數值數據時,若格式控制串中沒有非格式字符作為輸入數據之間的間隔則可用空格,Tab或回車作為間隔。(4)在輸入字符數據時,若格式控制串中無非格式字符,則認為所有輸入的字符均為有效字符。例如,“scanf("%c%c%c",&a,&b,&c);”,輸入為“d□e□f”時,則把'd'賦予a,'□'賦予b,'e'賦予c。只有當輸入為def時,才能把'd'賦于a,'e'賦予b,'f'賦予c。如果在格式控制中加入空格作為間隔,如“scanf("%c□%c□%c",&a,&b,&c);”,則輸入時各數據之間可加空格。2022/11/2說明:(1)C語言的格式化輸入/輸出比較繁瑣,在以GUI為主流的應用程序的輸入輸出中較少使用(scanf()函數則用不到),但它的另一種形式sprintf()函數中的格式化數據處理則經常會用到。(2)如何獲得有關sprintf()函數的用法知識?請使用微軟開發者網絡—MicrosoftDeveloperNetwork(MSDN)。它是一個有關計算機軟件設計知識的海洋,是微軟平臺的軟件開發和應用人員的最好的獲取知識的工具。(3)讀者從現在開始,應該逐步學會如何獲取書本上沒有的知識,從MSDN、Internet……。請查閱字符串輸出函數puts()的用法。

2022/11/24.6數據類型轉換在編寫程序的過程中,經常會將一種數據類型的值賦給另一種不同數據類型的變量的情況。由于數據類型有差異,在賦值時就要進行數據類型的轉換。數據類型轉換自動類型轉換(隱式轉換)強制類型轉換(顯示轉換)2022/11/24.6.1自動類型轉換整型、實型、字符型數據間可以混合運算。系統在運算時的轉換規則是:將存儲長度較短的運算對象轉換成存儲長度較長的類型,然后再進行處理。這種轉換是系統自動進行的1.各類數據類型間混合運算時的類型轉換規則2022/11/2

高double←float↑

unsignedlong←long

unsigned←unsignedshort

↑低int←char,short

2022/11/2(1)水平方向的轉換:如float型數據必先轉換為double型數據,char型或short型數據必先轉換為int型數據,然后進行運算。(2)垂直方向的轉換:如int型數據與unsigned型數據進行運算,int型轉換為unsigned型;int型數據與double型數據進行運算,int型直接轉換為double型后進行運算。2022/11/22.賦值時的類型轉換實型賦予整型,舍去小數部分。整型賦予實型,數值不變,但將以浮點形式存放,即增加小數部分(小數部分的值為0)。字符型賦予整型,由于字符型為1個字節,而整型為2個字節,故將字符的ASCII碼值放到整型量的低8位中,高8位為0。整型賦予字符型,只把低8位賦予字符量。非unsigned與unsigned數據類型相互賦值時,直接傳送數值。當賦值運算符兩側的類型不同時,需進行類型轉換,這種轉換也是系統自動進行的。2022/11/2在賦值運算時,最好是賦值號右側的數據類型級別等于或低于賦值號左邊的變量的類型級別,否則,會導致運算精度降低,甚至出現意想不到的結果。2022/11/2【例4.8】運行以下程序并分析程序運行結果。#include"stdio.h"voidmain(){

int

a,b=321,c;floatx,y=1.23;charc1='a',c2;c=y;x=b;

a=c1;c2=b;printf("%d,%f,%d,%c\n",c,x,a,c2);}2022/11/24.6.2強制類型轉換強制類型轉換的一般形式為(類型說明符)(表達式)例如:若有定義“int

a,x,y;則(float)a把a轉換為單精度實型(double)(x+y)把x+y的結果轉換為雙精度實型2022/11/2需要說明的是,強制類型轉換是為了本次運算的需要,對數據類型進行的臨時轉換,并沒有改變數據原來的類型。例如

(double)(x+y)的類型是double,但變量x和y的類型還是int。2022/11/2強制轉換運算符優先級比算術運算符高。例如,已知有變量定義:intb=7;floata=2.5,c=4.7;求算術表達式a+(int)(b/3*(int)(a+c)/2.0)%4的值根據運算符結合性規則,上述表達式要自左之右執行,b/3為2,2*int(a+c)為14,14/2.0為7.0,強制類型轉換后為7,7%4為3;a的值2.5與3相加,最終結果為5.5。2022/11/24.7運算符與表達式在第二章中,我們已經介紹了:算術運算符:+、-、*、/、%;關系運算符:>、<、==、>=、<=、!=;邏輯運算符:!、&&、||。C語言中常用的運算符還有自增自減運算符、條件運算符、逗號運算符等。2022/11/21自增、自減運算符及其表達式1形式++i,--i

使用i之前,先使i的值加/減1i++,i--

使用i之后,再使i的值加/減12說明++i和--i的值是加/減1之后i的值i++和i--的值是加/減1之前i的值++和--只能用于變量,不能用于常量和表達式++和--的結合方向是“自右向左”2022/11/2(1)單獨使用時++i;等價i++;等價i=i+1;(2)j=++i;(3)j=i++;若i的初始值為3i=4;j=4;i=4;j=3;2022/11/2#include<stdio.h>#include<stdio.h>voidmain(){

inti; i=8; printf("%5d",++i); printf("%5d",--i); printf("%5d",i++); printf("%5d",i--); printf("%5d",-i++); printf("%5d\n",-i--);}【例4.9】運行以下程序并分析程序運行結果。2022/11/2++、--運算符應用于邏輯表達式“a&&b&&c”和“a||b||c”時需格外注意

例如:若a=0;b=1;c=2;執行d=a++&&b++&&--c;之,a,b,c,d的值各是什么?分析:因變量a先參加表達式的運算,后自增,所以參加表達式運算的值是0,所以整個表達式的值是0,即d=0,a自增變為1,b++和—c沒有得到執行,所以b=1,c=2。即運算結果:d=0,a=1,b=1,c=22022/11/2若a=0;b=1;c=2;

執行d=a++||b++||--c;后a,b,c,d的值各是什么?分析:因變量a先參加表達式的運算,后自增,所以第一個||前的表達式值為0(假),需要運算第二個表達式即b++,由于b=1,所以整個表達式的值為1,即d=1,b自增后變為2,第三個表達式—c沒有得到執行,所以c=2。即運算結果:d=1,a=1,b=2,c=2。2022/11/21.條件運算符條件運算符由問號“?”和比例號“:”組成,用于連接三個運算對象,是C語言中唯一的一個三目運算符。

2.條件表達式一般形式:

溫馨提示

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

評論

0/150

提交評論