標準c基礎知識筆記二

honghu79 12年前發布 | 1K 次閱讀 CRM管理 google應用商城


 
 流程
 if (條件)
 {
 }else
 {
 }
 
 
 #include <stdio.h>
 
 int main()
 {
  int age;
  printf("please input your age:");
  scanf("%d",&age);//age的地址,這里一定是&,要不后期可能會出問題
  if (age<0 || age>1000)
  {
   printf("This is not human\n");
  }
  else if(age<16)
  {
   printf("smaller,dont move");
  }
  else if (age>100)
  {
   printf("you are order");
  }
  else
  {
   printf("welcome to here\n");
  }
  return 0;
 }
 
 
 vi自動縮進:set autoindent
 
 
 switch(int,表達式)
 {
  case int字面量(或者short,char):
  case int字面量:
  
 
 }
 首先先計算表達式,得到一個結果;然后再根據結果與case入口對比,執行后面的語句
 break;出口語句;如果沒有break,會執行case入口后的所有的語句,直到碰到break
 default;可選入口;
 
 #include <stdio.h>
 
 int main()
 {
  printf("我們這里有如下課程:\n");
  printf("1---c++\n");
  printf("2---嵌入式\n");
  printf("3---java\n");
  printf("你想學哪一門");
  
  char ch;
  scanf(" %c",&ch);
  switch(ch){
  case '1':   //思考為什么這里不是case 1:    緣由上面定義的ch為字符
   printf("學會c++,有飯吃\n");
   break;
  case '2':
   printf("學會嵌入式,有肉吃\n");
   break;
  case '3':
   printf("學會java,吃香的喝辣的\n"); 
   break;
  default:
   printf("你想學什么呢");
   break;
  }
  
 }
 

 
 
 循環(迭代)
 
 while(條件){...}
 do{...}while(條件);//至少做一次
 
 #include <stdio.h>
 
 int main()
 {
  double money;
  printf("來到游戲廳\n");
  printf("你現在有多少錢?\n");
  scanf("%lf",&money);
  while(money>=10){
   printf("換10元游戲幣\n");//或者puts("換10元游戲幣");
   money-=10;
   puts("玩游戲..........游戲幣用完");
  
  }
  printf("錢不夠了,回家嘍\n");
 }
 
 //常規性的寫無限次循環,用while(1)
 
 vi dowhile.c
 
 //考駕照
 #include <stdio.h>
 
 int main()
 {
  int score;
  do{
   printf("考試完畢,輸入成績:");
   
  }while(score<60);
  printf("恭喜你通過考試!\n");
  return 0;
 }
 
 
 scanf不是直接從鍵盤讀取數據,而是鍵盤輸入信息之后,存在鍵盤緩沖區內,一旦敲入回車后,數據就存儲到輸入緩沖區中;
 使用scanf時,會按照對應類型一個個的從輸入緩沖區中提取數據
 如果輸入的數據多了,會供下次讀取使用,而不是丟棄。如果真想丟棄剩下的內容,可以用
 scanf("%d",&score);
 scanf("%*[^\n]%*c");//清除輸入緩沖區剩余的字符
 
 #include <stdio.h>
 
 int main()
 {
  int score;
  do{
   printf("考試完畢,輸入成績:");
   if (scanf("%d",&score)==1)
   {
    printf("成績是%d\n",score);
   }
   else
   {
   printf("輸入無效\n");
   }
  }while(score<60);//成績小于60重新再考
  printf("恭喜你通過考試!\n");
  return 0;
 }
 
 
 變量的作用范圍:在{}之內定義的,本{}之外就不能用了。
 
 
 
 for(準備;條件;調整)
 {
 循環體
 }
 
 從鍵盤輸入10個成績,輸出其平均成績
 
 vi for.c
 #include <stdio.h>
 
 int main()
 {
  int score;
  int sum=0;
  int i;
  for (i=0;i<10;i++)
  {
   printf("請輸入%d個成績",i+1);
   scanf("%d",&score);
   sum+=score;
  }
  printf("平均成績為:%f\n",(float)sum/10);//sum/10.0
  return 0;
 }

 無限循環用:for(;;){}
 
 vi for1.c
 #include <stdio.h>
 
 int main()
 {
  int score;
  int sum=0;
  int i;
  for (i=0;i<10;i++)
  {
   printf("請輸入%d個成績",i+1);
   if(scanf("%d",&score)!=1){
    printf("輸入無效!\n");
    scanf("%*[^\n]%*c");
    //什么意思呢?
    //判斷用戶輸入的是1個有效還是多個有效輸入,如果是一個則繼續
    --i;//考慮到下面continue調整部分照常執行,而有時我們并不希望他這樣執行
    continue;//跳過循環體中剩余的內容;調整部分照常執行
        //循環體執行到此為止,不再執行下面內容
   }
   if (score<0 || score>100)
   {
    break;//跳出循環;switch case和for循環中可以使用break
   }
   sum+=score;
  }
  printf("平均成績為:%f\n",(double)sum/i);//sum/10.0
  return 0;
 }
 

 goto讓程序變的比較亂,程序中盡量少使用goto。如果費用,則在同一個函數或者從里層跳到外層使用
 
 
 要求輸入1-9之間的整數,如果不是的話,重來?do{....}while()
 然后再根據輸入的數字,來輸出99表
 
 vi inttest.c
 
 #include <stdio.h>
 
 int main()
 { 
  int m=0;
  int cnt;
  //1讀取一個1-9的整數
  //1.1讀取一個整數
  //1.2清除緩沖區
  //1.3只要輸入無效或者不在1-9之間就重來,回到1.1
  //2以那個數為行數輸出九九表
  //2.1反復m次,每次輸出一行
  //2.2反復根據是第幾行決定輸出幾列
  //2.3每個乘法式:小x大=積
  //2.4乘法式后面輸出逗號或者換行
  
  do{
   printf("請輸入一個0-10以內的整數:\n");
   cnt=scanf("%d\n",&m);
   scanf("%*[^\n]%*c"); 
  }while(cnt!=1||m<1||m>9);
  int i,j;
  for(i=1;i<=m;i++)//理解2.1
  {
   for(j=1;j<=i;j++)//理解2.2
   {
    printf("%d*%d=%d%c",j,i,j*i,j!=i?',':'\n');
    //理解2.3,2.4
   }
  }
 
  return 0;
 }
 
 
 
 
 //在C語言中可以用名字代替一段什么東西
 方法一:#define CPP '1'
 方法二:枚舉enum,可以定義一些枚舉常量,只能是整數;也可以用字符
 c語言里面可以定義一些枚舉
 
 比如,我們可以用枚舉來實現一個bool類型;(用0和1不如用true和false直觀)
 #include <stdio.h>
 //#define true 1
 //#define false 0
 enum bool{true,false};//我們自定義的枚舉類型,bool為類型名,{}為枚舉常量,也是字面量
 //在這里true和false為枚舉常量;第一個是0,后面一個是前一個值+1
 //從0開始,一次加1
 //也可以自己指定enum bool{true=1,false=0,adc}
 //true為1,false為0,adc為1
 enum mode{UREAD=0400,UWRITE=0400,UEXEC=0100,GREAD=0040,GWRITES=0020,GEXEC=0010,OREAD=0004,OWRITE=0002,OEXEC=0001,NONE=0000};
 enum course{CPP,JAVA,DOTNET,TEST};
 int main()
 {
  printf("%d\n",true);
  printf("%d,%d,%d,%d\n",CPP,JAVA,DOTNET,TEST);
  printf("%d--C++\n",CPP);
  printf("%d--JAVA\n",JAVA);
  printf("%d--.NET\n",DOTNET);
  printf("%d--測試\n",TEST);
  printf("請選擇:");
  int n;
  scanf("%d",&n);
  switch(n){
  case CPP:puts("C++課程");break;
  case JAVA:puts("java課程");break;
  case DOTNET:puts(".net課程");break;
  case TEST:puts("測試課程");break;
  default:puts("無效");break;
  }
  
  enum bool a;//定義變量
  typedef enum bool BL;//給類型起別名
  BL b;
  b=false;
  a=true;
  printf("a=%d,b=%d",a,b);
  
  return 0;
 }


 從鍵盤輸入一個整數,輸出它的二進制形式
 vi bin.c
 
 #include <stdio.h>
 
 int main()
 {
  const int bits=sizeof(int)*8;//int有多少位
  unsignedint mask=0x80000000; //unsigned int mask=1<<bits-1
  int n;
  printf("input an integer:");
  scanf("%d",&n);
  int i;
  for(i=0;i<bits;i++)
  {
   printf("%c",n&mask?'1':'0');
   //mask=mask>>1;
   n<<=1;
  }
  printf("\n");
  return 0;
 }
 
練習: 
 從鍵盤輸入1個有效日期,如果無效重來;輸出這個日期是這一年的第幾天?
 從鍵盤輸入10個整數,輸出最大最小的整數是誰?

 本文由用戶 honghu79 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!