C语言程序设计笔记2:计算

这个系列是用来解决学校C语言课程的,并不适用于ACM和OI

本系列博客分为2部分,分别是 C语言程序设计笔记(网课) 和 课堂总结(线下课)

欢迎转载ssw02的博客:https://www.cnblogs.com/ssw02/p/15994555.html


C语言程序设计笔记2-1

1.常量和变量定义

上一章节末尾留了这么一个程序

#include <stdio.h>

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

其中int price = 0是一个先前没有见过的语句

翻译下:price是变量名称,int是指price的变量类型 , = 是赋值的意思, 0 则是给price赋的初值

现在我们来了解变量相关的定义:

变量代表了一个存储单元,其中的值是可以改变的

因为在一个程序中可能要使用到若干个变量,为了区别不同的变量,必须要给每个变量(存储单元)取一个名(变量名),该变量(存储单元)存储的值称为变量的值,变量中能够存储值的类型被称为比变量的类型

变量定义的一般形式为<类型名称><变量名称>

例如: int price float price2 char A

但是变量名称并不是什么都可以,我们要避免使用一些特殊的名称,这个我们后面慢慢说

常量则是一个值不可改变的存储单元,在定义时加上const即可

e.gconst int price = 15;

如果在程序中尝试对已经初始化的常量(下面讲解)进行更改,一定会报错

2.赋值语句

在C和C++中,=作为赋值运算符,并不表示“等于”的判断(等于是 == )

赋值语句则是有赋值表达式加上分号构成的表达式语句,一般形式为:变量 = 表达式 ; , e.g price = 1024

右侧的表达式也可以为赋值表达式,既可以连续使用 =

e.g.a=b=c=d=1024; 等效于 d=1024;c=d;b=c;a=b;,这里要注意顺序是从右到左依次赋值。

在进行赋值运算时,如果赋值运算符两边的数据类型不同,系统将自动进行数据类型的转换,在合法的情况下,将赋值运算符右侧的数据类型转换为左侧的数据类型。(不合法的话会出现错误)

但是刚接触C,还是尽量保证运算符两边的数据类型相同

3.变量初始化

常量一样同下。

一般形式为:<类型名称><变量名称>=<初始值>

比较一下int price = 5;int price;

我们发现后者是没有初值的,此时的price对应的值是申请变量时对应位置储存的值,应当是乱码,即一个未知的数字。

但是但是,如果我们的price定义为全局变量,还是会默认为0的初值;只有在定义为局部变量时才会出现一个未知的数字

运行一下下面两个程序就可以知道全局变量和局部变量的区别

#include <stdio.h>
int price;//全局变量
int main()
{
    printf("%d",price);//输出结果为0
    return 0;
}
#include <stdio.h>

int main()
{
    int price;//局部变量
    printf("%d",price);//输出结果为一个随机的数字
    return 0;
}

习题代码:
int price, amount = 100, age;
那么price的初始值是? C

A.0
B.100
C.不确定
D.-1

4.定义变量和常量的位置

在C99标准下,我们只需要在使用某一变量或者常量之前定义即可。即全局变量(常量)或者函数内局部变量(常量)使用位置的上方。

但ANSI C标准下,要在开头先全部申明定义变量(常量)

5.格式化输入函数scanf

我们先介绍一个比较常用的读入函数scanf f 的意思是formatical(格式化),可以先不管格式化什么意思

还是先举个例子 scanf("%d", &price);

大部分和printf()函数很类似,但一定要注意加上 & ,表示取地址,没有&会出各种问题

和printf()函数类似,scanf()函数也可以一次读入多个数据

例如scanf("%d%d",&a,&b);就是先读入a再读入b

常见的scanf()函数的格式符:

d i 用于输入十进制整数
u 以无符号十进制形式输入十进制整数
o 用于输入八进制整数
x 用于输入十六进制整数
c 用于输入单个字符
s 用于输入字符串(非空格开始,空格结束,字符串变量以'\0'结尾)
f e 用于输入实数(小数或者指数均可)

附加格式 l 用于长整型 , 比如 lld ld lo lx lf
附加格式 h 用于短整型 , 比如 hd ho hx

6.习题答案

以下哪些是有效的变量名? A D

A.main
B.4ever   数字不放前面,ever4就可以
C.monkey-king   减号不合法
D.__int

2
给定:
int a,b;
scanf("%d %d", &a, &b);
则以下哪些输入方式是正确的? A C

A.1 2
B.1,2
C.1(回车)2
D.1、2

3
给定:
int a,b;
以下哪些scanf的使用是正确的? A B C

A.scanf("%d", &a);scanf("%d", &b);
B.scanf("%d %d", &a, &b);
C.scanf("%d, %d", &a, &b);
D.scanf("%d %d", a, b);

4
给定以下代码段:
int a,b=0;
则a的初始值是0 错误

5
写出下式的运算结果:10.0

10/3.0*3

6
写出下式的运算结果: 9.0

10/3*3.0


C语言程序设计笔记2-2

1.复合赋值

算数运算符+ - * / %可以和 赋值运算符=相结合,形成复合赋值运算符,即 += -= *= /= %=

e.g. price += 5;price = price + 5;两个语句等效

e.g. price *= Amount+2price = price*(Amount+2)等效
注意优先级,先算赋值运算符右侧!

2.递增递减运算符

单目运算符 ++ 和 --

e.g.a++a=a+1等效 a--a=a-1等效

a++被称为后缀形式,++a被称为前缀形式,这两者有区别!!

a++的结果是a+1以前的值 而++a则是a+1以后的值

举个例子:若a=5; a++也是5,但执行之后a变为了6 ;若a=5; ++a却是6,执行后a也为6

3.习题答案

写出以下代码执行后,t1和t2的值,以空格隔开:


int a=14;

int t1 = a++;

int t2 = ++a;

//答案:14 16

写出以下表达式的结果,一个结果一行:

6 + 5 / 4 - 2

2 + 2 * (2 * 2 - 2) % 2 / 3

10 + 9 * ((8 + 7) % 6) + 5 * 4 % 3 * 2 + 3 

1 + 2 + (3 + 4) * ((5 * 6 % 7 / 8) - 9) * 10

//答案:5 2 44 -627
posted @ 2022-02-17 22:04  蓝银杏-SSW  阅读(521)  评论(0编辑  收藏  举报
//结束