1. 程式人生 > >小程式中的小問題

小程式中的小問題

1.將陣列A中的內容和陣列B中的內容進行交換。(陣列一樣大)

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

#include<stdlib.h>

int main()

{

int a[5] = { 0 };

int b[5] = { 0 };

int i = 0;

int temp = 0;

printf("請輸入a陣列的五個值\n");

for (i = 0; i < sizeof(a)/sizeof(a[0]); i++)

{

scanf("%d", &a[i]);

}

for (i = 0; i <sizeof

(a) / sizeof(a[0]); i++)

{

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

}

printf("\n");

printf("請輸入b陣列的五個值\n");

for (i = 0; i < sizeof(b) / sizeof(b[0]); i++)

{

scanf("%d", &b[i]);

}

for (i = 0; i < sizeof(b) / sizeof(b[0]); i++)

{

printf("%d  ", b[i]);

}

printf("\n");

for (i = 0; i < sizeof(a) / sizeof(a[0]); i++)

{

temp = a[i];

a[i] = b[i];

b[i] = temp;

}

printf("a陣列為:\n");

for (i = 0; i <sizeof(a) / sizeof(a[0]); i++)

{

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

}

printf("\n");

printf("b陣列為:\n");

for (i = 0; i < sizeof(b) / sizeof(b[0]); i++)

{

printf("%d  ", b[i]);

}

system("pause");

}

這個程式是用來交換兩個陣列中的值的,這裡我並不想說是如何交換兩個陣列中的值,這個程式並不難,我是想說一下在編寫程式的時候應該要注意一些小細節,小問題。

  首先,第一個 int a[5] = { 0 };int b[5] = { 0 };int i = 0;int temp = 0;

對你程式開始的時候所定義的一些變數要進行初始化,不初始化雖然我沒發現什麼問題,但是據我所瞭解,有的時候程式會給一個預設值,就拿int來說,在定義int的時候,如果是區域性變數,那麼這個int值的預設值會是一個隨機值,如果你的int是一個全域性變數,那你入股偶在定義的時候不給他初始值那他的預設值就是0;所以在定義的時候為了避免出現問題還是給他的一個初始值。陣列在定義的時候也要給他一個初始值,在花括號裡邊給他一個值,沒給的就是預設為0.如果你所定義的是一個指標那就是需要 int *p=NULL;在編寫程式的時候要養成,所有定義都要給他初始值的良好習慣。

for (i = 0; i < sizeof(a)/sizeof(a[0]); i++) 再看這個語句,正常的在for迴圈中會寫i<5;但是這裡為什麼寫這個語句呢。這裡就是為了以後寫專案所著想了,如果你在編寫大程式大專案的時候,一旦還是以前那樣去寫程式,當你的陣列的元素數目發生變化的時候,那麼你修改起來就十分的困難,所以可以寫成sizeof(a)/sizeof(a[0]),這樣無論你的陣列存的是int型別還是char型別都可以很好的計算你的元素個數,sizeof求的是你所佔的記憶體。

2. 計算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值。 

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

int main()

{

float sum = 1.0;

int i = 0;

float k = 2.0;

for (i = 2.0; i <=100; i++)

{

if (i % 2 == 0)

{

sum = sum - (1 / k);

k++;

}

else

{

sum = sum + (1 / k);

k++;

}

}

printf("總和為%f", sum);

}

  這個專案中你的sum求出來是一個小數,如果你將sum定義成int型別的那你輸出來的就是0;

if (i % 2 == 0)

{

sum = sum - (1 / i);

k++;

}

這是我最初寫的程式,大部分人的思路肯定也是這樣,但是求出來是錯誤的,因為1是整型資料,i是整形資料,那1/i得出來的也一定是整型資料,i要比1要大所以求出來的都是小數,所以最終資料如果還是整形的話那你求出來的就是0,資料沒有小數點位。我是通過重新定義了一個變數k來替代i。其實這個程式解決問題的方法有兩種,1是像我剛剛做的那樣將i變成一個float型別,2就是將1變成float資料,只要其中一個數據是float型別,那麼資料就會被強制型別轉換,變成精度高的那個型別。所以可以定義一個數字float a=1.0,將之後運算中的1全都用a來代替就可。