c3第三章順序結構程式設計v2019

2021-03-04 09:39:16 字數 7518 閱讀 7852

第三章順序結構程式設計how many classromm.c

3.1 基本語句

(1)空語句:即只有乙個分號的語句。

;(2)表示式語句:表示式後加乙個分號。

如:m=0;

x+y-10%2+2*x,10/2;無具體意義

(3)函式呼叫語句:函式呼叫加乙個分號。

如:printf(「this is a example. \n」) ;

(4)控制語句:

是c語言中完成一定控制功能的語句,

如表3.1所示。

表3.1

條件控制語句迴圈控制語句輔助控制語句

if語句switch語句while語句

do-while語句

for語句

break中斷語句

continue繼續語句

goto轉向語句

return返回語句

(5)復合語句。將一組語句用花括號括起來就形成了復合語句,又稱其為分程式。

如:3.2 賦值語句

賦值表示式後加上乙個分號。

例:利用賦值語句交換兩變數的值。

設有定義:int a=12, b=5, t;

則可以用如下兩種方式交換變數a和b的值:

⑴t=a; a=b; b=t;

⑵a=a+b; b=a-b; a=a-b;

3.3 資料的輸入輸出

c語言無i/o語句,i/o操作由函式實現

#include

一、格式輸出函式

格式:printf("格式控制串",輸出表)

功能:按指定格式向顯示器輸出資料

返值:正常,返回輸出字元數;出錯,返回eof(-1)

輸出表:要輸出的資料(可以沒有,多個時以「,」分隔)格式控制串:包含兩種資訊

1. 格式說明:%[修飾符]格式字元,用於指定輸出格式

2. 普通字元或轉義序列:原樣輸出格式字元

printf(「a=%d , b=%d\n」,a,b);

short x=65535;

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

65535

a=65;printf(「%o」,a);

a=567;printf(「%u」,a);

char a=65;printf(「%c」,a);

abc」);

float a=567.789;printf(「%e」,a); float a=567.789;printf(「%f」,a); float a=567.

789;printf(「%g」,a);

101567

aabc

5.677890e+02 567.789000 567.789

%格式字元與輸出項個數應相同,按先後順序一一對應

格式字元與輸出項型別不一致,自動按指定格式輸出

0000000a

10%8.197000e+0181.9700002b 5343hi, how are you?

printf("%s","hi, how are you?"); a b

printf("%c%c%c",'a','\t','b');

左補空格;否則按實際輸出

(四捨五入)

指定實際輸出位數

輸出資料在域內左對齊(預設右對齊)

指定在有符號數的正數前顯示正號(+)

輸出數值時指定左面不使用的空位置自動填0

在八進位制和十六進製制數前顯示前導0,0x

在d,o,x,u前,指定輸出精度為long型

在e,f,g前,指定輸出精度為double型

5210 with label it's 28

981.480000 981.5

9.815e+02 9.8148e-02

(補充) 場寬m.n可以是變數scanf()中的字元寬度可以由乙個」*」號而不是整數來指定。」*」號表示這個數取自輸入列表。

例如下邊這個例子,通過輸入m,n來控制輸出值的顯示精度:#include

main()

2.71828182845904523536// 自然對數的底數e

1.44269504088896340736// log

2e0.434294481903251827651// lg e

0.693147180559945309417// ln 2

2.30258509299404568402// ln 10

3.14159265358979323846// π

1.57079632679489661923// π/2

0.785398163397448309116// π/4

0.318309886183790671538// 1/π

0.636619772367581343076// 2/π#define m_1_sqrtpi 0.564189583547756286948// 1/√π#define m_2_sqrtpi 1.

12837916709551257390// 2/√π

1.41421356237309504880// √2

0.707106781186547524401 // √2 /2

#include "c:\tc200\include\math.h"

使程式可在vc++執行*/

= %f\n",pow(m_e,m_pi));

= %f\n",pow(m_pi,m_e));

static char c=「hello,world!」; printf(「%10.2f,%-10.

1f\n」,f,f); printf(「%10.5s,%-10.3s\n」,c,c);

00001234

0000123.46

000+1234

000+123.56

printf(「%o,%#o,%x,%#x\n」,a,a,a,a);

0100 00000000000000

printf(「%f,%8f,%8.1f,%.2f,%.2e\n」,f,f,f,f,f);

123.5,123.46,1.23e+02 printf(「%s\n%15s\n%10.5s\n%2.5s\n%.2s\n」,a,a,a,a,a);

輸出:x=printf("%d\n",123);

123x=4_實踐中,可以用來檢驗輸出結果。

格式控制串」,位址表)功能:按指定格式從鍵盤讀入資料,存入位址表指定的儲存單元中,並按回車鍵結束

返值:正常,返回輸入資料個數

位址表:變數的位址,常用取位址運算子&

scanf(「%x」,&a);

輸入:11

則a=17

常用的輸入函式用法

以int x; 為例

printf("x=");

scanf("%d",&x);

乙個scanf()中只輸入乙個變數;

乙個scanf()應當與乙個printf()成對出現,其中的printf()為提示語句prompt statement;

sccanf()中不要出現轉義字元(例如\n)。

值的判斷來確定使用者輸入的合法性

輸入123時

輸出x=123 y=1

輸入a時

輸出x=-858993460 y=0

能用於d,o,x前,指定輸入為short型整數

用於d,o,x前,指定輸入為long型整數

用於e,f前,指定輸入為double型實數

指定輸入資料寬度,遇空格或不可轉換字元則結束抑制符,指定輸入項讀入後不賦給變數

scanf(「%3c%2c」,&c1,&c2); scanf(「%3d%*4d%f」,&k,&f);

12345678765.43

f%2d」,&a,&b);

其它字元做分隔符:格式串中兩個格式符間字元scanf(「%d:%d:

%d」,&h,&m,&s);m, 45 s scanf(「%d,%d」,&a,&b)scanf(「a=%d,b=%d,c=%d」,&a,&b,&c);a=12,b=24,c=36

scanf(「%d%o%x」,&a,&b,&c);printf(「a=%d,b=%d,c=%d\n」,a,b,c);123a=123,b=83,c=291

scanf(「%c%c%c」,&c1,&c2,&c3);c3⑵輸入資料時,遇以下情況認為該資料結束:、或回車scanf(「%d%c%f」,&a,&b,&c);.26 b, 123 c :

printf(「x=%d,ch=%d\n」,x,ch);換行符lf)printf(「x=%d,ch=%d\n」,x,ch);換行符lf)來「吃掉」用函式fflush(stdin)清除全部剩餘內容char ch;scanf(「%d」,&x);scanf(「%c」,&ch);scanf(「%*c%c」,&ch);

功能:從鍵盤無回顯讀入一字元(不需要回車確認)功能:從鍵盤讀入一字元(需要回車確認)

執行結果:

enter a character:a

a--->hex41

引數: c為字元常量、變數或表示式

功能:把字元c輸出到顯示器上

返值:正常,為顯示的**值;出錯,為eof(-1)

putchar(c); putchar('\n'); putchar(a);執行結果:a

bz 除了putchar(),putch()也實現把字元輸出到顯示器上。

z 根據tc 的解釋,putchar()是輸出到

stdout(標準輸出裝置),而putch()是輸出到screen 。

z 在一般應用中,這兩者沒有區別。

注:anci 規定:

使用getchar()和putchar()須編譯預處理#include

warning c4013: 'getch'undefined; assuming extern returning int

警告資訊的解決

z新增conio.h標頭檔案:

#include

z conio是console input/output(控制台輸入輸出)的簡寫,其中定義了通過控制台進行資料輸入和資料輸出的函式,主要是一些使用者通過按鍵盤產生的對應操作,比如getch()、putch()函式等等。

編譯預處理命令

變數定義

輸入資料

輸出資料printf("a=%7.2f, b=%7.2f, c=%7.2f, s=%7.2f\n",a,b,c,s);

輸入:a輸出:a,65

a,97

提示:a= _

輸入:1

提示:b= _

輸入:3

提示:c= _

輸入:2

輸出:x1=-1.00

x2=-2.00 printf("\n\nx1=%5.2f\nx2=%5.2f\n",x1,x2);

執行下面的程式,分析輸出結果。″,i,i,i);

\n(2)i=|%+8d|%2d|%-8d|%08d|″,i,i,i,i);}i=45,45,17104941i=| +45|45|45 |00000045|變成了***呢?,重新執行:65491,17170387

i=| -45|-45|-45 |-0000045|

65491和***呢?

\n(1)k=%d, %u, %ld″,k,k,k);

\n(2)k=|%+10u|%-10o|%10x|″,k,k,k);

k=-15536, 50000,171154896

k=| +50000|141520c350|

變成了-15536 呢?

\n(1)x=%f, %e, %g″,x,x,x);

\n(2)x=|%12e|%12.2e|%.1e|″,x,x,x);

1) x=0.000001, 6.72000e-07, 6.72e-07

(2) x=| 6.72000e-07| 6.7e-07|7e-07|

格式顯示太小的數不合適。

printf("\nm=%d, x=%f",m,x); }

m=10, x=20.000000或者輸入10 20↙↙↙後程式就結束了。顯示m=10, x= 0.000000為什麼??

程式會怎麼顯示?

,&m,&x);

\nm=%d, x=%f」,m,x); }

345.7↙

輸出結果是什麼?分析原因

m=1, x=345.000000↙m=234, x=567.000000

\n(1)ch1=%c, %d ″,ch,ch);

,m,m);

ch1=e, 69

m=65,a

對於字元型變數應當用%c 格式顯示,碼值;反之亦然。,然後重新執行。ch1=e, 69

m=180,┤

常見程式設計錯誤

z語法錯誤(syntax error)

由於乙個語法錯會導致許多錯誤資訊,所以出錯處往往在編譯器所指出錯行之前。

z執行時錯誤(runtime error)

程式執行過程中試圖執行非法操作

z邏輯錯誤(logic error)

由不正確演算法導致的錯誤。

z未檢測到的錯誤(unchecked error)

導致不正確結果的程式執行錯。

以下分別舉例說明:

demo.c(3) : error c2146:

syntax error : missing ';' before identifier 'printf'demo.c(3) :

warning c4013: 'printf' undefined; assuming extern returning int demo.c(3) :

error c2001: newline in constant demo.c(3) :

error c2065: 'd' : undeclared identifier demo.

c(3) : error c2296: '%' :

illegal, left operand has type 'char [11]'demo.c(3) : error c2143:

syntax error : missing ')' before 'string'demo.c(4) :

warning c4013: 'scanf' undefined; assuming extern returning int demo.c(8) :

warning c4013: 'getch' undefined; assuming extern returning int printf("x=);scanf("%d",&x);printf("y=");scanf("%d",&y);printf("x=%d",x););scanf("%d",&x);printf("y=");scanf("%d",&y);printf("x=%d",x);

printf("x=");scanf("%d",&x); printf("y=");scanf("%d",&y);

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

printf("x=");scanf("%d",&x); printf("y=");scanf("%d",&y);

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

printf("x=");scanf("%d",x); printf("y=");scanf("%d",&y);

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

第三章順序結構程式設計

一 選擇題 1.c語言中呼叫printf進行輸出時需要注意,在格式控制串中,格式說明與輸出項的個數必須相同。如果格式說明的個數小於輸出項的個數,多餘的輸出項將如果格式說明的個數多於輸出項的個數,則對於多餘的格式將輸出不定值 或0 0級 a 不予輸出 b 輸出空格 c 照樣輸出 d 輸出不定值或0 2...

第三章順序結構程式設計

例 有程式如下 var a,b integer c real d 0.100 begin a 100 b a 以上是相同資料型別進行賦值 d 100 b d c b 以上是相容資料型別進行賦值 d b a c 以上兩個賦值語句都出現溢位,編譯時出錯 end.3.2 讀語句 讀語句 read語句 和賦...

第三章順序結構

一 c語句概述 1 c程式的結構 2 c語句的型別 1 控制語句 用於控制程式的流程,以實現程式的各種結構方式,可分成以下三類 1 條件判斷語句 if else語句 switch語句 2 迴圈執行語句 do while語句 while語句 for語句 3 轉向語句 break語句 goto語句 co...