——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
调用scanf函数时,需要传入变量的地址作为参数,scanf函数会等待标准输入设备(比如键盘)输入数据,并且将输入的数据赋值给地址对应的变量。
int age;
scanf("%d", &age);
1> scanf函数只接受变量的地址,所以scanf的第2个参数传递的不是age变量,而是age变量的地址&age,&是C语言中的一个地址运算符,可以用来获取变量的地址。
2> scanf函数是一个阻塞式函数,会一直等待用户输入。
1> 输出字符
char myc;
scanf("%c", &myc);
printf("输入的字符是%c\n", myc);
2>输出多个值
一次性输入多个数值时需要以某些符号隔开。
int num1, num2;
scanf("%d#%d", &num1, &num2);
printf("num1=%d, num2=%d\n", num1, num2);
3>分隔符
如果scanf参数中以空格隔开,实际输入可以以空格、tab、回车作为分隔符。
int num1, num2;
scanf("%d %d", &num1, &num2);
printf("num1=%d, num2=%d\n", num1, num2);
4>scanf函数中不能写\n
int a;
scanf("%d\n", &a);
printf("a的值是%d\n", a);
这是错误写法,无法正常编译。
C语言一共有34种运算符,包括了常见的加减乘除运算
一、 算术运算
基本的算术运算包括:
加法运算+
减法运算-
乘法运算*
除法运算/
取余运算%
1> 取余即获取两个整数相除之后的余数
2> %两侧只能是整数
3> 正负性取决于%左侧的数值
4> 用取余可以将值固定在一个范围内
在算术运算的时候需要注意几种类型转换:
1>自动类型转换(double->int)
int a = 10.8;
2>强制类型转换(double->int)
int b = (int) 10.5;
3>自动类型提升(int->double)
double c = 10.6 + 6;
二、 赋值运算
int a = 10 + 5;
复合赋值运算符
a += 5; // a = a + 5;
a *= 5; // a = a * 5;
a += 5 + 6 + 4; // a = a + (5 + 6 + 4);
三、自增自减
自增运算符:如a++,++a,都等价于a = a+1。
自减运算符:如a–,–a,都等价于a = a-1。
a++:变量a先加1,然后使用;
++a:先使用变量a,再加1 。
自减运算符区别相同。
四、sizeof
int size = sizeof(10);//sizeof( 变量\常量 )
int size = sizeof 10.9;//sizeof 变量\常量
int a = 10;
int size = sizeof(a);
int size = sizeof a;//sizeof( 数据类型 )
int size = sizeof(char);
int size = sizeof char;//sizeof 数据类型 是错误的
五、关系运算符
在C语言中判断关系就是判断“真”“假”,也就是0和1。
1> 关系运算符中==、!=的优先级相等,<、<=、>、>=的优先级相等,且前者的优先级低于后者:2==3>1
2> 关系运算符的结合方向为“从左往右”: 4>3>2
3> 关系运算符的优先级小于算术运算符:3+4>8-2
算术运算符的优先级大于关系运算符。
六、逻辑运算
1.&& 逻辑与
“条件A && 条件B”
如果条件A成立,接着再判断条件B是否成立:如果条件B成立,“条件A && 条件B”的结果就为1,即“真”,如果条件B不成立,结果就为0,即“假”。
如果条件A不成立,就不会再去判断条件B是否成立:因为条件A已经不成立了,不管条件B如何,“条件A && 条件B”的结果肯定是0,也就是“假”。
2.|| 逻辑或
“条件A || 条件B”
如果条件A成立,就不会再去判断条件B是否成立:因为条件A已经成立了,不管条件B如何,“条件A || 条件B”的结果肯定是1,也就是“真”。
如果条件A不成立,接着再判断条件B是否成立:如果条件B成立,“条件A || 条件B”的结果就为1,即“真”,如果条件B不成立,结果就为0,即“假”。
3.! 逻辑非
“! 条件A”
C语言规定:任何非0值都为“真”,只有0才为“假”。
七、三目运算符
条件?数值1:数值2
若条件成立返回数值1,不成立返回数值2。
利用三目运算符可以比较简洁的进行判断,如下判断a,b,c中的最大值
#include
int main()
{
printf("请输入三个整数并以空格隔开:\n");
int a;
int b;
int c;
scanf("%d %d %d",&a,&b,&c);
int temp = a>b ? a:b;
int max = temp>c ? max1:c;
printf("最大值为%d\n",max);
return 0;
}
C语言的结构分为:顺序结构,选择结构,循环结构。
顺序结构:默认的流程结构。按照书写顺序执行每一条语句。
选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码。
循环结构:在给定条件成立的情况下,反复执行某一段代码。
如下图所示:
顺序结构比较简单,按照逻辑关系编写代码即可。
一、 选择结构-if
if语句有四种结构:
1>
if(条件)
{
语句1;
语句2;
……
}
2>
if(条件1)
{
语句1;
语句2;
……
}
else
{
}
3>
if(条件1)
{
语句1;
语句2;
……
}
else if(条件2)
{
}
else if(条件3)
{
}
else
{
}
4>
if (条件)
语句1;
在if语句中比较大小时,常量值放左边,变量值放右边。同时如果在if后面的语句中定义新的变量,必须用大括号{},不然作用域是不明确的。如下:
if (10 > 6)
int a = 5;
二、 选择结构-switch
switch结构比较单一,只有一种:
switch (数值)
{
case 数值1:
语句1;
break;
case 数值2:
语句2;
break;
default :
语句3;
break;
}
使用switch语句时需要注意break的重要性。break代表着退出整个switch语句,如果case后面没有break,就会执行后面所有case中的语句,直到遇到break为止。如下:
#include
int main()
{
int a = 10;
int b = 10;
switch (a)
{
case 10:
printf("A\n");
b++;
case 5:
printf("B\n");
b++;
case 0:
printf("C\n");
b++;
break;
default:
printf("D\n");
break;
}
printf("b的值是%d\n", b);
return 0;
}
输出结果为:
同if结构相同,如果要在case后面定义新的变量,必须用大括号{}包住。
有些情况下,if语句和switch语句是可以互换的。switch能完成的功能,if语句都能完成,但是if语句能完成的功能,switch并不一定能完成,比如下面的例子:
int a = 10;
if (a>100)
{
}
三、 循环结构-while
while (条件)
{
循环体
}
如果一开始条件就不成立,永远不会执行循环体;如果条件成立,就会执行一次循环体,执行完毕,再次判断条件是否成立,循环至条件成立为止。
while结构中也有break和continue:
break直接结束整个while循环;
continue结束当前的循环体,进入下一次循环体的执行。
最简单的死循环:while(1);
四、循环结构-do while
do {
} while(条件);
while和do-while的区别:
1.很多情况下,while和do while可以互换;
2.while特点:如果一开始的条件不成立,永远不会执行循环体;
do while特点:不管一开始的条件是否成立,至少会执行一次循环体;
3.最好使用while。
五、循环结构-for
for (语句1; 条件; 语句2)
{
循环体
}
*语句1:初始化语句
*语句2:增量语句(执行完循环体后再执行的语句)
for循环原理:
for一开始就会执行一次语句1(整个for循环只会执行一次),判断条件是否成立,如果条件成立,就会执行一次循环体,然后就会执行语句2,再次判断条件是否成立。
for循环同样需要注意作用域的问题,如果要在循环体中定义新的变量,必须用大括号{}包住。如下:
for (int i=0; i<5; i++)
int a = 10;
利用for循环实现最简单的死循环:for(;;);。
for循环嵌套可以很好的实现两个变量同时变化,下面是输出九九乘法表的代码,可以体会一下。
/*
输出九九乘法表
*/
#include
int main()
{
//确定行数
for(int i = 1;i <= 9;i++)
{
//确定列数
for(int j = 1;j <= i;j++)
{
int ride = i*j;
printf("%d×%d=%d ", i, j,ride);
}
printf("\n");
}
return 0;
}
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-