C语言_2 变量

简介: 是翁恺老师的132p C语言程序设计网课。

2.1.2 变量定义

找零钱问题:100-(用户输入)物品的价格=找你的钱
我们需要:
1) 有办法输入数字;
2) 有地方放输入的数字;
3) 输入的数字参与计算。

    int price=0;//定义了整形变量price,类型是int,初始值=0
    printf("请输入金额(元):");
    int change=100-price;
    printf("找您%d元。\n",change);

变量是一个保存数据的地方。
变量定义的一般形式就是:
<类型名称> <变量名称>
变量的名字叫“标识符”,基本原则只能由字母、数字、下划线构成,数字不能出现在第一个位置上。C语言的关键字(又叫保留字)不可用作字符。
如何输入:
输入也在终端窗口中。输入以行为单位进行,敲下回车,行结束。
(敲下回车之前,程序不会读到任何东西。)

2.1.3 变量赋值与初始化

    int price=0;//其中=是赋值运算符,把右边的值赋给左边的变量。

和数学中不同,b=a和a=b在程序中有着相反的含义。
当赋值发生在刚定义变量时,就叫程序的初始化。虽然C语言并没有强制要求所有的变量在被定义的地方做初始化,但所有变量在第一次被使用(出现在=等号右边)前都应该被赋值一次。
如果没有初始化呢?
就是使用这个变量在内存中的那个值。
变量初始化:<类型名称> <变量名称>=<初始值>
也可以在组合变量定义中给单个变量单独赋初值,如

    int a=0,b=1;

有运算符的式子就叫表达式(比如=是赋值运算符)
C语言是有类型的语言,所有变量在使用前必须先定义或声明;所有变量必须有确定的数据类型(表示在变量中可以存放什么样的数据),变量中也只能存放指定类型的数据,程序运行过程中也不能改变变量的类型。
int charge=100-price;
比较C和ANSI C

//C语言
    int price=0;
    printf("请输入金额(元):");
    scanf("%d",&price);
    int change=100-price;
    printf("找您%d元。\n",change);
//传统的ANSI C只能在开头的地方定义变量
    int price=0;
    int change=0;
    
    printf("请输入金额(元):");
    scanf("%d",&price);
    change=100-price;
    printf("找您%d元。\n",change);

2.1.4 变量输入

scanf()函数,读到的结果赋值给后面的变量
(注意变量前的&)
如果输入非整数(比如找钱一例中:输入字母,找我100元)应该怎么处理?这种情况后面再说。

2.1.5 常量vs变量

固定不变的数,是常数。直接写在程序里的,叫直接量。

    const int amount=100;

其中const是个修饰符,加在int前面,给这个变量加上一个const(不变的)属性,表示这个变量的值一旦初始化,就不能再更改了。
好处:1.便于理解2.修改的时候好找
编译时会显示:read-only variable is not assignable
(一般const的变量全大写)
scanf的空格有讲究,以后再说。输入时如果要两个数,在中间、最后敲空格或回车,计算机读到两个数字时停止
当scanf扫描数字时输入字母,可能会出来很多奇怪的数字。(应该是ASCII码吧?)后面再细说。

2.1.6 浮点数

C语言中两个整数做运算得到的结果也只能是个整数(去掉小数部分)。而10和10.0在c中是完全不同的两个数字,10.0是浮点数(浮点数指小数点时可以浮动的,是计算机中表示分数和无理数的一种方式。人们用浮点数来称呼有小数点的数)(其实还有定点数。但是在c语言中无)
当浮点数和整数放在一起运算时,计算机会自动把整数转化为浮点数计算
(如:

int a,b;
printf("a/b*3");//改进为a/b*3.0

有一次尝试printf("%f",3/2);输出的是整数。应该是先进行整数运算再以%f形式输出,而不是以%f形式输出。所以应该改进为3/2.0

有单精度float(%f)和双精度double(%lf)
(计算机里会有这种纯粹的整数,是因为运算快、占地小。而且日常生活中大多也是整数运算。)

2.2.1 表达式

一个表达式是一系列运算符和算子的结合,用来计算一个值
运算符(operator)是指进行运算的动作,比如加/减法运算符+-
算子(operand)是指参与运算的值,可能是常数/变量/一个方法的返回值
在这里插入图片描述

计算时间差:这里只记录分钟错位的情况(1:40和2:10)
方法:全部记为分钟(小时*60)

    int hour1,min1;
    int hour2,min2;
    
    scanf("%d %d",&hour1,&min1);
    scanf("%d %d",&hour2,&min2);
    
    int t1=hour1*60+min1;//把小时转化为分钟单位
    int t2=hour2*60+min2;
    
    int t=t2-t1;
    printf("时间差是%d小时%d分。“,t/60,t%60);//t/60是小时部分;t%60取余,是分钟部分

2.2.2 运算符优先级

(double输入的时候用%lf,输出的时候用%f就行)
运算符优先级

优先级 运算符 运算 结合关系 举例
1 + 单目不变 自右向左 a*+b
1 - 单目取负 自右向左 a*-b
2 * 自左向右 a*b
2 / 自左向右 a/b
2 % 取余 自左向右 a%b
3 + 自左向右 a+b
3 - 自左向右 a-b
4 = 赋值 自右向左 a=b

(a+b,a-b是双目;+a,-a是单目,相当于正负号)
赋值也是运算,也有结果。
a=6的结果就是a被赋予的值,也就是6
a=b=6:自右向左,a=(b=6)。

嵌入式赋值:int c=1+(b=a)
缺点:不利于阅读;容易产生错误
运算符的结合关系一般自左向右;单目+-和赋值=自右向左
下面的式子过于复杂,不利于阅读和理解。

    result=a=b=3+c;
    result=(result=result*2)*6*(result=3+result);

所以应该把它拆开来计算。
(C语言没有幂次,所以只能一个个乘。)

2.2.3 交换变量

交换a和b的值(a=6,b=5)
错误示例

a=b;
b=a;

程序表达的是顺序执行的动作,而不是关系.所以这样做先把b赋给a,然后再把a赋给b,都是5.
方法:再找一个变量c,c=a储存一下a的值,然后a=b,b=c

c=a;
a=b;
b=c;

断点

在这里插入图片描述

DEV C++中,在左边数字那里点击一下,然后程序运行时就会在这一行停止。
在这里插入图片描述

运行也只能到这一行
点下一行,就会运行到下一行。
这样可以方便排bug
C语言:使用Dev C++断点调试

2.2.4 复合赋值

a+=5表示a=a+5(注意两个运算符之间无空格)
类似有-=*=/=
a*=b+5表示a=a*(b+5),如果想先算a=a*b记得加括号)
INC递增、DEC递减运算符:++--:单目运算符,只能有一个算子,这个算子还只能是变量(如a++后缀形式,++a前缀形式)让该变量+1/-1;
a++运算式的值是a+1以前的值;++a运算式的值是a+1以后的值。无论哪个,a的值都+1了
在这里插入图片描述

++--可以单独使用,但不要把它组合进表达式,复杂。

3.0.1 PAT再解释

是Program Ability Test的简写。

  1. 看样例数据和看题目一样重要;
  2. 不要交互地输出,题目要求输出什么就输出什么,不要画蛇添足,一个空格不对都不算对);
  3. 不要检查输入,题目只会输入定义域范围内的数字;
  4. 严格遵守输出的格式;
  5. scanf里不要乱输什么东西(?)

int a/b;如果后面是小数,c语言会强制类型转换为整数。但以后学习c++或java是不可以的,要记得类型转换。

目录
相关文章
|
1月前
|
存储 C语言
C语言数据类型、变量和运算符以及printf相关问题
C语言数据类型、变量和运算符以及printf相关问题
|
5天前
|
存储 C语言
【C语言基础考研向】02 数据类型-常量-变量
本文介绍了编程中的基本概念,包括数据类型分类、常量与变量的定义及使用。首先概述了四大类数据类型:基本类型(整型、浮点、字符型)、构造类型(数组、结构体)、指针类型和空类型。接着阐述了常量与变量的区别及命名规则,并详细说明了整型、浮点型和字符型数据的特点与应用。最后总结了常见的易错点,如字符串与字符常量的区别及浮点数的默认输出格式。
|
6天前
|
存储 传感器 物联网
结合物联网开发探讨C语言的变量
在物联网(IoT)开发中,C语言的变量起着至关重要的作用。由于物联网设备资源有限,C语言的高效性和对硬件的直接控制使其成为开发嵌入式系统的首选。
|
8天前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
13天前
|
存储 Ubuntu Linux
C语言 多线程编程(1) 初识线程和条件变量
本文档详细介绍了多线程的概念、相关命令及线程的操作方法。首先解释了线程的定义及其与进程的关系,接着对比了线程与进程的区别。随后介绍了如何在 Linux 系统中使用 `pidstat`、`top` 和 `ps` 命令查看线程信息。文档还探讨了多进程和多线程模式各自的优缺点及适用场景,并详细讲解了如何使用 POSIX 线程库创建、退出、等待和取消线程。此外,还介绍了线程分离的概念和方法,并提供了多个示例代码帮助理解。最后,深入探讨了线程间的通讯机制、互斥锁和条件变量的使用,通过具体示例展示了如何实现生产者与消费者的同步模型。
|
29天前
|
存储 编译器 C语言
【C语言篇】C语言数据类型和变量
我们使⽤强制类型转换都是万不得已的时候使用,如果不需要强制类型转化就能实现代码,这样⾃然更好的.
|
1月前
|
C语言
C语言数据类型和变量
C语言数据类型和变量
29 5
|
1月前
|
存储 C语言 容器
C语言中的变量作用域
C语言中的变量作用域
|
2月前
|
存储 编译器 C语言
C语言3 变量
C语言3 变量
17 1
|
2月前
|
C语言
C语言15---在VC中变量的注意点和变量的注意细节
C语言15---在VC中变量的注意点和变量的注意细节