关于 C 语言指针个人理解的小笔记 作者: Chuwen 时间: 2020-12-15 分类: C/C++ 评论 # 序言 就在去年(2019年10月),为了学习 Android 开发,我去学了 Java(虽然学的不怎么样),这种强类型语言应该是我认认真真学过的**第二个强类型语言**,第一个是 C 语言,大一的时候学习过基本语法知识等,但在**指针**的学习过程中,我学的云里雾里,没想清楚为什么需要怎么做。 到现在,能写出一些些小小功能的 Android 软件,常规的布局、基本控件的交互使用、一些框架的使用(比如 MPAndroidChart、Gson)。 我在其中也学习到许多新的知识以及对以前所学习的**指针**有了一定的了解,当然还有其它的收获,我可能会在 **2020 年度总结** 专门写。 # C 语言指针 > 因为最近我再学习一些算法,使用到 C 语言指针,但是大致懂什么意思,就是有时候会忘记,所以再次写一下,以便巩固 ```c #include "stdio.h" int main(){ int var1;//定义产常规变量 int *point;//定义指针变量 int *point2;//定义指针变量 var1 = 20170101;//变量赋值 printf("打印变量的值 var = %d \n", var1); //在变量名前面加一个 & 表示该指针的地址 printf("打印变量存储地址 var = %p \n\n", &var1); /***********************************************************/ //指针赋值,将 var1 的指针地址,赋值给 point 指针变量 point = &var1; printf("point 指针地址 %p \n", point); //指针变量取值 printf("point 指针变量的值为 %d \n\n", *point); //指针变量 赋值给 指针变量 point2 = point; printf("point2 指针地址 %p \n", point2); //修改指针值,因为 point、point2 指针地址都指向了变量 var1 的指针地址 //那么当 point、ponit2 指针变量对其值进行修改,那么所有指向该指针地址的“指针变量” //它的值都会变成我们修改的 100 *point2 = 100; printf("var1 的值 %d\n", var1); printf("point 的值 %d\n", *point); printf("point2 的值 %d\n\n", *point2); var1 = 200; printf("var1 的值 %d\n", var1); printf("point 的值 %d\n", *point); printf("point2 的值 %d\n\n", *point2); return 0; } ``` # 总结 - 获取 常规变量 指针地址,在变量名前加 `&` 获取 - 获取 指针变量 的值,在指针变量名前加 `*` 获取 - 当指针地址的值改变了,那么所有指向该**指针地址**的值,都将改变
C/C++ 语言 #include "" 和 #include <> 双引号和尖括号引用头文件 .h 的区别 作者: Chuwen 时间: 2020-12-14 分类: C/C++ 评论 # 前因 因为自己在编写头文件时,使用 `#includ ` 引入头文件时,出现了错误,百思不得其解,然后又想到了 `#include "xxx.h"` 来引入,果真能够成功编译 ![自己编写的头文件,使用 #includ 引入头文件时,出现了错误,编译不通过][1] 然后我就想到了,这两者的使用应该是由区别的,然后网上搜了下,果真如此,然后就就简单记录下 # 简单的区别就是 1. `#include ` 引入的是**系统自带**的头文件,编译器会在系统目录下寻找 2. `#include "xxx.h"` 引入的是**用户编写**的头文件,编译器会在用户目录下寻找,然后再去 C 安装目录下查找,**如果没有找到**,则会在系统目录下寻找 # 总结 无论是系统自带的头文件,还是用户编写的头文件(`xxx.h`),使用双引号 `#include "xxx.h"` 引入头文件,一定是正确的 # 又水了一篇... [1]: https://cdn.nowtime.cc/2020/12/14/722291638.jpg
[C语言]用递归法求n阶勒让德多项式 作者: Chuwen 时间: 2019-06-02 分类: C/C++ 评论 # 题目 > ## 用递归法求n阶勒让德多项式,递归公式为: ``` { 1 (n=0) Pn(x) = { x (n=1) { ((2n-1)*x-Pn-1(x)-(n-1)*On-2(x))/n (n>=1) ``` ![用递归法求n阶勒让德多项式,递归公式为][1] # 解题思路 1. 要求输入 n 和 x 的值 2. 输出 Pn(x) 的值 # C语言代码实现 ```c #include "stdio.h" int main(){ double legendre(double n, double x);//声名自定义的函数 legendre double n,x; printf("请输入n、x(空格隔开):"); scanf("%lf %lf", &n, &x); printf("结果:%lf", legendre(n, x)); return 0; } double legendre(double n, double x){ double s; if(n == 0){ s = 1; }else if(n == 1){ s = x; }else if(n > 1){ //使用递归 legendre(n-1.0, x)、legendre(n-2.0, x) s = ((2.0*n-1.0)*x-legendre(n-1.0, x)-(n-1.0)*legendre(n-2.0, x))/n; } return s; } ``` # 测试 > ## 输入 n 和 x 的值为:`2` 和 `2` > ## 预想返回结果:`1.5` ``` 请输入n、x(空格隔开):2 2 结果:1.500000 ``` [1]: https://cdn.nowtime.cc/2019/06/02/4033601759.jpg
C 语言输出 杨辉三角 作者: Chuwen 时间: 2019-05-16 分类: C/C++ 评论 # 原理自己看下注释,最好是自己在纸上写出几行(如 6 行),寻找规律(每个数等于它上方两数之和。) > ## 关于`杨辉三角,请查看 [杨辉三角-百度百科][1] # C 代码: ```c #include int main() { // row:表示 行 // column:表示 列 int row,column; //设置 <第0行第0列> 值为1 //设置 <第1行第0列、第1列> 值为1 int arr[10][10]={{1}, {1,1}}; for(row=2; row<10; row++){ arr[row][0] = 1;//设置第 row 行第 0 列的值为 0 for(column=1; column + 上一行<该列> 的值 //例如:row=2, column=1,则 arr[2][1] 的值为 //arr[2-1][1-1]+arr[2-1][1] arr[row][column] = arr[row-1][column-1]+arr[row-1][column]; } arr[row][column] = 1;//设置第 row 行第 column 列的值为 1 } printf("输出<10行>杨辉三角:\n"); for(row=0; row<10; row++){ for(column=0; column<10; column++){ if(arr[row][column] != 0){//输出值不为0的数 printf("%4d", arr[row][column]); } } printf("\n"); } } ``` [1]: https://baike.baidu.com/item/%E6%9D%A8%E8%BE%89%E4%B8%89%E8%A7%92/215098
C 语言 | 猴子吃桃问题 循环结构程序设计-第12题 作者: Chuwen 时间: 2019-04-19 分类: C/C++ 评论 #题目 > 猴子吃桃问题。猴子第1天摘下若干个桃子,当即除了一般,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉了一半,有多吃了一个。 > 以后每天早上都吃了前一天剩下的 `一半零一个`。到第10天早上想再吃时,就只剩一个桃子了。 > **求第1天共摘了多少个桃子?** # 解题思路 1.假设 **桃子** 总共有 `x 个`,则可以列出式子: > y1:第1天剩下的桃子数量 > y2:第2天剩下的桃子数量 > ... > y9:第9天剩下的桃子数量 ``` y1 = x/2 - 1 y2 = y1/2 - 1 y3 = y2/2 - 1 y4 = y3/2 - 1 y5 = y4/2 - 1 y6 = y5/2 - 1 y7 = y6/2 - 1 y8 = y7/2 - 1 y9 = y8/2 - 1 ``` 2.根据**题目**得知,第9天还剩一个桃子,故我们可解方程得出: ``` 因为 y9 = 1 所以将 y9=1 带入 y9 = y8/2 - 1,解得方程 y8 = 1+1*2 y8 = 4 然后继续往上解,即可得到第1天摘了多少个桃子 ``` --- # C 代码 ```c #include int main() { int days=1, peach=1, eat; do{ peach = (peach+1)*2; days++; }while(days<10); printf("猴子第 1 天摘了:%d 个桃子", peach); printf("\n-------------------------------\n"); printf("验证结果:\n"); days = 1; do{ eat = peach/2+1;//吃了多少个桃子 peach -= eat;//桃子的剩余数量 printf("第%2d 天:吃了 %3d 个,剩余 %3d 个桃子\n",days,eat,peach); days++; }while(days<=10); } ``` # 运行结果 ``` 猴子第 1 天摘了:1534 个桃子 ------------------------------- 验证结果: 第 1 天:吃了 768 个,剩余 766 个桃子 第 2 天:吃了 384 个,剩余 382 个桃子 第 3 天:吃了 192 个,剩余 190 个桃子 第 4 天:吃了 96 个,剩余 94 个桃子 第 5 天:吃了 48 个,剩余 46 个桃子 第 6 天:吃了 24 个,剩余 22 个桃子 第 7 天:吃了 12 个,剩余 10 个桃子 第 8 天:吃了 6 个,剩余 4 个桃子 第 9 天:吃了 3 个,剩余 1 个桃子 第10 天:吃了 1 个,剩余 0 个桃子 ``` ![Snipaste_2019-04-19_13-56-06.png][1] [1]: https://cdn.nowtime.cc/2019/04/19/2394092364.png