1.給定兩個整形變量的值,將兩個值的內容進行交換
問題分析:兩個數交換需要一個臨時變量作爲中間變量,這種方法也比較常用.
代碼:
void main() {
int a;
int b;
int t;
printf("請輸入a的數值\n");
scanf("%d", &a);
printf("請輸入b的數值\n");
scanf("%d", &b);
printf("交換前\na=%d\tb=%d\n", a, b);
t = a;
a = b;
b = t;
printf("交換後\na=%d\tb=%d\n", a, b);
return 0;
}
運行結果:
2. 不允許創建臨時變量,交換兩個數的內容
問題分析:首先我們要了解異或是什麼;在二進制中,異或表現爲相同得0,不同得1;接下來根據代碼中的註釋來理解其中含義.
代碼:
void main() {
//不允許創建臨時變量,交換兩個數的內容
int a = 4; //二進制:100
int b = 5; //二進制:101
printf("交換前\na=%d\tb=%d\n", a, b);
b = a ^ b; //異或之後 b=001 a=100
a = a ^ b; // a=101 b=001
b = a ^ b; // a=101 b=100 兩個說異或之後得到的數再和之前其中的一個屬異或就是另一個數
printf("交換後\na=%d\tb=%d\n", a, b);
return 0;
}
運行截圖:
3.求10 個整數中最大值
問題分析:問題是求出10個整數中的最大值,我們要用到冒泡法來解決這個問題,其次他只要求輸出最大值,所以只需要一次循環即可完成.中間有一行被註釋的部分是兩層循環完成所有數字的排序.
代碼:
void main(){
int a[10];
int i, j, k;
printf("請輸入十個數\n");
for (i = 0; i < 10; i++)
scanf("%d", &a[i]);
for (i= 0; i < 9; i++)
//for (i = 0; i < 9 - j;i++)
if (a[i]>a[i+1]) {
k = a[i], a[i] = a[i + 1], a[i + 1] = k;
}
printf("最大的數爲:%d\n", a[9]);
return 0;
}
運行截圖:
4.將三個數按從大到小輸出
問題分析:根據上一個題來做這個題將會很簡單,依然用冒泡法,然後用兩層for循環來將所有數排序.內層循環是從第一個數依次往下比較將小的數通過交換往下放,外層循環是內層循環執行結束後再從第一個數開始做比較重複內層循環但是由於內層循環結束一次就代表已經有也個數完成比較放到了最下邊,所以這次就會比上次少比較一次,所以內層循環是i<2-j.重複着兩個過程直到完成所有數的比較.
代碼:
void main() {
int a[3];
int i;
int j;
int k;
printf("請輸入三個數:\n");
for (i = 0; i < 3; i++)
scanf("%d", &a[i]);
printf("/n");
for (j = 0; j < 3; j++)
for (i = 0; i < 2 - j; i++)
if (a[i] < a[i + 1]) {
k = a[i], a[i] = a[i + 1], a[i + 1] = k;
}
printf("從大到小排序爲:\n");
for (i = 0; i < 3; i++)
printf("%d\t", a[i]);
printf("\n");
return 0;
}
運行截圖:
5.求兩個數的最大公約數
問題分析:通過除法的方式來得到最大公約數,用大的數來除以小的數將會得到一個餘數,然後再用之前兩個數中小一點的數再除以這個餘數,得到第二個餘數,再將第一個餘數來除以第二個餘數得到第三個餘數,重複這樣直到兩個數能整除,你麼最後得到的這個餘數就是兩個數的最大公因數,具體結合代碼看一遍就好了.
代碼:
void main(){
int a, b, c, j;
printf("請輸入這兩個數字:\n");
scanf("%d%d",&a,&b);
if (a < b) {
c = a;
a = b;
b = c;
}
while (a % b != 0) {
c = a % b;
j = a;
a = b;
b = c;
if (a % b == 0) {
printf("最大公約數爲%d\n", b);
}
}
if (a%b!=0) {
printf("最大公約數爲1");
}
return 0;
}
運行結果: