第8天學C語言(一點練習,例如打印1~100之間全部3的倍數的數字)

(2020.9.12)算法

練習1:從大到小輸出三個值ide

算法實現函數

a中放最大值優化

b次之spa

c最小數學

int a = 0;it

int b = 0;io

int c = 0;class

scanf_s("%d%d%d", &a, &b, &c);(%d%d%d之間若是須要加逗號的話,引用

那你在屏幕上輸出的時候也要加上逗號,不然會存在問題。%d%d%d之間如

果須要加#的話,那你在屏幕上輸出的時候也要加上#,不然會存在問題)

if (a < b)

{

int tmp = a;

a = b;

b = tmp;

}

if (a < c)

{

int tmp = a;

a = c;

c = tmp;

}

if (b < c)

{

int tmp = b;

b = c;

c = tmp;

}

printf("%d%d%d\n", a, b, c);(printf不用取地址)

練習2:

打印1~100之間全部3的倍數的數字:

int i = 0;

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

{

if (i % 3 == 0)

{

printf("%d\n", i);

}

練習3:

給定兩個數,求這兩個數的最大公約數

(展轉相除法):

假設有兩個數24,18:將24%18,結果餘6,再將18%6,結果爲0

,則此時6即爲二者最大公約數

int m = 24;

int n = 18;

int r = 0;

scanf_s("%d%d", &m, &n);

while (m % n )

{

r = m % n;

m = n;

n = r;

}

printf("最大公約數爲:%d\n", n);

練習4:打印1000~2000的閏年,而且打印共有多少個閏年

判斷閏年:

1.能被4整除而且不能被100整除是閏年

2.能被400整除是閏年(這兩個條件的都是閏年哦!!!)

int year = 0;

int count = 0;

for (year = 1000; year <= 2000; year++)

{

if (year%400==0)

{

printf("%d\n", year);

count++;

}

else if (year % 4 == 0 && year % 100 != 0)

{

printf("%d  ", year);

count++;

}

}

printf("閏年總共有:%d 個", count);

或者直接一句話搞定鴨:

if(((year%4==0)&&(year%100!=0))||(year%400=0))

練習5:打印100~200之間的素數,而且統計一共有多少個

素數通常指質數。質數是指在大於1的天然數中,除了1和它自己以

外再也不有其餘因數的天然數。

素數判斷規則:

1.試除法

產生2~i-1的數字

int i = 0;

int n = 100;

int count = 0;

for (i = 1; i <= 200; i++)

{

int j = 0;

for (j = 2; j < i; j++)

{

if(i% j==0)

{

break;

}

}

if (j == i)

{

count++;

printf("%d ", i);

}

}

printf("一共有:%d個", count);

將上面的代碼更加優化!!!:

若是i不是素數,i能夠寫成i=a*b,a\b中至少有一個數字<=開平方i

我只要在開平方i以前找到一個數字可以整除i,就證實它不是素數

sqrt--開平方的數學庫函數,須要引用數學頭文件#include<math.h>

int j = 2;

int i = 0;

int count = 0;

for (i = 101; i <= 200; i+=2)(由於偶數不可能)

{

for (j = 2; j <=sqrt(i); j++)(sqrt(i)表明將i開平方)

{

if (i % j == 0)

{

break;

}

}

if (j>sqrt(i))

{

printf("%d ", i);

count++;

}

}

printf("一共有%d 個", count);

以上優化過程都仍是試除法,不過縮小了範圍

《素數求法的n種境界》

練習6:數9的個數

數一下1~100的全部整數中出現多少個數字9:9,19,29,39,49,59,

69,79,89,90,99,91,92,93,94,95,96,97,98

思路:

若是個位爲9的話模上10結果爲9

若是數字十位是9的話,那麼這個數字除上10商爲9

int i = 1;

int count = 0;

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

{

if (i/10==9)

{

printf("%d ", i);

count++;

}

else if (i % 10 == 9)

{

printf("%d ", i);

count++;

}

}

printf("一共有:%d個 ", count);

練習7:分數求和

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

1.先把-號所有改爲+號

int i = 0;

double sum = 0.0;(那咱們加起來的和就也爲浮點數了)

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

{

sum += 1 / i;

}

printf("%lf\n", sum);

(這樣爲錯誤由於結果只是爲1,由於1/2的結果爲0,而咱們獲得的結果想爲小數,

要獲得小數必須保證除號兩端必須得有一個數是浮點數,i已是整型了,就把分子1

改爲浮點型1.0,用1.0/i獲得的結果就爲小數了

最終結果:

int i = 0;

double sum = 0.0;

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

{

sum += 1.0 / i;

}

printf("%lf\n", sum);

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

方法一:(比較簡單)int i = 0;

double sum = 0.0;

int flag = 1;

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

{

sum += flag*1.0 / i;

flag = -flag;(很巧妙就作到了,也能夠利用奇數偶數來寫成代碼)

}

printf("%lf", sum);

也能夠利用奇數偶數來寫成代碼:

方法二:

int i = 0;

double sum = 0.0;

int count = 1;

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

{

if (count % 2 != 0)

{

sum += 1.0 / i;

count++;

}

else

{

sum -= 1.0 / i;

count++;

}

}

printf("%lf", sum);