一、语句:
(1)printf函数:
printf函数是我们最为熟悉的一个输出函数,但是很有可能我们不知道它是有返回值的,printf函数的返回值是它实际所打印的字符数。
(2)语句我们需要注意的一些小地方:
1 、continue和break的区别:
在while语句中我们使用continue语句结束本次循环,使用break语句跳出循环。但是你要注意当它们出现在嵌套的循环内部时,它们只是对最内层的循环起作用,你无法使用break或continue语句影响外层循环的执行。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int i = 10;
for (i = 10; i > 0; i--) //for循环中continue结束本次循环后,跳到调整部分。
{
if (i == 5)
{
continue;
}
printf("%d\n",i); //输出10,9,8,7,6,4,3,2,1
}
i = 10; //i重新赋值为10
while (i)
{
printf("%d\n",i); //输出10 9 8 7 6 后无限循环输出5。
if (i == 5)
{
continue; //continue结束本次循环。后面的语句不执行,导致i没有变化。
}
i--;
}
printf("hello...\n");
system("pause");
return 0;
}
2、switch语句:
在每一个switch语句中都放上一条default字句是个好习惯。因为这样做可以检测到任何非法值。尽可能的在每个case后面都加上break语句,除非几个case执行的是一样的功能。防止执行流意外的从一个case顺延到下一个case.
3、if语句:
确信在if语句中的语句列表前后加上花括号。
4、空语句:
在一个没有循环体的循环中,用一个分号表示空语句,并让它独占一行。
5、do....while语句:
循环体至少执行一次,
6、goto语句 :
goto语句是种非常危险的语句,因为你在学习c的过程中,很容易形成对它的依赖。
二、操作符和表达式:
(1)算术操作符
c提供了所有常用的算术操作符:
+ - * / %
除了%操作符,其他几个操作符都是既适用于浮点类型又适用于整数类型。当/操作符的两个操作数都是整数时,它执行整除运算,在其他情况下则执行浮点数除法。%为取模操作符,它接受两个整型操作数,把左操作数除以右操作数,但是它返回的值是余数而不是商。
(2)移位操作符(操作数必须是整数)
<< >>
移位分为逻辑移位和算术移位:
逻辑移位不管是右移位还是左移位,移走的位数都是补0.
算术移位左移补0,右移补符号位。
标准说明无符号移位执行的都是逻辑移位,有符号移位取决于编译器。
(3)位操作符
&(位与) | (位或) ^(位与或) ~ (位取反)
假设 :变量a 的二进制为 00101110,变量b的二进制为 01011011
a & b : 00001010 a | b :01111111 a^b :01110101
指定的位置1: 指定的位清0:
value = value | 1 << bit_number value = value & ~( 1 << bit_nuber)
(4)复合赋值符
(5)单目操作符
注意:
sizeof(a=b+1)没有向a赋值。
(6)关系操作符
(7)操作符的优先级和结合性
三、编程提示和警告:
四、编程问题和练习:
定义一个有符号整数变量,这个变量的值是个负数,输出右移一位的结果,如果输出的是个负数,表示这是算数移位,否则是逻辑移位。
++,--不论是前缀还是后缀,这些操作符都会修改它们的操作数
= 包括所有的其他的复合赋值符,它们都会修改作为左值的操作数。
//1、去掉多余的空格,只留下一个空格
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void deblank( char *string) //去掉多余的空格,只留下一个空格。。
{
int i = 0;
int j = 0; //i在后,j在前,通过j去控制循环,最后一定要记得加上\0.
while(string[j] != '\0')
{
if (string[j] !=' ' || string[j] == ' ' && string[j + 1] !=' ') //留下了一个空格。
{
string[i] = string[j];
i++;
}
j++;
}
string[i] = '\0';
//int i = 0; //去掉所有的空格。
//int j = 0;
//while (string[j] !='\0')
//{
// if (string[j] !=' ')
// {
// string[i] = string[j];
// i++;
// }
// j++;
//}
//string[i] = '\0';
}
int main7()
{
char str[1024] = " adjfie df jieflsdjf jioejfldfjei djfiejfkld fjiefjsl";
deblank(str);
printf("str =%s\n",str);
printf("hello...\n");
system("pause");
return 0;
}
//2.输出二进制从左到右交换后的值
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
unsigned int reverse_bits(unsigned int value)
{
unsigned int sum = 0;
unsigned int i = 31;
while (value != 0)
{
int temp = value & 1;
sum += temp * pow(2,i);
value >>= 1; //右移一位。
i--;
}
return sum;
}
int main4()
{
unsigned int a = 25;
unsigned int b = reverse_bits(a);
printf("b = %u\n",b);
printf("hello...\n");
system("pause");
return 0;
}