资源描述
1.1 1.C++概述
例题5:C++的合法注释是( )。
A./*This is a C program/* B.// This is a C program
C. “This is a C program” D.//This is a C program//
答案:B
分析:单行注释常采用“//”,多行注释采用“/*”和“*/”。单行注释也可采用“/*”和“*/”,但答案A书写格式错误,不能选答案A。注释和字符串的区别,双引号内的字符为字符串。不能选答案C。单行注释不需要结束符“//”,如果有,只能作为注释的一部分存在。也不能选答案D。
例题6:下面标识符中正确的是( )。
A._abc B.3ab C. int D.+ab
答案:A
分析:C++的标识符由字母、下划线和数字组成,而且第一个字符不能为数字。答案B第一个字符为数字不能选B。标识符不能为关键字,不能选答案C。答案D第一个字符不是字母或下划线,也不能选。
例题7:分析下列该程序的错误。输入数据格式为:2,5(回车)。
main()
{ int sum=0;
int a,b;
cout<<"input a,b:";
cin>>a>>b;
sum=a+b;
cout<<sum<<endl;
}
本程序把输入的两个数据进行累加并输出结果。输入数据格式为:2 5。
正确程序:
#include <iostream> // 编译预处理命令,以“#”开头。把系统已经定义好的输入
//输出功能包含到本程序中。
using namespace std; //使用std 名字空间
int main() // 程序的主函数
{ // 主函数开始
int sum=0; // 定义一个变量sum存放累加结果,并且赋初值为0
int a,b; // 定义两个变量,保存输入值
cout<<"input a,b:"; // 提示输入
cin>>a>>b; // 使用基本输入设备cin输入两个变量值
sum=a+b; // 进行累加,结果保存到sum变量
cout<<sum<<endl; // 使用基本输出设备cout输出累加结果sum
}
分析:
(1)没有使用编译预处理命令:#include。iostream是系统定义的一个头文件(h-head),设置了C++的I/O环境。cin、cout为基本输入、输出设备,定义在iostream.h头文件中。
(2)没有 main()函数的返回类型,系统提示警告。一般main函数返回整型
(3)输入数据时没有使用空格分隔。输入运算符“>>”要求输入的多个数据用空格分隔。
补充习题
2.下列标识符中,( B )是合法的。(identifier 能唯一标识一个单元或函数的名字)
A.goto B.Student C. 123 D.kld
4.C++语言中语句的结束符是( )。
A. , B. ; C. 。 D. 、
6.写一个程序输出 Hello,C++!。
7.编译下列程序,改正错误信息,分析输出结果。
#include <iostream>
using namespace std;
int main()
{ int x,y;
cout<<"input x:"<<endl;
cin>>x;
y=x*x;
cout<<"y=”<<y<<”\n"; ---------
return 0;
}
10.给出下列程序的运行结果。
#include <iostream>
using namespace std;
int main()
{
int a(2),b(3),c(4); //参考变量的初始化 等价于 int a=2,…
cout<<"c1="<<c<<endl;
c=a+b;
cout<<"c2="<<c<<endl;
}
基本数据类型与数值表达式
例题5:已知a=4,b=6,c=8,d=9,则“(a++,b>a++&&c>d)?++d:a<b” 值为( )。
A.9 B.6 C.8 D.0
答案:D
分析:此题是考察“++”运算符、逗号运算符、条件运算符及它们运算优先级的综合题,根据这些运算符的运算规则,得出表达式的运算结果。
例题7:已知x=43,ch=‘A’,y=0;则表达式(x>=y&&ch<’B’&&!y)的值是( )。
A.0 B.语法错 C.1 D.“假”
分析:根据C++语言中运算符优先级的高低,“!”运算符最高,关系运算符高于逻辑运算符。则上面的表达式转换为:1&&1&&1,结果为1。
答案:C。
2.
例题10:设所有变量均为整型,则表达式(e=2,f=5,e++,f++,e+f)的值为____。
答案:9
分析:逗号运算符是是将两个或多个表达式组合成一个表达式的运算符。求解时从左至右依次计算每个表达式的值,整个表达式的值就是最右边的表达式的值。本题的答案为9。
例题11:已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=’a’+’8’-‘4’的值为____。
答案:e
分析:C++语言中,对字符数据进行算术运算,实际上就是对字符的ASCII码进行运算。以字符形式输出时,再将ASCII码转换为相应的字符输出。本题表达式为ch=97+8-4=101,101相应的ASCII为字符e。
4.选择题
(1)下列数据类型不是C++语言基本数据类型的是( )。
A.字符型 B.整型 C.实型 D.数组
答案:D
(3)下列字符列中,可作为C++语言程序自定义标识符是( )。
A.switch B.file C.break D.do
答案:B
(5) 下列字符列中,可以作为“字符串常量”的是( )。
A. ABC B.″xyz″ C.′uvw′ D. ′a′
答案:B
(6) 设变量m,n,a,b,c,d均为0,执行(m = a==b)||(n=c==d)后,m,n的值是( )。
A.0,0 B. 0,1 C. 1,0 D. 1,1
答案:C
(8) 在C++语言中,自定义的标识符( )。
A.能使用关键字并且不区分大小写 B.不能使用关键字并且不区分大小写
C.能使用关键字并且区分大小写 D.不能使用关键字并且区分大小写
答案:D
(9)设有代码“int a = 5;”,则执行了语句“a + = a - = a*a;”后,变量a的值是( )。
A.3 B. 0 C. -40 D. –12
答案:C
(10)设a为5,执行下列代码后,b的值不为2的是( )。
A. b = a/2 B. b = 6-(--a)
C. b = a%2 D. b = a < 3 ? 3: 2
答案:C
补充习题
1. 1. 选择题
(1)C++语言中的标识符只能右字母、数字和下划线三种字符组成,且第一个字符( C )。
A.必须为字母 B.必须为下划线
C.必须为字母或下划线 D.可以是字母、数字和下划线中任一中字符
(2)下面正确的字符常量是( C )。// 字符常量的标志:一对单引号
A.“C” B.‘\\’’ C.‘W’ D.‘’
(5)关于逻辑运算符的说法正确的是( CD )。 注意逻辑运算符&&与||的特别,可能会使得右边不需求解
A.它们都是双目运算符,优先级相同
B.语句“int a=0,c=1,b;b=a&&c++;” 执行后,c 的值为2
C.语句“int a=0,c=1,b;b=a||c++;” 执行后,c 的值为2
D.语句“int a=1,c=1,b;b=a&&c++;” 执行后,c 的值为2
(8)有如下程序段:注意x的类型为int
int a=14,b=15,x;
char c=’A’;
x=(a&&b)&&(c<’B’);
执行该程序后,x的值为( D )。
A.ture B.flase C.0 D.1
(11)以下叙述中不正确的是( D )。
A.在C++程序中,name和NAME是两个不同的变量
B.在C++ 程序中,逗号运算符的优先级最低
C.若变量m,n为int型,则m=n后,n中的值不变
D.当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值。
(12)sizeof(float)是( B )。考查sizeof()运算符
A.一个双精度型表达式 B.一个整型表达式
C.一种函数调用 D.一个不合法的表达式
(13)下面不正确的字符串常量是( A )。字符串标志----一对双引号
A.‘rst’ B.“14‘14” C.“0” D.“ ”
(16)设a是整型变量,则表达式(a=4*5,a*2),a+6的值是( B )。考查逗号表达式与赋值的优先级,注意逗号的优先级最低
A.20 B.26 C.40 D.46
(17)设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c<d)后n的值为( )。
A.1 B.2 C.3 D.4
(18)用C++的语言表达式表示 |x3+log10x|的正确是( )。
A.fabs(x*3+log(x)) B.abs(pow(x,3)+log(x))
C.fabs(pow(x,3.0)+log(x)) D.abs(pow(x,3.0)+log(x))
(19)设int k=7,x=12;则能使值为3的表达式是_____。
A.x%=(k%=5) B.x%=(k-k%5)
C.x%=k-k%5 D.(x%=k)-(k%=5)
(21)设有语句int x=3,y=4,z=5;则下面表达式中值为0的是( D )。
A.’x’&&’y’ B.x<=y
C.x||y+z&&y-z D.!((x<y)&& !z | | 1)
(23)判断char型变量n是否为小写字母的正确表达式为( D )。
A.’a’<= n <=’z’ B.(n>=a)&&(n<=z)
C.(’a’>=n)| |(’z’<=n) D.(n>=’a’)&&(n<=’z’)
基本编程语句:控制结构
典型例题分析与解答
例题2:以下不正确的语句是( )。
A.if(x>y);
B.if(x=y)&&(x!=0) x+=y;
C.if(x!=y)cin>>x;else cin>>y;
D.if(x<y) {x++;y++;}
答案:B
分析:if语句后面的表达式必须放在括号内“()”,且不能使用赋之值运算符。在if和else后面用花括号“{}”括起来的多个语句成为了一个复合语句。
例题3:下面程序的输出结果是( )。
#include <iostream>
using namespace std;
int main()
{ int a=6,b=6;
if(a>5)
a-=1;
b+=1;
else
a+=1;
b-=1;
cout<<”a=”<<a<<endl;
cout<<”b=”<<b;
}
A.5 B.a=5 C.a=5 D.编译时出错
7 b=7 b=6
答案:D
分析:在if…else语句的中间应为单条语句或复合语句,不能为多条语句。
例题4:对while、do…while循环结构,下面说法正确的是( )。
A.只是表达形式不同
B.do…while结构中的语句至少执行一次
C.while结构中的语句至少执行一次
D.条件成立时,它们有可能一次也不执行
答案:B
分析:要知道while、do…while两种循环结构的区别在于:while循环是先判断条件是否成立,成立时才执行,而do…while是先执行再判断,它至少执行一次。
例题5:以下不正确的是( )。
A.语句for(i=0;;i++)表示无限循环 B.for(;;)表示无限循环
C.for()也表示无限循环 D.while(1)表示无限循环
答案:C
分析:for循环语句中的表达式可以省略,但分号不可省略。
例题6:下面循环体的执行次数为( )。
#include <iostream>
using namespace std;
int main()
{ int a,b;
for(a=0,b=5;a<=b+1;a+=2,b--) cout<<a<<endl;
}
A.3 B.2 C.1 D.0
答案:A
分析:在for语句的表达式中使用了逗号运算符对变量a和b 进行赋初值,每次循环后改变变量a和b 的值,直到a>=b.
例题7:对中断语句的说法下面不正确的是( )。
A.用户可以指定中断的位置 B.用户可以指定转移的位置
C.break语句可以跳出本循环 D.continue语句可以结束本次循环
答案:B
分析:不论break语句还是continue语句转移的位置是根据程序默认的,不用人为的设置。
例题8:下列函数的功能是( )。
#include <iostream>
using namespace std;
int main()
{ char a; int i;
cin>>a;
for(i=1;i<=10;i++)
{ if((a>=’a’)&&(a<=’z’))
a=a-i;
cout<<a;
} }
A.把a中的小写字母变成大写字母 B.把a中的小写字母变成大写字母
C.把a中的所有字母变成小写字母 D.把a中的字母变成它前面i个的字母
答案:D
分析:本题要求判断程序的功能,可以用列举法判断其gon功能,例设a=’f’,则程序结果为edcba^^^^^,本程序仅对在小写字母a~z之间的字母起作用。
1. 2. 填空题
例题9:下面的程序实现输出x,y,z三个数中的最大值,请填入正确的内容。
#include <iostream>
using namespace std;
int main()
{ int x=5,y=8,z=9, u, v;
if( (1) ) u=x;
else u=y;
if( (2) ) v=u;
else v=z;
cout<<”v=”<<v<<endl;
}
答案:(1)x>y (2) u>z
分析:本程序首先找出x和y中较大的数放入变量u中,再将u 与z 做比较,其中较大者放入变量v中,为三个数中的最大值。
例题10:有以下程序段:
int n=0;
while(n=1)n++;
while循环执行次数是_____。
答案:为无限次。
分析:要注意”=”和”= =”的区别,”=”是赋值运算符,”= =”是关系运算符“等于”。这里while(n=1)永远为1,为真值,则答案为无限次。
例题11:计算1~20之间偶数之和,请填充:
#include <iostream>
using namespace std;
int main()
{ int a,b,i;
a=0;b=0;
for(i=0; (1) ;i+=2)
{ a+=i;
(2) ;
(3) ;
cout<<”偶数之和为:”<<a<<endl;
}
答案:(1)i<=20或i<21 (2)b+=i+1 (3) }
例题12:下面程序运行结束后,k的值为_____。
#include <iostream>
using namespace std;
int main()
{ int i,j,k;
for(i=0,j=10;i<=j;i++,j--)
k=i+j;
count<<k;
}
答案:10。
分析:在程序中每循环一次,变量i+1,而变量j-1,i+j之和保持不变为10,直到循环结束。
例题13:下面程序是输出100以内能被7整除且个位数是4的所有整数,请填空:
#include <iostream>
using namespace std;
int main()
{ int i,j;
for(i=0; (1) ;i++)
{ j=i*10+4;
if( (2) )
continue;
(3)
cout<<j<<endl;
} }
答案:(1)i<=9或i<10 (2)j%7!=0 (3)else
分析:由题目可知判断100以内的数,故i变量的终值应为:i<=9或i<10。要满足不被7整除的条件为: j%7!=0;反之不满足该条件的则要输出。
2. 4. 看程序写结果
例题16:#include <iostream>
using namespace std;
int main()
{ int a,b,c,d,x;
a=c=0; b=1;d=20;
if(a) d=d-10;
else if(! b)
if(! c) ;
else x=25;
cout<<”d=”<<d<<endl;
cout<<”x=”<<x<<endl;
}
运行结果:
d=20
x=25
分析:这是一个if语句的嵌套结构,判断三个if语句的条件表达式都“假”,则执行最后一个else后面的语句“x=25”。
例题17#include <iostream>
using namespace std;
int main()
{ int x=6,y=8;
if(x++<6)
cout<<++y<<endl;
if(x>6)
cout<<- -y<<endl;
else
cout<<y++<<endl;
}
运行结果:
7
分析:程序在判断第一个条件if(x++<6)时,由于此时x的值为6所以不成立,故不做语句cout<<++y<<endl;且变量y值不变化。接着判断第二个条件if(x>6),因x值为7,条件成立,故执行语句cout<<- -y<<endl;此时y值为8,执行- -y,则输出7。
例题18:#include <iostream>
using namespace std;
int main()
{ int a;
cout<<”please input a number:”;
cin>>a;
switch(a %2)
{ case 0: cout<<”a是偶数”<<endl;
default: cout<<”a是奇数”<<endl;
}
}
如果输入数为6,则输出结果为什么?
运行结果:
a 是偶数
a是奇数
分析:本题主要是要掌握多分支语句switch语句和break语句的应用。当符合条件的分支执行完毕后,如果没有遇到break语句,则继续执行下面的分支语句,而不管条件是否符合,直到遇到break语句或switch语句结束。
例题19:写出下列程序运行结果:
#include <iostream>
using namespace std;
int main()
{ int i,j,m=0,n=0;
for(i=0;i<2;i++)
for(j=0;j<2;j++)
if(j>=i) m=1;n++;
cout<<m<<endl;
cout<<n;
}
对待结果:
1
1
分析:本题中二重循环的循环体语句为:if(j>=i) m=1;n++;,由于内外循环变量的变化,该语句并不被二重循环所控制,它仅执行了一次,即不论循环多少次m、n的值总为1。
例题20:写出下列程序运行结果:
#include <iostream>
using namespace std;
int main()
{ int a,b;
for(a=1,b=1;a<=100;a++)
{ if(b>=10)break;
if(b%3= =1)
{ b+=3;continue;}
}
cout<<a<<endl;
cout<<b;
}
运行结果:
4
10
分析:本题是一个单循环语句,在循环体中有break和continue语句,当变量b=10时,循环结束,输出相应的变量a、b的值。
例题21:写出下列程序运行结果:
#include <iostream>
using namespace std;
int main()
{ int y, a;
y=2;a=-1;
while(y--!=-1)
{ do
{ a*=y; a++; } while(y--);
}
cout<<"a= "<<a<<" y= "<<y;
}
运行结果:
a=1 y=-2
分析:y--返回2,y=1,whi1e条件为真,进入do-whilee循环;a*=y之后,a=1,a++之后,a=2;y--返问1,,y=0;再执行一 次do-while循环,a*=y之后,a=0,a++之后,a=1,y--返回0,y=-1,退出do-while循环;(y--!=-1)为假,且y=-2,退出外层的while循环。这时a=1,y=-2。
3. 5. 编写程序
例题23:计算1至70中是7的倍数的数值之和。
分析:采用单循环语句结构,在循环内判断数值是否能被7整除,满足条件的值累加到求和变量sum中。程序为:
#include <iostream>
using namespace std;
int main()
{ int i, sum=0;
for(i=1;i<=70;i++)
if (i % 7) sum += i ;
cout<<sum<<endl;
}
例题24:求下面分数序列的前13项之和。
2/1,3/2,5/3,8/5,13/8,21/13,…
分析:采用循环结构来实现累加,循环变量表示当前的数列项数,在循环体内计算数列的第i项的值,以及前i项的累加值。数列的规律为:从第2项开始,每一项的分母是前一项的分子,分子是前一项的分子和分母之和。程序如下:
(1)用for语句实现:
#include <iostream>
using namespace std;
int main()
{ float a,b,t,sum;
int i;
for(i=1;i<=13;i++)
{ a=a+b; b=a-b;
t=a/b; sum+=t;
}
cout<<”sum=”<<sum<<endl;
}
(2)用while语句实现:
#include <iostream>
using namespace std;
int main()
{float a,b,t,sum; int i;
a=2;b=1;i=2;t=a/b;sum=t;
while(i<=13)
{ a=a+b; b=a-b;
t=a/b; sum+=t;
i++;
}
cout<<”sum=”<<sum<<endl;
}
(3)用do-while语句实现:
#include <iostream>
using namespace std;
int main()
{ float a,b,t,sum; int i=1;
a=b =1;sum=0;
do
{ a=a+b; b=a-b;
t=a/b; sum+=t;
}while(++i<=13);
cout<<”sum=”<<sum<<endl;
}
例题25:要用0至9之间不同的三个数构成一个三位数,编写程序统计出共有多少种方法。
分析:题目要求构成的是一个三位数,可用三重循环中的三个循环变量分别表示个、十、百位,在循环中利用条件语句判断满足三个数不等的条件,并用一个独立变量加以统计。程序如下:
#include <iostream>
using namespace std;
int main()
{ int i,j,k,count=0;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
if(i= =j) continue;
else
for(k=0;k<=9;k++)
if(k!=i && k!=j)count++;
cout<<count<<endl;
}
3.3 习题分析与解答
(2) int k=10;
while(k=0) k=k-1;
则下面描述正确的是( )。
A.while循环执行10次 B.循环是无限循环
C.循环体语句一次也不执行 D.循环体语句执行一次
答案:C
(3)int x=0,s=0;
while(!x!=0) s+=++x;
cout<<s;
则( )。
A.运行程序段后输出0 B.运行程序段后输出1
C.程序段中的控制表达式是非法的 D.程序段执行无限次
答案:B
(4) int x=0,y=0;
while(x<15) y++,x+=++y;
cout<<y<<”,”<<x;
则运行结果为( )。
A.20,7 B.6,12 C.20,8 D.8,20
答案:D
(5) int a=1,b=2,c=2;
while(a<b<c) {t=a;a=b;b=t;c--;}
cout<<a<<”,”<<b<<”,”<<c;
运行结果为( )。
A.1,2,0 B.2,1,0 C.1,2,1 D.2,1,1
答案A
(6)int x=-1;
do
{x=x*x;}
while(!x);
下列说法正确的是( )。
A.是死循环 B.循环执行两次
C.循环执行一次 D.有语法错误
答案:C
(7)以下能正确计算1*2*3*…*10的程序段是( )。
A.do {i=1;s=1; B.do {i=1;s=0;
s=s*i; i++;} s=s*i;i++;}
while(i<=10); while(i<=10);
C. i=1;s=1; D.i=1;s=0;
do {s=s*i; do{s=s*i;
i++;} i++;}
while(i<=10); while(i<=10);
答案:C
(8)以下描述正确的是( )。
A.由于do-while循环中循环体语句只是一条可执行语句,所以循环体内不能使用复合语句
B.do-while循环由do开始,用while结束,在while(表达式)后面不能写分号
C.在do-while循环体中,一定要有能使while后面表达式的值变为零(“假”)的操作
D.do-while循环中,根据情况可以省略while
答案:C
(9)C++语言中while和do-while循环的主要区别是( )。
A.do-while的循环体至少无条件执行一次
B.while的循环控制条件比do-while的循环控制条件严格
C.do-while允许从外部转到循环体内
D.do-while的循环体不能是复合语句
答案:A
(10)下面有关for循环的正确描述是( )。
A.for循环只能用于循环次数已经确定的情况
B.for循环是先执行循环体语句,后判断表达式
C.在for循环中,不能用break语句跳出循环体
D.for循环的循环体语句中,可以包含多条语句,但必须用大括号括起来
答案:D
(11)对for(表达式1; ;表达式3)可理解为( )。
A.for(表达式1;0;表达式3) B.for(表达式1;1;表达式3)
C.for(表达式1;表达式1;表达式3) D.for(表达式1;表达式3;表达式3)
答案:B
(13)下面程序段的运行结果为( )。
for(y=1;y<10;) y=((x=3*y,x+1),x-1);
cout<<“x=”<<x<<”y=”<<y;
A.x=27,y=27 B.x=12,y=13
C.x=15,y=14 D.x=y=27
答案:C
(14)以下不是无限循环的语句为( )。
A.for(y=0,x=1;x>++y;x=I++) I=x; B.for( ; ;x++=I);
C.while(1){x++;} D.for(I=10; ;I--) sum+=I;
答案:A
(15)下面程序的运行结果是( )。
#include<iostream>
viod main( )
{int i,b,k=0;
for(i=1;i<=5;i++)
{b=i%2;
while(b- - >=0) k++;}
cout<<k<<”,”<<b; }
A.3,-1 B.8,-1 C.3,0 D.8,-2
答案:D
(16)以下正确的描述是( )。
A.continue语句的作用是结束整个循环的执行
B.只能在循环体内和switch语句体内使用break语句
C.在循坏体内使用break语句或continue语句的作用相同
D.从多层循环嵌套中退出,只能使用goto语句
答案:B
(17)下面程序段( )。
for(t=1;t<=100;t++)
{cin>>x;
if(x<0) continue;
cout<<t;}
A.当x<0时整个循环结束 B.x>=0时什么也不输出
C.cout永远也不执行 D.最多允许输出100个非负整数
答案:D
(18)下面程序段( )。
x=3;
do {y=x--;
if(!y) {cout<<”x”; continue;}
cout<<”#”;} while(1<=x<=2);
A.将输出## B.将输出##*
C.是死循环 D.含有不合法的控制表达式
答案:C
(19)下面程序的运行结果是( )。
#include <iostream>
using namespace std;
int main()
{int a,b;
for(a=1,b=1;a<=100;a++)
{ if(b>=20) break;
if(b%3= =1) {b+=3;continue;}
b-=5;
}
cout<<a<<endl;
}
A.7 B.8 C.9 D.10
答案:B
(20)下面程序段的运行结果是( )。
#include <iostream>
using namespace std;
int main()
{ int i,j,x=0;
for(i=0;i<2;i++)
{ x++;
for(j=0;j<=3;j++)
{ if(j%2) continue;
x++;
}
x++;
}
cout<<“x=”<<x<<endl;
}
A.x=4 B.x=8 C.x=6 D.x=12
答案:B
(21)下面程序段的运行结果是( )。
#include <iostream>
using namespace std;
int main()
{int i;
for(i=1;i<=5;i++)
{if(I%2) cout<<“*”;
else conti
展开阅读全文