c語言進階之旅(4)
回圈和分支
拓展函式的基本
習題練習:最大公約數、素數(100~200)、列印閏年(1000~2000)
文章目錄
- 最大公約數
- 思路(1)
- 思路(2)
- 素數
- 思路(1)
- 思路(2)
- 思路(3)
- 列印閏年
- 思路(1)
- 優化思路(1)
- 函式
最大公約數
先看最大公約數是啥意思,倆數,能被一個數整除
列:24 18 最大公約數是(6)
思路(1)
思路(1):
那個最大公約數不可能大于最小數本身,那么就用最小的去和倆數去除,如果不是那個值就-1,繼續去除,因為最小值就是那個最小值本身
實作想法
int main()
{
int a = 0;
int b = 0;
int max = 0;
scanf("%d%d", &a, &b);//最小公約數不可能超過那個最小值--->公約數的概論是一個數可以同時整除倆數
//賦值給最小值
if (a >b)
{
max = b;
}
else
max = a;
while (1)
{
if (a % max == 0 && b%max == 0)//根據最大公約數的理論來判斷
{
printf("%d", max);
break;
}
max--;//max從最小值-1然后除-1除
}
return 0;
}
運行結果

思路(2)
輾轉相除法,大致就是倆數相除得到的余數字,然后交換,列子 a %b = c ----->b%c=?就是交換然后在繼續除,知道被整除!
看代碼更好理解一些
實作想法
int main()
{
int m = 0;
int n = 0;
scanf("%d%d", &m, &n);
int max = 0;
while (max=m%n)//會一直除直到max=0,如果max=0那么回圈就是假,進不去
//直接看余數是否為 0 --> 0的話那么這個最大公約數就是n
{
m = n;//n--->除了之后把n---->m
n = max;//---->除后的余數在給n
}
printf("最大公約數是:%d\n", n);
return 0;
}
如果還是迷迷糊糊的話哪看看這個圖

素數
素數定義:只能被自身和1整除(題目要求100~200之間的素數)
思路(1)
就先寫出100~200的數字,然后在用2~199之間的數去除,如果被整除了那么他就不是素數,應為素數只能被他自身和1整除
實作想法
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
int j = 0;
for (j = 2; j < i; j++)
{
if (i%j == 0)
{
break;
}
}
if (i == j)//上面被2~199(素數只能被1和自身整除)的數除完后都沒有的話那么他們就是素數
{
printf("%d ", i);
}
}
return 0;
}
看看結果是否和我們預想的那樣

意料之中哈哈哈
思路(2)
這個思路大致就是在思路(1)上的改進,大致就是設一個數,把它當作素數去判斷,大致和做數學題一樣設一個數x,來解方程的感覺差不多
實作想法
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
int flag = 1;//假設這個數就是質數,
int j = 0;
for (j = 2; j < i; j++)
{
if (i%j == 0)
{
flag = 0;//如果被整除了那么就重置0,
break;
}
}
if (flag== 1)//判斷為1就是素數,0則不是
{
printf("%d ", i);
}
}
return 0;
}
溫馨提示:這里的flag要寫在里面喲,粗心額度博主,應為把它寫外面去了,導致報錯,浪費了好多時間,為啥要寫里面不能寫外面,設回圈第一次進去是100%2能被整除,flag就賦值成0了,然后進行下面的判斷……寫外面就被永遠賦值成0了,寫回圈里面,會重制,看個圖吧比較好理解

思路(3)
這里也是在思路(1,2)基礎上進行改進,一個數如果可以別一個數開平方或整除,那么就不需要在找下一個數了,那樣就不需要找下一個數了那看看例子
一個數能被開平方那么他那么他一定不是素數,素數只能被他自身和1整除 m = ab 或者aa---->a或b 倆數一定是<=m16---->28–>44
介紹一個東西sqrt()是一個庫函式[^1],他的用處就是用來開平方,用這個函式需要引頭檔案
實作想法
#include<math.h>
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
int flong = 1;//假設這個數就是質數----->每次回圈里面,下面賦值后就是fla就一直等于0
int j = 0;
for (j = 2; j < sqrt(i); j++)//這里試除的次數減少了
{
if (i%j == 0)
{
flong = 0;//如果被整除了那么就重置0,
break;
}
}
if (flong == 1)//判斷為1就是素數,0則不是
{
printf("%d ", i);
}
}
return 0;
結果也是一樣

列印閏年
閏年定義:只能被4整除且不能被100整除,或被400整除
思路(1)
思路列印10002000那么就需要生成10002000的數(回圈),然后用生成的值去除如果被4整除且不被100整除,或被400整除
實作想法
int mian()
{
int i =0;
for(i=1000;1<=200;i++)
{
if(i%4==0&&i!=100)
{
printf("%d",i);
}
if(i%400=0)
{
printf("%d",i);
}
}
return 0 ;
}
結果

優化思路(1)
上面寫的比較繁瑣介紹下倆運算子&& ---->并且的意思||---->或者
實作想法
int main()
{
int i = 0;
for ( i = 1000; i <= 2000; i++)
{
if ((i % 4 == 0) && (i % 100 != 0) || (i % 400 == 0)) //&&并且 ||或者
{
printf("%d ", i);
}
}
printf("\n");
return 0;
}
這樣看是不是簡潔多了一目了然,哪結果會不會一樣呢??

函式
函式的定義:

這里介紹個網頁不知道可以直接搜www.cplusplus.com,這里有c語言庫函式的使用,和講解,不過需要點英語基礎,不會就用軟體翻譯吧(博主就是用軟體翻譯了)哈哈哈哈!!!
[^1]:C語言中有自帶的函式叫庫函式用庫函式就需要引頭文,件,畢竟是別人的東西,用是要和他打招呼
持續更新……
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/276241.html
標籤:其他
上一篇:【C語言學習筆記——4】
