1. 程式人生 > >C語言程式設計題目~2

C語言程式設計題目~2

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");
}