Loading

C语言日记③ 分支和循环

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语言日记④ 分支和循环]]

posted @ 2021-10-15 11:03  Micah666  阅读(151)  评论(0编辑  收藏  举报