亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C語言:黑客學員必修課(二)

2019-11-17 05:39:09
字體:
來源:轉載
供稿:網友

  算術表達式

  是由算術運算符和括號連接起來的式子, 以下是算術表達式的例子:

  a+b  (a*2)/c (x+r)*8-(a+b)/7  ++i sin(x)+sin(y)  (++i)-(j++)+(k--)   

  賦值運算符和賦值表達式

  簡單賦值運算符和表達式,簡單賦值運算符記為“=”。由“= ”連接的式子稱為賦值表達式。其一般形式為: 變量=表達式 例如:

  x=a+b

  w=sin(a)+sin(b)

  y=i+++--j 賦值表達式的功能是計算表達式的值再賦予左邊的變量。賦值運算符具有右結合性。因此

  a=b=c=5

  可理解為

  a=(b=(c=5))

  在其它高級語言中,賦值構成了一個語句,稱為賦值語句。 而在C中,把“=”定義為運算符,從而組成賦值表達式。 凡是表達式可以出現的地方均可出現賦值表達式。例如,式子x=(a=5)+(b=8)是合法的。它的意義是把5賦予a,8賦予b,再把a,b相加,和賦予x ,故x應等于13。

  在C語言中也可以組成賦值語句,按照C語言規定, 任何表達式在其未尾加上分號就構成為語句。因此如x=8;a=b=c=5;都是賦值語句,在前面各例中我們已大量使用過了。

  假如賦值運算符兩邊的數據類型不相同, 系統將自動進行類型轉換,即把賦值號右邊的類型換成左邊的類型。具體規定如下:

  1.實型賦予整型,舍去小數部分。前面的例2.9已經說明了這種情況。

  2.整型賦予實型,數值不變,但將以浮點形式存放, 即增加小數部分(小數部分的值為0)。

  3.字符型賦予整型,由于字符型為一個字節, 而整型為二個字節,故將字符的ASCII碼值放到整型量的低八位中,高八位為0。

  4.整型賦予字符型,只把低八位賦予字符量。

  void main(){

  int a,b=322;

  float x,y=8.88;

  char c1='k',c2;

  a=y;

  x=b;

  a=c1;

  c2=b;

  
  }

  int a,b=322;

  float x,y=8.88;

  char c1='k',c2;

  printf("%d,%f,%d,%c",a=y,x=b,a=c1,c2=b);

  本例表明了上述賦值運算中類型轉換的規則。a為整型,賦予實型量y值888后只取整數8。x為實型,賦予整型量b值322, 后增加了小數部分。字符型量c1賦予a變為整型,整型量b賦予c2 后取其低八位成為字符型(b的低八位為01000010,即十進制66,按ASCII碼對應于字符B)。  

  復合賦值符及表達式

  在賦值符“=”之前加上其它二目運算符可構成復合賦值符。如

  +=,-=,*=,/=,%=,<<=,>>=,&=,^=, =。 構成復合賦值表達式的一般形式為: 變量 雙目運算符=表達式 它等效于 變量=變量 運算符 表達式 例如: a+=5 等價于a=a+5  x*=y+7 等價于x=x*(y+7)  r%=p 等價于r=r%p

  復合賦值符這種寫法,對初學者可能不習慣, 但十分有利于編譯處理,能提高編譯效率并產生質量較高的目標代碼。

  逗號運算符

 ?。谜Z言中逗號“,”也是一種運算符,稱為逗號運算符。 其功能是把兩個表達式連接起來組成一個表達式, 稱為逗號表達式。

  其一般形式為: 表達式1,表達式2 其求值過程是分別求兩個表達式的值,并以表達式2的值作為整個逗號表達式的值。

  void main(){

  int a=2,b=4,c=6,x,y;

  y=(x=a+b),(b+c);

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

  }

  a<--2,b<--4,c<--6,x<--0,y<--0

  x<--a+b,y<---b+c
  本例中,y等于整個逗號表達式的值,也就是表達式2的值,x是第一個表達式的值。對于逗號表達式還要說明兩點:

  1.逗號表達式一般形式中的表達式1和表達式2 也可以又是逗號表達式。例如: 表達式1,(表達式2,表達式3) 形成了嵌套情形。因此可以把逗號表達式擴展為以下形式: 表達式1,表達式2,…表達式n 整個逗號表達式的值等于表達式n的值。

  2.程序中使用逗號表達式,通常是要分別求逗號表達式內各表達式的值,并不一定要求整個逗號表達式的值。

  3.并不是在所有出現逗號的地方都組成逗號表達式,如在變量說明中,函數參數表中逗號只是用作各變量之間的間隔符。

  [Practice] //arithmeticint a,b,c;

  float d;

  a=11;

  b=235;

  c=a+b-a*b;

  d=(float)c/(float)a;

  a=c/a;'Vtable

  a,2,0

  b,2,0

  c,2,0

  d,4,0.0

  of Vtable

  'Vupdate

  1,0;2,0;3,0


  4,0.0

  1,11

  2,235

  3,-2339

  4,-212.636368

  1,-212

  of Vupdate

  of Practice

  [Practice] //1int a,b,c1,c2;

  a=25;

  b=3243;

  c1=b/a;

  c2=b%a;'Vtable

  a,2,0

  b,2,0

  c1,2,0

  c2,2,0

  of Vtable

  'Vupdate

  1,0;2,0;3,0;4,0

  1,25

  2,3243

  3,129

  4,18

  of Vupdate

  of Practice

  [Practice] //1int a,b,c;

  a=25;

  b=40;

  c=a+b,c+35;'Vtable

  a,2,0

  b,2,0

  c,2,0

  of Vtable

  'Vupdate

  1,0;2,0;3,0

  1,25

  2,40

  3,65

  of Vupdate

  of Practice
  小結   

  1.C的數據類型

  基本類型,構造類型,指針類型,空類型

  2.基本類型的分類及特點

  類型說明符      字節       數值范圍

  字符型char        1        C字符集

  基本整型int       2        -32768~32767

  短整型short int     2         -32768~32767

  長整型 long int     4      -214783648~214783647

  無符號型 unsigned    2        0~65535

  無符號長整型 unsigned long 4      0~4294967295

  單精度實型 float    4       3/4E-38~3/4E+38

  雙精度實型 double   8       1/7E-308~1/7E+308

  3.常量后綴

  L或l 長整型

  U或u 無符號數

  F或f 浮點數

  4.常量類型

  整數,長整數,無符號數,浮點數,字符,字符串,符號常數,轉義字符。

  5.數據類型轉換

  ·自動轉換

  在不同類型數據的混合運算中,由系統自動實現轉換, 由少字節類型向多字節類型轉換。 不同類型的量相互賦值時也由系統自動進行轉換,把賦值號右邊的類型轉換為左邊的類型。

  ·強制轉換

  由強制轉換運算符完成轉換。

  6.運算符優先級和結合性

  一般而言,單目運算符優先級較高,賦值運算符優先級低。 算術運算符優先級較高,關系和邏輯運算符優先級較低。 多數運算符具有左結合性,單目運算符、三目運算符、 賦值

  7.表達式

  表達式是由運算符連接常量、變量、函數所組成的式子。 每個表達式都有一個值和類型。 表達式求值按運算符的優先級和結合性所規定的順序進行。
  本小節介紹的是向標準輸出設備顯示器輸出數據的語句。在C語言中,所有的數據輸入/輸出都是由庫函數完成的。 因此都是函數語句。本小節先介紹printf函數和putchar函數。printf函數printf函數稱為格式輸出函數,其要害字最末一個字母f即為“格式”(format)之意。其功能是按用戶指定的格式, 把指定的數據顯示到顯示器屏幕上。在前面的例題中我們已多次使用過這個函數?!?br />
  一、printf函數調用的一般形式   

  printf函數是一個標準庫函數,它的函數原型在頭文件“stdio.h”中。但作為一個特例,不要求在使用 printf 函數之前必須包含stdio.h文件。printf函數調用的一般形式為: printf(“格式控制字符串”,輸出表列)其中格式控制字符串用于指定輸出格式。 格式控制串可由格式字符串和非格式字符串兩種組成。格式字符串是以%開頭的字符串,在%后面跟有各種格式字符,以說明輸出數據的類型、形式、長度、小數位數等。如“%d”表示按十進制整型輸出,“%ld”表示按十進制長整型輸出,“%c”表示按字符型輸出等。后面將專門給予討論。   

  非格式字符串在輸出時原樣照印,在顯示中起提示作用。 輸出表列中給出了各個輸出項, 要求格式字符串和各輸出項在數量和類型上應該一一對應。

  void main()
  {
  int a=88,b=89;
  printf("%d %d/n",a,b);

  printf("%d,%d/n",a,b);
  printf("%c,%c/n",a,b);
  printf("a=%d,b=%d",a,b);
  }
  a<--8,b<--89
  printf("%d %d/n",a,b);
  printf("%d,%d/n",a,b);
  printf("%c,%c/n",a,b);
  printf("a=%d,b=%d",a,b);

  本例中四次輸出了a,b的值,但由于格式控制串不同,輸出的結果也不相同。第四行的輸出語句格式控制串中,兩格式串%d 之間加了一個空格(非格式字符),所以輸出的a,b值之間有一個空格。第五行的printf語句格式控制串中加入的是非格式字符逗號, 因此輸出的a,b值之間加了一個逗號。第六行的格式串要求按字符型輸出 a,b值。第七行中為了提示輸出結果又增加了非格式字符串。

  二、格式字符串   

  在Turbo C中格式字符串的一般形式為: [標志][輸出最小寬度][.精度][長度]類型 其中方括號[]中的項為可選項。各項的意義介紹如下:

  1.類型類型字符用以表示輸出數據的類型,其格式符和意義下表所示:

  表示輸出類型的格式字符       格式字符意義

  d                 以十進制形式輸出帶符號整數(正數不輸出符號)
  o                 以八進制形式輸出無符號整數(不輸出前綴O)
  x                 以十六進制形式輸出無符號整數(不輸出前綴OX)
  u                 以十進制形式輸出無符號整數
  f                 以小數形式輸出單、雙精度實數
  e                 以指數形式輸出單、雙精度實數
  g                 以%f%e中較短的輸出寬度輸出單、雙精度實數
  c                 輸出單個字符
  s                 輸出字符串

  2.標志

  標志字符為-、+、#、空格四種,其意義下表所示:

  標志格式字符      標 志 意 義

  -          結果左對齊,右邊填空格
  +          輸出符號(正號或負號)空格輸出值為正時冠以空格,為負時冠以負號
  #          對c,s,d,u類無影響;對o類, 在輸出時加前
  綴o         對x類,在輸出時加前綴0x;對e,g,f 類當結果有小數時才給出小數點

  3.輸出最小寬度

  用十進制整數來表示輸出的最少位數。 若實際位數多于定義的寬度,則按實際位數輸出, 若實際位數少于定義的寬度則補以空格或0。

  4.精度

  精度格式符以“.”開頭,后跟十進制整數。本項的意義是:假如輸出數字,則表示小數的位數;假如輸出的是字符, 則表示輸出字符的個數;若實際位數大于所定義的精度數,則截去超過的部分。

  5.長度

  長度格式符為h,l兩種,h表示按短整型量輸出,l表示按長整型量輸出。

  void main(){
  int a=15;
  float b=138.3576278;
  double c=35648256.3645687;
  char d='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);
  } a<--15
  b<--138.3576278
  c<--35648256.3645687
  d<--'p' main()
  {
  int a=29;
  float b=1243.2341;
  double c=24212345.24232;
  char c='h'
  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);
  }

  本例第七行中以四種格式輸出整型變量a的值,其中“%5d ”要求輸出寬度為5,而a值為15只有兩位故補三個空格。 第八行中以四種格式輸出實型量b的值。其中“%f”和“%lf ”格式的輸出相同,說明“l”符對“f”類型無影響?!?5.4lf”指定輸出寬度為5,精度為4,由于實際長度超過5故應該按實際位數輸出,小數位數超過4位部分被截去。第九行輸出雙精度實數,“%8.4lf ”由于指定精度為4位故截去了超過4位的部分。第十行輸出字符量d,其中“%bc ”指定輸出寬度為8故在輸出字符p之前補加7個空格。   

  使用printf函數時還要注重一個問題, 那就是輸出表列中的求值順序。不同的編譯系統不一定相同,可以從左到右, 也可從右到左。Turbo C是按從右到左進行的。如把例2.13改寫如下述形式:

  void main(){
  int i=8;
  printf("%d/n%d/n%d/n%d/n%d/n%d/n",++i,--i,i--,i++,-i--);
  } i<--8   

  這個程序與例2.13相比只是把多個printf語句改一個printf 語句輸出。但從結果可以看出是不同的。為什么結果會不同呢?就是因為printf函數對輸出表中各量求值的順序是自右至左進行 的。在式中,先對最后一項“-i--”求值,結果為-8,然后i自減1后為7。 再對“-i++”項求值得-7,然后i自增1后為8。再對“i--”項求值得8,然后i再自減1后為7。再求“i++”項得7,然后I再自增1后為8。 再求“--i”項,i先自減1后輸出,輸出值為7。 最后才求輸出表列中的第一項“++i”,此時i自增1后輸出8。但是必須注重, 求值順序雖是自右至左,但是輸出順序還是從左至右, 因此得到的結果是上述輸出結果。   


  字符輸出函數  

  putchar 函數  

  putchar 函數是字符輸出函數, 其功能是在顯示器上輸出單個字符。其一般形式為: putchar(字符變量) 例如:

  putchar('A'); 輸出大寫字母A
  putchar(x); 輸出字符變量x的值
  putchar('/n'); 換行 對控制字符則執行控制功能,不在屏幕上顯示。 使用本函數前必須要用文件包含命令:
  #include
  #include
  void main(){
  char a='B',b='o',c='k';
  putchar(a);putchar(b);putchar(b);putchar(c);putchar('/t');
  putchar(a);putchar(b);
  putchar('/n');
  putchar(b);putchar(c);
  }
 ?。椋嬲Z句   

  用if語句可以構成分支結構。它根據給定的條件進行判定, 以決定執行某個分支程序段。C語言的if語句有三種基本形式。  

  1.第一種形式為基本形式 if(表達式) 語句; 其語義是:假如表達式的值為真,則執行其后的語句, 否則不執行該語句。其過程可表示為下圖

  void main(){
  int a,b,max;
  printf("/n input two numbers: ");
  scanf("%d%d",&a,&b);
  max=a;
  if (max  printf("max=%d",max);
  }

  輸入兩個整數,輸出其中的大數。

  scanf("%d%d",&a,&b);
  max=a;
  if (max  printf("max=%d",max);  

  本例程序中,輸入兩個數a,b。把a先賦予變量max,再用if語句判別max和b的大小,如max小于b,則把b賦予max。因此max中總是大數,最后輸出max的值。

  2.第二種形式為if-else形式

  if(表達式)
  語句1;
  else

  語句2;

  其語義是:假如表達式的值為真,則執行語句1,否則執行語句2 。

  void main(){
  int a, b;
  printf("input two numbers: ");
  scanf("%d%d",&a,&b);
  if(a>b)
  printf("max=%d/n",a);
  else
  printf("max=%d/n",b);
  }

  輸入兩個整數,輸出其中的大數。改用if-else語句判別a,b的大小,若a大,則輸出a,否則輸出b。

  3.第三種形式為if-else-if形式

  前二種形式的if語句一般都用于兩個分支的情況。 當有多個分支選擇時,可采用if-else-if語句,其一般形式為:

  if(表達式1)
  語句1;
  else if(表達式2)
  語句2;
  else if(表達式3)
  語句3;
  …
  else if(表達式m)
  語句m;
  else
  語句n;

  其語義是:依次判定表達式的值,當出現某個值為真時, 則執行其對應的語句。然后跳到整個if語句之外繼續執行程序。 假如所有的表達式均為假,則執行語句n 。 然后繼續執行后續程序。 if-else-if語句的執行過程如圖3—3所示。

  #include"stdio.h"
  void main(){
  char c;
  printf("input a character: ");
  c=getchar();
  if(c<32)
  printf("This is a control character/n");
  else if(c>='0'&&c<='9')
  printf("This is a digit/n");
  else if(c>='A'&&c<='Z')
  printf("This is a capital letter/n");
  else if(c>='a'&&c<='z')
  printf("This is a small letter/n");
  else
  printf("This is an other character/n");
  }
  if(c<32)
  printf("This is a control character/n");
  else if(c>='0'&&c<='9')
  printf("This is a digit/n");
  else if(c>='A'&&c<='Z')
  printf("This is a capital letter/n");
  else if(c>='a'&&c<='z')
  printf("This is a small letter/n");
  else
  printf("This is an other character/n");

  本例要求判別鍵盤輸入字符的類別??梢愿鶕斎胱址腁SCII碼來判別類型。由ASCII碼表可知ASCII值小于32的為控制字符。 在“0”和“9”之間的為數字,在“A”和“Z”之間為大寫字母, 在“a”和“z”之間為小寫字母,其余則為其它字符。 這是一個多分支選擇的問題,用if-else-if語句編程,判定輸入字符ASCII碼所在的范圍,分別給出不同的輸出。例如輸入為“g”,輸出顯示它為小寫字符。


  4.在使用if語句中還應注重以下問題   

  (1) 在三種形式的if語句中,在if要害字之后均為表達式。 該表達式通常是邏輯表達式或關系表達式, 但也可以是其它表達式,如賦值表達式等,甚至也可以是一個變量。例如: if(a=5) 語句;if(b) 語句; 都是答應的。只要表達式的值為非0,即為“真”。如在if(a=5)…;中表達式的值永遠為非0,所以其后的語句總是要執行的,當然這種情況在程序中不一定會出現,但在語法上是合法的。

  又如,有程序段: if(a=b)
  printf("%d",a);
  else

  printf("a=0"); 本語句的語義是,把b值賦予a,如為非0則輸出該值,否則輸出“a=0”字符串。這種用法在程序中是經常出現的。  

  (2) 在if語句中,條件判定表達式必須用括號括起來, 在語句之后必須加分號。   

  (3) 在if語句的三種形式中,所有的語句應為單個語句,假如要想在滿足條件時執行一組(多個)語句,則必須把這一組語句用{} 括起來組成一個復合語句。但要注重的是在}之后不能再加分號。

  例如:

  if(a>b){
  a++;
  b++;
  }
  else{ a=0;
  b=10;
  }
 ?。谜Z言程序設計   

  本課介紹C語言程序設計的基本方法和基本的程序語句。

  從程序流程的角度來看,程序可以分為三種基本結構, 即順序結構、分支結構、循環結構。 這三種基本結構可以組成所有的各種復雜程序。C語言提供了多種語句來實現這些程序結構。 本章介紹這些基本語句及其應用,使讀者對C程序有一個初步的熟悉, 為后面各章的學習打下基礎。   

 ?。贸绦虻恼Z句   

  C程序的執行部分是由語句組成的。 程序的功能也是由執行語句實現的。

  C語句可分為以下五類:

  1.表達式語句

  2.函數調用語句

  3.控制語句

  4.復合語句

  5.空語句   

  1.表達式語句   

  表達式語句由表達式加上分號“;”組成。其一般形式為: 表達式; 執行表達式語句就是計算表達式的值。例如: x=y+z; 賦值語句y+z; 加法運算語句,但計算結果不能保留,無實際意義i++; 自增1語句,i值增1   

  2.函數調用語句   

  由函數名、實際參數加上分號“;”組成。其一般形式為: 函數名(實際參數表); 執行函數語句就是調用函數體并把實際參數賦予函數定義中的形式參數,然后執行被調函數體中的語句,求取函數值。(在第五章函數中再具體介紹)例如printf("C Program");調用庫函數,輸出字符串。
  3.控制語句   

  控制語句用于控制程序的流程, 以實現程序的各種結構方式。

  它們由特定的語句定義符組成。C語言有九種控制語句。 可分成以下三類:

  (1) 條件判定語句

    if語句,switch語句

  (2) 循環執行語句

    do while語句,while語句,for語句

  (3) 轉向語句

    break語句,goto語句,continue語句,return語句   

  4.復合語句   

  把多個語句用括號{}括起來組成的一個語句稱復合語句。 在程序中應把復合語句看成是單條語句,而不是多條語句,例如

  {

  x=y+z;

  a=b+c;

  printf(“%d%d”,x,a);

  }

  是一條復合語句。復合語句內的各條語句都必須以分號“;”結尾,在括號“}”外不能加分號?!?br />
  5.空語句   

  只有分號“;”組成的語句稱為空語句。 空語句是什么也不執行的語句。在程序中空語句可用來作空循環體。例如 while(getchar()!='/n'); 本語句的功能是,只要從鍵盤輸入的字符不是回車則重新輸入。這里的循環體為空語句。   

  賦值語句   

  賦值語句是由賦值表達式再加上分號構成的表達式語句。 其一般形式為: 變量=表達式; 賦值語句的功能和特點都與賦值表達式相同。 它是程序中使用最多的語句之一。 在賦值語句的使用中需要注重以下幾點:   

  1.由于在賦值符“=”右邊的表達式也可以又是一個賦值表達式,因此,下述形式 變量=(變量=表達式); 是成立的,從而形成嵌套的情形。其展開之后的一般形式為: 變量=變量=…=表達式;

  例如:

  a=b=c=d=e=5;按照賦值運算符的右接合性,因此實際上等效于:

  e=5;

  d=e;

  c=d;

  b=c;

  a=b;

  2.注重在變量說明中給變量賦初值和賦值語句的區別。給變量賦初值是變量說明的一部分,賦初值后的變量與其后的其它同類變量之間仍必須用逗號間隔,而賦值語句則必須用分號結尾。

  3.在變量說明中,不答應連續給多個變量賦初值。 如下述說明是錯誤的: int a=b=c=5 必須寫為 int a=5,b=5,c=5; 而賦值語句答應連續賦值

  4.注重賦值表達式和賦值語句的區別。賦值表達式是一種表達式,它可以出現在任何答應表達式出現的地方,而賦值語句則不能。

  下述語句是合法的: if((x=y+5)>0) z=x; 語句的功能是,若表達式x=y+5大于0則z=x。下述語句是非法的: if((x=y+5;)>0) z=x; 因為=y+5;是語句,不能出現在表達式中。

  if語句的嵌套   

  當if語句中的執行語句又是if語句時,則構成了if 語句嵌套的情形。其一般形式可表示如下:

  if(表達式)

  if語句;

  或者為

  if(表達式)

  if語句;

  else

  if語句;

  在嵌套內的if語句可能又是if-else型的,這將會出現多個if和多個else重疊的情況,這時要非凡注重if和else的配對問題。例如:

  if(表達式1)

  if(表達式2)

  語句1;

  else

  語句2;

  其中的else究竟是與哪一個if配對呢?

  應該理解為:   還是應理解為:

  if(表達式1)    if(表達式1)

   if(表達式2)     if(表達式2)

    語句1;       語句1;

  else         else

    語句2;       語句2;

  為了避免這種二義性,C語言規定,else 總是與它前面最近的if配對,因此對上述例子應按前一種情況理解。

  void main(){

  int a,b;

  printf("please input A,B: ");

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

  if(a!=b)

  if(a>b) printf("A>B/n");

  else printf("A
  else printf("A=B/n");

  }

  比較兩個數的大小關系。

  printf("please input A,B: ");

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

  if(a!=b)

  if(a>b) printf("A>B/n");

  else printf("A
  else printf("A=B/n");

  本例中用了if語句的嵌套結構。 采用嵌套結構實質上是為了進行多分支選擇,例3.16實際上有三種選擇即A>B、A
  void main(){

  int a,b;

  printf("please input A,B: ");

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

  if(a==b) printf("A=B/n");

  else if(a>b) printf("A>B/n");

  else printf("A
  }   

  條件運算符和條件表達式   

  假如在條件語句中,只執行單個的賦值語句時, ??墒褂脳l件表達式來實現。不但使程序簡潔,也提高了運行效率。

  條件運算符為?和:,它是一個三目運算符,即有三個參與運算的量。由條件運算符組成條件表達式的一般形式為:

  表達式1? 表達式2: 表達式3

  其求值規則為:假如表達式1的值為真,則以表達式2 的值作為條件表達式的值,否則以表達式2的值作為整個條件表達式的值。 條件表達式通常用于賦值語句之中。

  例如條件語句:

  if(a>b) max=a;

  else max=b;

  可用條件表達式寫為 max=(a>b)?a:b; 執行該語句的語義是:如a>b為真,則把a賦予max,否則把b 賦予max。

  使用條件表達式時,還應注重以下幾點:

  1. 條件運算符的運算優先級低于關系運算符和算術運算符,但高于賦值符。因此 max=(a>b)?a:b可以去掉括號而寫為 max=a>b?a:b

  2. 條件運算符?和:是一對運算符,不能分開單獨使用。

  3. 條件運算符的結合方向是自右至左。

  例如:

  a>b?a:c>d?c:d應理解為

  a>b?a:(c>d?c:d) 這也就是條件表達式嵌套的情形,即其中的表達式3又是一個條

  件表達式。

  void main(){

  int a,b,max;

  printf("/n input two numbers: ");

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

  printf("max=%d",a>b?a:b);

  }

  用條件表達式對上例重新編程,輸出兩個數中的大數。
 ?。螅鳎椋簦悖枵Z句   

  C語言還提供了另一種用于多分支選擇的switch語句, 其一般形式為:

  switch(表達式){

  case常量表達式1: 語句1;

  case常量表達式2: 語句2;

  …


  case常量表達式n: 語句n;

  default : 語句n+1;

  }

  其語義是:計算表達式的值。 并逐個與其后的常量表達式值相比較,當表達式的值與某個常量表達式的值相等時, 即執行其后的語句,然后不再進行判定,繼續執行后面所有case后的語句。 如表達式的值與所有case后的常量表達式均不相同時,則執行default后的語句。

  void main(){

  int a;

  printf("input integer number: ");

  scanf("%d",&a);

  switch (a){

  case 1:printf("Monday/n");

  case 2:printf("Tuesday/n");

  case 3:printf("Wednesday/n");

  case 4:printf("Thursday/n");

  case 5:printf("Friday/n");

  case 6:printf("Saturday/n");

  case 7:printf("Sunday/n");

  default:printf("error/n");

  }

  }   

  本程序是要求輸入一個數字,輸出一個英文單詞。但是當輸入3之后,卻執行了case3以及以后的所有語句,輸出了Wednesday 及以后的所有單詞。這當然是不希望的。為什么會出現這種情況呢?這恰恰反應了switch語句的一個特點。在switch語句中,“case 常量表達式”只相當于一個語句標號, 表達式的值和某標號相等則轉向該標號執行,但不能在執行完該標號的語句后自動跳出整個switch 語句,所以出現了繼續執行所有后面case語句的情況。 這是與前面介紹的if語句完全不同的,應非凡注重。為了避免上述情況, C語言還提供了一種break語句,專用于跳出switch語句,break 語句只有要害字break,沒有參數。在后面還將具體介紹。修改例題的程序,在每一case語句之后增加break 語句, 使每一次執行之后均可跳出switch語句,從而避免輸出不應有的結果。

  void main(){

  int a;

  printf("input integer number: ");

  scanf("%d",&a);

  switch (a){

  case 1:printf("Monday/n");break;

  case 2:printf("Tuesday/n"); break;

  case 3:printf("Wednesday/n");break;

  case 4:printf("Thursday/n");break;

  case 5:printf("Friday/n");break;

  case 6:printf("Saturday/n");break;

  case 7:printf("Sunday/n");break;

  default:printf("error/n");

  }

  }

  在使用switch語句時還應注重以下幾點:

  1.在case后的各常量表達式的值不能相同,否則會出現錯誤。

  2.在case后,答應有多個語句,可以不用{}括起來。

  3.各case和default子句的先后順序可以變動,而不會影響程序執行結果。

  4.default子句可以省略不用。程序舉例

  輸入三個整數,輸出最大數和最小數。

  void main(){

  int a,b,c,max,min;

  printf("input three numbers: ");

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

  if(a>b)

  {max=a;min=b;}

  else

  {max=b;min=a;}

  if(max
  max=c;

  else

  if(min>c)

  min=c;

  printf("max=%d/nmin=%d",max,min);

  }   

  本程序中,首先比較輸入的a,b的大小,并把大數裝入max, 小數裝入min中,然后再與c比較,若max小于c,則把c賦予max;假如c小于min,則把c賦予min。因此max內總是最大數,而min內總是最小數。最后輸出max和min的值即可。 計算器程序。用戶輸入運算數和四則運算符, 輸出計算結果。

  void main(){

  float a,b,s;

  char c;

  printf("input eXPression: a+(-,*,/)b /n");

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

  switch(c){

  case '+': printf("%f/n",a+b);break;


  case '-': printf("%f/n",a-b);break;

  case '*': printf("%f/n",a*b);break;

  case '/': printf("%f/n",a/b);break;

  default: printf("input error/n");

  }

  }   

  float a,b,s;

  char c;

  printf("input expression: a+(-,*,/)b /n");

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

  switch(c){

  case '+': printf("%f/n",a+b);break;

  case '-': printf("%f/n",a-b);break;

  case '*': printf("%f/n",a*b);break;

  case '/': printf("%f/n",a/b);break;

  default: printf("input error/n");

  }

  本例可用于四則運算求值。switch語句用于判定運算符, 然后輸出運算值。當輸入運算符不是+,-,*,/時給出錯誤提示。

  循環結構程序   

  循環結構是程序中一種很重要的結構。其特點是, 在給定條件成立時,反復執行某程序段,直到條件不成立為止。 給定的條件稱為循環條件,反復執行的程序段稱為循環體。 C語言提供了多種循環語句,可以組成各種不同形式的循環結構。
 ?。鳎瑁椋欤逭Z句   

  while語句的一般形式為: while(表達式)語句; 其中表達式是循環條件,語句為循環體。

  while語句的語義是:計算表達式的值,當值為真(非0)時, 執行循環體語句。其執行過程可用圖3—4表示。 統計從鍵盤輸入一行字符的個數。

  #include

  void main(){

  int n=0;

  printf("input a string:/n");

  while(getchar()!='/n') n++;

  printf("%d",n);

  } int n=0;

  printf("input a string:/n");

  while(getchar()!='/n')

  n++;

  printf("%d",n);

  本例程序中的循環條件為getchar()!='/n',其意義是, 只要從鍵盤輸入的字符不是回車就繼續循環。循環體n++完成對輸入字符個數計數。從而程序實現了對輸入一行字符的字符個數計數。

  使用while語句應注重以下幾點:

  1.while語句中的表達式一般是關系表達或邏輯表達式,只要表達式的值為真(非0)即可繼續循環。

  void main(){

  int a=0,n;

  printf("/n input n: ");

  scanf("%d",&n);

  while (n--)

  printf("%d ",a++*2);

  } int a=0,n;

  printf("/n input n: ");

  scanf("%d",&n);

  while (n--)

  printf("%d ",a++*2);

  本例程序將執行n次循環,每執行一次,n值減1。循環體輸出表達式a++*2的值。該表達式等效于(a*2;a++)

  2.循環體如包括有一個以上的語句,則必須用{}括起來, 組成復合語句。

  3.應注重循環條件的選擇以避免死循環。

  void main(){

  int a,n=0;

  while(a=5)

  printf("%d ",n++);

  } int a,n=0;

  while(a=5)

  printf("%d ",n++);

  本例中while語句的循環條件為賦值表達式a=5, 因此該表達式的值永遠為真,而循環體中又沒有其它中止循環的手段, 因此該循環將無休止地進行下去,形成死循環。4.答應while語句的循環體又是while語句,從而形成雙重循環。

  do-while語句   

  do-while語句的一般形式為:

  do

  語句;

  while(表達式);

  其中語句是循環體,表達式是循環條件。

  do-while語句的語義是:

  先執行循環體語句一次, 再判別表達式的值,若為真(非0)則繼續循環,否則終止循環。

  do-while語句和while語句的區別在于do-while是先執行后判定,因此do-while至少要執行一次循環體。而while是先判定后執行,假如條件不滿足,則一次循環體語句也不執行。

  while語句和do-while語句一般都可以相互改寫。

  void main(){


  int a=0,n;

  printf("/n input n: ");

  scanf("%d",&n);

  do printf("%d ",a++*2);

  while (--n);

  }

  int a=0,n;

  printf("/n input n: ");

  scanf("%d",&n);

  do printf("%d ",a++*2);

  while (--n);

  在本例中,循環條件改為--n,否則將多執行一次循環。這是由于先執行后判定而造成的。

  對于do-while語句還應注重以下幾點:

  1.在if語句,while語句中, 表達式后面都不能加分號, 而在 do-while語句的表達式后面則必須加分號。

  2.do-while語句也可以組成多重循環,而且也可以和while語句相互嵌套。

  3.在do和while之間的循環體由多個語句組成時,也必須用{}括起來組成一個復合語句。

  4.do-while和while語句相互替換時,要注重修改循環控制條件。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美日韩精品久久| 自拍偷拍亚洲欧美| 久久免费视频这里只有精品| 综合网日日天干夜夜久久| 亚洲欧美成人在线| 亚洲日本欧美日韩高观看| 日日狠狠久久偷偷四色综合免费| 欧美大片在线免费观看| 日韩精品在线观看一区| 欧美在线观看www| 国产精品99久久久久久久久| 岛国av在线不卡| 日韩中文字幕网址| 国外成人在线播放| 国产亚洲一级高清| 欧美激情在线播放| 中文字幕最新精品| 亚洲日韩欧美视频一区| 亚洲欧美日韩国产精品| www.99久久热国产日韩欧美.com| 亚洲第一区第二区| 国产一区香蕉久久| 青青久久av北条麻妃海外网| 欧美性理论片在线观看片免费| 国内精品美女av在线播放| 自拍偷拍亚洲欧美| 亚洲国产精品嫩草影院久久| 亚洲视频欧美视频| 97超级碰碰碰久久久| 国产69久久精品成人| 国产精品久久久久久久久免费| 亚洲韩国日本中文字幕| 91精品在线一区| 国产va免费精品高清在线观看| 这里只有精品视频在线| 色噜噜狠狠狠综合曰曰曰88av| 午夜免费在线观看精品视频| 日韩在线精品视频| 成人激情视频网| 亚洲欧洲av一区二区| 国内精品中文字幕| 国内精品中文字幕| 久久国产精品网站| 色综合天天综合网国产成人网| 国产一区视频在线| 性欧美办公室18xxxxhd| 久久久久久久久久久91| 日韩精品日韩在线观看| 55夜色66夜色国产精品视频| 亚洲国产欧美一区二区三区同亚洲| 亚洲精品自拍视频| 欧美激情一区二区三区久久久| 精品一区二区三区四区在线| 国产主播欧美精品| 国产美女精品免费电影| 国产精品一二三在线| 在线观看日韩av| 日韩精品久久久久| 九九久久久久99精品| 国产69精品久久久| 日韩中文字幕在线| 91中文在线视频| 亚洲人成在线观看| 久久深夜福利免费观看| 欧美激情中文字幕在线| 欧美电影院免费观看| 久久国产精品偷| 久久精品国产成人| 亚洲最新中文字幕| 26uuu国产精品视频| 久久天天躁夜夜躁狠狠躁2022| 久久精品国产亚洲精品2020| 亚洲午夜激情免费视频| 精品久久久久人成| 欧美中文在线字幕| 日韩a**站在线观看| 日韩美女视频免费看| 国产美女精品免费电影| 亚洲国产97在线精品一区| 国语自产精品视频在免费| 日韩中文字幕视频在线观看| 色噜噜国产精品视频一区二区| 怡红院精品视频| 亚洲网址你懂得| 亚洲免费人成在线视频观看| 日韩av综合中文字幕| 在线观看日韩欧美| 久久在线视频在线| 91精品久久久久久久久久久久久| 国产午夜精品久久久| 国产精品1区2区在线观看| 九九视频这里只有精品| 欧美激情一区二区久久久| 国产精品女主播| 正在播放亚洲1区| 国产精品视频26uuu| 国产视频综合在线| 欧美色另类天堂2015| 亚洲香蕉在线观看| 欧美日韩激情网| 亚洲欧美日韩一区在线| 成人网欧美在线视频| 亚洲成人免费网站| 日韩欧美主播在线| 久久久久久91| 一本色道久久88综合日韩精品| 欧美午夜激情小视频| 国产亚洲欧美aaaa| 日韩精品在线观看一区二区| 国产精品欧美激情在线播放| 在线看日韩欧美| 久久精品99国产精品酒店日本| 亚洲欧美一区二区三区情侣bbw| 2018日韩中文字幕| 国产精品入口日韩视频大尺度| 欧美国产日韩中文字幕在线| 成人午夜激情网| 国产欧美精品日韩| 26uuu另类亚洲欧美日本一| 在线观看国产精品91| 97欧美精品一区二区三区| 奇米影视亚洲狠狠色| 国产成人精品一区| 欧美午夜丰满在线18影院| 国产丝袜精品第一页| 久久综合电影一区| 中文字幕亚洲字幕| 成人在线播放av| 日韩视频―中文字幕| 欧美视频在线观看免费| 亚洲欧美在线看| 精品视频在线播放免| 欧美激情亚洲精品| 97涩涩爰在线观看亚洲| 国产精品中文字幕久久久| 亚洲国产精品久久久久秋霞蜜臀| 国产日韩在线一区| 成人黄色网免费| 激情久久av一区av二区av三区| 一本大道香蕉久在线播放29| 欧美日韩成人黄色| 精品无人区太爽高潮在线播放| 久久久久五月天| 欧美一级淫片丝袜脚交| 国产主播在线一区| 亚洲国产精品999| 午夜精品福利视频| 精品国产区一区二区三区在线观看| 国产精品美女在线观看| 亚洲色图日韩av| 91精品国产99久久久久久| 色悠悠久久88| 国产综合视频在线观看| 国产精品吹潮在线观看| 欧美xxxx综合视频| 欧美视频国产精品| 亚洲欧美第一页| 亚洲欧美日韩直播| 2019亚洲日韩新视频| 精品亚洲一区二区三区在线观看| 久久国产一区二区三区| 久久成人亚洲精品| 色yeye香蕉凹凸一区二区av| 精品久久久久久亚洲精品|