小白筆記(1)

小白學入門一

練習
1,問題 G: 例題5-7 求圓周率pi的近似值
Π/4 = 1 - 1/3 + 1/5 -1/7…
求圓周率PI的近似值,直到發現某一項的絕對值小於10-6爲止(該項不累加)。要求輸出的結果總寬度佔10位,其中小數部分爲8位。
程序中使用浮點型數據時,請定義爲雙精度double類型。
如果需要計算絕對值,可以使用C語言數學庫提供的函數fabs,如求x的絕對值,則爲fabs(x).

#include<stdio.h>
#include<math.h>
int main(){
   
    double sum = 0.0;
    int i;
    double sign = 1.0;
    for(i=1;fabs(i) < pow(10,6);i+=2){

        sum += sign/i;
       sign = -1 * sign;//正負交替
    }
    sum *= 4;//
    printf("PI=%10.8f\n",sum);
     return 0;
     
}

2,問題 H: 例題5-8 Fibonacci數列
輸入一個正整數n,求Fibonacci數列的第n個數。
Fibonacci數列的特點:
第1,2個數爲1,1。從第3個數開始,概述是前面兩個數之和。
要求輸入的正整數n不超過50.

#include<stdio.h>
int main(){
    int n;

    int a[50] = {0};//初始化
    a[0] = 1;
    a[1] = 1;
    for(int i = 2;i<50;i++){
        a[i] = a[i-1] + a[i-2];
    }//遞推公式

    scanf("%d",&n);
    int res;
    if(n==1||n==2){
      res=1;

    }
    else{
        res = a[n-1];
    }
    printf("%d\n",res);
    return 0;
}

3,分數序列求和
在這裏插入圖片描述

#include<stdio.h>
int main(){

    double a = 2.0;
    double b = 1.0;
    double sum =0.0;
    double c;
    double t;
    for(int i = 1;i<=20;i++){

        c = a/b;
        t = a+b;//迭代,記錄前一項的分子分母之和
        b = a;//賦給下一項的分母
        a = t;//賦給下一項的分子
        sum += c;

    }
    printf("%.6f\n",sum);
    return 0;

}

冒泡排序

#include<stdio.h>
int main(){
    int n=5;
    int a[5] = {3,1,4,5,2};
    for(int i = 0;i<n;i++){//n個數 n-1趟
        for(int j = 0;j<=n-i-1;j++){
           //每一趟 找到最大的剩餘元素,移動到當前剩餘元素的最右邊
           //第i趟,從a[0] 到 a[n-i-1] 都需要和下一個數比較
            if(a[j] > a[j+1]){//交換倆個數
                int tmp = a[j];
                a[j] = a[j+1];
                a[j+1] = tmp;

            }
        }
    }
    for(int k = 0;k < n;k++){
        printf("%d ",a[k]);
    }
    return 0;
}

二維數組

//二維數組
#include<stdio.h>
int main(){
    //初始化
    int a[4][5] = {{1,2,3},{9},{},{6}};//
    //結果
    //餘下未賦值部分默認被賦爲0
    /*
    1 2 3 0 0
    9 0 0 0 0
    0 0 0 0 0
    6 0 0 0 0
    */

    int i;
    int j;
    //使用: 二層循環
    for(i = 0;i < 4;i++){
        for(j = 0;j < 5;j++){
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    int b[4][5];
    for(int m = 0;m < 4;m++){
        for(int n = 0;n < 5;n++){
            scanf("%d",&b[m][n]);
        }
    }
    int c[4][5];
    for(int e=0;e<4;e++){
        for(int f =0;f<5;f++){
            c[e][f] = a[e][f] + b[e][f];//兩數組對應相加
        }
    }
    for(i = 0;i < 4;i++){
        for(j = 0;j < 5;j++){
            printf("%d ",c[i][j]);
        }
        printf("\n");
    }

    return 0;
}

注:
數組溢出,內存問題
若數組較大,大概10^6級別,在使用時需要定義在主函數的外面,否則程序異常退出;
原因 函數內部的局部變量來自系統棧,允許申請的空間較小;
而函數外部申請的全局變量來自靜態存儲區,允許申請的空間大

#include<stdio.h>

 int  a[1000000];//主函數外面  定義
int main(){

    for(int i =0;i<1000000;i++){

        a[i] = i;
        printf("%d ",a[i]);

    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章