c語言打卡
阿新 • • 發佈:2018-12-18
第一題 給定兩個整形變數的值,將兩個值的內容進行交換
- 分析 值交換
- 思路
- 引入第三變數
- 不引入第三變數
- 實現
//引入第三變數 void changeTwo() { int a = 0; int b = 2; int c; c = a; a = b; b = c; printf("%d\n", a); printf("%d\n", b); } //不引入第三變數 //演算法一 void changeTwo1() { int a = 0; int b = 2; a = a + b; b = a - b; a = a - b; printf("%d\n", a); printf("%d\n", b); } // 缺點:變數a和b相加 有可能會產生溢位 // 演算法二 void changeTwo2() { // 0 二進位制: 0000 // 2 二進位制: 0010 int a = 0; int b = 2; a = a ^ b; // 0010 b = a ^ b; // 0010 ^ 0010 -> 0000 printf("%d\n", a); printf("%d\n", b); } 缺點:實際開發過程中,會導致可讀性差
第二題 求10 個整數中最大值
- 分析 找出10個數中最大的
- 思路 從十個數中取一個數,依次和其他數比較,如果比其他數大,就輸出這個數,如果有一個數比這個數大,那麼這個數就是新的最大數,然後繼續比較。
- 實現
void maxNumber() { int arr[10] = { 0 }; int max = arr[0]; for (int i = 0; i < 10; i++) { printf("請輸入\n"); scanf("%d", &arr[i]); } for (int j = 1; j < 10; j++) { if (max < arr[j]) { max = arr[j]; } } printf("max = %d\n", max); }
第三題 將三個數按從大到小輸出
- 分析 從大到小,是一種排序
- 思路 使用選擇排序,對三個數進行排序。初始時在序列中找到最大元素,放到起始位置作為已排序序列;然後,再從剩餘未排序元素中繼續尋找最小(大)元素,放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
- 實現
void sortNumber() { int arr[3] = { 0 }; int max = 0; int temp = 0; // 輸入 for (int i = 0; i < 3; i++) { printf("請輸入\n"); scanf("%d", &arr[i]); } //遍歷 for (int j = 0; j < 3; j++) { max = j; for (int k = j+1; k < 3; k++) { if (arr[max]<arr[k]) { max = k; } } temp = arr[max]; arr[max] = arr[j]; arr[j] = temp; } // 輸出 for (int m = 0; m < 3; m++) { printf("%d\n", arr[m]); } }
第四題 求兩個數的最大公約數
- 分析 最大公約數,也最大公因數,是兩個數共同的因子。
- 思路 首先確定,小的數是不是大的數的因子,如果是那麼最大公約數就是小的數,如果不是,那麼用大的數除以小的數的餘數,作為小的數,而剛在的除數作為大的數,然後繼續求是否餘數為零,如果不是以此類推。
- 實現
void greatestCommonDivisor() {
int a, b, temp;
printf("請輸入第一個數");
scanf("%d", &a);
printf("請輸入第二個數");
scanf("%d", &b);
if (a < b)
{
temp = a;
a = b;
b = temp;
}
while (a % b != 0)
{
temp = a % b;
a = b;
b = temp;
}
printf("餘數是:%d\n", b);
}