C語言學習筆記三-----選擇與迴圈語句
再介紹新的主題之前,我們先介紹一些額外的話題
隨機函式(rand())的使用方法:
原理:rand()函式是按指定順序來產生整數。(偽隨機數)
1.需加標頭檔案#include<stdlib.h>
2.可用 int i=rand()
3.if想生成指定範圍內的隨機數需要%:
0~10的隨機數 rand()%11
0~100 rand()%101
C中/* */會被編譯器替換為什麼?一個空格?還是不留痕跡?
int/*test*/a;//編譯成功 in/*test*/t a;//error
所以在C99中/*test*/被編譯器替換為一個空格
一.程式設計七塊理解法:
1.註釋部分
2.預處理塊,全域性變數說明,函式宣告.....
3.函式定義部分
4.變數說明部分
5.資料輸入部分
6.執行部分
7.資訊輸出部分
關於選擇與迴圈的語法省略不講
注:
1.ifx為float的實型變數,則與0比較的標準語句如下:
if(fabs(x)<=1e-6) //領域 記得加標頭檔案#include<math.c>
2.寫條件巢狀語句時注意條件的不重合性
3.switch_多分支選擇語句:
default(預設情況)放在所有的case之後,可不加break;如果default後面還有case語句,如果不加break,會繼續執行case語句,此時必須加break(不推薦這種用法)
switch()中的()表示式結果必須為整數,也可為字元,case的判斷值要求是整型變數。
4.for(;;)<=====>for(;1;)
5.通過九九乘法表介紹多重迴圈:
核心程式碼:
for(i=1;i<=9;i++) { for(k=1;k<=i;k++) { j=i*k; printf("%d*%d=%d ",i,k,j); } printf("\n"); }
6. some tips for loops:
~if有固定的次數=>for
~if必須執行一次=> do-while
~其他用while
7.典型例題:
a.多項式累計法:
計算sinx的泰勒展開,並使最後一項的絕對值小於1e-6為止;
#include<stdio.h> int main() { int i; float sum,x,a,b;//a為分子,b為分母; char s=1; sum=0; scanf("%f",&x); a=x; b=1; for(i=1;a/b>=1e-6;i++) { sum+=s*a/b; a*=x*x; b=b*2*i*(2*i+1); s*=-1; } printf("sum=%f",sum); return 0; }
b.試數法:
用於求水仙花數,最大公約數,最小公倍數,百雞百錢問題
只寫出一個求最大公約數的核心程式碼:
for(i=a<b?a:b;i>0;i++) { if(a%i==0&&b%i==0) { printf("the max = %d",i); break; } }
c.簡單的人機互動
1.簡單的計算器,如輸入3+5=8;輸入錯誤就退出(不是加減乘除)
#include<stdio.h> #include<math.h> int main() { float a,b; char op; while(1) { scanf("%f%c%f",&a,&op,&b); if(op!='+'&&op!='-'&&op!='*'&&op!='/') { printf("error"); break; } switch(op) { case '+': printf("%f+%f=%f",a,b,a+b); break; case '-': printf("%f-%f=%f",a,b,a-b); break; case '*': printf("%f*%f=%f",a,b,a*b); break; case '/': if(fabs(b)>=1e-6) { printf("%f/%f=%f",a,b,a/b); } else printf("the number of b is wrong!\n"); break; } } return 0; }
2.程式設計序為小學生出一套最簡單的整數(<=100)加減乘的運算的試題,一共十題,每題十分,且隨機產生,產生後立即給出學生答案(計算機判斷錯誤),做完立即給出分數。
#include<stdio.h> #include<math.h> #include<stdlib.h> #include<time.h> int main() { int a,b,i,s; char op; int score=0; for(i=0;i<10;i++) { a=rand()%101; b=rand()%101; op=rand()%3; if(op==0)//0代表加號 { printf("%d+%d=?\n",a,b); scanf("%d",&s); if(s==a+b) { printf("ture\n"); score+=10; } else printf("false\n"); } else if(op==1) { printf("%d-%d=?\n",a,b); scanf("%d",&s); if(s==a-b) { printf("ture\n"); score+=10; } else printf("false\n"); } else { printf("%d*%d=?\n",a,b); scanf("%d",&s); if(s==a*b) { printf("ture\n"); score+=10; } else printf("false\n"); } } printf("score=%d\n",score); return 0; }