收藏 分销(赏)

C++基础习题(选择,循环,类与对象).doc

上传人:s4****5z 文档编号:8757131 上传时间:2025-03-01 格式:DOC 页数:27 大小:286KB 下载积分:10 金币
下载 相关 举报
C++基础习题(选择,循环,类与对象).doc_第1页
第1页 / 共27页
C++基础习题(选择,循环,类与对象).doc_第2页
第2页 / 共27页


点击查看更多>>
资源描述
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
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服