1. 程式人生 > >c語言打卡

c語言打卡

第一題 給定兩個整形變數的值,將兩個值的內容進行交換

  • 分析 值交換
  • 思路
  1. 引入第三變數
  2. 不引入第三變數
  • 實現
//引入第三變數
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);
}