C++幼儿园[2] - 数据类型和基本语法

本文介绍了C++编程的基础知识,包括项目创建、断点使用、编辑器美化、数据类型的表示及转换、基本数据类型、变量赋值、运算符、控制语句等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先对上一篇教程做点补充

  1. 关于创建的项目在哪个地方
    工程文件夹
    比如我创建了一个叫test的项目,找到它所在的位置(在创建时可以选择)
    这个test.sln就是VS工程的入口,解决方案(solution),打开它就会自动开启VS。
    名字为test的文件夹内就有你写的源码文件,main.cpp

  2. 关于断点
    执行时,会在断点处停顿,停顿的时候,断点所在的那一行并不会执行
    这时你可以将鼠标移到代码中的变量上查看他们的值
    也可以点菜单栏里的“继续”
    也可以选择菜单栏里的“逐语句”,“逐过程”,即一句一句执行。
    调试

  3. 编辑器美化
    在菜单栏的 工具-选项 里,可以设置主题颜色(皮肤)
    皮肤设置
    字体和字号
    字体字号
    显示行号
    这里写图片描述

众所周知,数据在计算机内都是以二进制表示的,不太懂的可以先温习一下

十进制二进制十六进制(0x)
000
101
2102
3113
41004
51015
101010A
111011B
121100C
131101D
141110E
151111F
161000010

由表可以看出,
2进制的每一个位置,占1个bit,称为 1
16进制的每一个位置,占4个bit
也就是 1 Byte = 8 bit = 2个16进制位。
1 Byte (称为 字节)表示的数最大为 281=255

常用基本数据类型

数据类型所占空间(字节)最大值或范围
int(整数,integer)42311
float(单精度浮点数,小数)43.4×1038 + 7位有效数字
double(双精度浮点数,小数)81.7×10308 + 15位有效数字
char(字符,character)1-128 ~ 127
bool(布尔)10(false)或1(true)

变量的赋值

赋值的格式:

变量类型 变量名 = 值

例如下面这些赋值

#include<iostream>
using namespace std;

void main()
{
    int a = -18; //直接赋值整数
    int b = -18 + 99 + a; //等号右边可做运算
    int c = 0xABCDEF; //0x是16进制表示的前缀

    float d = 1997.0806;

    double g = 1.123456789;

    char h = 102;//试试输出h。把整数赋值给char型变量,输出时就转到ASCII码
    char i = 'i'; //字符数是用单引号引起来的字符。
    char j = 'abcd';//试试?
    char k = '\102';// 转义符 "\"
    char l = '\xAF';// "\x"后接两位16进制数

    bool n = 1 < 2;

}

解释几句:

  1. char型,可以理解为它储存的就是整数,但cout时会转到ASCII码表中对应的字符。如果赋给他的值超过了127,就会产生溢出。
    char c=129 此时c的值就是 -127。
    溢出规则这里就不讲了,自己百度or群里讨论or等老师讲
  2. 关于转义符 \ 的两种用法
    一般来说它会把紧跟在它后面的那个东西转成含有特殊含义的字符。
    比如\n表示换行符,\t表示制表符(Tab键),\102对应ASCII码的B
    一个比较有趣的是\a,表示鸣铃(alert),你可以输出它然后运行听听。
    第二个用法,就是把包含在双引号"" 之间的符号转变为它们本来的意思。比如cout<<"\"";就会输出一个",不加\符号的话,三个引号就无法识别了。
    (所以,怎么输出一个\呢?)

另外,const关键字用来声明常变量。例如

const double pi = 3.1415926; 

这类变量的值在声明后无法修改,所以,在声明的同时就应赋值。

const int i;
i=0;

也是不行的,会报错

运算符

常用的包括+ - * / =以及< > >= <= == !=
还有++ -- 和衍生的+= -= *= /=

我们知道,编程语言中,我们写a=b是把b的值赋给a。

int a = 0;
int b = 1;

a = b - 1;
a = b * 5; // * 是乘号
a++; //a的值自增1,即 a=a+1,执行之后a=1
++a; //同上,执行之后a=2
a*=3; //即a=a*3

++a和a++的区别我就不bb了,注意就好。

运算符优先级:
* /优先于+ -
()内的优先其他运算符执行。
为了可读性,即使有的地方能用优先级规则判别出来,括号也都要加,比如

b+a*100+1
b+(a*100)+1 //有括号清爽多了

控制语句

最基础的if…else

if (1 > 2)
{
    cout << "1>2";
}
else if(1 < 2)
{
    cout << "1<2";
}
else if(1 == 2)
{
    cout << "1=2";
}
else
    cout << "wtf?";

这里,1<2是true的,所以会执行else if中的语句。

if,for,while等语句后的{} 内只有一句话的时候,花括号可省略,比如上面的else
但是如果没加花括号,又写了两句话呢?

if(1==2)
    cout<<"a";
cout<<"b";

那当然就按顺序执行了。所以这里只会输出b

要注意,if后的括号内应接true或false。不是bool型变量则会转换成bool型。
c++中,0自动转成false非0的数转成true
所以下面的语句会输出if中的内容。

bool flag = false;
if(flag)
    cout <<"flag comes true";

int n = 10086;
if(n)   //或者 if(10086)
{
    cout<<n;
}

警惕下面的错误

int a=10086;
if(a = 1)  //注意这里写成了"=",把1赋值给了a
    cout << "exm?";

试试这个?
这里仍然会输出exm。
它等价于if(1),即if后的括号内,先进行运算,再判断最后的运算结果。

最常用的for

//输出0~7,每两个数中间一个空格。
for (int i = 0; i < 8; i++)
{
    cout << i << " ";
}

for后的括号内有3个语句块,作用分别是

(赋值;继续循环的条件;每循环一次所做的改变)

所以像这样写都是可以的

    int i; //在for之前声明变量
    for (i = 0; i < 8; i++)
        cout << i << " ";
    cout << endl;

    i = 10; //在for之前给变量赋值
    for (; i > 0; i = i - 1) //这里第一个语句块空着,但要加分号
        cout << i << " ";
    cout << endl;

while

先看一个示例

//输出0~9
    int i=0;
    while (i < 10)
    {
        cout << i << endl;
        i++;
    }

while的意思是 当……时
也就是当i<10时(只要i<10),就进入循环。
执行到i=9时,在i++将i变成10之后,进行判断,i=10<10,结果是false,所以跳出循环。
由于while的括号内没有给变量增值的语句,所以要在循环体内做改变。

while经常用于不知道具体循环次数的情况

    int i=0;
    int n = 0;
    while (i < 10)
    {
        cin >> n; //cin为输入语句,后接">>",给n赋值。
        if (n > 10)
            i += 4;
        else
            i += 1;
    }

break&continue

都用在循环中。
break表示跳出当前的循环

//由于break语句,输出0~5
    for (int i = 0; i < 10; i++)
    {
        if (i > 5)
            break;
        cout << i << " ";
    }

    while (true)//由于括号内总为真,所以如果没有break,就会造成死循环
    {
        cout << "没时间解释了,快输入0!"
        int n;
        cin >> n;
        if (n == 0)
            break;
    }

continue表示继续下一轮当前的循环

    while (true)
    {
        cout << "没时间解释了,快输入0!"
        int n;
        cin >> n;
        if (n != 0)//不等号。如果n不等于0,则执行continue
            continue;
    }

为什么我上面强调是“当前的”循环呢?其实,break和continue只对最内层的循环起作用

//嵌套循环的例子
    for (int i = 0; i < 10; i++)//外层循环
    {
        for (int j= 0; j < 10; i++)//内层循环
        {
            int n;
            cin >> n;

            if (n == 0)
                break;
            cout << "j";
        }
        cout << "i";
    }

上面的例子中,即使每次都输入0,也会输出10次i,每次被打断的都是j的输出。


自己动手试试:

  1. 输出一个\
  2. 声明一个整型变量,cin一个小数
  3. 声明一个布尔型变量,赋给整型变量,再输出

自己的小作业:

  • 求0~100中的质数,并输出到屏幕上

作业(要交 要交 要交):

  • 写一个计算平均绩点(GPA, Grade Point Average)的程序

要求输入各科学分(比如高数5分)和成绩(百分制),最后输出GPA。
具体的流程需自己设计,且有足够的提示语句,能让别人知道怎么用。

附公式(C代表学分 credit,GP代表绩点 grade point)

GPA=ni=0(Ci×GPi)ni=0Ci

分数和绩点的转换关系,自行百度“GPA”,按咱们学校的版本来算。

(其实就是加权绩点,权重为学分)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值