第3章簡單程序設計_第1頁
第3章簡單程序設計_第2頁
第3章簡單程序設計_第3頁
第3章簡單程序設計_第4頁
第3章簡單程序設計_第5頁
已閱讀5頁,還剩45頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

第3章簡單程序設計§3.1

C語言的基本語句§3.2順序結構§3.3數據輸入與輸出§3.4程序舉例C語句可分為以下5種類型:1.表達式語句由表達式組成,其一般形式是:表達式;

典型例子:賦值語句x=5;

2.函數調用語句由一個函數調用加上一個分號構成,其作用是完成特定功能。它的一般形式是:函數名(參數列表);

典型例子:printf(“%d”,x);3.1

C語言的基本語句3.控制語句用于完成一定的控制功能,以形成程序的各種結構和流程控制。C語言有9種控制語句,分三類:(1)條件判斷語句,構成選擇結構:

if語句、switch語句(2)循環語句,構成循環結構:

for語句、while語句、do-while語句(3)轉向控制語句

①限定轉向語句:break、continue、return語句

②無條件轉向語句:goto語句4.復合語句是用大括號{……}將若干語句組合在一起,在語法上相當于一條語句。用于if語句的一個分支或循環語句的循環體等。由于復合語句中還可以定義變量,因此又稱分程序。注意:復合語句外沒有分號,其中最后一個語句的分號不能省略。5.空語句只有一個分號沒有其他內容的語句。其形式為:;常用于循環中,表示循環體什么都不做。

程序結構分為順序、選擇、循環三種。任何復雜的程序都是由這三種基本結構組成。3.2順序結構

順序結構,按語句出現先后順序依次執行的程序結構。選擇結構,又稱選取或分支結構,根據給定條件是否成立,以決定程序的分支轉向的程序結構,詳見第4章。循環結構,又稱重復結構,根據條件反復執行某一部分語句的程序結構,詳見第5章。順序結構是程序設計中最簡單、最基本的結構,其特點是程序運行時,按語句書寫的次序依次執行,其結構如右圖所示。順序結構一般由函數調用語句、說明語句、表達式語句和輸入輸出語句組成。AB順序結構圖順序結構流程圖#include<stdio.h>main(){

inta,b,c;a=123;b=456;c=a+b;

printf("\nc=%d\n",c);}【例3-1】分析下面程序預處理命令變量a,b,c聲明a,b賦初值賦值語句c=a+b輸出變量c的值例3-1的流程從例3-1可以看出,順序結構的程序框架如下:#開頭的預編譯命令行

main()

{

局部變量聲明語句;

可執行語句;

}3.3數據輸入與輸出

printf()函數的功能是向系統顯示器輸出若干個任意類型的數據。1.printf()函數調用形式

printf(格式控制字符串,輸出列表)

注意:調用輸入輸出函數時,一般在程序開頭加頭文件:#include<stdio.h>,printf()和scanf()可省略。3.3.1格式化輸出函數printf()

格式說明

一般字符按原樣輸出轉義字符作用:換行輸出列表printf("a=%d\n",a);printf函數簡例格式控制字符串和輸出列表都是函數的參數,其中:(1)格式控制字符串,它包括兩個信息:①格式說明符。由“%”開頭,以格式字符結束的一串字符,最簡單的如%d,%c,%f等。它的作用是將要輸出的數據轉化成指定的格式輸出。②原樣輸出字符,含一般字符和轉義字符。一般起提示、分隔數據和換行等作用。如例3-1中printf(“\nc=%d\n”,c);中雙撇號內的\n和c=。(2)輸出列表是需要輸出的常量、變量、函數、表達式?!菊f明】格式說明符的一般形式為:

%[-][+][0][#][整數1][.整數2][l或h]格式字符它是由“%”開頭,以格式字符(英文字母)結束的一串字符,用以說明輸出數據的類型、長度、位數等,其中[]表示可選項。因此,除了%以外,格式字符是格式說明符中必須要有的,它控制輸出列表里相應輸出項數據的輸出類型。表3-2給出了常用的格式字符及含義。注意:有符號整數按無符號格式將輸出其補碼;無符號整數按有符號格式將作為補碼輸出其數。格式說明符printf函數常用類型格式字符表格式字符格式字符含義d或i表示以十進制形式輸出一個帶符號的整數o表示以八進制形式輸出一個無符號的整數X,x表示以十六進制形式輸出一個無符號的整數u表示以十進制形式輸出一個無符號的整數f表示以小數形式輸出帶符號的實數(包括單、雙精度)E,e表示以指數形式輸出帶符號的實數G,g表示選擇%f或%e格式輸出實數(選擇占寬度較小的一種格式輸出)c表示輸出一個單字符s表示輸出一個字符串注:大寫字母表示輸出中的字母為大寫格式說明符各項的意義如下圖所示。[整數1.整數2]:整數1控制輸出長度(域寬),整數2對不同格式符有不同含義,具體作用見上圖。1、兩者缺省情況下:對整數和字符串按實際字符數輸出;

(VC中)對實數(float和double):①小數型:整數部分原樣輸出,默認輸出6位小數,多余小數舍入處理。②指數型:正數默認輸出1位整數、小數點、6位小數、4位指數(e或E、+或―號及3位整數)共13個字符(負數12個字符)。2、有整數1無整數2:默認輸出(整數、字符串全部;實數同上)3、無整數1有整數2:按上圖說明輸出(實數整數部分全部輸出)【說明】4、域寬情況(有整數1,有或無整數2)①指定域寬不足,按需增加域寬。②指定域寬富余:缺省"―"右對齊:無"0"控制:前加空格;有"0"控制:數值型前加0填齊;其它類型前加空格。有"―"控制左對齊,按域寬后面加空格。

[長度修正l]:長度修正l可與d、i、o、x、X、u、f、e、E、g、G配合使用,long型整數在基本整數范圍內、double型實數在float型實數范圍內可以不加l輸出,否則,必須加長度修正l才能正常輸出?!菊f明】【注意】(1)實數精度(有效數字)由輸出項類型控制(float7位double16位),對float型輸出項用%lf格式不能增加精度;增大“整數2”可增加實數輸出的小數位數,但不能增加精度。(2)輸出項從右向左計算后,按格式說明的順序、類型和要求對應輸出。格式說明和輸出項的個數類型應相同,如不匹配系統不能正確輸出①格式說明的個數少于輸出項個數,多余的輸出項將不輸出;②格式說明的個數多于輸出項個數,多余的格式說明將輸出隨機的值。③整型數據按%f輸出或者實型數據按%d輸出,均出現輸出錯誤結果。(3)格式字符除X(表示輸出的十六進制數用大寫字母輸出)、E(表示輸出的指數e用大寫字母E輸出)、G(表示若選用指數形式輸出,則用大寫字母E輸出)外,必須是小寫字母。如%d不能寫成%D。(4)若想輸出字符“%”,則在格式字符串中用連續兩個%表示。如:printf(“%f%%”,1.0/4);則輸出:0.250000%【注意】#include<stdio.h>main(){

int

a,b,c;a=123;b=456;c=a+b;

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

printf(“a+b=%hd+%hd=%hd\n”,a,b,c);

printf("a+b=%2d+%2d=%5d\n",a,b,c);

printf("a+b=%02d+%02d=%05d\n",a,b,c);}【例3-2】分析下面程序運行結果#include<stdio.h>main(){unsignedinta=65535;intb=-2;printf(“a=%d,%o,%x,%u\n”,a,a,a,a);printf(“a=%d,%o,%x,%u\n”,a,a,a,a);}【例3-3】無符號數據的輸出

#include<stdio.h>main(){floatx,y,z;x=123.234;y=0.000345;z=-98.567;

printf("x=%.4f,x=%.2f,x=%+e\n",x,x,x);

printf("y=%f,y=%8.4f,y=%10.3e\n",y,y,y);

printf("z=%+f,z=%+e,z=%+g\n",z,z,z);}【例3-4】分析下面程序運行結果#include<stdio.h>main(){doublex,y,z;x=123.234;y=-0.000345;z=-98.567;

printf(“x=%lf,x=%.4lf,x=%2lf,x=%+e\n”,x,x,x,x);

printf("y=%lf,y=%+lf,y=%le\n",y,y,y);

printf("z=%f\n",z);}【例3-5】分析下面程序運行結果#include<stdio.h>main(){

printf("\n%c",'a');/*輸出單個字符*/

printf("\n%s","abc");/*輸出一個字符串*/}【例3-6】分析下面程序運行結果3.3.2格式化輸入函數scanfscanf()函數的功能是從鍵盤上將數據按用戶指定的格式輸入并賦給指定變量。1.scanf()函數調用形式

scanf(格式控制字符串,地址列表);格式控制字符串的定義與使用方法和printf函數相似,但不能顯示非格式字符串,即不能顯示提示字符串。地址列表是要賦值的各變量地址,地址是由地址運算符“&”后跟變量名組成,如&x表示變量x的地址。

格式說明符以%開始,后面跟一個格式符,中間可以有若干個附加字符,格式字符串一般形式為:

%[*][輸入數據寬度m][長度]類型其中:[]:表示可選項*:表示輸入的數值不賦給相應的變量,即跳過該數據不讀。[輸入數據寬度m]:表示按十進制正整數m的寬度輸入數據。[長度]:長度格式符為l和h,l表示輸入長整型數據或雙精度實型數據;h表示輸入短整型數據。類型:是格式說明符中必須要有的,其格式符的意義與printf函數基本相同,具體如表3-3所示。2.格式說明符表3-3

scanf函數常用類型格式符表格式字符格式字符含義d(i)表示以十進制形式輸入一個整數o表示以八進制形式輸入一個整數x(X)表示以十六進制形式輸入一個整數u表示以十進制形式輸入一個無符號的整數f或e(E)表示輸入一個實數,可以是小數形式或指數形式g(G)與f或e的作用相同c表示輸入一個字符s表示輸入一個字符串【注意】(1)scanf函數中的“格式控制字符串”后面應該是變量的地址,而不應是變量名。例如輸入語句scanf(“%d,%d”,a,b);是錯誤的,&不能少。(2)輸入數據時不能規定數據的精度。如scanf("%8.2f",&a);是不合法的。(3)在“格式控制字符串”中除了格式說明符外,還有其他字符,則在輸入數據時在對應位置上應輸入與這些字符相同的字符。例如

scanf("a=%d,b=%d",&a,&b);則輸入時應輸入:a=12,b=-2↙其他任何輸入形式都不正確。例3-7注意(4)輸入數據時,遇以下情況認為該數據輸入結束: ①按指定的寬度結束; ②遇空格,或“回車”鍵,或“Tab”鍵; ③

遇非法輸入。(5)在用“%c”格式輸入字符時,所有輸入的字符(包括空格字符和“轉義字符”)都作為有效字符。(6)當輸入的數據與輸出的類型不一樣時,雖然編譯沒有提示出錯,但結果將不正確。/*EX3-8.C*/#include<stdio.h>main(){

inta,b,c;scanf("%3d%3d%4d",&a,&b,&c);/*按長度m進行輸入*/

printf("\na=%d,b=%d,c=%d\n",a,b,c);}【例3-8】分析下面程序/*EX3-9.C*/#include<stdio.h>main(){doublea,b,c;

scanf("%lf,%lf",&a,&b);/*按雙精度進行輸入*/c=a*b;

printf("\na*b=%lf*%lf=%le\n",a,b,c);}【例3-9】分析下面程序/*EX3-10.C*/#include<stdio.h>main(){charch1,ch2;scanf("%c%c",&ch1,&ch2);printf("%c%c\n",ch1,ch2);

}【例3-10】閱讀下面程序/*EX3-11.C*/#include<stdio.h>main(){

intx,y;scanf("%2d%*3d%4d",&x,&y);/*注意%*3d的作用*/

printf("\nx=%d,y=%d\n",x,y);}【例3-11】分析下面程序#include<stdio.h>main(){

inta;

scanf(“%d”,&a);/*輸入輸出類型不一致*/

printf("\na=%ld\n",a);}【例3-12】分析下面程序3.3.3字符數據的輸入與輸出C語言為字符定義了兩個最基本的函數:字符輸入函數getchar和字符輸出函數putchar。在使用這兩個函數時,程序的頭部一定要加上文件包含命令:

#include<stdio.h>1.字符輸入函數getchar()getchar()的功能是從標準設備(鍵盤)上讀入一個字符。其一般調用形式:getchar();

語句ch=getchar()和scanf(“%c”,&ch);功能相同#include<stdio.h>main(){charc1,c2;c1=getchar();/*從鍵盤上接收一個字符賦給字符變量c1*/c2=getchar();/*和scanf(“%c”,&c2)等價*/printf("%c,%c\n",c1,c2);}【例3-13】字符輸入函數的使用2.字符輸出函數putchar()字符輸出函數putchar()的功能是向標準輸出設備(顯示器)輸出一個字符。其一般調用形式:

putchar(c);其中:c是參數,它可以是整型或字符型變量,也可以是整型或字符型常量。當是整型量時,輸出以該數值作為ASCII碼所對應的字符;當是字符型量時,直接輸出字符常量。

語名putchar(c)和printf(“%c”,c)功能相同/*EX3-14.C*/#include<stdio.h>main(){

charx,y,z;x='a';y='+';z='b';putchar(x);putchar(y);putchar(z);;putchar('\132');putchar('\n');printf(“%c%c%c\132\n”,x,y,z);}【例3-14】字符輸出函數的使用【例3-15】從鍵盤上輸入兩個整數放入變量a,b中,編程將這兩個變量中的數據交換?!痉治觥績蓚€數據交換,不能直接寫成a=b;b=a;,因為當執行a=b;后,變量a中的原值就被“沖”掉了,而與變量b中的值相等,因此不能實現交換。正確的做法是另定義一個變量(假設是c)作為暫存單元,在執行a=b;之前,先將變量a的值放入c中保存起來,然后執行a=b;,最后再執行b=c;,由于c中保存的是a的值,這樣就將原來a的值賦給了b,從而實現了兩個變量中的數據交換。3.4程序舉例程序#include<stdio.h>main(){

inta,b,c;a=3;b=5;c=a;a=b;b=c;

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

35a3c①②③b【例3-16】從鍵盤上輸入一個英文小寫字母,編程輸出該字母所對應的ASCII碼和所對應的大寫字母【分析】在ASCII字符集中,大寫字母A~Z是連續的(ASCII值從65~90),小寫字母a~z也是連續的(ASCII值從97~122)。因此每對字母的ASCII碼值差是相同的,都是32,即'a'-'A'、'b'-'B'、'c'-'C'、…、'z'-'Z'都是32。所以將小寫字母的ASCII碼值減去32,則得到的是所對應的大寫字母ASCII碼值。同理,將大寫字母的ASCII碼值加上32,則得到的是所對應的小寫字母ASCII碼值。程序#include<stdio.h>main(){charc1,c2;c1=getchar();/*從鍵盤獲得一個小寫字母*/c2=c1-32;/*將小寫字母轉化為大寫字母*/printf("%d,%c\n",c1,c1);putchar(c2);}

#include<stdio.h>#include<math.h>main(){floata,b,c,s,area;

scanf("%f%f%f",&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("\na=%.2f,b=%.2f,c=%.2f\n",a,b,c);

printf("\narea=%.3f\n",area);}【例3-17】輸入三角形的三條邊,編程求該三角形的面積【例3-18】編程求解方程#include<stdio.h>#include<math.h>main(){floata,b,c,d,x1,x2;a=3;b=-5;c=-7;d=b*b-4*a*c;x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);printf("x1=%.4f,x2=%.4f\n",x1,x2);}【例3-19】分析下面程序的運行結果#include<stdio.h>main(){intx=1,y=5;

printf("x=%%d,y=%%d",x,y);}

【分析】本程序格式控制字符串中,有兩個連續的%%。前面已經講過,兩個連續的%%表示輸出一個%,因此變量x,y沒有對應的輸出格式,只能輸出雙引號中的字符?!纠?-20】分析下面程序的運行結果#include<stdio.h>main(){inta,b;a=0x41;b=++a;

printf("%d,%d\n",a--,--b);

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

本章介紹了順序程序結構、賦值語句、基本的輸入/輸出函數。重點講解了以下幾個方面的內容:1.scanf、printf、getchar、putchar四個函數的使用:(1)scanf和getchar都是輸入函數,其功能是接收鍵盤上輸入的數據。但scanf函數可以按指定的格式輸入任何類型的數據,而getchar函數只能接收一個字符。(2)printf和putchar都是輸出函數,其功能是向屏幕(顯示器)輸出數據。但printf函數可以按指定的格式輸出任何類型的數據,而putchar函數只能輸出一個字符。(3)使用scanf函數或printf函數可以在程序中不包含頭文件stdio.h,而使用getc

溫馨提示

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

評論

0/150

提交評論