1.CPP基本介绍

本文介绍了C++的基本程序框架,包括头文件如<iostream>和<cstdio>的用途,以及命名空间std的使用。重点讲解了main()函数的作用和程序返回值。接着讨论了变量的概念,包括类型、名字和作用域,以及不同类型的变量如布尔、整型、浮点型和字符型的特性。还阐述了赋值操作和常量的定义。最后,对比了cin/cout与scanf/printf在输入输出上的应用和差异。

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

https://pan.baidu.com/s/1iCvsx3EGtXrZUgYQk2TPbg?pwd=zffp

一、程序框架

#include <iostream>
#include <cstdio>

using namespace std;
int main()
{
	cout<<"Hello world!"<<endl; 
	
	return 0;
}

1.头文件

include 是英文单词“包含”的意思,<iostream> 是一个用于输入输出流(input and output stream)的库,里面包含一系列可以用于输入、输出的方法。当我们写下这样一条语句就意味着我们可以使用 iostream 中提供的 std::cinstd::coutstd::endl 等对象了。

C++ 为了和 C 保持兼容,可以直接使用部分 C 语言中的头文件,例如 cstdio 就是 C 语言中的 stdio.hcstdio 允许我们使用 C 语言的标准输入输出scanfprintf 等等。

2.命名空间

using 是英文单词“使用”的意思,namespace std 表示我们要用到一个命名空间 std,表示标准输入输出流。这样我们将 std::cin 替换为 cin 简化代码。

3.main()

可以理解为程序运行时就会执行 main() 中的代码,这是整个程序的入口。

最后的 return 0; 表示程序运行成功。默认情况下,程序结束时返回 0 0 0 表示一切正常,否则返回值表示错误代码如果不写 return 语句的话,程序正常结束默认返回值也是 0 0 0。在 C 或 C++ 中,程序的返回值不为 0 0 0 会导致运行时错误(Runtime Error,简写为 RE)。

二、变量

1.概念

变量可以被看做一个盒子,每个盒子中可以存储一定的值。除了里面存储的值以外,还有三个重要的属性:

  • 一个是变量类型,它规定了每个盒子的字节数和存储什么样的内容。
  • 一个是变量名,它规定了我们可以如何称呼这个盒子,变量名必须以字母或者_开头。
  • 一个是作用域,它规定了变量发挥作用的代码块(用一对大括号包裹的若干语句称为一个代码块)。
    • 定义在花括号包裹的地方的变量是局部变量,定义时没有初始化值的全局变量会被初始化为 0 0 0。作用域自定义之处起,至文件结束为止。
    • 定义在没有花括号包裹的地方的变量是全局变量。局部变量不会自动初始化,需要手动赋初始值,否则可能引起难以发现的 bug。作用域自定义之处起,至代码块结束为止。

定义变量的规则是:

变量类型 变量名;
int a;
double b;

2.变量类型

(1)布尔类型

一个 bool 类型的变量取值只可能为两种:truefalse

一般情况下,一个 bool 类型变量占有 1 1 1 字节(一般情况下 1 1 1 字节 = 8 8 8 位)的空间。

(2)整型变量

整型变量用来存储整数,最基础最常用的数据类型是 int。对于 int 关键字,可以使用如下修饰关键字进行修饰:

符号性,用来表示正负号:

  • signed:表示带符号整数(默认);
  • unsigned:表示无符号整数。

大小,用来规定字节长度:

  • short:表示至少 16 16 16 位整数;
  • long:表示至少 32 32 32 位整数;
  • long long:表示至少 64 64 64 位整数。

(3)浮点类型

用于存储实数,包括以下三种:

  • float:单精度浮点类型,最大值 3.4 × 1 0 38 3.4\times10^{38} 3.4×1038,精度 6 ∼ 9 6\sim9 69 位。
  • double:双精度浮点类型,最大值 1.8 × 1 0 308 1.8\times10^{308} 1.8×10308,精度 15 ∼ 17 15\sim17 1517 位。
  • long double:扩展精度浮点类型,最大值 1.2 × 1 0 4932 1.2\times10^{4932} 1.2×104932,精度 33 ∼ 36 33\sim36 3336 位。

(4)字符类型

char类型一般为 8 8 8 位,底层存储的方式依然是整数,一般通过 ASCII 码值表实现字符与数字的一一对应。

3.位宽与表示范围

下表给出在一般情况下,各个整数类型的名称、位宽和表示范围大小:

类型名位宽表示范围
bool 8 8 8truefalse
short 16 16 16 − 2 15 ∼ 2 15 − 1 -2^{15}\sim2^{15}-1 2152151
unsigned short 16 16 16 0 ∼ 2 16 − 1 0\sim2^{16}-1 02161
intlong 32 32 32 − 2 31 ∼ 2 31 − 1 -2^{31}\sim2^{31}-1 2312311
unsigned intunsigned long 32 32 32 0 ∼ 2 32 − 1 0\sim2^{32}-1 02321
long long 64 64 64 − 2 63 ∼ 2 63 − 1 -2^{63}\sim2^{63}-1 2632631
unsigned long long 64 64 64 0 ∼ 2 64 − 1 0\sim2^{64}-1 02641
float 32 32 32
double 64 64 64
long double 128 128 128
char 4 4 4 0 ∼ 127 0\sim127 0127
void 0 0 0

4.赋值

= 在 CPP 语言中被我们称作赋值运算符,可以用 = 将右侧的一个值赋值给左侧的一个变量,让变量这个盒子存储这一个值。

变量名=;
int a=1;
double b;
b=1.0;

5.常量

常量是固定值,在程序执行期间不会改变。常量的值在定义后不能被修改。定义时加一个 const 关键字即可。

const int a=3;

如果修改了常量的值,在编译环节就会报错。

三、输入输出

1.cin cout

无论什么类型的变量都可以通过 cincout 来直接输入输出,当然输入要符合对应变量的规则。cin 会自动忽略变量之间的空格和回车。

输入输出多个变量的时候,需要用 >> 符号来连接。endl 用来表示回车。

int a,b;
double c;
cin>>a>>b>>c;
cout<<a<<" "<<b<<" "<<c<<endl;

2.scanfprintf

scanfprintf 其实是 C 语言提供的函数。大多数情况下,它们的速度比 cincout 更快,并且能够方便地控制输入输出格式。与之对应的,使用起来会更加复杂一些。它们的格式如下:

int a;
scanf("请读入一个整数:%d",&a);
printf("%d\n",a);

double b;
long long c;
scanf("%lf %lld",&b,&c);
print("这个浮点数是:%lf\n这个长整型数是:%lld\n",b,c);

char str[10];
scanf("%s",str);
printf("这个字符串是:%s\n",str);
  1. 在读入的时候需要在变量名前面添加取地址符 &,字符串除外;而输出的时候不需要,只需要写出变量名即可。
  2. 引号中的内容是下面的符号,除了以 %\ 开头的特殊符号以外,引号内的内容会原样输出。\ 是转义字符,如果想打出反斜杠则需要写成 \\
  3. scanf 读入字符的时候不会自动忽略空格和回车;但是在读入别的数据类型的时候会自动忽略空格和回车。
符号类型
%schar []类型
%cchar类型
%lfdouble类型
%dint类型
%lldlong long类型

除了类型标识符以外,还有一些控制格式的方式。许多都不常用,选取几个常用的列举如下:

  1. %1d 表示长度为 1 1 1 的整型。在读入时,即使没有空格也可以逐位读入数字。在输出时,若指定的长度大于数字的位数,就会在数字前用空格填充。若指定的长度小于数字的位数,就没有效果。
  2. %.6lf,用于输出,保留六位小数。
  3. \n,用于换行一次。\t,用于打印一个制表符。

四、报错信息

  • AC(Accepted):表示已通过测试点并获得了分数。但需要注意,你的程序只是通过了命题人给出的所有数据,依然有存在潜在错误的可能性。

  • CE(Compile Error):编译错误。可能是自身写法问题,也可能是与测试机环境不同产生的版本问题。

  • PE(Presentation Error):输出格式错误。你的程序输出了与 AC 相同的答案,但格式存在一定的问题(大小写,空格数量,换行数量之类的)。

  • WA(Wrong Answer):答案错误。你的程序输出了与 AC 不相同的答案。

  • TLE(Time Limit Exceed):超出运行时间限制。

  • MLE(Memory Limit Exceed):超出运行内存限制。

  • RE(Runtime Error ):运行时错误。错误可能包括递归爆栈、死循环和数组访问越界等等

五、作业

【入门1】顺序结构

CPP程序 #include "stdio.h" #include #include #define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0 struct pcb { /* 定义进程控制块PCB */ char name[10]; char state; int super; int ntime; int rtime; struct pcb* link; }*ready=NULL,*p; typedef struct pcb PCB; sort() /* 建立对进程进行优先级排列函数*/ { PCB *first, *second; int insert=0; if((ready==NULL)||((p->super)>(ready->super))) /*优先级最大者,插入队首*/ { p->link=ready; ready=p; } else /* 进程比较优先级,插入适当的位置中*/ { first=ready; second=first->link; while(second!=NULL) { if((p->super)>(second->super)) /*若插入进程比当前进程优先数大,*/ { /*插入到当前进程前面*/ p->link=second; first->link=p; second=NULL; insert=1; } else /* 插入进程优先数最低,则插入到队尾*/ { first=first->link; second=second->link; } } if(insert==0) first->link=p; } } input() /* 建立进程控制块函数*/ { int i,num; //clrscr(); /*清屏*/ printf("\n 请输入进程数?"); scanf("%d",&num); for(i=0;iname); printf("\n 输入进程优先数:"); scanf("%d",&p->super); printf("\n 输入进程运行时间:"); scanf("%d",&p->ntime); printf("\n"); p->rtime=0;p->state='w'; p->link=NULL; sort(); /* 调用sort函数*/ } } int space() { int l=0; PCB* pr=ready; while(pr!=NULL) { l++; pr=pr->link; } return(l); } disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ { printf("\n qname \t state \t super \t ndtime \t runtime \n"); printf("|%s\t",pr->name); printf("|%c\t",pr->state); printf("|%d\t",pr->super); printf("|%d\t",pr->ntime); printf("|%d\t",pr->rtime); printf("\n"); } check() /* 建立进程查看函数 */ { PCB* pr; printf("\n **** 当前正在运行的进程是:%s",p->name); /*显示当前运行进程*/ disp(p); pr=ready; printf("\n ****当前就绪队列状态为:\n"); /*显示就绪队列状态*/ while(pr!=NULL) { disp(pr); pr=pr->link; } } destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ { printf("\n 进程 [%s] 已完成.\n",p->name); free(p); } running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ { (p->rtime)++; if(p->rtime==p->ntime) destroy(); /* 调用destroy函数*/ else { (p->super)--; p->state='w'; sort(); /*调用sort函数*/ } } main() /*主函数*/ { int len,h=0; char ch; input(); len=space(); while((len!=0)&&(ready!=NULL)) { ch=getchar(); h++; printf("\n The execute number:%d \n",h); p=ready; ready=p->link; p->link=NULL; p->state='R'; check(); running(); printf("\n 按任一键继续......"); ch=getchar(); } printf("\n\n 进程已经完成.\n"); ch=getchar(); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值