慕课C语言-1

慕课C语言-1

慕课C链接
考试和练习链接

1.二进制和十六进制

1.用0和1表示各种信息

二进制数的一位,取值只能是0或1,称为一个“比特”(bit),简写:b
八个二进制位称为一个“字节”(byte),简写: B
1024(210)字节称为1KB ,1024KB称作1MB(1兆),1024MB称作1GB,1024GB称作1TB
用8个连续的0或1(即1个字节)来表示一个字母、数字或标点符号此即为ASCII编码方案

2.给定一个K进制数,求它是多大(应用题)

数就是数,没有进制之分,只有数的表示形式,才有进制之分。
所谓“十进制数”,是“数的十进制表示形式” 的简称。

3.给定一个数,求其K进制表示形式(应用题)

求数的K进制表示形式 – 短除法

4.K进制小数

  1. n进制下的有限位小数,在m进制下可能就无法精确表示,因为会无限循环
  2. 十进制有限位小数,在二进制的情况未必能用有限位数表示出来。计算机内存有限,不可能存放无限位,因此计算机的小数运算会有误差。比如,计算机其实无法精确表示4.9,只能精确表示4.899999999…之类一个很接近的数

5.十六进制数到十进制数的转换

6.十六进制数到二进制数的互相转换

2.C++快速入门

1.为什么是C++而不是C语言

C语言是好东西,但是有点弱
C++ 更是好东西,但是有点烦
我们要学的,是C++的一部分,基本上就是:C语言+ STL (STL是C++中能让你节省大量编程时间的神兵!)
因为暂时不写大程序,因此不用关心“面向对象”的事情!

2.第一个C++程序-输出

1
2
3
4
5
6
7
8
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
printf("Hello,world!");
return 0;
}

3.第二个C++程序-输出更多

1
2
3
4
5
6
7
8
9
10
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int a = 3;
printf("I have %d dollars.\n",a);
printf("I want to buy:\na book.");
return 0;
}

4.第三个C++程序-输入

输入两个整数,输出它们的和 (NOI.POJ 7883)

1
2
3
4
5
6
7
8
9
10
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d",a+b);
return 0;
}

5.第四个C++程序-输入字符

%c表示读入一个字符,不会跳过空格

1
2
3
4
5
6
7
8
9
10
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
char a,b,c;
scanf("%c%c%c",&a,&b,&c);
printf("%c%c%c",a,b,c);
return 0;
}

输入内容

1
x y

输出结果

1
x y

6.注释

经常需要在程序中写点说明性的文字,帮助程序阅读者理解程序。这就需要用注释
程序的注释不是程序的一部分,不会对程序运行产生影响
1.单行注释:用 //
2.多行注释用 /* */

7.程序文件的保存

本课程中的所有程序,都应该存为后缀名为 “.cpp”的文件然后编译,不能存成 “.c”文件!

3.变量和数据类型初探

1.什么是变量

1.变量就是一个代号,程序运行时系统会自动为变量分配内存空间,于是变量就代表了系统分配的那片内存空间,对变量的访问,就是对其代表的内存空间的访问。
2.变量有名字和类型两种属性,不同变量的名字就对应了内存中的不同地址(即不同位置),而变量的类型,决定了一个变量占用多少个字节。
3.在C++语言中,变量要先定义,然后才能使用。“使用”有时也称为“引用”。读取或修改一个变量的值,都叫使用这个变量。定义变量的语句,要出现所有使用该变量的所有语句之前。

2.变量的定义

1.类型名 变量名1,变量名2,……,变量名n;

1
int number,price;

2.一个变量不能定义两次

1
2
int number;
double number;//错误,重复定义

3.变量的命名规则

  1. 变量由大小写字母、数字和下划线构成,中间不能有空格,长度不限,不能以数字开头。
  2. 变量名是大小写相关的,name 和 Name 是不同的两个变量。
  3. 变量名不能和C++系统预留的一些名字(保留字)重复。C++预留的保留字为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
auto break case char
const continue default do
double else enum extern
float for goto if
int long register return
short signed sizeof static
struct switch typedef union
unsigned void volatile while
bool catch class const_cast
delete dynamic_cast explicit false
friend inline namespace new
operator private protected public
reinterpret_cast static_cast template
this throw true try
typeid typename using virtual

此外还要注意不要取名为 begin 、 end 、 next 、 index、list、link 等

4.C++的数据类型

“数据类型”能够说明一个变量表示什么样的数据(整数,实数,还是字符等)。不同数据类型的变量,占用的存储空间大小不同。除了基本数据类型外,C++还允许程序员自定义数据类型。

5.C++的基本数据类型

int,long,short,char的最高位(最左边)是符号位,为1则表示负数,为0表示非负数
一个字节等于8个比特,即8个二进制位

6.用sizeof运算符求变量占用字节数

sizeof(变量名)
sizeof(类型名)

7.变量的初始化

变量在定义的时候,可以给它指定一个初始值,这叫变量的初始化。
没有初始化的变量,其值一般是不确定的。

4.变量和数据类型进阶

1.有符号整数和无符号整数

  1. short、int、long、long long 类型的变量,可以表示正数,也可以表示负数,称为有符号的整数类型。
  2. unsigned short, unsigned int, unsigned long,unsigned long long类型的变量,只会被看作非负数,称为无符号的整数类型。

2.有符号整数的表示方式

  1. 将最左边的位(最高位)看作“符号位”。符号位为0,则表示是非负数,其绝对值就是除符号位以外的部分;符号位为1,则表示是负数,其绝对值是所有位取反(0变1,1变0)后再加1。
  2. 将一个负整数表示为二进制的方法:
    设置符号位为1,再把其余位等于绝对值取反再加1

3.数据类型的自动转换

有些不同的数据类型之间是相容的,可以互相赋值,这叫数据类型的自动转换

1
2
3
int a = 11.34; // 11.34被自动转换为11后赋值给a
int b = 30;
double d = b; // d的值是30.0

字符型数据可以转换成整型数据

1
2
int k = 'a' ; //k内容变为'a'的ASCII码,即97
printf("%d",k) ; //输出:97

整型数据也可以转换为字符型数据,但只会留下最右边的一个字节(第0位到第7位),其他字节丢弃

1
2
3
int n = 98;
char k = n ; //k内容变98,98是字符'b'的ASCII码
printf("%c",k) ; //输出:b

类型自动转换示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
int n1 = 1378; //1378的十六进制形式是 0x562
short n2;
char c = 'a';
double d1 = 7.809;
double d2;
n2 = c+1; //n2变为98 , 97是'a'的ASCII码
printf("c=%c,n2=%d\n",c,n2); //输出 c=a,n2=98
c = n1; // n1是0x562, 0x62被当做ASCII码赋值给c,c变为 'b'
printf("c=%c,n1=%d\n",c,n1); //输出 c=b,n1=1378
n1 = d1; // d1=7.809, 去掉小数部分后赋值给n1,n1变为7
printf("n1=%d\n", n1); //输出 n1=7
d2 = n1; //d2变为7
printf("d2=%f\n",d2); //输出 d2=7.000000
return 0;
}

5.常量

常量就是在程序运行过程中值不会发生改变,而且一眼就能看出其值的量
常量也可以分成多种:整型,浮点型,字符型,字符串,符号常量

1.十进制整型常量

0 123 -456 677363

2.十六进制整型常量,以“0x”开头

0x123 -0x1a 0x2abcdef 0xFFA 0x100

3.十六进制数中,用A(a)表示10, B(b)表示11 …. F(f)表示15

(3450)10 = 0 ×100 + 5 ×101 + 4 ×102 + 3 ×103
0x2FAB = 11×160 + 10 ×161 + 15 ×162 + 2 ×163 = (12203)10

4.一个十六进制位,正好对应于4个二进制位 F = (1111)2

5.八进制整型常量,以0开头

01 0123 -0456 0677

6.字符型常量

字符型常量表示一个字符,用单引号括起来
‘a’ ‘B’ ‘,’ ‘0’ ‘9’ ‘:’
字符型常量可用于给char 和unsigned char类型的变量赋值
char c = ‘a’;
unsigned char ch;
ch = ‘9’;

7.字符型常量和变量都占一个字节,内部存放的是字符的ASCII编码。

ASCII编码是一个0255的整数
‘0’
’9’: 48 ~ 57
‘A’’Z’: 65 ~ 90
‘a’
‘z’: 97 ~ 122
C++中还有一类字符常量,以’'开头,如’\n’、’\r’、’\t’等,称为“转义字符”。所谓“转义”就是指’'后面的字符被转成别的含义。

8.字符串常量

  1. 字符串常量是用双引号括起来的一串字符
    “a” “abc” “1234567”
  2. “” 也是一个字符串常量,它代表一个空串,即不包含任何字符的字符串
  3. “a”和’a’是不一样的,前者是只有一个字符的字符串,后者是一个字符,不能
    用前者给一个char类型的变量赋值。
  4. “1234567”当然也和1234567是不一样的,不能用前者给一个int类型变量赋值。
  5. 字符串常量里可以包含转义字符
1
2
3
printf("123\t456\nabc\n");
printf("123\'45\n");
printf("UVWX\"YZ\n");
1
2
3
4
123 456
abc
123'45
UVWX"YZ

9.符号常量

  1. 为了阅读和修改的方便,常用一个由字母和数字组成的符号来代表某个常量,这样的常量就叫符号常量
1
#define 常量名 常量值
  1. 定义之后,程序中所有出现“常量名”的地方,就等价于出现的是“常量值”
  2. “常量名”的命名规则和变量相同,“常量值”则写什么常量都可以
1
2
3
#define MAX_NUM 1000
#define UNIVERSITY_NAME "Peking University"
#define MYINT i = 5;
  1. 尽量少使用数值常量,二用符号常量替代它,这样便于修改

慕课C语言-1
http://www.example.com/2025/04/10/慕课C语言-1/
作者
MIR
发布于
2025年4月10日
许可协议