1. 程式人生 > 其它 >C語言日記③ 分支和迴圈

C語言日記③ 分支和迴圈


筆記更新於: '2021-10-15 11:01:20'


c語言是一門結構化的程式設計語言

  • 順序結構
  • 選擇結構
  • 迴圈結構

if選擇

與java一致

題目:
判斷一個數是否為奇數
輸出100以內的奇數

int main() {
	for (size_t i = 0; i < 100; i++)
	{
		if (i % 2 != 0) {
			printf("%d\n", i);
		}
	}
	return 0;
}

switch選擇

與java一致

給個數,判斷是星期幾

int num = 0;
	scanf("%d", &num);
	switch (num)
	{
	case 1:
		printf("%s\n", "星期一");
		break;
	case 2:
		printf("%s\n", "星期二");
		break;
	case 3:
		printf("%s\n", "星期三");
		break;
	case 4:
		printf("%s\n", "星期四");
		break;
	case 5:
		printf("%s\n", "星期五");
		break;
	case 6:
		printf("%s\n", "星期六");
		break;
	case 7:
		printf("%s\n", "星期七");
		break;
	default:
		break;
	}

控制檯與char

getchar()從控制檯獲取一個字元的ASCII碼
putchar(ASCII碼 )從控制檯列印一個char

迴圈列印,除了ctrl+z
ctrl+z 會獲取一個EOF

	int charn = getchar();
	while ((charn=getchar())!=EOF) {
		putchar(charn);
	}
	

有時候getchar 會讀取到\n
這時候需要清空緩衝區
再來一次
getchar()

getchar 只能讀取一個字元 scanf 不會讀取到空格

for迴圈

與java一致,不可foreach

有趣的for程式碼:
1.

for (;;) {
		printf("呵呵\n");
	}

死迴圈 一直輸出呵呵

for迴圈的初始化,調整,判斷都可以省略
但是判斷省略迴圈條件就一直為真

	int i = 0;
	int j = 0;
	for (; i < 10; i++)
	{
		for (; j < 10; j++)
		{
			printf("呵呵\n");
		}
	}

這個程式碼會輸出多少個哈哈呢?

答案是:10個

為什麼呢?

因為第一次i的for迴圈的時候j已經變為10了,此時進行第二次i迴圈,j不會重新變成0,j部分直接跳過

迴圈題目

計算一個數的階乘
階乘計算公式為 !n=1*2*3*4...*n

	int num = '0';
	scanf("%d", &num);
	int count = 1;
	for (size_t i = 1; i < num+1; i++)
	{
		count *= i;
	}
	printf("%d\n", count);

計算1!+2!+3!...+10!

	int result = 0;
	for (size_t i = 0; i <= 10; i++)
	{	
		int count = 1;
		for (size_t j = 1; j < i+1; j++)
			{
				count *= j;
			}

		printf("%d--%d\n", i,count);
		result += count;
	}
int binsearch(int x,int *v, int n) {
	//這裡注意一下,傳遞過來的陣列長度是不能計算的,賊坑
	//int length = sizeof(v) / sizeof(v[0]); 
	int result = -1;
	for (size_t i = 0; i < n; i++)
	{
		if (x == v[i])
			result = v[i];
		if (i==n-1)
		{
			break;
		}
	}
	return result;
}


main:

	int arr[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14 };
	int result = binsearch(13,arr,100);
	
	printf("%d\n", result);
for (size_t i = 0; i < 10; i++)
	{
		if (i == 9)
			break;
		if (i != 9)
			printf("\n");
		for (size_t j = 0; j < i; j++)
		{
			printf(" ");
		}
		for (size_t j = 10; j > i; j--)
		{
			printf("**");
		}


	}
	for (size_t i = 0; i < 10; i++)
	{
		for (size_t j = 10; j > i; j--)
		{
			printf(" ");
		}
		for (size_t j = 0; j < i; j++)
		{
			printf("**");
		}
		if (i != 9)
			printf("\n");

	}
int main() {
	char pwd[20] = { 0 };
	int num = 0;
	while (num < 3) {
		printf("請輸入密碼:");
		scanf("%s", pwd);
		if (strcmp("123456",pwd)!= 0) {
			printf("%s\n", pwd);
			num++;
		}
		else {
			printf("輸入正確!");
		}
	};
	return 0;
}

陣列迴圈查詢之二分查詢法

想在一個0-100的陣列內找出99,如果按照傳統的查詢方法來查詢,需要查詢99此才能找到,而二分查詢法可以7(?次就找到

具體查詢實現

求0和陣列長度的平均值
判斷與所需的值是大了還是小了,如果小了,則進行尋找大於的50%,反之

最後找到等於所求值的數

tips:
如果尋找不到,會有最大值和最小值互換的情況判斷這點可以確定是否找到,注意,最大值一定是大於最小值的

#define MID(X,Y) ((X+Y)/2)


int arr[] = { 1,2,3,4,5,6,7,8,9,10,13 };
	int sz = sizeof arr / sizeof arr[0];
	int left = 0;
	int right = sz - 1;
	int k = 3;

	while (left<=right)
	{
		int mid = MID(left, right);
		if (arr[mid] > k){
			right = mid - 1;
		}
		else if (arr[mid] < k) {
			left = mid + 1;
		}
		else {
			printf("找到了,下標在:%d  當前下標輸出值:%d\n", mid,arr[mid]);
			break;
		}
	}
	if (right<left)
	{
		printf("沒找到\n");
	}

[[C語言日記④ 分支和迴圈]]