1. 程式人生 > 實用技巧 >C語言學習筆記三-----選擇與迴圈語句

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;
}