03c_04day

03c_04day

===========================
2022-7-19
===========================

一.温故知新

    分支语句
        if
            if else
            语句1
            if(条件1)
            {
                语句2
            }
            else if(条件2)
            {
                语句3
            }
            else if(条件3)
            {
                语句4
            }
            语句5

        switch(变量)
        {
            case 整常量1: 语句1; break;
            case 整常量2: 语句2; break;
            case 整常量3: 语句3; break;
            default :     语句4; break;
        }
    循环语句
        for(; ;)//这是一个死循环

        for(表达式1; ;表达式2)

        等价于

        for(表达式1; 1; 表达式2)

        int i = 0, j = 0;

        for(i = 0; i < 10; i++)
        {
            for(j = 0; j < 10; j++)
            {
                
            }
        }
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
```C
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int i = 0, j = 0;

	for(i = 0; i < 4; i++)//管理行数
	{
		for(j = 0; j < 5; j++)//管理列数
		{
			printf("[%d %d]", i, j);
		}
		printf("\n");
	}

	return 0;
}
打印99乘法表
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int i = 1, j = 1;

	for(i = 1; i < 10; i++)
	{
		for(j = 1; j < 10; j++)
		{
			if(j <= i)
				printf("%d X %d = %d ", i, j, i*j);
		}
		printf("\n");
	}

	return 0;
}

99乘法表
resources/99乘法表.png

“百钱百鸡”问题,百钱买百鸡,公鸡1个3块钱,母鸡1个2块钱,小鸡3个一块钱,问公鸡,母鸡,小鸡各多少个
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int g = 0, m = 0, x = 0;//分别表示公鸡 母鸡 小鸡的个数

	for(g = 0; g < 33; g++)
	{
		for(m = 0; m < 50; m++)
		{
			for(x = 0; x < 100; x += 3)
			{
				if((g*3+m*2+x/3==100) && (g+m+x==100))
					printf("G:%d M:%d X:%d\n", g, m, x);
			}
		}
	}

	return 0;
}

随机函数

    rand();			//功能:就是用来产生随机数的
    rand() % 1000; 	//[0 ~ 999]
    rand() % 100 - 50;//[-50 ~ 49]
    
    srand();		//功能:可以保证每一次产生的随机数可变
        srand函数在调用时需要有可变的因子
        time(NULL);	//时间种子
        getpid();	//进程种子
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
	int sum = 0;
	int i = 0;

	//srand(time(NULL));
	//注意:srand函数在程序中只能调用一次
	srand(getpid());

	for(i = 0; i < 5; i++)
	{
		sum = rand() % 100 - 50;
		printf("sum = %d\n", sum);
	}

	return 0;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
	int T = 0;//存储随机出的数字
	int guess = 0;//存储玩家猜的数字
	int num = 1;

	srand(getpid());//随机种子
	
	T = rand() % 10;

	for(num = 1; ; num++)
	{
		scanf("%d", &guess);
		if(T > guess)
			printf("[%d]	Small!\n", num);
		else if(T < guess)
			printf("[%d]	Big!\n", num);
		else
		{
			printf("[%d]	Bingo!\n", num);
			break;
		}
	}

	return 0;
}

循环语句

    do...while循环
1.do while是C语言的关键字
2.do...while循环的使用方法
语句1
do
{
    要循环的语句
}while(循环条件);
语句2
3.do...while循环的执行流程
1
2
3
4
5
6
			|-------<---------<---------
			|							^
			V							|
语句1->要循环的语句->循环条件的判断(真)->
							|
							(假)->语句2
4.while循环与do...while循环的对比
    while : 先执行循环条件的判断,再执行循环的语句
    do...while : 先执行循环的语句,再执行循环条件的判断
    
    while : 可以一次也不执行循环的语句
    do...while : 至少会执行一次循环的语句
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int i = 1;
	int sum = 0;

	while(i <= 100)
	{
		sum += i;
		i++;
	}

	printf("sum = %d\n", sum);

	return 0;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int i = 0, j = 0;

	while(i < 4)
	{
		j = 0;
		while(j < 5)
		{
			printf("[%d %d]\n", i, j);
			j++;
		}
		i++;
	}

	return 0;
}
1
2
3
4
5
6
7
8
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

	return 0;
}

跳转语句 : break continue goto return

1.break continue goto return都是C语言的关键字
2.break关键字
    break只能出现在循环结构或者switch语句中
        使用在循环结构中是用来跳出循环的
        使用在switch语句中是用来跳出switch
    如果break关键字出现在嵌套结构中,只作用于最近的那一层
3.continue关键字
    continue关键字只能出现在循环结构中
        使用在循环结构中跳过本次循环,继续下一次循环
4.return关键字
    return关键字一般来说出现在函数最后的位置
    当一个函数碰到return关键字,这个函数会结束,
    会把返回值返回给函数的调用者
    ------------------------------------------
    return返回的返回值有两种含义
    1)返回的是运算的结果
    2)返回的是函数运行的状态
        return 0;		代表函数运行正常
        return 正数;	代表函数运行有异常
        return 负数;	代表函数运行有错误
    ------------------------------------------
    注意 : return关键字一次只能返回一个值
5.goto关键字(太灵活了)
    可以轻易改变代码的结构
    语句1
标识符:
    语句2
    goto 标识符;
    语句3;
    标识符的命名要求和变量的命名要求一致
    (标识符可以和变量重名,但是不要这样使用)
    同一个标识符不能出现在多个位置
    goto不能跨函数使用
*/
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	if(1)
	{
		break;
	}

	return 0;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int i = 0;

	for(i = 0; i < 5; i++)
	{
		if(i == 2)
			//break;
			continue;
		printf("i = %d\n", i);
	}

	return 0;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	if(!1)
	{
flag:
		printf("Hello World!\n");
	}
	else
	{
		printf("天气好热!\n");
		goto flag;
	}

	return 0;
}