c专接本 第一章

1. 变量与表达式

1.1 实型变量

单精度 (float型)
float x,y;
双精度(double型)
double a,b,c;

数据精度存储
单精度7位有效数字4个字节存储
双精度15-16位有效数字8个字节存储

超过有效数字的位数后,下一位就会失去精度成为约数
一个实型常量部分float和double型,

使用printf()输出
输入scanf()

  • %f:以小数形式输出浮点数,保留六位小数,超出位数四舍五入
  • %lf: 以小数或指数形式输入一个双精度浮点数
  • %.nf:规定小数保留n位,也可以写成%.nlf
  • %e: 以指数形式输出 (不常用)
  • %le:

float和double使用不同格式控制说明
%f代表单精度浮点型数据(float),%lf代表双精度浮点型数据(double)

注意:再输入时不可以使用%.nlf会出现0.0000情况,输入时%lf已经可以接收超过6位的小数,只是输出时没有显示

1.2 字符常量

1.字符常量 :用单引号括起来一个字符 (一个字节)

ASCII码表:

  • ‘a’ : 97
  • ‘A’: 65
  • 需要记住 :0-9 A-Z a-z
    小写字母=大写字母+32
2.转义字符:不能用符号直接表示的字符常量 通常(\)后面的字符

常用的转义:

  • \n : 换行
  • \b : 退格
  • \r : 回车
  • \a : 报警
  • \v : 竖向眺格(垂直制表)
  • \t : 横向眺格(水平制表)
  • \f : 走纸换页
  • \0 : 空字符

数字转义:
\101:代表ASCII为65的’A’

双引号“1”占两个字节 内存中是 1 \0其中\0表示字符串结束

1.3 字符变量

定义形式:char 标识符1,标识符2
字符的存储

  1. 字符型数据和整型数据之间可以通用
  2. 字符在内存中占一个字节,在内存中,是把字符对应的SSCII码值放到存储单元中

printf输出:

  • %c : 表示一个字符
  • %d : 输出一个数,字符也会转成数字

getchar与putchar

char ch;
ch=getchar();//从控制台获取一个字符
putchar(ch);	//控制台输出字符

注意:这两个方法都是对于char类型的方法

scanf越简单越好scanf(%d%c%d),输入时就不能有空格,如:10c20,并且较为复杂计算机容易出错,故不推荐这种复杂的输入形式

注意:不能加空格是因为中间是字符数据,空格也算是一个变量,%d%d这用形式要以空格和回车分割

1.4 字符串常量

定义形式:String a,b;
字符串占用公式:字符串结尾以\0结尾故存储字节为 字符串长度+1个字节

例如:c=“china” 在内存中是 c | h | i | n | a | \0 这样划分的,共占用6个字节

1.6 各类数值型数据数据的混合运算

数值转换

  1. 隐式转换:系统自动
  2. 强制转换:人为强制

自动转换规则:低字节长度转化为高字节长度

强制类型转换
形式:(类型名)(表达式)
例如;: double a,b; (int)(a+b)
注意:强制类型转换可能会造成数据精度的丢失

难点:x=3 想得到 3/2 的结果是(float)x/2 还是(float)(x/2)
答:(float)x /2

1.7 c语言运算符

关注一下符号优先级

+ - * / % 都是双目运算符
++与–都是单目运算符
单目与双目:一个值运算与两个值运算

自增自减运算符(++,–)
只适用于变量运算
++n和n++的区别:

  • n++: 与n=n+1
  • ++n: 去n的值作为表达式n的值,然后再进行n=n+1的操作

难题:设a=2,执行语句k=++a+a++后k的值为多少

  • 思路:++a的结果是a变成了3,加上a++则为3加上a当前的值(3)k的结果值为6
  • 注意:++a以后a的值就已经增加了

赋值运算符

  1. 赋值运算符(=)
    形式:变量名=常量或表达式
    作用:将右边常量或表达式的值赋给左边的变量
  2. 赋值表达式
    难点 :连续值计算
    例子:若a=12计算,a+=a-=a*a
    步骤:
    1. a-=a*a=>a=a-a*a=12-12*12=-132
    2. a+=-132=>a=a+(-132)=-264

注意:连续赋值运算,计算顺序是自右至左的

逗号运算符
优先级:是所有运算符中级别最低的
表达式:

  • 形式: 表达式1,表达式2
  • 例子:a=3*5,a*4 结果为先算3乘5的值在乘上4为60

2. 简单的程序设计

2.1 语句分类

c语句划分

  1. 控制语句
  2. 函数调用语句
  3. 表达式语句
  4. 空语句
  5. 复合语句

重点:一个完整的语句必须以;结束,“;”是一个语句不可缺少的一部分

2.1.1 控制语句
  1. if()else条件语句
  2. for()~ ( 循环语句
  3. while()~(循环语句
  4. continue (结束本次循环语句)
  5. break (终止执行switch或者循环语句)
  6. goto (转向语句) 想去哪就去哪,不在经常使用
  7. return (从函数返回语句)
2.1.2 函数调用语句

一次函数调用加一个“ ;"构成

如:printf(”sdfsfd");

注意函数调用是从:#include <stdio.h>中调用的

2.1.3 表达式语句

表达式加上‘’;“构成

例子:

  • x+4*y; 算数表达式语句
  • 4* 7,4+8;逗号表达式语句
  • x=4+8 ; 赋值表达式语句(赋值语句)
2.1.4 空语句

只由一个”;“构成
作用:

  1. 程序转折点
  2. 什么也不做的循环体(等待开发)
2.1.5 复合语句

用{ }括起来的语句,没有”;“

2.1.6 知识小结
  1. 赋值语句和赋值表达式并不相同,有;结尾的赋值表达式是赋值语句

2.2 输入输出语句

常用输出输入语句:

  1. putchar 输出字符
  2. getchar 输入字符
  3. printf—根据格式输出
  4. scanf—根据格式输入
  5. puts --输出字符串
  6. gets --输入字符串

scanf输入格式

  • 转换字符(就是%后跟的部分)
  • a 读 浮点值(仅适用于 C99)
  • A 读浮点值(仅适用于 C99)
  • c 读单字符
  • d 读十进制整数
  • i 读十进制、 八进制、十六进制整数
  • e 读 浮点数
  • E 读浮点数
  • f 读浮点数
  • F 读浮点数(仅适用于 C99)
  • g 读浮点数
  • G 读浮点数
  • o 读八进制数
  • s 读 字符串
  • x 读十六进制数
  • X 读十六进制数
  • p 读 指针值
  • n 至此已读入值的等价字符数
  • u 读无符号十进制整数
  • [ ] 扫描字符集合
  • % 读 % 符号( 百分号)

print输出语句
%c输出完以后会有一个空格

\t制表符占包括前面的8个空格
例如:
123456\t 这样就会占用6后面的2个字符,然后继续输出

  • %md表示显示数字宽度,宽度小于m后自动左端空格补全
  • %ld表示输出长整形数据
  • %o 以八进制格式输出整数
  • %x以16进制输出格式
  • %u以十进制形式输出unsingned型数据

%o%x%u 负数会以反码形式显示出来

难点:源码,反码,补码

在学习原码,反码和补码之前, 需要先了解机器数和真值的概念。

  1. 机器数
    一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用机器数的最高位存放符号,正数为0,负数为1。
    比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是0000 0011。如果是 -3 ,就是 100 00011 。
    那么,这里的 0000 0011 和 1000 0011 就是机器数。

  2. 机器数的真值
    因为第一位是符号位,所以机器数的形式值就不等于真正的数值。
    例如上面的有符号数 1000 0011,其最高位1代表负,其真正数值是 -3,而不是形式值131(1000 0011转换成十进制等于131)。
    所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
    例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1

  3. 原码, 反码, 补码的基础概念和计算方法

    1. 原码
      原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。
      比如:如果是8位二进制:[+1]原= 0000 0001,[-1]原= 1000 0001第一位是符号位,因为第一位是符号位,所以8位二进制数的取值范围就是:(即第一位不表示值,只表示正负。)[1111 1111 , 0111 1111]即[-127 , 127]
      原码是人脑最容易理解和计算的表示方式。

    2. 反码
      反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上,符号位不变,其余各个位取反
      例如:
      [+1] = [0000 0001]原= [0000 0001]反
      [-1] = [1000 0001]原= [1111 1110]反
      可见如果一个反码表示的是负数,人脑无法直观的看出来它的数值。通常要将其转换成原码再计算。

    3. 补码
      补码的表示方法是:正数的补码就是其本身;负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。 (也即在反码的基础上+1)
      [+1] = [0000 0001]原= [0000 0001]反= [0000 0001]补
      [-1] = [1000 0001]原= [1111 1110]反= [1111 1111]补
      对于负数,补码表示方式也是人脑无法直观看出其数值的。通常也需要转换成原码再计算其数值。

    4. 进制原码反码补码
      各进制的原码反码形式是不一样的,下面举例-1的反码,注意:原码
      2进制 11111110
      8进制 17777777
      16进制 ffff 因为f是15,所以四个f占了8个数,首数字是1

3. 例题

例题1
scanf(“a=%db=%d”,&a,&b)如果想要a=3,b=7控制台怎么输入

答: a=3b=7回车
例题2
float a,b;
char c1,c2;
scanf("%f%e",&a,&b);
scanf("%c%c",&c1,&c2);
printf(“a=%f与b=%f\n%c与%c”,a,b,c1,c2);
想要输出

a=3.5与b=71.82
a与c

该怎么输入

答:3.5 71.82ac

注意:这里应用空格划或者分两个数字,但不能用空格划分数字与字符,因为空格也算一个字符

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值