指针
- #include
-
- int main()
- {
- int a = 10; //向内存申请了4个字节的空间
- // &a取地址操作符
- // printf("%p\n",&a);
- int *p = &a; // *p指针变量,
- // printf("%p\n",p);
- *p = 15; // * --间接访问操作符
- printf("a = %d\n",a);
- return 0;
- }
结构体是我们创建出来的一种类型
- #include
-
- // 创建一个结构体
- struct Book
- {
- char name[20]; // 书名
- short price; // 价格
- }; // ;必不可少
-
- int main()
- {
- // 利用结构体类型创建一个该类型的结构体变量
- struct Book b1 = {"C语言", 20};
- printf("书名:%s\n",b1.name);
- printf("价格:%d\n",b1.price);
- b1.price = 15;
- printf("修改后的价格:%d\n",b1.price);
- return 0;
- }
操作符:
. 结构体变量.成员
-> 结构体指针-> 成员
使用这种方法就可以定义一个结构体用来存放传感器的数据
- #include
-
- // 创建一个结构体
- struct Book
- {
- char name[20]; // 书名
- short price; // 价格
- }; // ;必不可少
-
- int main()
- {
- // 利用结构体类型创建一个该类型的结构体变量
- struct Book b1 = {"C语言", 20};
- struct Book *p = &b1;
- printf("%s\n", p->name); // ->是指针指向对象的操作符
- printf("%d\n", p->price);
- return 0;
- }
- #include
- #include
- // 创建一个结构体
- struct Book
- {
- char name[20]; // 书名
- short price; // 价格
- }; // ;必不可少
-
- int main()
- {
- // 利用结构体类型创建一个该类型的结构体变量
- struct Book b1 = {"C语言", 20};
- strcpy(b1.name, "C++"); // strcpy --字符串拷贝,库函数--string.h
- // 凡是结构体成员是字符串类型的,都需要采用strcpy才能修改其内容
-
- struct Book *p = &b1;
- printf("%s\n", p->name); // ->是指针指向对象的操作符
- printf("%d\n", p->price);
- return 0;
- }
C语言是一门结构化的程序设计语言,顺序结构、选择结构、循环结构
C语言中由一个分号;隔开的就是一条语句。
else匹配最近的一个if语句,除非加{}进行分割
代码风格优化,常量与变量的值进行比较判断时,常量放在左边,变量放在右边
- int num = 1;
- if(5 == num){
- printf("%d\n",num);
- }
练习:
输出1--100之间的奇数
- /*
- *输出1~100之间的奇数
- *思路1:奇数为除以2之后有余数的整数
- *思路2:奇数就是2的倍数加1
- */
- #include
-
- // int main()
- // {
- // int i;
- // for(i = 1; i <= 100; i++)
- // {
- // if (i % 2 != 0)
- // printf("%d\t", i);
- // }
- // return 0;
- // }
-
- // 方法2
- int main()
- {
- int i;
- for (i = 1; i < 100; i += 2)
- {
- if (i % 2 != 0)
- printf("%d\t", i);
- }
- return 0;
- }
输出结果:
switch内允许嵌套
while for do--while
continue在while循环中的作用:
continue是用于终止本次循环,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断。
for循环:
1.for循环的初始化、调整、判断都可以省略,但是for循环的判断部分被省略,则判断条件恒为真
2.如果不是非常熟练,不要顺便省略for循环的各个部分
练习1:计算n的阶乘
- #include
-
- int main()
- {
- int i = 0;
- int n = 0;
- int ret = 1;
- scanf("%d", &n);
- for (i = 1; i <= n; i++)
- {
- ret = ret * i;
- }
- printf("ret = %d\n", ret);
- return 0;
- }
练习2:计算1!+2!+....+10!
- #include
- int main()
- {
- int i = 0;
- int n = 0;
- int ret = 1;
- int sum = 0;
- for (n = 1; n <= 10; n++)
- {
- ret = ret * n;
- sum = sum + ret;
- }
- printf("sum = %d\n", sum);
- return 0;
- }
练习3:在一个有序数组中查找具体的某个数字n,编写intbinsearch(int x, int v[],int n);功能:在v[0]<=v[1]<=v[2]<=.....<=v[n-1]的数组中查找x.
- #include
- int main()
- {
- int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
- int k = 7;
- // 写一个代码,在arr有序数组中找到7
- int i = 0;
- int sz = sizeof(arr) / sizeof(int);
- for (i = 0; i < sz; i++)
- {
- if (k == arr[i])
- {
- printf("已找到,下表是:%d\n", i);
- break;
- }
- }
- if (i == sz)
- printf("未找到\n");
- return 0;
- }
- /*
- 采用二分法查找,有序数组
- */
- #include
- int main()
- {
- int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
- int sz = sizeof(arr) / sizeof(int); // 计算数组中元素的个数
- int left = 0; // 左下标
- int right = sz - 1; // 右下标
- int mid = (left + right) / 2; // 中间元素的下标
-
- int k = 7;
- while (left <= right)
- {
- if (arr[mid] > k)
- right = mid - 1;
- else if (arr[mid] < k)
- left = mid + 1;
- else
- {
- printf("已找到,下表是:%d\n", mid);
- break;
- }
- }
- if (left > right)
- printf("找不到\n");
- return 0;
- }