小白學入門一
練習
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;
}