c和指针 第四章和第五章笔记

一、语句:

(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的过程中,很容易形成对它的依赖。

注意:goto函数不能跨函数跳转。


二、操作符和表达式:

(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;
}




  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值