C上机题目期末复习资料剖析.docx

上传人:b****2 文档编号:17762038 上传时间:2023-08-03 格式:DOCX 页数:19 大小:20.50KB
下载 相关 举报
C上机题目期末复习资料剖析.docx_第1页
第1页 / 共19页
C上机题目期末复习资料剖析.docx_第2页
第2页 / 共19页
C上机题目期末复习资料剖析.docx_第3页
第3页 / 共19页
C上机题目期末复习资料剖析.docx_第4页
第4页 / 共19页
C上机题目期末复习资料剖析.docx_第5页
第5页 / 共19页
C上机题目期末复习资料剖析.docx_第6页
第6页 / 共19页
C上机题目期末复习资料剖析.docx_第7页
第7页 / 共19页
C上机题目期末复习资料剖析.docx_第8页
第8页 / 共19页
C上机题目期末复习资料剖析.docx_第9页
第9页 / 共19页
C上机题目期末复习资料剖析.docx_第10页
第10页 / 共19页
C上机题目期末复习资料剖析.docx_第11页
第11页 / 共19页
C上机题目期末复习资料剖析.docx_第12页
第12页 / 共19页
C上机题目期末复习资料剖析.docx_第13页
第13页 / 共19页
C上机题目期末复习资料剖析.docx_第14页
第14页 / 共19页
C上机题目期末复习资料剖析.docx_第15页
第15页 / 共19页
C上机题目期末复习资料剖析.docx_第16页
第16页 / 共19页
C上机题目期末复习资料剖析.docx_第17页
第17页 / 共19页
C上机题目期末复习资料剖析.docx_第18页
第18页 / 共19页
C上机题目期末复习资料剖析.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C上机题目期末复习资料剖析.docx

《C上机题目期末复习资料剖析.docx》由会员分享,可在线阅读,更多相关《C上机题目期末复习资料剖析.docx(19页珍藏版)》请在冰点文库上搜索。

C上机题目期末复习资料剖析.docx

C上机题目期末复习资料剖析

一些算法的程序,有的是上机题的答案,各位同学可根据自己的时间安排进行复习。

打印三角形:

#include

voidRect(intline){//打印矩形

inti,j;

for(i=0;i

{

for(j=1;j<=line;j++)

cout<<''<<'*';

cout<

}

}

voidTriangA(intline){//打印上三角

inti,j;

for(i=0;i

{

for(j=0;j

cout<<"";//输出前方空格

for(j=1;j<=2*i+1;j++)

cout<<''<<'*';

cout<

}

}

voidTriangB(intline){//打印下三角

inti,j;

for(i=0;i

{

for(j=0;j<=i;j++)

cout<<"";//输出前方空格

for(j=1;j<=2*(line-1-i)+1;j++)

cout<<''<<'*';

cout<

}

}

voidmain(){

intch=1;

intn;

while(ch>0&&ch<5){

cout<<"\n1_输入整数n2_矩形3_上三角4_下三角5_结束:

";

cout<<"\n请输入菜单项序号:

";

cin>>ch;//输入选择项号码

switch(ch){

case1:

cout<<"\n请输入一个整数n=";

cin>>n;//输入函数参数

break;

case2:

cout<<"打印n行矩形:

"<

Rect(n);

break;

case3:

cout<<"打印上三角:

"<

TriangA(n);

break;

case4:

cout<<"打印下三角:

"<

TriangB(n);

break;

case5:

break;

}//switch

}//while

}

设计两个函数,分别求两个数的最大公约数和最小公倍数。

#include

MaxCommonDevisor(intn,intm){

for(inti=n;i>=1;i--)

if(n%i==0&&m%i==0)break;

returni;

}

MinCommonMultiple(intn,intm){

for(inti=n;i<=n*m;i++)

if(i%n==0&&i%m==0)break;

returni;

}

voidmain(){

inti,j;

cout<<"请输入两个整数:

"<

cin>>i>>j;

cout<<"最小公约数:

"<

"<

}

验证歌德巴赫猜想:

任何一个充分大的偶数都可以表示为两个素数之和。

例如:

4=2+26=3+38=3+5……50=3+47

将450之间的所有偶数用两个素数之和表示。

要求判断一个整数是否为素数用函数完成。

boolprime(intm){//判断整数m是否为素数

if(m==1||m==0)returnfalse;

if(m==2)returntrue;//是素数

intk=(int)sqrt(m);

for(inti=2;i<=k;i++)//穷举法

if(m%i==0)break;

if(i>k)returntrue;//是素数

elsereturnfalse;//不是素数

}

voidmain(){

for(intn=4;n<=50;n+=2){

for(inti=2;i<=n/2;i++)

if(prime(i)&&prime(n-i))cout<

//列出所有可能组合

}

}

输出PASCAL三角的前12行

PASCAL三角是形状如下的三角矩阵:

1

11

121

1331

14641

15101051

在三角中的每个数是一个组合C(n,k):

C(n,k)=((((((((n/1)(n-1))/2(n-2))/3)…

(n-k+2))/(k-1))(n-k+1))/k

式中交替使用乘法和除法,每次乘以一个递减值,再除以一个递增值。

#include

#include

usingnamespacestd;

longzrf_comb(intn,intk)

{if(n<0||k<0||k>n)return0;

longc=1;

for(inti=1;i<=k;i++,n--)

c=c*n/i;

returnc;

}

intmain()

{constm=13;

intj;

for(inti=0;i

{for(j=1;j

cout<

(2)<<"";

for(j=0;j<=i;j++)

cout<

cout<

}

return0;

}

筛法求3~100间的所有素数

voidmain()

{intprime[49],i,j=3;

for(i=0;i<49;i++)

//将3~100间的所有奇数放入筛(数组)中

{prime[i]=j;j=j+2;}

for(i=0;i<48;i++)

//用每一个当前位置上的数去“试筛”后面的其他数

if(prime[i])//如果该数字不为0

for(j=i+1;j<49;j++)

//对于当前“筛孔”后面的每一个数

if(prime[j]&&(prime[j]%prime[i]==0))

prime[j]=0;

//如果是“筛孔”数的倍数就将其筛掉

j=0;

for(i=0;i<49;i++)//循环输出各素数

if(prime[i])//如果该位置上的数没有被筛掉

{cout<

j++;//j统计着素数个数

if(j%5==0)cout<<‘\n’;//一行5个素数

}

cout<<'\n';

cout<<"素数的个数为:

"<

}

在具有20个元素的数组中,用产生随机数的方法为其元素赋值,并用顺序查找法在数组中查找指定的元素。

#include

#include

#include

#defineN20

voidresearch(inty[],intz)//顺序查找函数

{for(inti=0;i

if(y[i]==z)

{cout<<"在第"<

return;

}

if(i==N)cout<<"没有找到"<

return;

}

voidmain()

{inta[N],i;

srand(unsigned(time(0)));//产生一个随机种子

for(i=0;i

{a[i]=rand();//a[i]的值取自随机数

cout<

}

cout<<”\n请输入要查找的数:

”;

cin>>i;

cout<<”\n\n”;

research(a,i);//调用函数research查找i

}

在具有15个元素的数组中,用二分查找法在数组中查找指定的元素。

intBSearch(inta[],intx)//二分查找函数

{intleft=0,right=N,mid;

//left为左端点,right为右端点,mid为中点

while(left<=right)

{mid=(left+right)/2;//计算中点

cout<

if(a[mid]>x)right=mid-1;

//要查找的数在左半区间,收缩右端点

elseif(a[mid]

//要查找的数在右半区间,收缩左端点

elsereturnmid;//查找成功

}

if(left>right)return-1;//查找失败

elsereturnmid;

}

voidmain()

{intx,pos,data[N]={1,5,8,12,14,18,20,25,35,40};

cout<<”请输入要查找的数:

”;

cin>>x;

pos=BSearch(data,x);

if(pos>=0)

cout<<“”<

<

else

cout<<”数组中无此元素!

”<

}

打印杨辉三角形

---计算二项式系数

1

11

121

1331

14641

15101051

#include

#defineN6

voidmain(void)

{

inta[N][N],i,j;

for(i=0;i

a[i][i]=1;

//对角线元素为1

a[i][0]=1;

//最左一列元素为1

}

for(i=1;i

for(j=1;j

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=0;i

{

for(j=0;j<=i;j++)

cout<

cout<

}

}

有两个数据系列分别为:

a:

48,435,232,666,264,1323,456

b:

186,90,152,122,82,243,312

求:

第三、四个数据系列c和d,要求c中数据是a、b中对应数的最大公约数。

d中数据是a、b中对应数的最小公倍数。

inta[7]={48,435,232,666,264,1323,456};

intb[7]={186,90,152,122,82,243,312};

c[7]={6,15,8,2,2,27,24}

d[7]={1488,2610,4408,40626,10824,11907,5928}

//求最大公约数

intojld(intm,intn)//形参不能是数组元素

{intr;

while(r=m%n){m=n;n=r;}

returnn;

}

//最小公倍数

intgbs(intm,intn,intk)

{returnm*n/k;}

voidmain(void)

{inta[7]={48,435,232,666,264,13231,456};

intb[7]={186,90,152,122,82,243,312};

intc[7],d[7];

for(inti=0;i<7;i++)

{c[i]=ojld(a[i],b[i]);

d[i]=gbs(a[i],b[i],c[i]);

}

for(i=0;i<7;i++)cout<

cout<

for(i=0;i<7;i++)cout<

cout<

}

编写一个程序,将整数数组中的最大数与第0个元素交换,将最小数与最后一个元素交换。

求最大(小)数用一个函数实现。

#defineN10

intmaxin(intx[],intflag)

{intj=0,i;//j为最大(小)数的位置

for(i=0;i

if(flag)//flag为1时求最大值为0时求最小值

{if(x[i]>x[j])j=i;}//j标记最大数位置

else

{if(x[i]

returnj;

}

voidmain()

{inta[N]={21,12,33,64,56,6,87,78,99,10},t,m;

m=maxin(a,1);//求最大数,第一个实参为数组名

if(m!

=0)t=a[m],a[m]=a[0],a[0]=t;

//交换最大数和第0个元素

m=maxin(a,0);//求最小数

if(m!

=N-1)t=a[m],a[m]=a[N-1],a[N-1]=t;

//交换最小数和最后元素

}

编写一个程序,将十进制整数n转换成二进制数。

voidtrans(inta[],intn)//n转二进制,a[]为数组

{inti=0;//假设i<20

while(n!

=0){a[i++]=n%2;n=n/2;}

}

voidmain()

{intb[20]={0},n,i=19;

cout<<”n=”;

cin>>n;//输入待转换的十进制数n,n>0

trans(b,n);//调用函数trans转换,数组名b作实参

cout<<”二进制数为:

”;

while(b[i]==0)i--;//排除没存放二进制数的元素

for(;i>=0;i--)//从高位到低位输出二进制数

cout<

cout<<’\n’;

}

编写一个程序,处理某班学生3门课程(语文、数学和英语)的成绩。

先输入学生人数(最多为50个人);再调用一个函数按编号从小到大的顺序依次输入学生成绩;然后调用函数统计每门课程全班的总成绩和平均成绩以及每个学生课程的总成绩和平均成绩;最后调用函数输出学生的成绩。

voidinput(inta[][5],intn)

//n是数组a第1维的大小,由调用函数指定

{cout<<"请输入"<

for(inti=0;i

cin>>a[i][0]>>a[i][1]>>a[i][2];

}

voidprint(inta[][5],intn)

//形参是二维数组,第2维必须指定大小

{cout<<”高数英语C++总分平均分\n”;

for(inti=0;i

{cout<

<

cout<

}

voidcut(inta[][5],intn)

{for(inti=0;i

{a[i][3]=a[i][0]+a[i][1]+a[i][2];//计算总分

a[i][4]=a[i][3]/3;//平均分不计小数

}

}

voidmain()

{intscore[50][5],n;

cout<<"请输入学生人数:

”;

cin>>n;

input(score,n);//输入n个学生3门课的成绩

cut(score,n);//计算学生的总成绩和平均成绩

print(score,n);//输出n个学生的成绩

}

有一行字符,现要求从其中删去某个指定字符(如输入n,表示要从此行文字中删去所有是n的字符),要求该行文字和待删的字符均由键盘输入。

#defineN50

voidmain()

{charstr[N],nstr[N],ch;

inti=0,j=0;

cout<<“请输入文字:

";

cin.getline(str,N);//输入一行字符

cout<<"字符:

";

cin>>ch;//输入待删除的字符

while(str[i]!

='\0'){

if(str[i]!

=ch)nstr[j++]=str[i];//复制一个字符

i++;

}

nstr[j]='\0';

cout<<"新串:

"<

}

编写一个程序,将字符串s1中所有出现在字

符串s2中的字符删去。

intin(charch,charstr[])//判断ch是否在串str中

{inti=0;

while(str[i]!

='\0')

if(str[i++]==ch)return1;

return0;

}

voiddel(charstr[],intk)//删除k位置的一个字符

{while(str[k]!

='\0')

str[k++]=str[k+1];

}

voidsdel(chars1[],chars2[])//从s1中删除所有的s2

{inti=0,k=0;

while(s1[i]!

='\0')

{if(in(s1[i],s2)==1)del(s1,i);

i++;}

}

voidmain()

{charstr1[50],str2[10];

cout<<"请输入字符串:

";

cin.getline(str1,50);

cout<<"请输入要删除的字串:

";

cin.getline(str2,10);

sdel(str1,str2);

cout<

}

编写一个程序,实现两个长整数相加的过程。

voidnsort(charstr[]);

voidadd(chars1[],chars2[],charsum[]);

voidmain(){

chars1[40]={"\0"},s2[40]={"\0"},sum[50]={'0'};

cout<<"被加数:

";cin>>s1;//输入被加数

cout<<"加数:

";cin>>s2;//输入加数

nsort(s1);nsort(s2);//加数和被加数反转

add(s1,s2,sum);//相加

nsort(sum);//和反转

cout<<"相加结果:

"<

}

voidadd(chars1[],chars2[],charsum[])

{intjw=0,i=0,j,l1,l2,len;//jw为进位

l1=strlen(s1);l2=strlen(s2);//求数字位数

len=l1>l2?

l1:

l2;//len为位数大者

while(i

{j=s1[i]+s2[i]-96+jw;//计算第i位的和

if(j<0)j+=48;//防止s1或s2中的某位为\0

if(j>9)//有进位

sum[i]=j+38,jw=1;

else//无进位

sum[i]=j+48,jw=0;

i++;

}

if(jw)sum[i]='1';//处理最高位的进位

elsesum[i]='\0';

sum[i+1]='\0';//设置和的字符串结束符

}

voidnsort(charstr[])

{inti=0,j=strlen(str)-1;

chart;

while(i

{t=str[i];str[i]=str[j];str[j]=t;

i++;j--;

}

}

已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中

voidmain(void)

{inta[8]={1,2,4,8,32,64,128},x;

for(inti=0;i<7;i++)

cout<

cout<

i--;

cout<<“输入一个整数x:

";

cin>>x;

while(a[i]>x)a[i+1]=a[i--];

a[i+1]=x;

for(i=0;i<8;i++)

cout<

cout<

}

矩阵乘积

voidmain(){

inta[N][K],b[K][M],c[N][M];

inti,j,l;

//-----输入a数组

cout<<"请输入a数组:

\n";

for(i=0;i

for(j=0;j

cin>>a[i][j];

//-----输入b数组

cout<<"请输入b数组:

\n";

for(i=0;i

for(j=0;j

cin>>b[i][j];

//-----计算乘积

for(i=0;i

for(j=0;j

c[i][j]=0;

for(l=0;l

c[i][j]+=a[i][l]*b[l][j];

}

//-----输出乘积结果

for(i=0;i

for(j=0;j

cout<

cout<<'\n';

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2