c程序设计语言习题与问题详解

上传人:无*** 文档编号:87228761 上传时间:2022-05-09 格式:DOC 页数:133 大小:711KB
收藏 版权申诉 举报 下载
c程序设计语言习题与问题详解_第1页
第1页 / 共133页
c程序设计语言习题与问题详解_第2页
第2页 / 共133页
c程序设计语言习题与问题详解_第3页
第3页 / 共133页
资源描述:

《c程序设计语言习题与问题详解》由会员分享,可在线阅读,更多相关《c程序设计语言习题与问题详解(133页珍藏版)》请在装配图网上搜索。

1、word 习题1及其解答 1.一个最简单的C++程序,可以只有一个( c )。 (a) 库函数(b) 自定义函数(c)main函数(d) 空函数 2.用C++语言编制的源程序要变为目标程序必须要经过(d)。 (a) 解释(b) 汇编(c) 编辑(d) 编译 3. C++程序中的简单语句必须以(b)结束。 (a) 冒号(b) 分号(c) 空格(d)花括号 4.有说明 int a=0; double x=5.16; 以下语句中,( c )属于编译错误。 (a) x=a/x;(b) x=x/a;(c) a=a%x;(d) x=x*a; 5. 执行C++程序时出现的“溢

2、出”错误属于(c)错误。 (a) 编译(b) 连接(c) 运行(d) 逻辑 6.下列选项中,全部都是C++关键字的选项为(c)。 (a) whileIFStatic(b) break chargo (c) sizeof case extern(d) switch float integer 7. 按C++标识符的语法规定,合法的标识符是(a)。 (a) _abc(b) new(c) π(d)“age“ 8.C++语句中,两个标识符之间(a)不能作为C++的分隔符。 (a) 数字(b) ;(c) :(d) + 9.下列正确的八进制整型常量表示是(b)。 (a)

3、0a0(b) 015(c) 080(d) 0x10 10.下列错误的十六进制整型常量表示是(c)。 (a) 0x11(b) 0xaf(c)0xg(d) 0x1f 11.在下列选项中,全部都合法的浮点型数据的选项为(b)。 (c) 0.2e-2-12345. e-5(d) 5.0e(1+4)0.18e+2 12.下列正确的字符常量为( d )。 (a) “a”(b) ‘name’(c) a(d) ‘\101’ 13.下列选项中,(d )不能交换变量a和b的值。 (a) t=b;b=a; a=t;(b) a=a+b;b=a-b; a=a–b; (c) t=a; a=b

4、; b=t;(d) a=b;b=a; 14.关于下列语句叙述错误的是(a)。 int i=10,*p=&i; (a) p的值为10(b) p指向整型变量i (c) *p表示变量i的值(d) p的值是变量i的地址 15.有以下变量说明,下面不正确的赋值语句是(b)。 int a=5, b=10, c; int *p1=&a, *p2 = &b; (a) *p2=b ;(b) p1=a ; (c) p2=p1 ;(d) c=*p1*(*p2) ; 16.有以下变量说明,下面正确的语句是(b)。 int a=10, b; int &pa=a, &pb=b; (a)

5、&pb=a;(b) pb=pa;(c) pb = &pa;(d) *pb = *pa; 17.执行下面语句序列后,a和b的值分别为(b)。 int a=5 , b=3 , t ; int &ra = a ; int &rb = b ; t = ra ; ra = rb ; rb = t ; (a) 3和3(b) 3和5(c) 5和3(d) 5和5 18. 在下列运算符中,(d)优先级最高。 (a) <=(b)*=(c)+(d)* 19.在下列运算符中,(d)优先级最低。 (a) ! (b)&&(c) !=(d) ? : 20.设 int i=1, j=2; 则

6、表达式 i+++j 的值为(c )。 (a) 1(b)2(c)3(d)4 21.设 int i=1, j=2; 则表达式 ++i+j 的值为(d)。 (a) 1(b)2(c)3(d)4 22.在下列表达式选项中,(c)是正确。 (a)++(a++)(b)a++b(c)a+++b(d)a++++b 23.已知 int i=0, j=1, k=2; 则逻辑表达式++i||--j&&++k 的值为(b)。 (a) 0(b)1(c)2(d)3 24. 执行下列语句后,x的值是( d ),y的值是( c )。 int x, y ; x = y = 1;++

7、x || ++ y; (a) 不确定(b) 0(c) 1(d) 2 25.设x为整型变量,不能正确表达数学关系 1<x<5 的C++逻辑表达式是( a )。 (a) 1< x <5(b) x==2||x==3||x==4 (c) 1=5) 26. 已知 int x=5; 执行下列语句后,x的值为(c)。 x+= x -= x * x; (a) 25(b)40(c)–40(d)20 27. 设 int a=1, b=2, c=3, d=4; 则以下条件表达式的值为( a )。 a < b ? a : c

8、 d (a) 1(b)2(c)3(d)4 28. 以下逗号表达式的值为(d)。 ( x =4*5, x *5), x +25 (a) 25(b)20(c)100(d)45 1.2把下列数学表达式写成c++算术表达式 1. 2. x{x[x(ax+b)+c]+d}+e 3. ln(1+||10) 4. 5. cot6. lg(a2+ab+b2) 【解答】 1. 1/(1 + 1/(1 + 1/(x + y))) 2. x * ( x * ( x * ( a * x + b ) + c ) + d ) + e 3. l

9、og( 1 + pow( fabs( ( a + b )/( a – b ) ),10) 4. sqrt( 1 + 3.14159/2 * cos( 48 * 3.14159/180 ) ) 5. 1/tan( ( 1 - x*x )/( 1 + x*x)) 或者 cos( ( 1 - x*x )/( 1 + x*x ) )/sin( ( 1 - x*x )/( 1 + x*x ) ) 6. log10( a * a + a * b + b * b ) 1.3 用逻辑表达式表示下列条件 1. i 被j整除2. n是小于正整数k的偶数 ≤x<104. x,y其中有一个小于z 5

10、. y [–100,–10],并且 y [10,100] 6. 坐标点(x,y)落在以(10,20)为圆心,以35为半径的圆 7. 三条边a,b和c构成三角形 8. 年份Year能被4整除,但不能被100整除或者能被400整除 【解答】 1. i%j == 02.(n=-100 && y<=-10 ) && !( y>=10 && y<=100 ) 6. sqrt(pow((x-10),2) + pow((y-20),2))< 35 7. a+

11、b>c && b+c>a && c+a>b 8. (year%4 == 0) && (year%100!=0)||(year%400==0) 1.4 阅读下列程序,写出执行结果 1. #include using namespace std; int main() { int a = 1, b = 2; bool x, y; cout << (a++)+(++b) << endl; cout << a % b << endl; x = !a>b; y = a-- && b; cout << x << endl;

12、cout << y << endl; } 【解答】 4 2 0 1 2. #include using namespace std; int main() { int x,y,z,f; x = y = z = 1; f = --x || y-- && z++; cout << "x = " << x << endl; cout << "y = " << y << endl; cout << "z = " << z << endl; cout << "f = " << f << endl; } 【解答】 x=

13、0 y=0 z=2 f=1 3. #include #include using namespace std; int main() { int a=123; int &ra=a; int *pa=&a; cout<

14、格式以及相关的操作。定义一个变量时,计算机根据变量的类型分配存储空间,并以该类型解释存放的数据。 2.普通数据类型变量和指针类型变量的定义、存储、使用方式上有何区别?请编写一个程序验证之。 【解答】 变量类型 定义 存储 使用方式 数据 类型 标识符 数据值 通过名访问即直接访问对变量容操作 指针 类型 * 标识符 地址值 通过指针变量的地址值间址访问对象 验证程序: #include using namespace std; int main() { int a,b,c; cout<<"a,b,c= "; cin>>a>>

15、b>>c;//对普通数据类型变量赋值 int *pa=&a,*pb=&b,*pc=&c;//用变量地址值初始化指针变量 cout<<"a,b,c= "<

16、的引用和对象的指针有什么区别?请用一个验证程序说明之。 【解答】 引用是为数据对象定义别名。引用与指针有以下几点区别: (1)引用名不是存变量,而指针变量要开辟存空间。 (2)引用名需要在变量定义与变量名绑定,并且不能重定义;指针变量可以在程序中赋给不同的地址值,改变指向。 (3)程序中用变量名和引用名访问对象的形式和效果一样;指针变量通过间址访问对象。 验证程序: #include using namespace std; int main () { int a; cout<<"a="; cin>>a; int ra=a; int *pa=&a

17、; cout<<"a的值:"< using namespac

18、e std; int main() { int a; cout<<"a="; cin>>a; a=a+5; //名访问 cout<<&a<

19、如下: 约束对象 说明形式 标识常量 const 类型 常量标识符=常量表达式; 指针常量 类型 * const 指针; 指向常量的指针 const 类型 * 指针; 或者 类型 const * 指针; 指向常量的指针常量 const 类型 * const 指针; 或者 类型 const * const 指针; 常引用 const 类型 & 引用名 = 对象名; 6.什么叫表达式?表达式值的类型由什么因素决定?使用不同运算符连接以下3个变量,请写出5个以上获得值等于true的表达式。 int a=1, b=2; double x=0.5; 【解答】 表达

20、式是由数据和运算符,按求值规则,表达一个值的式子。 表达式值的类型的决定因素为操作数的类型。 (1)如果运算符左右操作数类型相同,运算结果也是相同类型。 (2)如果运算符左右操作数类型不同,首先把类型较低(存储要求,示数能力较低)的数据转换成类型较高的数据,然后运算。 (3)赋值表达式的类型由被赋值变量的类型决定。当把一个表达式的值赋给一个变量时,系统首先强制把运算值转换成变量的类型,然后执行写操作。 6个值等于true的表达式: (1)b>a && a>x(2)(a+b)!=x(3)a||(b+x) (4)a==(b*x)(5)a-b

21、序,分析下面语句序列中每一个字符“*”和“&”的意义,写出输出结果。 #include using namespace std; int main() { int a=10, b=20; int *p = &a, *q = &b; *p = *p * *q; int & ra = a; ra=a; int * & rt = q; *rt = 30; cout<<"a="<

24、 cin>>x; i =x/100; j =x/10 %10; k = x%10; cout< using namespace std; int main() {double x,y,b; cout<<"please input x,y:"; cin>>x>>y; b=(-2<=x)&&(x<=2)&&(-2<=y)&&(y<=2); cout<

25、< using namespace std; int main() { int a,b,c,temp,min; cout<<"please input a,b,c:"; cin>>a>>b>>c; temp=(a

37、e:"; cin>>gd; //直到输入有效等级,否则程序不继续运行 while(!((gd>='A' && gd<='E')||(gd>='a' && gd<='e'))) {cout<<"Invalid grade! Please retry:"; cin>>gd; } if(gd=='A'||gd=='a') cout<<"\nScored 90-100!\n"; else if(gd=='B'||gd=='b') cout<<"\nScored 80-89!\n"; else if(gd=='C'||gd=='c') cout<<"\nScored 70-79!\n"

38、; else if(gd=='D'||gd=='d') cout<<"\nScored 60-69!\n"; else if(gd=='E'||gd=='e') cout<<"\nScore under 60!\n"; else cout<<"Unexpect error!\n";//防止意外错误 } 程序(2) //此程序用switch输出等级对应的分数段 //A->=90,B-(90,80],C-(80,70] ,D-(70,60],,E-<60 #include using namespace std; int main() {char gd;

39、 cout<<"Enter the grade:"; cin>>gd; //直到输入有效等级,否则程序不继续运行 while(!((gd>='A' && gd<='E')||(gd>='a' && gd<='e'))) {cout<<"Invalid grade! Please retry:"; cin>>gd; } switch(gd) {case 'A': case 'a':cout<<"\nScored 90-100!\n";break; case 'B': case 'b':cout<<"\nScored 80-89!\n";break; case 'C':

40、 case 'c':cout<<"\nScored 70-79!\n";break; case 'D': case 'd':cout<<"\nScored 60-69!\n";break; case 'E': case 'e':cout<<"\nScore under 60!\n";break; default:cout<<"Unexpect error!\n";//防止意外错误 } } 2. 什么叫循环控制?归纳比较C++中各种循环控制语句的语法、循环条件和循环结束条件的表示形式及执行流程。 【解答】 循环控制是在特定的条件下,程序重复执行一些特定动作。 语句 语法

41、 执行流程 使用场合 while语句 while(表达式) 循环体; 循环条件:表达式值为非0(真) 循环结束条件:表达式值为0(假) 程序中常用于根据条件执行操作而不需关心循环次数的情况。 先判断形式循环,条件不成立时不进入循环体。 do-while语句 do 循环体 while(表达式); 循环条件:表达式值为非0(真) 循环结束条件:表达式值为0(假) 程序中常用于根据条件执行操作而不需关心循环次数。 后判断形式循环,至少执行1次循环体。 一般情况,while语句和do while语句可以互换使用。 for 语句 for([表达式

42、1];[表达式2];[表达式3]) 循环体; (1)表达式1称为初始化表达式,不是循环体执行部分。 (2)表达式3称为后置表达式,作为循环体的最后一个执行表达式。 (3)循环条件:表达式2值为非0(真) 循环结束条件:表达式2值为0(假) for语句称为步长循环语句,通常用于确定循环次数的情况。 由于语句的3个表达式均可以缺省,也可以用于条件循环,即循环次数不确定的情况。 3. 根据一个实际问题,用不同的循环语句编程,分析其优缺点。 【解答】 略。 4. 用if语句和goto语句组织循环,改写思考题的第3小题编写的程序。分析在什么情况下可以适当使用goto

43、语句。 【解答】 在不破坏程序基本流程控制的情况下,可以适当使用goto语句实现从语句结构部向外的必要跳转,即按特定条件结束结构语句块的执行。 程序略。 #include using namespace std; int main() { char c; cin>>c; if(c=='y'||c=='Y') int a=1; else int a=0; cout<<"a="<

44、做出修改。 【解答】 变量a的定义不应该放在if-else语句体中。说明语句和执行语句的执行时机不同。变量说明要求在编译时定义存储空间,而if-else是执行语句,程序运行后才执行。正确的程序是: #include using namespace std; int main() { char c; int a; cin>>c; if(c=='y'||c=='Y') a=1; else a=0; cout<<"a="<

45、分析程序能够通过C++编译而不能得到期望结果的原因。 #include using namespace std; int main() { int a,b; cout<<"a: "; cin>>a; cout<<"b: "; cin>>b; if( a=b ) cout<

46、辑等“==”。从语法上,C++的if语句把a=b这个赋值表达式视为逻辑表达式,没有编译错误。a=b的值决定于b。若b的输入值不等于0,if作为逻辑真(true),否则作为逻辑假(false)。所以,题目中输入b的值虽然不等于a,但表达式a=b为逻辑true,执行了if语句的第1个分支。 1.输入某学生成绩,若成绩在85分以上输出“very good”,若成绩在60分到85分之间输出“good”,若成绩低于60分输出“no good”。 【解答】 #include using namespace std; int main() {double score;

47、 cout << "please input score:"; cin >> score; if ( score>=85 ) cout << "Very good!" ; else if ( score>=60 ) cout << "Good!"; else cout << "No good!"; } 2.输入三个整数,按从小到大的顺序输出它们的值。 【解答】 #include using namespace std; int main() {int a,b,c,t; cout<<"a,b,c="; cin>>a>>b>>c; if(a>b){

48、t=a;a=b;b=t;} if(a>c){t=a;a=c;c=t;} if(b>c){t=b;b=c;c=t;} cout< using namespace std; int main() { double a, b, c ; cout << "a, b, c = " ; cin >> a >> b >> c ; if ( a+b > c && b+c > a

49、 && c+a > b ) { if (a==b && b==c) cout << "等边三角形!" << endl; else if ( a==b || a==c || b==c ) cout << "等腰三角形!" << endl; else cout << "一般三角形!" << endl; } else cout << "不能形成三角形!" << endl ; } 4.输入百分制成绩,并把它转换成五级分制,转换公式为: 【解答】 #include us

50、ing namespace std; int main() { double score; char grade; cout<<"score="; cin>>score; if (score>=0 && score<=100) { switch ( int(score) /10 ) { case 10: case 9: grade='a'; break; case 8: grade='b'; break; case 7: grade='c'; break; case 6: grade='d'; break;

51、 case 5: case 4: case 3: case 2: case 1: case 0: grade='e'; break; } } else { cout <<"数据输入错误!"<

52、)或p(表示纸),要求两个游戏者交替输入,计算机给出输赢的信息。 【解答】 #include using namespace std; int main() { char first,second; cout << "First input(s,r or p):"; cin >> first; cout << "Second input(s,r or p):"; cin >> second; switch ( first ) { case 's': switch ( second ) { case 's': co

53、ut << "Scissor ties scissor." << endl; goto end; case 'r': cout << "Scissor is crushed by rock." << endl; goto end; case 'p': cout << "Scissor cuts paper." << endl; goto end; default : cout << "second input error!" << endl ; goto end; } case 'r': switch ( second

54、) { case 's': cout << "Rock crushes scissor." << endl; goto end; case 'r': cout << "Rock ties rock." << endl; goto end; case 'p': cout << "Rock is wrapped by paper." << endl; goto end; default : cout << "second input error!" << endl;goto end; } case 'p': switch ( secon

55、d ) { case 's': cout << "Paper is cut by scissor." << endl; goto end; case 'r': cout << "Paper wraps the rock." << endl; goto end; case 'p': cout << "Paper ties paper." << endl; goto end; default : cout << "second input error!" << endl; goto end; } default : cout << "First input e

56、rror!" << endl; goto end; } end: ; } 6.输入一个整数,输出该整数的所有素数因子。例如,输入120,输出为2、2、2、3和5。 【解答】 #include using namespace std; int main() {int m,i =2; cout<<"please input m:"; cin>>m; while(i<=m) if(m% i ==0) {cout<< i <<","; m=m/i; } else i++; } 编程序求某一正整数a的平方根。 【解答】 #inc

57、lude #include using namespace std; int main() {const double eps=1e-8; double a,x0,x; cout<<"please input a:"; cin>>a; x0=a/2; x=(x0+a/x0)/2; while(fabs(x-x0)>eps) { x0=x;x=(x0+a/x0)/2; } cout<

58、am> #include #include using namespace std; int main() {const double pi=3.14159265; int i; double x,y1,y2,y3; cout<

59、etw(2)<< i < using namespace std; int main() {int i; for(i=100;i<=200;i++) { if(( i %3==2)&&( i %5==3)&&( i %7==2)) cout<< i <

60、水仙花数是指一个三位数,它的每位数字的立方之和等于该数。例如,因为153=1+5+3,所以153为水仙花数。 【解答】 #include using namespace std; int main() {int i,a,b,c; for(i=100;i<=999;i++) { a=i/100; b=(i-a*100)/10; c= i -a*100-b*10; if( i ==a*a*a+b*b*b+c*c*c)cout<< i <

61、+3,所以6为完数。 【解答】 #include using namespace std; int main() {int i,j,s; for(i=1;i<=1000;i++) {s=0; for(j=1;j

62、 * * * * * * * * * * * * * * * * * * * * * 【解答】 #include using namespace std; int main() { int i,j,k,n; char ch; cout<<"How many lines ?\n"; cin>>n; cout<<"What character ?\n"; cin>>ch; for( i=1; i<=n; i++ ) { for( k=1; k<=n-i; k++ ) cout << " "; for(

63、j=1; j<=2*i-1; j++ ) cout << ch ; cout << endl; } } 13.已知XYZ+YZZ=532,其中X,Y和Z为数字,编一程序求出X,Y和Z的值。 【解答】 #include using namespace std; int main() { int x,y,z,i; for( x=1; x<=9; x++ ) for( y=1; y<=9; y++ ) for( z=0; z<=9; z++ ) { i = 100*x + 10*y + z + 100*y + 1

64、0*z + z; if ( i == 532 ) cout<<"x="<

65、1; fun2( a );(b) int a = 15; fun2( a*3 ); (c) int b = 100; fun2( &b );(d) fun2( 256 ); 3.有函数原型 void fun3( int * ); 下面选项中,正确的调用是( c )。 (a) double x = 2.17; fun3( &x );(b) int a = 15 ; fun3( a*3.14 ); (c) int b = 100; fun3( &b );(d) fun3( 256 ); 4.有函数原型 void fun4( int& ); 下面选项中,正确的调用是( c

66、 )。 (a) int a = 2.17; fun4( &a );(b) int a = 15; fun4( a*3.14 ); (c) int b = 100; fun4( b );(d) fun4( 256 ) ; 5.有声明 void fun5( int * & ); int a , *p = &a; 下面选项中,正确的调用是( b )。 (a) fun5( &a );(b) fun5( p );(c) fun5( *a );(d) fun5( *p ) ; 6.有声明 int fun6( int),(*pf)(int) = fun6; 下面选项中,正确的调用是( c )。 (a) int a=15; int n=fun6(&a); (b) int a = 15; cout<<(&pf)(a); (c) cout<<(*pf)( 256 );(d) cout << *pf( 256 ); 7.在VC中,若定义一个函数的返回类型为void,以下叙述正确的是( c )。 (a) 函数返回值需要强类型转换(b) 函数不执行任何操作 (c)

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!