每个知识点之间我都隔了个大回车,祝大家万事顺意,恭喜发财
计算圆的面积:1.定义常变量/定义法;2.输入半径时应定义为浮点型变量即float r = 0;
1:常变量 const float i = 3.14;
即在主函数前用define函数声明:#define i 3.14(不需要在结尾加分号)
2.一些常见的变量打印与输入%格式:
字符(char):%c;
整形(int):%d;
浮点型(float):%f;
字符串(char str[]="a,b,c"):%s;
双字符串可以使用puts(str);
单字符串(‘a’)使用putchar(str);
指针(*p):%p;
以上是我近期做题目经常遇到的类型;
scanf输入字符串:
1.定义字符串组:char str [10];
2.输入:scanf("%s",str);
getchar()与putchar():
getchar()函数的功能是从缓冲区中读取一个字符。当缓冲区中没有字符可以读取时,getchar()就会等待我们输入一个字符,然后把它读走,相反,如果缓冲区中存在字符,getchar()就不等我们输入,直接读取缓冲区中的字符。
递归:1.递归出口:疯狂套娃,假如一个式子为f(n),在函数调用中嵌套一个f(n-1),这样每次调用这个函数就会向下减,一直减到一个可以计算的值例如f(1),然后把f(1)的值返回 f(2)中,利用前一项与后一项的关系,一直返回到f(n);
2:等价关系:通俗的说就是f(n)与f(n-1)之间的关系。假如f(n)=10*f(n-1)+3;那么在调用f(n)时就会调用f(n-1),又得到一个式子即f(n-1)=10*f(n-2)+3,继续调用f(n-2);
以此类推,直到通过这个等价关系调用到一个可以计算的值f(1),然后逐层返回就能得到f(n)
函数调用后,打印返回值:printf("%d\n",f(n));记得在调用后加上类似的这样一句话。
指针与数组:
由上图所示arr表示为数组第一个数据的地址,*p=arr,*p就与arr共享一个起始地址为arr[0],大小为10的数组空间。*p所指代的是该地址中的内容,p则指代的是地址。
p每加1,*p就变成了下一个地址的内容,和数组arr[i]如出一辙。
传参:
(值传递)形参与实参,print1(p1)意图在内存中另开辟一处空间,复制一个与p1一样的结构体,再调用函数对所复制的结构体进行操作。
(地址传递)指针传参:print2(&p1)意图把p1的首地址传过去,函数再用一个指针来接受这个地址,通过该指针就可以找到p1的地址,然后对p1进行操作。
将字符串转化为整数:调用stoi()函数,头文件#include<string.h>
使用scanf以%s的格式输入字符串时,读取的却只有第一次空格以前出现的字符。
这是因为scanf只有在遇到\n,也就是是回车时才结束输入,但是遇到空格和tab时就会停止读取。
如图所示,键盘向输入缓冲区放入了Tom is so handsome,scanf函数从输入缓冲区中读取数据并放入输出缓冲区;在 scanf 中,从键盘输入的一切数据,不管是数字、字母,还是空格、回车、Tab 等字符,都会被当作数据存入输入缓冲区。存储的顺序是先输入的排前面,后输入的依次往后排。按回车键的时候 scanf 开始进入输入缓冲区取数据,从前往后依次取,放到输出缓冲区中。但每遇到空格、回车 Tab 就会停止读取。所以下次读取时会读滞留在缓冲区的“is”,再下一次读取空格后滞留的“so”,如此反复,直到读取‘\n’才停止读取操作。
兄弟们,我的实力只能解析到这一步了,如果有懂得哥们,评论区留言,祝兄弟们发大财,家和万事兴。
gets读入以任何字符开始的字符串,以换行符结束,但之后会丢弃换行符并以‘\0’代替;
gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符;
比较:
如图gets()会忽略空格,直到“\n”结束。
无论输入什么样式的字符,gets()都能保证良好的读取。最后强调一点:当用 scanf 从键盘给多个变量赋值时,scanf 中双引号内多个“输入控制符”之间千万不要加逗号。
数组传参时,如果是地址传参,被调用函数(int arr []),切记在后面要加个[]否则会报“表达式必须包含指向对象的指针类型,但他具有“int“ ”的错误。
字符串的初始化及防止“%s”打印出现的乱码:
char str[10];
charstr[]="";
char str[10]="0";
无论是那种初始化在打印过程中为了防止乱码都应空出一个字符放置\0,尤其值得注意的是初始化时char str [系统给出的数字是按输入字符中有几个字符外加一个\0得到的];在计算字符串个数时,数字从1开始,使用字符串下标时数字从0开始,希望大家能区分,方便以后更好的使用。
结构体数组的交换:struct student arr[20];
假如要交换第1个与第二个,首先要定义一个临时变量:struct student temp;结构体的定义是什么,临时变量的定义就是什么,因为结构体中包含了一些提前声明的变量(string name,int age等等),因此定义临时变量的类型也是结构体类型。
void swap(struct student*arr)
{
struct student temp=struct student arr[0];
struct student arr[0]=struct student arr[1];
struct student arr[1]=temp;
}
函数内调用另一个函数的传参问题:
被调用函数:
正在执行的函数:
对地址再取地址后,修改被调用的函数,将其内部用来接受地址的指针改为指针的指针看是否会报错;
指针的指针的嵌套使用我还没有搞太懂,但是对基本的指针的使用略懂一二,如上图。等我搞懂了指针的指针是如何表达地址2的我在下一期会更新。
引用传递:(形参也可以修饰实参)
引用本质上就是给b起了个别名,其次引用必须要初始化并且一旦引用就不能再修改了。
此时会报错,等号左边必须是可以修改的左值。