------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
在学习基本算法与流程控制之前,先补充在学习C语言基础语法时的变量内存分析以及scanf函数的一些用法注意。
一、变量内存分析:不同的数据类型所占用的字节是不一样的,数据越大,所占用的字节数就越多,在系统分配内存时,内存寻址是由大到小的,在系统中验证输出内存地址的C语言语句是:printf("变量的内存地址是:%p" , &变量名)。其中&是一个地址运算符,用来取得变量的地址,%p是用来输出地址。
二、scanf函数:scanf函数与printf函数是相对的,printf函数是输出一些数据到电脑屏幕上,而scanf函数则是需要用户输入数据,当程序执行到scanf函数时会暂时停止,需要用户输入信息按回车键后再继续执行。
scanf函数只接受变量的地址,因此在使用scanf函数时scanf("%d" , &变量名)。注意:scanf函数中不能有换行符\n。在一次性输入多个数值时,编写代码以某些符号隔开,在用户输入时也要输入相同的符号。
一、C语言的基本运算
c语言的基本运算主要包括算术运算、赋值运算、自增自减运算、关系运算、逻辑运算以及三目运算等,下面我们来交流一下我觉得其中的易混淆点以及注意的地方。
1、算术运算:主要包括的就是加,减,乘,除和取余运算,其中需要注意的是取余运算又称为模运算,在%的两边也都是整数,并且%取余的结果正负只跟%左边的数值的正负有关。(%左边为正则取余的结果为正,反之左边为负值结果就是负值)
2、赋值运算:这个没有什么多说的,比较简单,注意与==区分好。
3、自增自减运算:体会a=a+1,a+=1,a++,++a的相同和不同之处。注意++a是在a自增后使用,而a++则是先使用再自增。sizeof是计算其所占的内存的字节数
4、关系运算:C语言的真假问题,在C语言中任何非0的值都为真(无论正数负数),只有0才为假。关系运算包括比较大小,等于或不等于等等。
5、逻辑运算:逻辑与&&,逻辑或||,逻辑非!条件,其中逻辑非是条件成立则返回0,如果条件不成立则返回1.
6、三目运算:三目运算符:条件 ? 数值1 : 数值2 条件成立则返回数值1,不成立返回数值2
二、流程控制中的选择结构
C语言选择结构主要包括if语句和switch语句,在学习if语句时有个作用域问题是需要注意的,下面就用代码来描述一下:
1 #include <stdio.h> 2 3 int main() 4 { 5 int a = 10; 6 if (a>1)//在执行if语句时未加大括号,条件成立后执行下一语句,但不管条件是否成立,系统都会打印B,输出B的语句并不在条件语句里 7 printf("A\n");//这么写可读性不强,但在程序运行编译时没有问题,是属于if结构中的一种 8 printf("B\n"); 9 return 0; 10 }
再举一个例子跟上个例子有点类似,但此处涉及到作用域的问题:
1 #include <stdio.h> 2 int main() 3 { 4 if(10>6) 5 int a = 5;//这么写会报错,因为a的作用域不明确,如果需要定义a则需加上大括号。 6 printf("%d\n", a);//无法输出a 7 return 0; 8 }
总结一下if语句注意的地方,如果要在if语句后面的语句中定义新的变量,必须用大括号,这也是为了保证代码的可读性与规范。
同样的问题在switch语句中也会有类似的情况出现,就是在case语句中涉及到作用域的问题时,需要用大括号括起来,举个例子:
1 #include <stdio.h> 2 int main() 3 { 4 char c=‘+‘; 5 int a = 10; 6 int b = 20; 7 switch (c) { 8 case ‘+‘: 9 int sum=a+b;//此处无法定义,会报错,因为sum的作用域不明确,系统无法区分是在case中还是在整个程序中,因此如果要定义需要加上大括号。 10 printf("和是%d\n", sum); 11 break; 12 case ‘-‘: 13 int minus=a-b;//此处也是一样,会报错。 14 printf("差是%d\n", minus); 15 break; 16 } 17 return 0; 18 }
总结一下,如果switch语句要在case后面定义新的变量,必须要用大括号{}包住,其定义的变量只在其所在的代码块中定义,执行后就结束。