03c_03day

03c_03day

===========================
2022-7-18
===========================

一.温故知新

    运算符
        算术运算符		+ - * / %
            注意 : 除法运算符中除数不能为0
        关系运算符		> < == >= <= !=
            注意 : 
            1.一个表达式经过关系运算符的运算最后是真假值
            2.判断两个值是否相等用==
            3.if(a == 13) 建议 if(13 == a)
        逻辑运算符		&& || !
            注意 :
            1.一个表达式经过逻辑运算符的运算最后是真假值
            2.条件1 && 条件2
                条件1为真,会执行条件2
                条件1为假,不会执行条件2
            3.条件1 || 条件2
                条件1为真,不会执行条件2
                条件1为假,会执行条件2
        赋值运算符		= += -= *= /= &= |= ...
            注意 : 先计算右边的项,再和左边结合
        位运算符		<< >> & | ~ ^
            注意 : 操作数符号的问题
        条件运算符		? :
            注意 : 是C语言中唯一的一个三目运算符
        下标运算符		[]
        指针运算符		* &
        分量运算符		. ->
        求字节大小运算符sizeof()
            注意 : sizeof不是函数,是一个运算符
        强制类型转换	()
            注意 : 会在指针的时候使用
        自增自减		++ --
        逗号运算符		,
 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
#include <stdio.h>
#include <stdlib.h>

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

	scanf("%d-%d", &a, &b);

	printf("a = %d b = %d\n", a, b);
	//通过某种方法交换a和b的值
	/*
	int tmp = 0;
	tmp = a;
	a = b;
	b = tmp;
	a = a + b;
	b = a - b;
	a = a - b;
	*/
	a = a ^ b;//a = 1101 ^ 0111 = 1010
	b = a ^ b;//b = 1010 ^ 0111 = 1101
	a = a ^ b;//a = 1010 ^ 1101 = 0111
	printf("a = %d b = %d\n", a, b);

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

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

	sum += a++;

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

	return 0;
}

逗号运算符

    如果一个表达式使用了逗号运算符
        如果没有加小括号,那么会把第一个项的结果赋值给变量
        如果有加小括号,那么会把最后一个项的结果赋值给变量
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int a = 0, b = 10, c = 20, d = 30;
	
	a = (b++,c+5,d+10);

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

	return 0;
}

分支结构

    if
1.if else是C语言的关键字
2.if使用方法
    语句1
    if(条件)
    {
        语句2
    }
    语句3

语句1->条件的判断(真)->语句2->语句3
        |
        (假)->语句3
3.if else使用方法
    语句1
    if(条件)
    {
        语句2
    }
    else
    {
        语句3
    }
    语句4
语句1->条件的判断(真)->语句2->语句4
        |
        (假)->语句3->语句4
4.if else if else if使用方法
    语句1
    if(条件1)
    {
        语句2
    }
    else if(条件2)
    {
        语句3
    }
    else if(条件3)
    {
        语句4
    }
    else
    {
        语句5
    }
    语句6
语句1->条件1的判断(真)->语句2->语句6
        |
        (假)->条件2的判断(真)->语句3->语句6
                |
                (假)->条件3的判断(真)->语句4->语句6
                        |
                        (假)->语句5->语句6
5.使用if需要注意的问题
    1>if关键字之后必须要写小括号,小括号内必须写内容
    2>else关键字之后不能直接加小括号写条件,需要写成else if
    3>if(条件)之后可以直接加 ; 
        if(条件);
        {
            语句
        }
        等价于
        if(条件)
        {
            ;
        }
        {
            语句
        }
    4>if(条件)之下可以不加大括号
        if(条件)
            语句1
            语句2
        等价于
        if(条件)
        {
            语句1
    	}
        语句2
 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 c = 0;

	scanf("%d", &c);

	//if(c % 2 == 0)//判断是否是偶数的条件
	if((c & 1) == 0)//位运算符(判断最低位是否为0)
	{
		printf("%d是偶数!\n", c);
	}

	return 0;
}
 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 c = 0;

	scanf("%d", &c);

	//if(c % 2 == 0)//判断是否是偶数的条件
	if((c & 1) == 0)//位运算符(判断最低位是否为0)
	{
		printf("%d是偶数!\n", c);
	}
	else
	{
		printf("%d是奇数!\n", c);
	}

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

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

	scanf("%d", &year);

	//if((year%4==0&&year%100!=0) || (year%400==0))
	if((!(year%4)&&year%100) || !(year%400))
	//判断是否是闰年的条件
	{
		printf("%d年是闰年!\n", year);
	}
	else
	{
		printf("%d年是平年!\n", year);
	}

	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
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int a = 0, b = 0, c = 0;

	scanf("%d-%d-%d", &a, &b, &c);
	//if error

	if(a+b>c && a+c>b && b+c>a)//判断可以构成三角形的条件
	{
		if(a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a)
		//判断可以构成直角三角形的条件
		{
			printf("可以构成直角三角形!\n");
		}
		else if(a == b || a == c || b == c)
		//判断是否可以构成等腰三角形
		{
			if(a == b && a == c)
			{
				printf("可以构成等边三角形!\n");
			}
			else
			{
				printf("可以构成等腰三角形!\n");
			}
		}
		else
		{
			printf("可以构成普通三角形!\n");
		}
	}
	else
	{
		printf("不能构成三角形!\n");
	}
	
	return 0;
}
 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 = 0;

	scanf("%d", &i);

	switch(i)
	{
		case 1 : printf("Hello World!\n");
		case 2 : printf("北京欢迎您!\n");
		case 3 : printf("物联网嵌入式!\n");
		case 4 : printf("今天好热!\n");
	}

	return 0;
}
输入年月日,打印出是该年的第几天
//2022-7-18
是2022年的第?天
2022-1-9	9天
2022-2-9	9+31天
2022-3-9	9+(28||29)+31
2022-4-9	9+31+(28||29)+31
 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
33
34
35
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int year = 0, month = 0, day = 0;
	int flag = 0;//用来标记闰年和平年
	int days = 0;//用来存储最后总天数

	scanf("%d-%d-%d", &year, &month, &day);
	/*if error*/

	flag = (!(year%4)&&(year%100)) || !(year%400);
	//如果是闰年 flag = 1 否则 flag = 0

	switch(month)
	{
		case 1 : days += day; break;
		case 2 : days += (day + 31); break;
		case 3 : days += (day + 59 + flag); break;
		case 4 : days += (day + 90 + flag); break;
		case 5 : days += (day + 120 + flag); break;
		case 6 : days += (day + 151 + flag); break;
		case 7 : days += (day + 181 + flag); break;
		case 8 : days += (day + 212 + flag); break;
		case 9 : days += (day + 243 + flag); break;
		case 10: days += (day + 273 + flag); break;
		case 11: days += (day + 304 + flag); break;
		case 12: days += (day + 334 + flag); break;
	}

	printf("%d年%d月%d日是这一年的第%d天!\n", year, month, day, days);

	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
33
34
35
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int year = 0, month = 0, day = 0;
	int flag = 0;//用来标记闰年和平年
	int days = 0;//用来存储最后总天数

	scanf("%d-%d-%d", &year, &month, &day);
	/*if error*/

	flag = (!(year%4)&&(year%100)) || !(year%400);
	//如果是闰年 flag = 1 否则 flag = 0

	switch(month)
	{
		case 12: days += 30;
		case 11: days += 31;
		case 10: days += 30;
		case 9 : days += 31;
		case 8 : days += 31;
		case 7 : days += 30;
		case 6 : days += 31;
		case 5 : days += 30;
		case 4 : days += 31;
		case 3 : days += (28 + flag);
		case 2 : days += 31;
		case 1 : days += day;
	}

	printf("%d年%d月%d日是这一年的第%d天!\n", year, month, day, days);

	return 0;
}

循环语句

    for
1.for是C语言中的关键字
2.for循环的使用方法
    语句1
    for(循环变量的赋值; 循环变量的控制; 循环变量的变化)
    {
        循环的语句
    }
    语句2
3.for循环的执行流程
                    语句1
                        |
                        V
                循环变量的赋值
                        |
                        V
            |-<-循环变量的控制--<---|
            |			|			|
            V			V			|
            假			真			|
            |			|			^
            V			V			|
            |		循环的语句		|
            |			|			^
            |			V			|
            |	循环变量的变化-->---|
            |
            |---->------|
                        V
                    语句2
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>

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

	for(i = 0; i < 10; i++)
	{
		scanf("%d", &score);
		printf("score = %d\n", score);
	}

	return 0;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
//求3位数字的水仙花数
//百位数字的3次方 + 
//十位数字的3次方 + 
//个位数字的3次方 == 3位数
int main(int argc, char *argv[])
{
	int i = 0;
	int b = 0, s = 0, g = 0;

	for(i = 100; i < 1000; i++)//[100 ~ 999]所有三位数
	{
		b = i / 100;//取三位数的百位
		s = i / 10 % 10;//取三位数的十位
		g = i% 10;//取三位数的个位
		if(i == b*b*b + s*s*s + g*g*g)
			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
19
20
21
22
#include <stdio.h>
#include <stdlib.h>

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

	for(b = 1; b < 10; b++)
	{
		for(s = 0; s < 10; s++)
		{
			for(g = 0; g < 10; g++)
			{
				if(b*b*b+s*s*s+g*g*g==b*100+s*10+g)
					printf("%d\n", b*100+s*10+g);
			}
		}
	}

	return 0;
}
/*
打印0~100以内所有的质数(素数)
(只能被1 和 本身整除的数)
*/
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <stdlib.h>

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

	for(i = 2; i < 100; i++)
	//该循环为了取出[0-100]以内所有数字
	{
		for(j = 2; j < i; j++)//该循环为了取出[2 - i-1]
		{
			if(i % j == 0)//判断是否能被整除
			{
				break;//如果能被整除说明不是质数,跳出
			}
		}
		if(i == j)
			printf("[%d]	%d\n", num++, i);
	}

	return 0;
}
/*
    11	是不是质数
    
    11 % 1 = 0
    11 % 2 != 0
    11 % 3 != 0
    11 % 4 != 0
    11 % 5 != 0
    11 % 6 != 0
    11 % 7 != 0
    11 % 8 != 0
    11 % 9 != 0
    11 % 10 != 0
    11 % 11 = 0

    8	是不是质数
    8 % 1 = 0
    8 % 2 = 0	能整除
    8 % 3 != 0
    8 % 4 = 0	能整除
    8 % 5 != 0
    8 % 6 != 0
    8 % 7 != 0
    8 % 8 = 0

    i	是不是质数
    i % 1 = 0
    i % [2 ~ i-1]
    i % i = 0
*/