程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C學習筆記【程序】輸入輸出與程序設計結構之美

C學習筆記【程序】輸入輸出與程序設計結構之美

編輯:關於C語言

        C語言學習筆記

              之 輸入輸出與程序設計結構之美

   看看今天的菜是什麼:printf()與scanf();if語句開關switch 三種循環結構。看到這些東西,如果你曾經學完過C,你是不是有點懷念?如果你是初學者,你是不是感到頭疼?

你是不是感覺到它們很簡單,因為它們都是最基本的知識,但是,我說正是因為它們基礎,所以它們才博大精深,因為把他們按照自己的思路拼湊在一起會形成不同風格的程序。

即使是如此的簡單,你是不是因為pirntf(“%5d”,a);中的5而感到疑惑?會不會因為scanf(“%d”,&a)中的輸入格式無從下手? 有沒有因為swich中的break而查閱過好多資料?更不用說大家肯定都會動腦子想想循環結構的邏輯思路。

如果大家對我說的還有一定疑惑的話,那就跟著小編一起走一段路吧!

一:格式輸出printf()

1.格式:printf(格式控制,輸出列表);

    1)格式控制是用雙引號引起來的字符串,也叫:轉換控制字符串。它包括兩種信息
格式字符串:由%和格式字符組成,作用是將輸出的數據轉換為指定的格式輸出

普通字符,即需要原樣輸出的字符。

    2)輸出列表是需要輸出的一些數據,也可以是表達式

    3)printf函數的一般形式可以表示為

            Printf(參數1,參數2....參數n) 功能是將參數2~參數n按參數1給定的格式輸出

2.我們主要來看一下格式控制中的格式字符串的形式,我們已經說過,它是有%和格式字

 符組成,也就是大家常用的 “%d”等。但是這個格式字符的種類可是有好多的分類:

格式字符

作用

描述

d或i)

用來輸出十進制整數

①%d,按整型數據的實際長度輸出。

②%md,m為指定的輸出字段的寬度。如果數據的位數小於m,則左端補以空,若大於m,則按實際位數輸出。%5d。

③%ld(%mld 也可),輸出長整型數據。

o

以八進制數形式輸出整數

%o,%mo,%lo,%mlo都可

x(或X)

以十六進制數形式輸出整數

%x,%mx,%lx,%mlx都可

u

輸出unsigned型數據,即無符號數,以十進制數形式輸出

%u,%mu,%lu都可

c

輸出一個字符

%c,%mc都可

s格式

輸出一個字符串。

%s,%ms,%-ms,%m.ns,%-m.ns都可

f格式符

輸出實數包括單、雙精度),以小數形式輸出

%f,%m.nf,%-m.nf都可

注意:單精度實數的有效位數一般為7位,雙精度為16位。

注:字符l用於長整型整數,可加在格式符d、o、x、u前面;

     m代表一個正整數,表示數據最小寬度

     N代表一個正整數,表示對實數表示輸出n位小數,對字符串,表示截取的字符個數

3.疑惑

  1)如果要輸出%怎麼辦?我們知道“%+格式字符”是一種形式,但是要輸出%怎麼辦?

應該在“格式控制”字符串中用連續兩個%表示 ,比如:printf(“%f%%”,a);

  2)在格式控制 字符串內是可以包含轉義字符的,如\n換行)

二:格式輸入scanf()

1.格式:scanf(“格式控制”,地址表列);

      格式控制的作用與printf函數相同,但是不能顯示非格式字符串,

      地址表列中是各變量的地址,地址由&地址運算符)個變量名組成。&a

 2.“*”

      表示該輸入項,讀入後不賦予相應的變量,即跳過該輸入值

    比如:scanf(“%d%*d%d”,&a,&b);當輸入為123時,把1給a,2被跳過,3給b

 3.scanf)函數和printf)函數的格式控制字符基本上是一樣的,也分為%d%5d等等,但是scanf中沒有精度控制,比如scanf(“%5.2f”,&a)是錯誤的。

 4. 格式控制字符串與輸入格式,兩者格式是一樣的。

    比如:scanf(“%d,%d %d%d”,&a,&b,&c,&e);//3個%d之間一個逗號,一個空格,一個什麼都沒有。則輸入的時候就應該按照這樣的格式輸入:d,e fg。

如果不按照控制字符的格式輸出呢?

比如:scanf(“%d%d%d”,&a,&b,&c)

     輸入 d e f    在格式控制字符竄中3個%d之間什麼都沒有,但是在輸入的的abc之間都加了一個空格,很明顯兩者的格式沒有統一起來。那麼:

     d給a,空格給b,e給c。  

三:if語句嵌套之美

 if是選擇語句,我認為裡面實在沒有什麼難點和應該注意的地方,硬要說的話,就是if語句的嵌套層次。需要注意它們的格式,不要亂寫if.

if(條件)

  語句;

else

  語句;

if(條件)

 語句;

 else if(條件)

  語句;

 else if(條件)

語句;

..

..

else

  語句;

 在if 中,可以寫成條件運算符的形式。下述兩種語句表達的是一個意思

if(a>b)

  Max=a;

else

 Max=b;

Max=a>b? a:b

四:switch語句

  Switch又稱為開關語句

 基本形式是

switch(表達式)

  case 值1:語句1;[break;]

  case 值2:語句2;[break;]

  .....

  [default:語句;]

 需要注意的是switch()中的表達式的數據類型只能是整型或字符型。

 有關break的詳解,請繼續往下看

五:三種循環結構

while表達式)

   語句序列;

do{

語句序列;

}while(表達式);

for(表達式1;表達式2;表達式3)

  語句序列;

3中循環結構以for循環最為重要。

while和do..while的區別在於:while是先判斷再執行;do...while是先執行後判斷。

for循環中的表達式1為初始條件,符合表達式2的判斷,執行語句,然後執行表達式3,再根據表達式2進行判斷,執行語句。

關於for循環的嵌套:程序實例:打印九九乘法表。


#include <stdio.h>
main()
{
   int m,n;
   for(m=1;m<10;m++){
      printf("%4d",m);
   }
   printf("\n");
   for(m=1;m<10;m++){
     printf("  -");
   }
   printf("\n");
   for(m=1;m<10;m++){  //被乘數m從1變化到9
   for(n=1;n<=m;n++){  //乘數從1變化到m
      printf("%4d",m*n);  //輸出第m行n列中的m*n的值
   }
   printf("\n");
   }
}


六:終止語句:break和continue語句的區別

1.break語句

1)break語句只能用於循環語句或者switch語句中。即使有這樣的語句

      If(...) break; 那麼這個if語句也一定位於循環體或者swich語句之中。

2)break語句的作用是跳出終止)它所在的循環。而且不能同時跳出多層循環

  比如:  

for(){        第一個for循環

  for(){     第二個for循環

       語句1;

       break;

       語句2;

  }

語句3;

}

上述中break終止的只能是第二個for循環,即程序運行到break時,就跳出第二個for循環,然後執行語句3,執行完語句3後開始循環執行第一個for循環。就當第二個for不存在一樣。

但是需要注意的是,語句1執行了一次,語句2一次也沒有執行。語句3執行了n次n為第一個for循環的循環次數)

3)程序實例驗證2)


#include <stdio.h>
main()
{
   int m,n;
   for(m=1;m<10;m++){ 
   for(n=1;n<=10;n++){ 
      n=n+1;
  break;
  n=n+2;
   }
  m=m+3;
   }
   printf("m=%d,n=%d\n",m,n);
}



2.continue語句

1)continue語句與break語句一樣,都必須在循環中。

2)continue語句的不同之處在於它的作用是結束本次循環,即跳過本層循環體中余下尚未執行的語句,接著再一次進行循環的條件判斷。也就是說執行continue語句並沒有使本次循環結束

 比如:

for(){          第一個for循環

  for(){       第二個for循環

     語句1;

     continue;

     語句2;

  }

語句3;

}

  上述程序中,執行到continue時,第二個for循環的這一次循環終止,進行第二個for循環的下一次循環,也就是說,語句2不執行了,再進行新的一輪循環。只是continue之後的語句不執行了,然後再進行第二個for循環中的下一次循環。

   在上述程序中,語句1執行了n次n為第二個for循環循環的次數),語句2一次也沒有執行,語句3執行了m次m為第一個for循環循環的次數)

3)一個程序實例驗證2):


#include <stdio.h>
main()
{
   int m,n,x=1;
   for(m=1;m<10;m++){ 
   for(n=1;n<=10;n++){ 
      n=n+1;
  continue;
  x=x+1;
   }
  m=m+3;
   }
   printf("m=%d,n=%d,x=%d\n",m,n,x);
}



本文出自 “趙玉強的博客” 博客,請務必保留此出處http://zhaoyuqiang.blog.51cto.com/6328846/1261201

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved