0%

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 */