C語言程式設計題目~2
阿新 • • 發佈:2018-11-29
1、給定兩個整型變數的值,將兩個值的內容進行交換
#include <stdio.h>
#include <stdlib.h>
int main() {
int a = 0;
int b = 0;
int tmp = 0; // C中規定:定義變數必須放到程式碼最前端
scanf_s("%d%d",&a,&b);
// 注意在scanf語句中%d之間不需要換行或空格,因為換行鍵對它來說就是一次讀入
tmp = a;
a = b;
b = tmp;
printf("a = %d b=%d\n", a, b);
}
2、不允許建立臨時變數,交換兩個數的內容
#include <stdio.h>
#include <stdlib.h>
int main() {
int a = 0;
int b = 0;
scanf("%d%d",&a,&b);
// 方法1:利用本身數學算術特性
a = a + b;
b = a - b;
a = a - b;
// 方法2:按位異或操作:
a = a^b;
b = a^b;
a = a^b;
printf("a = %d b=%d\n", a, b);
}
擴充套件:
① 找出整型數組裡只出現一次的數字,其他數字出現兩次;
(思路:運用異或運算,任何一個數字異或它自己都等於0)
② 找出整型數組裡只出現了一次的兩個數字,其他的數字都出現了兩次;(思路:所有數字依次異或的結果就是這兩個只出現一次的數字的異或結果)
③ 要求時間複雜度是O(n),空間複雜度是O(1)。
(輔助空間被限制,Hash表思路不可用)
3、求10個整數中的最大值
#include <"stdio.h"> #include <"stdlib.h"> int main() { int arr[10] = { -1, 2, -3, 4, -5, 6, -7, 8, -9, 0 }; int max = arr[0]; for (int i = 1; i < 10; i++){ if (arr[i]>max){ max = arr[i]; } } printf("%d\n", max); system("pause"); return 0; }
4、將三個數按從大到小順序輸出
void Swap(int *pa, int *pb) {
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
int main(){
int a = 0;
int b = 0;
int c = 0;
scanf_s("%d%d%d", &a, &b, &c);
if (a < b){
Swap(&a, &b);
}
if (a < c){
Swap(&a, &c);
}
if (b < c){
Swap(&b, &c);
}
printf("%d %d %d\n", a, b, c);
system("pause");
return 0;
}
4、求兩個數的最大公約數
// “輾轉相除法”
int main(){
int a = 24;
int b = 18;
// 此處若a小b大也可以算,經過一次迴圈會交換過來
// 可加入b不能為0 的判斷條件
while (a%b != 0)
{
int tmp = a%b;
a = b;
b = tmp;
}
printf("%d\n", b);
system("pause");
}