本关任务:掌握标识符、数据类型、常量和变量等方面的基本概念。
相关知识
为了完成本关任务,你需要掌握: 1.自定义标识符。 2.常量的表示。 (1)整型常量:八进制、十进制和十六进制; (2)字符常量:字符的基本表示法和常见转义字符的表示法。 (3)实型常量:单精度、双精度实数和科学表示法。 (4)字符串常量。 (5)逻辑常量:true(真)和false(假)。 3、变量的定义和初始化。 4、运算符及其表达式。 5、数据类型与类型转换。
整型常量
1、八进制:以0开头,由0-7八个符号组成,如036等于十进制数30,而058是错误的。 2、十进制:默认进制,由0-9十个符号组成。 3、十六进制:以0x或0X开头,由0-9、A-F十六个符号组成,如0X1F等于十进制数31。
字符常量
1、基本表示法:‘ ’,如‘A’、‘0’、‘+’等。 2、转义表示法:‘\ ’,如‘\t’、‘\n’、‘\0’等。
实型常量
1、单精度:float,以后辍f或F表示,如3.14F、7.28f等。 2、双精度实数:double,默认实数,如1.5、0.5、5.等。默认的话是双精度类型 3、科学表示法:用e或E表示,指数部分必须是整数,尾数不能省,如1.23E5、1.14e-5等。
字符串常量
以“ ”表示,如“abcd”、“12345”、“123\0abc”、“程序”等。 其中字符串“123\0abc”中第4个字符是‘\0’(字符串结束标记),表示字符串到此结束,等同于整数0和逻辑值false,区别于字符‘0’。 示例如下:
cout<<"123\0abc"<<endl; //字符串遇到\0结束
cout<<"123\tabc"<<endl; //水平制表符
cout<<"123\nabc"<<endl; //换行
cout<<'\0'+5<<endl; //强制转换
cout<<'0'+5<<endl; //'0'的ASCII码十进制是48
/*
输出:
123
123 abc
123
abc
5
53
*/
变量定义和初始化
1、变量定义的基本格式如下: 数据类型 变量名称; 用以上方法定义的变量通常是没有确定值的。
2、变量初始化是指在定义变量的同时给变量赋初值,其基本方法有2种: (1)数据类型 变量名称=表达式; (2)数据类型 变量名称(表达式);
运算符及其表达式
1、C常用运算符如下所示: (1)单目运算符:!(逻辑非)、+、-。 (2)算术运算符(双目):* 、/、%、+、-、、--。 (3)关系运算符(双目):>、>=、<、<=、==、!=。 (4)双目逻辑运算符: &&、||。 (5)赋值运算符(双目):=、+=、-=、* =、/=、%=。 (6)其他运算符: ?:(唯一的三目运算符)、,、sizeof()、new、delete等。
2、以上运算符中,(1)-(5)的优先级是按从高到低的顺序列举的。
3、表达式是由操作数(参与运算的数据)和运算符连接起来的式子,除了按数据类型分类外,还可以分为常量表达式和变量表达式。 (1)常量表达式:值是一个常量,操作数只能是常量。 (2)变量表达式:虽然也有确定的值,但可以变化,操作数为变量,或者是变量和常量。
4、表达式的运算 (1)必须符合运算符的语法规则,如 % 的操作数必须是整型或能自动转换为整型的量,= 的左操作数必须是变量。 (2)必须有正确的语义,注意C++表达式与数学表达式的区别。 (3)逻辑表达式的优化:逻辑表达式在运算的过程中,一旦有确定的值,将终止表达式的运算。 示例如下: 分析下列程序
#include<iostream>
using namespace std;
int main(){
int a=2,b(7),c,d,e,f,g;
c=b/a;
cout<<c<<endl;
d=b>c>a;
cout<<d<<endl;
d=a++||++b;
cout<<a<<endl;
cout<<b<<endl;
cout<<d<<endl;
d=c==a?c++:b++;
cout<<b<<endl;
cout<<c<<endl;
cout<<d<<endl;
//cout<<d<<endl;
return 0;
}
输出: 3 0 3 7 1 7 4 3
类型转换
C++要求参与一个运算符运算的操作数类型必须相同,若不相同则进行转换,有下列2种转换方式。 1、自动转换:程序中没有转换表达式,自动按char→int→float→double的顺序转换。
2、强制转换:用表达式指定转换方式,有以下2种方法: (1)数据类型(表达式) (2)(数据类型)表达式 示例如下:
int x=3.5;
float y,z(8);
cout<<x<<endl;
y=x+.5; //y是float型
cout<<y<<endl;
cout<<(int)z%int(y)<<endl;
输出: 3 3.5 2 若进行z%3的运算,则是语法错误。
2、下列常量表示中不正确的是( B )。 A、 8.F B、 ‘ab’ C、 .99 D、 ‘\t’ 3、若a1、a2、a3、a4均为整型变量,则下列选项中符合C++语法规则的表达式是( A )。 A、a4=0Xa2 转化为16进制 B、a2=a1+a3=3 * 5 error:连续赋值 C、a3=078 八进制0-7
D、a1=66%3.0 %只能为整型
4、 设有程序段如下:
int m=14,n=14,j,k;
j=m++/5; //j=2,m=15
k=++n/5; //k=3,n=15
则执行该程序段后变量j和k的值分别是( B )。 A、 2.8和3 B、 2和3 C、 3和3 D、 2和2 5、设有程序段如下:
int x=237,k;
k=!(-x); //非0取反为0
则执行该程序段后变量k的值是( A )。 A、0 B、1 C、true D、false 6、 设有程序段如下:
int x=1, y=1, k;
k=x++||++y;
/*在给定的代码中,表达式 k=x++||++y; 包括了逻辑或运算符 ||。逻辑或运算符会首先计算其左侧的表达式 x++ 的值。在这里,x++ 表示先将 x 的值赋给 k,然后再将 x 的值加一。因此,k 的值将会是 1,因为表达式被赋予了 x 的初始值。
接下来,由于逻辑或运算符的短路特性,如果 x++ 的值为真(非零),剩下的表达式 ++y 将不会被执行。因此,y 的值不会被增加。这就是为什么 y 的值仍然是 1 的原因。
因此,最终的结果是 k 的值为 1,x 的值为 2,y 的值为 1。
*/
/*逻辑或运算符的短路特性指的是,如果逻辑或表达式的左侧条件已经满足(值为真),则不再计算右侧的条件,直接返回左侧条件的值作为整个表达式的值。这意味着如果左侧条件为真,整个表达式的值就已经确定,右侧的条件不会被执行。
这个特性是逻辑运算符的一种行为,有助于提高程序的执行效率,并且有时候会对程序逻辑产生影响。
在实际编程中,逻辑或运算符的短路特性可以用来简化条件表达式,并在某些情况下避免不必要的计算。
*/
则执行该程序段后,变量x、y的值分别为( C )。 A、1和1 B、1和2 C、2和1 D、2和2 7、 设有程序段如下:
int x=1, y=3, z=5 , a=0;
a= x--? y--: z--; //条件为真运算左边的式子
//a=3 , x=0 ,y=2 , z=5
则执行该程序段后,下列说法不正确的是( D )。 A、a的值为3 B、x的值为0 C、y的值为2 D、z的值为4 8、 逗号运算符是C语言中的一个运算符,用逗号,表示。它的作用是依次计算它的两个操作数,并返回最后一个操作数的值。 设有程序段如下:
int a, b;
b=((a=2+3,a/4),a++);
//由于逗号运算符保证整个表达式的值是最后一个表达式的值,故b=5,a=6
则执行该程序段后,变量a和b的值分别为( A )。 A、 6和5 B、 5和6 C、 1和2 D、 2和1 9、设有程序段如下:
int a=1;
char c='A'; // 字符'A'的ASCII值为65
c+=1; a+=c;
cout<<a<<'\t'<<c<<'\n';
则执行该程序段的输出结果为( C )。
A、 B B B、 67 67 C、 67 B D、 B 67 10、 cin.get() 用于读取一个字符 设有变量定义如下:
int a;
char b;
则下列语句错误的是( A )。 A、 cin.get(a); B、 cin>>a; C、 cin.get(b); D、 cin>>b;
cin.get() 和 cin.getline() 都用于从标准输入流中读取字符,但它们之间有一些区别。 cin.get() 用于读取输入流中的下一个字符,直到换行符或文件结束符为止。它可以用来逐个读取字符。 cin.getline() 用于从输入流中读取一行字符,直到换行符或指定的最大字符数-1为止(默认情况下是换行符)。它允许指定最大读取的字符数,可以避免读取过多字符。 因此,主要区别在于 cin.getline() 能够读取整行字符,并且可以限制最大读取字符数,而 cin.get() 则是逐个读取字符,直到遇到换行符或文件结束符。
本文章使用limfx的vscode插件快速发布