c++期末考试题.doc_第1页
c++期末考试题.doc_第2页
c++期末考试题.doc_第3页
c++期末考试题.doc_第4页
c++期末考试题.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

C+期末上机考点整理 一、在一随机数列中查找一个数:#includevoid main()int a100,i,j,n,f,x; coutn; cout输入数据:; for(i=0;iai; coutx; f=0; for(j=0;jn;j+) if(x=aj) f=1;break; if(f=1) coutfind x in numberjendl; else if(f=0) coutno findendl;解法二:折半法找数:#include void main() int a50,i,x,y,top,n,bottom,middle,f=0; coutx; for(i=0;x!=0;i+) ai=x;cinx; n=i; couty; top=0;bottom=i-1; for(;top=bottom;) middle=(top+bottom)/2; if(y=amiddle) f=1;break; else if(yamiddle)bottom=middle-1; elsetop=middle+1; if(f) cout找到y在第middle+1个数endl; else cout没有找到yendl;二、输入输出矩阵及转置矩阵:#includevoid main()int a100100,i,j,n,m; coutnm; cout按行输入矩阵:endl; for(i=0;in;i+) for(j=0;jaij; coutendl; cout输出矩阵:endl; for(i=0;in;i+) coutendl; for(j=0;jm;j+) cout aij; coutendl; cout输出转置矩阵:endl; for(i=0;im;i+) coutn; for(j=0;jn;j+) cout aji; coutendl;三、输入数据并以0为结束标志,并排序输出:#includevoid main()int a100,i=0,n; void sort(int ,int); /location? 调用之前的任意位置 dont forget ; cout输入数据并以0为结束标志:ai; while(ai!=0) i+;cinai; n=i; /coutaiendl; ai=0 sort(a,n); for(i=0;in;i+) coutai ; coutn; void sort(int b,int n)int i,j,t; for(i=0;in-1;i+) for(j=i+1;jbj)t=bi;bi=bj;bj=t; 四、三个数的最大公约数:#includevoid main()int gys(int,int); /location? 调用之前的任意位置 int a,b,c,d; coutabc; d=gys(gys(a,b),c); couta,b,c最大公因数为:dendl;int gys(int x,int y)int r; r=x%y; while(r!=0) x=y;y=r;r=x%y; return y;五、n=(num,k)=(12546,3)=5#include#include /using namespace std; int digit(int,int);void main()int num,k,n; coutintput mum,k:numk; n=digit(num,k); coutn=nendl;int digit(int num,int k)int n; n=num/(int)pow(10,k-1)%10; return n;上机测验题上机题一一、1、#include#includevoid main()float x,y; coutx; if(x15) cout无效输入无输出-5&x=-2) y=6*x; couty=y-2&x=5) y=1.0/(2+sin(x); couty=y5&x=15) y=pow(x,3)-1; couty=yendl; 2、输入一个正实数e,按照如下公式求y的值,直到某一项的绝对值小于e为止。要求 调用子函数,子函数求一个数的平方的倒数,主函数中输入e,并输出y值。#include#includefloat pf(int x)float t; t=1.0/(x*x); return (t);void main()float q=0,e; int i; coute; for(i=1;pf(i)=e;i+) q=q+pow(-1),(i+1)*pf(i); coutq=qendl;3、3.编写程序实现从指定字符串str中删去给定字符s,将str中剩余的字符按照从大到小 的顺序排序输出。要求str和字符s从键盘输入,输出新的字符串。 如:从abcdabcd中删去 c,排序后输出为ddbbaa。#include #include void main()char str100,ss,t; int i,j=0,m,n; gets(str); cinss; for(i=0;stri!=0;i+) if(stri!=ss) strj=stri; j+; strj=0; for(n=0;nj-1;n+) for(m=n+1;mj;m+) if(strnstrm) t=strn;strn=strm;strm=t; puts(str);上机题二:上机题二输入x,输出y值。验证:x=-1,y=1.55632; x=-6,y=47058.4; x=9,y=197.25#include#includevoid main()float x,y; coutx; if(x-5) y=1/exp(x)+pow(x,6)-1; else if(x5) y=sin(x+cos(x)+fabs(x)+1; else y=2*pow(x,2)-3/(sqrt(x)+1)+4*x; coutx=x,y=yendl; 2.输入若干个数,以0或负数结束,求其中素数的均值和非素数的均值并输出,用子函数判断某个数是否为素数。如输入2 3 4 5 6 7 8 9 10 0结果为4.25,7.4#includeint ss(int x);void main()int x,g1=0,g2=0; float s1=0,s2=0; cinx; if(ss(x) s1+=x;g1+; else s2+=x;g2+; while(x0) cinx; if(ss(x) s1+=x;g1+; else s2+=x;g2+; cout素数的均值:(float)s1/g1endl; cout非素数的均值:(float)s2/(g2-1)endl; / s2/(g2-1)int ss(int x)int i,gs=0,f=0; for(i=1;i=x;i+) if(x%i=0) gs+; if(gs=2) f=1; return f;解法二#includeint ss(int x);void main()int a20,i,j,x,g1=0,g2=0; float s1=0,s2=0; cinx;for(i=0;x0;)ai=x;i+;cinx;for(j=0;ji;j+) /注意:ji,因为ai没有值 if(ss(aj) s1+=aj;g1+; else s2+=aj;g2+; cout素数的均值:s1/g1endl; cout非素数的均值:s2/g2endl; / s2/g2 而非g2-1int ss(int x)int i,gs=0,f=0; for(i=1;i=x;i+) if(x%i=0) gs+; if(gs=2) f=1; return f;/* 3.1 编程序将字符串s中位于偶数位置的字符或ASCII码为奇数的字符放入字符串t中,输出t(规定第一个字符放在第0位中)。例如:输入adfeshdi1223,输出afesdi123。 */#include#includevoid main()char s20,t20,i,j=0;coutintput s:endl;gets(s);for(i=0;si!=0;i+)if(i%2=0|si%2=1)tj=si;j+; tj=0;puts(t);/* 3.2编程序将字符串s中位于偶数位置的字符或ASCII码为奇数的字符删除后剩余的字符放入字符串t中,输出t(规定第一个字符放在第0位中)。输入adfeshdi1223,输出dh2。*/#include#includevoid main()char s20,t20,i,j=0;coutintput s:endl;gets(s);for(i=0;si!=0;i+)if(i%2!=0&si%2!=1)tj=si;j+; tj=0;puts(t);上机题三:/* 1.从键盘输入一个字符,若为数字,则输出number,若为字母,则输出letter,若为其他字符,则输出other。解法一#includevoid main()char a;coutinput a:a;if(a=48&a=57) coutnumber=65&a=97&a=122) coutleterendl;elsecoutotherendl;解法二*/#includevoid main()char a;coutinput a:a;if(a=0&a=9) coutnumber=A&a=a&a=z) coutleterendl;elsecoutotherendl;2. 按照如下的公式求y的值,(6.26731e+009)#include#includevoid main()float s=0; int i;float t(int i); for(i=1;spow(10,9);i=i+2) s=s+t(i); coutsendl;float t(int i)int j;float t=1; for(j=1;j=i;j+) t=t*j; return t;解法二:float fun(int k)float jc=1; int i; for(i=1;i=k;i+) jc=jc*i; return (jc);#include #includevoid main()int i; float y=0; for(i=1;y1e9;i+=2) y=y+fun(i); couty;要求调用子函数,子函数求一个数的阶乘,主函数中输出y值。 (6.26731e+009)/*3.任意输入一个09位数的数,将这个数的每位数取出,按从大到小的顺序排序。例如,输入59748,取数并排序后,结果为#include:9,8,7,5,4 */#includevoid main() long n;int a10,i,j,k,t;coutn;for(i=0;n0;i+)ai=n%10;n=n/10;k=i;for(i=0;ik-1;i+)for(j=i+1;jk;j+)if(aiaj)t=ai;ai=aj;aj=t;for(i=0;ik;i+)coutai,;coutendl;典型例题1、例:输入一批正数,输入负数或0时结束输入。从中挑出不是3的倍数的数按从小到大的顺序排序。#includevoid main()int n,i,j,k=0,t,a100,b100; /可以将这批数存于数组,因此定义了2个数组,同 /学写一写这批数不存入数组的算法。cinn; /先给一个数,以开始循环for(i=0;n0;i+) /输入了几个数?搞不清可输入1 3 0数一下,i最后变成多少? /注意0不包括在内。i最后变成2。ai=n; /a0是多少?for循环中应使i=0;将i+写在循环体中可以吗?cinn; /cinn也是循环体语句。for(j=0;ji;j+) /寻遍数组中的所有元素,注意下标是从0到i-1if(aj%3!=0)bk=aj;k+;for(i=0;ik-1;i+)for(j=i+1;jbj)t=bi;bi=bj;bj=t;for(i=0;ik;i+)coutbi ;2、例2:求s=a+aa+aaa+aaaa+aa.a的值,其中a是一个数字。例如2+22+222+2222+22222(共有5个数相加),几个数相加由键盘控制。#includevoid main()int a,n,i=1,s=0,t=0; cinan; while(i=n) /t=t+a; /s=s+t; /a=a*10; t=t*10+a; s=s+t; i+; couta+aa+.+aaaaa=s;3、例:输入10个数到数组,逆序存放后按每行5个输出。#include#define N 10void main()int aN,i,t,j; for(i=0;iai; for(i=0;i(N+1)/2;i+)t=ai;ai=aN-1-i;aN-1-i=t; /i=0;j=N-1; /while(ij) /t=ai;ai=aN-1-i;aN-1-i=t; /i+;j-; for(i=0;iN;i+)coutai ;if(i+1)%5=0) coutendl;4、例:分别输出二维数组的左下三角和右上三角。#include#define N 3void main()int aNN,i,j; for(i=0;iN;i+) for(j=0;jaij; cout左下三角为:endl; for(i=0;iN;i+) for(j=0;j=i;j+)coutaij ; coutendl; cout右上三角为:endl; for(i=0;iN;i+) for(j=0;ji;j+) cout ; for(j=i;jN;j+)coutaij ; coutendl;5、例:输入10个数到数组,交换数组中最大数和最小数。#includevoid main()int a100,n,i,t,max,min,p,q; coutn;cout输入数据:;for(i=0;iai; p=0;q=0;max=ap;min=aq;for(i=1;imax)max=ai;p=i;else if(aimin)min=ai;q=i;t=ap;ap=aq;aq=t;for(i=0;in;i+)cout ai;coutendl;6、字符串处理函数的运用#include /strcat,strlen,strcmp,strlwr,strupr,strcpy#include#includevoid main()char c110,c210; int l1,l2;coutinput c1 and c2:endl;gets(c1);gets(c2);coutstrcmp(c1,c2)endl; /比较大小l1=strlen(c1);l2=strlen(c2); /两个长度coutc1和c2长度为:l1 ,l2endl;strupr(c1); /将c1变成大写strcpy(c2,c1); /将c1复制给c2strlwr(c2) ; /将c2变成小写strcat(c1,c2); /c2 links to c1puts(c1);puts(c2);7、/*输入一批正整数,以0或负数结束输入,找出其中的素数,并排序从小到大输出。如输入5,12,6, 2,25, 23, 7,0结果为2,5,7,23 */#includevoid main() int ss(int m); void px(int ,int n);int a50,b50,x,i,j=0,n;cinx;for(i=0;x0;i+)ai=x;cinx; n=i;for(i=0;in;i+)if (ss(ai)bj=ai;j+;px(b,j);for(i=0;ij;i+)cout bi;coutendl;int ss(int m)int i,f=0,gs=0; for(i=1;i=m;i+) if(m%i=0) gs+; if(gs=2) f=1; return f;void px(int b,int n)int i,j,t;for(i=0;in-1;i+) for(j=i+1;jbj) t=bi;bi=bj;bj=t;8、数组编程-例4.输入三名学生的学号和三门课的成绩,求出每人的平均分。打印如下的成绩单按平均分的优劣打印成绩单。#define N 3 /*3 students*/#define M 3 /*3 scores*/#include void main()int noN,scoreNM,i,j,k,ss,nn; float averN,sum,average; for(i=0;iN;i+) scanf(%d,&noi); for(j=0;jM;j+) scanf(%d,&scoreij); for(i=0;iN;i+)sum=0; for(j=0;jM;j+) sum+=scoreij; averi=sum/M;for(i=0;iN-1;i+) for(j=i+1;jN;j+) if(averiaverj) average=averi; /*change aver*/ averi=averj; averj=average; for(k=0;kM;k+) /*chang score*/ ss=scoreik; scoreik=scorejk; scorejk=ss; nn=noi; /*change no*/ noi=noj; noj=nn; for(i=0;iN;i+) printf(%2d,noi); for(j=0;jM;j+) printf(%5d,scoreij); printf(%7.1f,averi); printf(n);9、例5. 已有 10 个按升序整数按从小到大排序, 现键入某整数,将此数插入后仍为升序排列。#include void main()int a11=1,4,6,9,12,15,18,21,25,30; int num,i,j; coutnum; if(num=a9) a10=num; else for(i=0;inum) for(j=10;j=i+1;j-) aj=aj-1; ai=num; break; /一定要break; for(i=0;i11;i+) coutai ;10、/例6.从矩阵中找出鞍点,即该位置上的元素/在行上最大,列上最小。#include void main()int a5050,i,j,m,n,k,max,maxj,t,f; coutmn; coutinput m*n numbers:endl; for(i=0;im;i+) for(j=0;jaij;max=a00;for(i=0;im;i+) for(j=0;jmax) max=aij;maxj=j; f=1; for(k=0;kakmaxj) f=0;break; if(f=1) t=max;couttendl; 例七:打印星形金字塔,正方体,风筝形#include void main() int i,j,n; coutn; for(i=1;i=n;i+) / =n for(j=1;j=n-i;j+) cout ; /两个空格 for(j=1;j=2*i-1;j+) cout* ; /1个空格时为正方形,2个空格时为筝形 coutendl; /上半部 for(i=1;in;i+) / n for(j=1;j=i;j+) cout ; /两个空格 for(j=1;j=2*(n-i)-1;j+) cout* ; coutendl; /下半部 /* 1 2 3 4 1 2 3 1 3 5 7 5 3 1 */11、十进制转换为二进制、八进制#include void main() int x,y,z; coutx; z=x; coutendly; int a20,i,k; for(k=0;x!=0;k+) ak=x%y;x=x/y; coutz的十进制转换为y=0;i-) coutai; coutendl;12、二、八进制转换为十进制A、#include #include void main() int x50,i,n,y=0; coutn; cout输入一个二进制整数:; for(i=0;ixi; /输入时记得输入空格 coutendl将二进制转换为的十进制数:; for(i=0;in;i+) y=y+xi*pow(2,n-1-i); coutyendl;B、#include #include void main() int x50,i,n,y=0; coutn; cout输入一个八进制整数:; for(i=0;ixi; /输入时记得输入空格 coutendl将八进制转换为的十进制数:; for(i=0;in;i+) y=y+xi*pow(8,n-1-i); cout

温馨提示

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

评论

0/150

提交评论