🌺博客汇总:🌃Summary And Schedule🌠

🌸考研相关内容汇总:考研Schedule&&Summary

🌼408王道C督学课程目录:《王道C语言督学班目录》

🌺理解并掌握

  • 1、a>b?a:b、if(i+3,j-1)取后值j-1

(条件运算符是C语言唯一的三目运算符,逗号表达式的整体值是最后一个表达式的值)

  • 2、++,j = *p++;
  • 3、<<乘2,>>除2向下取整,&|^(异或),0^a=a,a^a=0
  • 4、switch(){case:;break;default:},do-while
  • 5、二维数组、二级指针

1、条件运算符与逗号运算符

a>b?a:b(Conditional Operator)

1
2
3
4
5
6
7
8
9
10
11
12
13
//输入两个数取最大值
#include <stdio.h>

int main()
{
int a,b,max;
while(scanf("%d%d",&a,&b))
{
max=a>b?a:b;
printf("max=%d\n",max);
}
return 0;
}

if(i+3,j-1)(Comma Operator)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//if(i+3,j-1),中间括号取j-1的值
#include <stdio.h>

int main()
{
int i,j;
i=10;
j=1;
if(i+3,j-1)//逗号表达式整体的值是最后一个表达式的值
{
printf("if execute\n");
}
//逗号表达式的常见使用场景,for的表达式1初始化多个变量用的较多
for(i=0,j=1;i<10;i++)
{

}
return 0;
}

2、自增自减运算符

++(Increment Operator)

1
2
3
4
5
6
7
8
9
#include <stdio.h>

int main()
{
int i=-1,j;
j=i++>-1;//后++等价于j=i>-1 ; i=i+1;
printf("i=%d,j=%d\n",i,j);
return 0;
}

指针++(Increment Pointer)

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

int main() {
int a[3]={3,7,8};
int *p;
int j;
p=a;//p指向数组起始元素
j=*p++; //先把*p的值赋给j,然后对p加1。等价于语句 j=*p;p++;
printf("a[0]=%d,j=%d,*p=%d\n",a[0],j,*p);//a[0]=3,j=3,*p=7
j=p[0]++; //先把p[0]赋给j,然后对p[0]加1。等价于语句 j=p[0];p[0]++
printf("a[0]=%d,j=%d,*p=%d\n",a[0],j,*p);//a[0]=3,j=7,*p=8
return 0;
}

3、位运算符

Bit Cal

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
#include <stdio.h>
//位运算符
int main() {
short i = 5;//short是整型,是2个字节的整型,int 是4个字节
short j;
j=i << 1;//一个变量移动以后自身不会变化
printf("j=%d\n", j);//左移是乘2,结果为10
// i=-8;
j = i >> 1;
printf("j=%d\n", j);//右移是除2,结果是2
printf("-----------------\n");
i = 0x8011;
unsigned short s = 0x8011;//在short前加unsigned
unsigned short r = 0;
j = i >> 1;//对i右移,对有符号数进行右移
r = s >> 1;//对s右移,对无符号数进行右移
printf("j=%d,r=%u\n", j, r);//结果是不一样的
printf("-----------------\n");
//接下来来看 按位与,按位或,按位异或,按位取反
i = 5, j = 7;
printf("i & j=%d\n", i & j);
printf("i | j=%d\n", i | j);
printf("i ^ j=%d\n", i ^ j);
printf("~i=%d\n", ~i);
return 0;
}

XOR异或

任何数异或0为其本身,0^a=a

任何数异或本身为0,a^a=0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>

int main() {
int i;
int arr[5] = { 8 ,5, 3, 5, 8 };
int result = 0;
for(i=0;i<5;i++)
{
result=result^arr[i];//异或满足交换律
}
printf("%d\n", result);//输出为3
return 0;
}

4、switch,do-while讲解

switch

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
#include <stdio.h>
//switch 日期例子
int main()
{
int year,mon;
while(scanf("%d%d",&year,&mon))
{
switch (mon)
{
case 2:printf("mon=%d is %d days\n",mon,28+(year%4==0&&year%100!=0||
year%400==0));break;
case 1:printf("mon=%d is 31days\n",mon);break;
case 3:printf("mon=%d is 31days\n",mon);break;
case 5:printf("mon=%d is 31days\n",mon);break;
case 7:printf("mon=%d is 31days\n",mon);break;
case 8:printf("mon=%d is 31days\n",mon);break;
case 10:printf("mon=%d is 31days\n",mon);break;
case 12:printf("mon=%d is 31days\n",mon);break;
case 4:printf("mon=%d is 30days\n",mon);break;
case 6:printf("mon=%d is 30days\n",mon);break;
case 9:printf("mon=%d is 30days\n",mon);break;
case 11:printf("mon=%d is 30days\n",mon);break;
default:
printf("error mon\n");
}
}
return 0;
}

do-while

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

int main() {
int i=1,total=0;
do{
total+=i;
i++;
}while(i<=100);//必须有分号,否则编译不通
printf("total=%d\n",total);
return 0;
}

5、二维数组,二级指针讲解

二维数组

1
2
3
4
5
6
7
8
9
#include <stdio.h>

int main() {
//通过调试查看元素存放顺序
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12 };
printf("sizeof(a)=%d\n",sizeof(a));
printf("a[2][3]=%d\n", a[2][3]);//最后一个元素是a[2][3]
return 0;
}

二级指针

**p2 ~ *p ~ i ~ 10

*p2 ~ p ~ &i 存的是i的地址

P2 ~ &p 存的是p的地址

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
//二级指针的理解
int main() {
int i=10;
int *p=&i;
int **p2=&p;//如果我们需要把一个一级指针变量的地址存起来,那么就需要二级指针类型
printf("sizeof(p2)=%d\n",sizeof(p2));//p2和p同样大,都是8个字节
printf("**p2=%d\n",**p2);//通过两次取值可以拿到i
return 0;
}

🌺6、OJ作业

网站:http://oj.lgwenda.com/

1、<< 、>>

描述:读取一个有符号数,对其进行左移,输出结果,对其进行右移,输出结果,例如,输入数值5,左移得到的结果是10,右移得到的结果是2。(不考虑左移后正值变为负值,负值变为正值的情况),每个输出占用2个字符位置,采用(%2d)

输入:输入的值为5

输出:输出左移1位后的值,为10,换行,再输出右移后的值为2。

🌺🌺🌺题解ヾ(^▽^)ゞ🌼🌼🌼
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
//位运算符
int main() {
int i = 5;
int j;
scanf("%d",&i);
j = i << 1;
printf("%2d\n", j);
j = i >> 1;
printf("%2d\n", j);
return 0;
}

2、^异或

描述:输入5个数,其中2个数出现2次,1个数是出现1次,找出出现1次的那个数,例如输入的是8 5 3 5 8,输出的值为3

输入:8 5 3 5 8

输出:3

🌺🌺🌺题解ヾ(^▽^)ゞ🌼🌼🌼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

int main()
{
int i;
int arr[5];
for(i=0;i<5;i++)
{
scanf("%d",&arr[i]);
}
int result=0;
for(i=0;i<5;i++)
{
result^=arr[i];
}
printf("%d\n",result);
return 0;
}