C++程序设计实验(上)试题及答案_第1页
C++程序设计实验(上)试题及答案_第2页
C++程序设计实验(上)试题及答案_第3页
C++程序设计实验(上)试题及答案_第4页
C++程序设计实验(上)试题及答案_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+程序设计实验(上)试卷库题型1基本型(顺序、选择)1、 输入一个华氏温度的值F,要求输出其摄氏温度值C,公式为【解答】#include<iostream>using namespace std;int main()float C,Fcin>>F;C=5.0/9.0*(F-32.0);cout<<"C="<<C<<endl;return 0;2、 输入三个整数a,b,c,求其中的最大值并输出之。【解答1】#include<iostream>using namespace std;int main()i

2、nt a,b,c,maxcin>>a>>b>>c;max =a;if(b> max ) max =b;if(c> max ) max =c;cout<<" max ="<< max <<endl;return 0;【解答2】#include<iostream>using namespace std;int main()int a,b,c,maxcin>>a>>b>>c;if(b> a )max =b;elsemax =a;if(c>

3、 max ) max =c;cout<<" max ="<< max <<endl;return 0;【解答3】#include<iostream>using namespace std;int main()int a,b,c,maxcin>>a>>b>>c;if(b>= a && b>=c)max =b;else if(c>= a ) max =c; elsemax =a;cout<<" max ="<< max

4、 <<endl;return 0;3、 从键盘输入一个字符,若是大写字母,则将其转换为小写字母,其它字符则原样输出。【解答】#include<iostream>using namespace std;int main()char chcin>>ch;if(ch>=A&&ch<=Z) ch =ch+a-A;cout<<" ch ="<< ch <<endl;return 0;4、 从键盘输入一个字符,若是小写字母,则将其转换为大写字母,其它字符则原样输出。【解答】#includ

5、e<iostream>using namespace std;int main()char chcin>>ch;if(ch>=a&&ch<=z) ch =ch-(a-A);cout<<" ch ="<< ch <<endl;return 0;5、 输入三个整数a,b,c,求其中的最小值并输出之。【解答1】#include<iostream>using namespace std;int main()int a,b,c,mincin>>a>>b>&

6、gt;c;min =a;if(b< min) min =b;if(c< min) max =c;cout<<" min ="<< min <<endl;return 0;【解答2】#include<iostream>using namespace std;int main()int a,b,c,mincin>>a>>b>>c;if(b< a )min =b;elsemin =a;if(c< min ) min =c;cout<<" min =&q

7、uot;<< min <<endl;return 0;【解答3】#include<iostream>using namespace std;int main()int a,b,c,mincin>>a>>b>>c;if(b<= a && b<=c)min =b;else if(c<= a ) min =c; elsemin =a;cout<<" min ="<< min <<endl;return 0;6、 输入一个摄氏温度值C,要求输

8、出其华氏温度值F,公式为【解答】#include<iostream>using namespace std;int main()float C,Fcin>>C;F=9.0/5.0*C+32.0;cout<<"F="<<F<<endl;return 0;7、 有函数编写程序输入x,求对应的函数值y。【解答】#include<iostream>using namespace std;int main()float x,ycin>>x;if(x<1)y =x;else if(x<10

9、) y =2*x-1;elsey =3*x-11;cout<<"y="<<y<<endl;return 0;8、 有函数编写程序输入x,求对应的函数值y。【解答】#include<iostream>#include<math.h>using namespace std;int main()float x,ycin>>x;if(x<0)y =sin(x);else if(x<5 ) y =2*x+1;elsey =x-10;cout<<"y="<<y

10、<<endl;return 0;9、 给定平面坐标系中的两个点,编程求两点之间的距离。公式为【解答】#include<iostream>#include<math.h>using namespace std;int main()float x1,x2,y1,y2,distancecin>> x1>>y1>>x2 >>y2;distance =sqrt(x1-x2)* (x1-x2)+(y1-y2)* (y1-y2)cout<<" distance ="<< dista

11、nce <<endl;return 0;10、 在平面坐标系中的圆O是以原点为圆心、半径为1的圆,给定一个点,试判别点P与圆O是关系(是点在圆内、圆上、还是圆外)。【解答1】#include<iostream>using namespace std;int main()float x1,x2=0,y1,y2=0,distancecin>> x1>>y1;distance =sqrt(x1-x2)* (x1-x2)+(y1-y2)* (y1-y2)if(distance >1 )cout<<" 点在圆外" &l

12、t;<endl;else if(distance <1 )cout<<" 点在圆内" <<endl;else cout<<" 点在圆上" <<endl;return 0;11、 输入三个数a,b,c,判断他们能否作为三角形的三条边。【解答】#include<iostream>using namespace std;int main()int a,b,ccin>>a>>b>>c;if(b< a+c && a<b+c &am

13、p;&c<a+b)cout<<" a,b,c能作为三角形的三条边" <<endl;else if(c<= a )cout<<" a,b,c不能作为三角形的三条边" <<endl;return 0;12、 输入一个百分制成绩score,将其转换为五分制成绩AE,转换规则是:A(),B(),C(),D(),E()【解答】#include<iostream>using namespace std;int main() double score; char grade; cout &

14、lt;< "score=" cin >> score; if ( score < 0 | score > 100 ) cout <<"数据输入错误!"<< endl; else 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

15、' break; case 5: case 4: case 3: case 2: case 1: case 0: grade = 'e' break; cout << grade << endl; return 0;13、 输入三角形的三条边,判别它们能否形成三角形,若能,则判断是等边、等腰、还是一般三角形。【解答】#include<iostream>using namespace std;int main() double a, b, c ; cout << "a, b, c = " ; cin &g

16、t;> a >> b >> c ; if ( a+b > c && b+c > a && c+a > b ) if ( a = b && b = c ) cout << "等边三角形!" << endl; else if ( a = b | a = c | b = c ) cout << "等腰三角形!" << endl; else cout << "一般三角形!" <<

17、; endl; else cout << "不能形成三角形!" << endl ;return 0;14、 输入一个百分制成绩score,将其转换为四分等级制成绩AD,转换规则是:A(),B(),C(),D()【解答】#include<iostream>using namespace std;int main() double score;char grade;cout << "please input score:"cin >> score;if(score>=85)grade=A;el

18、se if(score>=75)grade=B;else if(score>=60)grade=C;else grade=D;cout << "grade=" << grade<< endl ;return 0;15、 给定年份、月份,求该年的该月份有多少天?#include<iostream>using namespace std;bool leapYear(int year); /判断year是否闰年int main() int year,month,days; cout << "plea

19、se input year,month:" cin >> year>>month;switch(month)case 1: case 3: case 5: case 7: case 8: case 10: case 12:days=31;case 4: case 6: case 9: case 11: days=30;case 2: if(leapYear(year)days=29;else days=28;cout << "days=" << days<< endl ;return 0;bool lea

20、pYear(int year)if(year%4=0)&& (year%100!=0)| (year%400=0) return true;return false;16、 输入某学生成绩,若成绩在85分以上输出“very good”,若成绩在60分到85分之间输出“good”,若成绩低于60分输出“no good”。【解答】#include<iostream>using namespace std;int main() double score;cout << "please input score:"cin >> sc

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

22、gt; a >> b >> c;if(a>b) 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<< a << 't'<< b << 't' << c << endl;return 0 题型2循环1、 输入一个整数,输出该整数的所有素数因子。例如,输入120,输出为2、2、2、3和5。【解答】#include<iostream>using name

23、space 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+;return 0 2、 使用迭代公式编程序求某一正整数a的平方根。【解答】#include<iostream>#include<cmath>using namespace std;int main()

24、 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 << x << endl;return 0 3、 已知X=0,10,20,180,求sinx,cosx和tanx的值。【解答】#include<iostream>#include

25、<cmath>#include<iomanip>using namespace std;int main() const double pi = 3.14159265;int i;double x,y1,y2,y3;cout << setw(2) << "x" << setw(15) << "sin(x)" << setw(15) << "cos(x)" << setw(15) << "tg(x)"

26、; << endl;for( i=0; i<=18; i+ ) x = i*10*pi/180; y1 = sin( x ); y2 = cos(x); y3 = y1/y2; cout << setw(2) << i << setw(15) << y1 << setw(15) << y2 << setw(15) << y3 << endl; return 0 4、 在100到200中找出同时满足用3除余2,用5除余3和用7除余2的所有整数。【解答】#incl

27、ude<iostream>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 << endl; return 0 5、 求100到999中的水仙花数。所谓水仙花数是指一个三位数,它的每位数字的立方之和等于该数。例如,因为153=1+5+3,所以153为水仙花数。【解答】#include<iostream&g

28、t;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 <<endl; return 0 6、 求1000之内的所有完数。所谓完数是指一个数恰好等于它的所有真因子之和。例如,因为6=1+2+3,所以6为完数。【解答】#include<iostream>using n

29、amespace std;int main() int i,j,s; for( i=1; i<=1000; i+ ) s = 0; for( j=1; j<i; j+ ) if ( i % j = 0 ) s = s + j; if ( i = s ) cout << i << endl; return 0 7、 编一程序显示由符号组成的三角形图案。例如,程序运行后, 屏幕显示:How many lines ?用户输入:5屏幕显示:What character ?用户输入:*则输出如下图案。* * * * * * * * * * * * * * *

30、 * * * * * *【解答】#include<iostream>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( j=1; j<=

31、2*i-1; j+ ) cout << ch ; cout << endl; return 0 8、 已知XYZ+YZZ=532,其中X,Y和Z为数字,编一程序求出X,Y和Z的值。【解答】#include<iostream>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 + 10*z + z; if ( i =

32、532 ) cout<<"x="<<x<<'t'<<"y="<<y<<'t'<<"z="<<z<<endl; return 0 9、 统计输入的一行字符(直到'#'号为止)中字母、数字及其它字符各多少个。10、 打印九九乘法口诀表。1*1=11*2=2 2*2=41*3=3 2*3=6 3*3=91*4=4 2*4=8 3*4=12 4*4=161*5=5 2*5=10

33、3*5=15 4*5=20 5*5=251*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=361*7=7 2*7=12 3*7=21 4*7=28 5*7=35 6*7=42 7*7=491*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=641*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81答案:# include <iostream.h># include <iomanip.h>void main( )int j,i;

34、 cout<<endl; for( i=1;i<=9;i+)for( j=1; j<=i; j+)cout<<j<<'*'<<i<<'='<<setw(2)<<i*j<<" "cout<<endl; 11、 利用公式 求 的近似值。直到最后一项的绝对值不大于10 -8为止。答案:# include <iostream.h># include <iomanip.h># include <math.

35、h>void main( )double sum,pn;const double eps=1.0e-8;int n;sum=0.0; /变量赋初值n=1; do /处理:累加求和 if(n%2) pn=1/double(2*n-1);else pn=-1/double(2*n-1); sum+= pn; n+;while(fabs(pn)>=eps);sum*=4; cout<<"sum="<<setprecision(9)<<sum<<endl; /输出结果12、 编一程序显示由符号组成的图案。例如,程序运行后,

36、 屏幕显示:How many lines ?用户输入:13屏幕显示:What character ?用户输入:*则输出如下图案。*答案:#include<iostream>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+1)/2; i+ )for( k=1; k<=n-i;

37、 k+ )cout << " "for( j=1; j<=2*i-1; j+ )cout << ch ;cout << endl;for( i=1; i<(n+1)/2; i+ )for( k=1; k<=n/2+i; k+ )cout << " "for( j=1; j<=n-2*i; j+ )cout << ch ;cout << endl;return 0 ;13、 编一程序显示由符号组成的倒三角形图案。例如,程序运行后, 屏幕显示:How many l

38、ines ?用户输入:7屏幕显示:What character ?用户输入:*则输出如下图案。*答案:#include<iostream>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<=i; k+ )cout << "

39、 "for( j=1; j<=n-i+1; j+ )cout << ch ;cout << endl;return 0 ;14、 输入两个正整数m和n,对输入数据的合法性进行检查,求其最大公约数和最小公倍数。15、 日期问题:输入一个日期(年、月、日),判断日期的合法性,若合法,则求该日期是该年中的第几天。题型3函数模块化1、 已知 , 其中sh为双曲正弦函数,即。编一程序,输入x的值,求y的值。【解答】#include<iostream>#include<cmath>using namespace std;double sh(

40、double t );int main() double x,y; cout << "x=" cin >> x; y = sh( 1+sh(x) )/( sh( 2*x )+sh( 3*x ) ); cout << "y=" << y << endl;double sh( double t ) return ( exp( t )-exp( -t ) )/2; 2、 输入m、n和p的值,求s = 的值。注意判断运算中的溢出。【解答】using namespace std;double f( lon

41、g k,long num );int main() long m,n,p; double s,f1,f2,f3; cout << "m,n,p=" cin>>m>>n>>p; f1=f( 1,m ); f2=f( 3,n ); f3=f( 5,p ); if (f1 && f2 && f3 ) s = ( f1 + f2) /f3; cout << "s=" << s << endl; else cout<<"溢出!n

42、"double f( long k,long num ) long i; double sum=0; for( i=1; i<=num; i+ ) sum = sum + pow(i, k ); if (i<=num) return 0; /溢出时返回 return sum;double pow( long k,long num ) long i; double sum=1; for( i=1; i<=num; i+ ) sum *= k ; return sum;3、 输入两个整数,分别用函数模块求该两个数的最大公约数和最小公倍数,并在main函数中调用,完成相应

43、功能。4、 输入a,b和c的值,编写一个程序求这三个数的最大值和最小值。要求把求最大值和最小值编写成一个函数,并使用指针或引用作为形式参数把结果返回main函数。【解答】(1)使用指针参数#include<iostream>using namespace std;void fmaxmin( double,double ,double ,double *,double * );int main() double a,b,c,max,min;cout << "a,b,c = "cin >> a >> b >> c;fm

44、axmin( a,b,c,&max,&min );cout << "max=" << max << endl;cout << "min=" <<min << endl;void fmaxmin( double x,double y,double z,double *p1,double *p2 ) double u,v; if ( x>y ) u = x; v = y; else u = y; v = x; ; if ( z>u ) u = z; if (

45、z<v ) v = z; *p1 = u; *p2 = v;(2)使用引用参数#include<iostream>using namespace std;void fmaxmin( double,double ,double ,double& ,double& );int main()double a,b,c,max,min;cout << "a,b,c="cin >> a >> b >> c;fmaxmin( a,b,c,max,min );cout << "max=&

46、quot; << max << endl;cout << "min=" << min << endl;void fmaxmin( double x,double y,double z,double &p1,double &p2 ) double u,v; if ( x>y ) u = x; v = y; else u = y; v = x; ; if ( z>u ) u = z; if ( z<v ) v = z; p1 = u; p2 = v;5、 用线性同余法生成随机数序列的公

47、式为: rk = ( multiplier * rk-1 + increment ) % modulus序列中的每一个数rk,可以由它的前一个数rk-1计算出来。例如,如果有:rk = ( 25173 * rk-1 + 13849 ) % 65536则可以产生 65536个各不相同的整型随机数。设计一个函数作随机数生成器,生成一位或两位数的随机数。利用这个随机数生成器,编写一个小学生四则运算的练习程序: ·可以进行难度选择。一级难度只用一位数,二级难度用两位数; ·可以选择运算类型,包括加、减、乘、除等; ·给出错误提示; ·可以统计成绩。【解答】#in

48、clude<iostream>using namespace std;int Rand(int,int); /生成指定范围的随机数int main() int w,i,r,t = 0; char op,answer; int a,b,d; while(1) /练习开始 cout<<"现在开始?( Y 或 N )n" ; cin>>answer; if (answer='N'|answer='n') break;while(1) cout << "请输入难度( 1或2 ):"

49、cin >> w; if ( w != 1 && w != 2 ) cout << "输入难度错误,重新输入!" << endl; else break ; while(1) cout << "请输入运算类型( +,-,*,/ ):" ; cin >> op; if ( op != '+' && op != '-' && op != '*' && op != '/' )

50、 cout << "输入运算符错误,重新输入!" << endl; else break;/出10道题,每题10分t=0;for( i=1; i<=10; i+ ) while(1) if( w = 1 ) a = Rand(0,10); b = Rand(0,10); elseif( w = 2 ) a = Rand(10,100); b = Rand(10,100); if ( op = '-' ) if ( a<b ) continue ; /使被减数大于减数if ( op = '/' ) if (

51、int( a/b ) != (a / b) ) continue; /只做结果为整数的除法break;cout << a << op << b << '='cin >> d;switch ( op ) case '+': r = a + b; break; case '-': r = a - b; break; case '*': r = a * b; break; case '/': r = a / b; break; if ( r = d ) cout

52、 << "你算对了,加10分!" << endl; t = t + 10; else cout << "你算错了!" << endl; cout << "你的成绩是:" << t << "分" << endl;int Rand(int m, int n) static int r;/静态变量保留上一个随机数 do r = ( 25173*r + 13849 ) % 65536 ; while (r<m|r>=

53、n); return r;6、 已知勒让德多项式为编一程序,从键盘上输入x和n的值,使用递归函数求p(x)的值。【解答】#include<iostream>using namespace std;double p( double x,int n );int main() int n;double x; cout << "please input x and n:" cin >> x >> n; cout << "p(" << x << "," <

54、< n << ")=" << p( x,n ) <<endl;double p( double x,int n ) double t1,t2; if( n = 0 ) return 1; else if( n = 1 ) return x; else t1 = ( 2*n-1 )*p( x,n-1 ); t2 = ( n-1 )*p( x,n-2 ); return ( t1-t2 )/n; 7、 把以下程序中的print()函数改写为等价的递归函数。#include <iostream>using namespace

55、std;void print( int w ) for( int i = 1 ; i <= w ; i + ) for( int j = 1 ; j <= i ; j + ) cout << i << " " ; cout << endl ; int main() print( 5 ) ; 运行显示:1 2 23 3 34 4 4 45 5 5 5 5【解答】#include<iostream>using namespace std;void print(int w) int i; if( w ) print( w

56、-1 ); for( i=1; i<=w; i+ ) cout << w << " " cout << endl; void main() print( 5 );8、 已知用梯形法求积分的公式为:,其中h = ( ba ) / n,n为积分区间的等分数,编程序求如下积分的值。要求把求积分公式编写成一个函数,并使用函数指针作为形式参数。调用该函数时,给定不同的被积函数作为实际参数求不同的积分。 【解答】#include<iostream>#include<cmath>using namespace std;do

57、uble f1( double x ) return 4 / ( 1 + x*x ); double f2( double x ) return sqrt( 1 + x*x ); double f3( double x ) return sin( x ); double trap( double( *fun )( double x ), double a,double b,long n ) double t,h; int i; t = ( ( *fun )(a) + ( *fun )( b ) ) / 2.0; h = ( b - a ) / n; for( i=1; i<=n-1; i

58、+ ) t += ( *fun )( a + i * h ); t *= h; return t;int main() double t1,t2,t3; t1 = trap( f1,0,1,10000 ); cout << "t1=" << t1 << endl; t2 = trap( f2,1,2,10000 ); cout << "t2=" << t2 << endl; t3 = trap( sin,0,3.14159265/2,10000 ); cout << &q

59、uot;t3=" << t3 << endl;9、 编写一个程序,包含三个重载的display函数和一个主函数。要求第一个函数输出double值,前面用字符串“a double:”引导,第二个函数输出一个int值,前面用字符串“a int:”引导,第三个函数输出一个char字符值,前面用字符串“a char:”引导,在主函数中分别用double、int和char型变量作为实参调用display函数。【解答】#include<iostream>using namespace std;void display( double d ) cout <

60、< "a double:" << d << endl; void display( int i ) cout << "a int:" << i << endl; void display( char c ) cout << "a char:" << c << endl; int main() double d = 1.5; int i = 100; char c = 'a' display( d ); display(

61、 i ); display( c );10、 使用重载函数编程序分别把两个数和三个数从大到小排列。【解答】#include<iostream>using namespace std;void sort( double x,double y );void sort( double x,double y,double z );int main() sort( 5.6, 79 ); sort( 0.5, 30.8, 5.9 );void sort(double x,double y) if ( x>y ) cout << x << 't' << y << endl; else cout << y << 't' << x << endl;void sort( double x,double y,double z ) double t; if( y<z

温馨提示

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

评论

0/150

提交评论