【C语言学习笔记_1】


前言

C语言学习笔记
课程:郝斌C语言
书籍:《C程序设计(第五版)》


一、预备知识

1.常用数据类型

常用基本数据类型
常用数据类型示意图

2.初始化

初始化即赋值的意思

  1. 类型 变量名 = 赋值 ;

  2. 数据类型 变量名;
    变量名 = 赋值;

进制及其转换:
十进制转二进制:除2取余,直至商零,余数倒序排列。
二进制转十进制:从右至左,按位乘以十的n次方,积相加。
二进制转八进制:从右至左,三位一段,分别转换,不足三位的补零。
二进制转十六进制:从右至左,四位一段,分别转换,不足四位的补零。

3.运算符

优先级:算术>关系>逻辑>赋值

算术运算符:+(加)、-(减)、*(乘)、/(除)、% (取余)

举例:
整数/整数=整数
浮点数/整数=浮点数

关系运算符:>(大于)、>=(大于等于)、 < (小于)、
<=(小于等于)、!= (不等于)、==(等于)

赋值运算符:= 、+= 、*=、 /= 、-=

逻辑运算符:!(非)、&&(并且)、||(或)

位运算符:&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、>>(按位右移)、<<(按位左移)

1&1=1 ; 1|1=1 ; 1^1=0 ;
1&0=0 ; 1|0=1 ; 1^0=1 ;
0&1=0 ; 0|1=1 ; 0^1=1 ;
0&0=0 ; 0|0=0 ; 0^0=0 ;

位运算符的现实意义:对数据的操作精确到每一位。
按位左移<<:若数据不丢失,左移n位相当于乘以2的n次方

//  i=i*8;
//  i=i<<3; //执行更快
i<<3;//相当于将 i 的所有二进制位左移三位,右边补零。

按位右移<<:若数据不丢失,右移n位相当于除以2的n次方

//  i=i/8;
//  i=i>>3; //执行更快
i>>3;//相当于将 i 的所有二进制位右移三位,左边一般补0,有时补1。

补充:

自增 / 自减(以自增为例)
分类: 前自增++i、后自增i++

相同点:使 i 值加1

不同点:
++i 整体表达式为 i 加 1 后的值
i ++ 整体表达式为 i 加 1 前的值

优点:代码更精炼,自增(减)更快。

i++ 和 ++i单独成一个语句,尽量不要将其作为一个完整复合语句的一部分使用

三目运算符

A ? B : C

相当于:

if(A)
	B;
else
	C;

逗号表达式
(A,B,C,D)
功能:从左至右执行,最终表达式的值是最后一项的值。

4.补码

a.正整数转二进制
b.负整数转二进制
c.零转二进制:全是零

a.除2取余,直至商零,余数倒序排列。

b.先求对应整数绝对值的二进制代码,然后将所有位取反,末尾加1,不够位数时左边补1

# include <stdio.h>
int main (void)
{
	int i = -3;
	printf("%#x\n",i);
	return 0;
}

/*输出结果为:0xFFFF FFFD */

-3 :011 → 100 → 101 → 1111 1111 1111 1111 1111 1111 1111 1101(0XFFFF FFFD)

已知二进制求十进制
若首位为0,为正整数,按常规方法求取。

若首位是1,则为负整数:将所有位取反,末尾加1,得该复数的绝对值。

二、流程控制

代码执行顺序

1.选择

if

比较以下 if () 的作用范围

if(A) // A为条件表达式;
	B;  // A成立,则执行B语句,否则不执行;
	C;  // 无论A是否成立,都会执行C语句
if(A)
	{
		B;
		C;
	} //仅A成立才执行B、C语句
if(a)
	A; //仅a成立才执行A语句
else if(b)	
	B;
……
else	N;	

空语句问题:
if (3>2);
等价于
if (3>2)
;//空语句

2.循环

for
for (1;2;3) 语句A;
代码执行顺序:1→2→(yes)→A→3→2→(yes)/(no)→继续循环/结束循环

/******************************************************************
求1+1/2+1/3+……+1/100的值
*****************************************************************/
# include <stdio.h>
int main (void)
{
	int i;
	float sum =0;
	for (i=0;i<=100;++i)
	{
		sum = sum + 1.0/i;
	}
	printf("sum=%f\n",sum);
	return 0;
}

float 和 double都无法精确存储小数

while

/******************************************************************
用while判断是否回文数
*****************************************************************/
#include <stdio.h>
int main(void)
{
	int val,m,sum=0;
	printf("输入需判断的数:\n");
	scanf("%d",&val);
	m=val;
	while(m)
	{
		sum=sum*10+m%10;
		m/=10;
	}
	if(sum==val)
		printf("yes!\n");
	else
		printf("no!\n");
	return 0;
} 

for和while的关系
for 和while相互转化,但for的逻辑性更强

for(语句1;语句2;语句3)       
	A;

等价于

语句1while(语句2)
{
	A;
	语句3}

总结

未完待续。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值