程序设计入门——C语言(翁凯版)第二周

发布时间:2024年01月18日

2.1 变量

2.1.1 变量的定义

先看一段代码
printf("23+43=%d\n", 23+43);
printf("100-23=%d\n", 100-23);

代码分别将23+43和100-23的结果输出,但是如果想在程序运行时输入23,则需要
1.有地方放输入的数字;
2.有办法输入数字;
3.输入的数字可以参与运算。

下面一段代码

#include <stdio.h>

int main()
{
	int price=0;
	
	printf("请输入金额(元):");
	scanf("%d", &price);
	
	int change=100-price;
	printf("找您%d元。\n", change);
	
	return 0;
}

输出结果为

请输入金额(元):24(键盘输入24后按回车)
找您76元。

分析上段代码

int price=0

这一行定义了一个变量,名字是price,类型是int,初始值是0。
变量,是指在程序运行时其值可以改变的量,变量的功能就是存储数据。
变量定义的一般形式:<类型名称><变量名称>

  • int a;
  • int b;
  • int c, d;

变量的名字是一种“标识符”,只能由字母、数字和下划线组成且数字不能位于第一位,C语言标识符(有些地方也叫保留字)不可做标识符。

2.1.2 变量的赋值和初始化

int price=0;

这段代码定义了int类型的变量price的同时给了它初始值0。
在定义变量的同时进行赋值就是初始化。C语言中赋值和初始化差异不大,其他语言不一定。但是所有变量第一次使用(出现在赋值运算符右边)前应该赋值一次。
price=0是一个式子,“=”不是数学中的“等于”,是赋值运算符,将右边的值赋给左边的变量。有运算符的式子就叫表达式(expression)

  • a=b
  • b=a

这两个式子意思相反。
变量初始化的基本形式如下:

  • <类型名称><变量名称>=<初始值>
  • <类型名称><变量名称>=<初始值>,<变量名称>=<初始值>

C是一种有类型的语言,所有变量使用前必须定义说声明,且必须具有确定的数据类型。数据类型表示变量中可以存放什么样的数据,且只能存放指定类型数据,程序运行过程中不能改变变量类型。

2.1.3 关于scanf

scanf("%d",&price);
  • 要求scanf函数读入下一个整数并将其赋值给price
  • 注意price前的&!(感觉和后面的指针地址什么的有关系)

如果要读入多个变量值,则有

scanf(“%d %d”, &a, &b);

将输入的两个数分别赋给a和b
注意!
如果是下面的代码

scanf("%d, %d", &a, &b);

想要输入值给a和b则与刚刚不同,必须带上逗号,原因在于scanf函数的形参列表有固定的形式。

2.1.4 常量和变量

int change=100-price;

这段代码中100是固定不变的数,是常数。直接写在程序里称作直接量。
更好的方式是定义一个常量:

const int AMOUNT =100;

这样的好处在于,一是使程序更有可读性,不然代码里全是数字(magic number)会很难懂,二是如果想修改这些数字直接修改定义的常量就好了。
const是一个修饰符,加在int前给变量加了一个const属性,表示变量的值一旦初始化就不能修改。如果把常量放在“=”左边,编译器会报错。

2.2 数据类型

2.2.1 浮点数

首先给出一个换算公式

  • (英尺+英寸/12)*0.3048=米
    运行下面程序
#include <stdio.h>

int main()
{
	printf("请分别输入身高的英尺和英寸,"
			"如输入\"5 7\"表示5英尺7英寸:");
	
	int foot;
	int inch;
	
	scanf("%d %d", &foot, &inch);
	
	printf("身高是%lf米。\n",
			((foot+inch/12)*0.3048));
	
	return 0;
}

运行结果

请分别输入身高的英尺和英寸,如输入"5 7"表示5英尺7英寸:5 7
身高是1.524000米。

结果明显是错误的。那么原因是什么呢?
C语言中,两个整数只能是整数。如果两个整数运算的结果有小数,则会将结果的小数部分直接丢掉。

  • 10/3=3

但是

  • 10.0/3=3.333333

这是因为10是整数,10.0是浮点数。这样就引出了“浮点数”这个概念。
浮点数是带小数点的数值,指小数点是浮动的,是计算机内部表达非整数的一种方式,另一种是定点数,在C中不会遇到。人们借用浮点数这个词来表达所有带小数点的数。
如果想让上面的程序得出正确结果,可以对其进行修改。

  1. 将12改为12.0。因为浮点数和整数一起运算时,C会把整数转换成浮点数后进行浮点数的运算;
  2. 把int foot和int inch改为double foot和double inch,scanf中%d改为%lf。

2.3 表达式

2.3.1 运算符和算子

一个表达式就是一些运算符和算子的组合,用来计算一个值
运算符是指进行运算的动作,如“+”,“-”,算子是指参与运算的值,可能是常数也可能是变量,还可能是一个方法的返回值。

  • a=b+5,其中a,b,5是算子,“=”和“+”’是运算符

在这里插入图片描述
举了一个计算时间差的例子,给出小时和分钟要求计算时间差。
要考虑到分钟和小时是六十进制存在借位的情况,将时间t1和t2全部转化成分钟进行计算,再将结果转换成小时+分钟的形式。

2.3.2 运算符优先级

在这里插入图片描述
赋值也是运算,本身也有结果

  • a=6的结果就是a被赋予的值,即6;

上图可以看出结合关系一般是自左向右, 单目±和赋值=是自右向左

2.2.3 交换变量

如果a=5,b=6,那么怎么交换a和b的值呢?

a=b;
b=a;

输出

a=6, b=6

因为a=b将b的值赋给a,a此时等于b等于6,然后b=a又将a的值赋给b,则结果自然b=6,没有完成交换。
正确的做法是应该找第三个变量t,先将a的值存入t中,然后将b的值赋给a,最后将t中存放的a原来的值赋给b即可完成交换。

t=a;
a=b;
b=t;

输出

a=6, b=6

成功交换!

2.2.4 复合赋值和递增递减

2.2.4.1 复合赋值

5个算术运算符±/%可以和赋值运算符=结合形成复合赋值运算符:“+=”、“-=”、“=”、“/=”、“%=”。

  • a+=5等价于a=a+5
  • a+=(b+1)/2等价于a=a+(b+1)/2
  • 两个运算符之间不能有空格
2.2.4.2 递增递减

“++”和“–”是单目运算符,可以放在变量前也可以放在变量后。
在这里插入图片描述

注意!要区分count本身的值和count++这个表达式的值!

文章来源:https://blog.csdn.net/qq_44845100/article/details/135568270
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。