程序设计基础实验报告.docx

上传人:b****4 文档编号:24249943 上传时间:2023-05-25 格式:DOCX 页数:47 大小:496.26KB
下载 相关 举报
程序设计基础实验报告.docx_第1页
第1页 / 共47页
程序设计基础实验报告.docx_第2页
第2页 / 共47页
程序设计基础实验报告.docx_第3页
第3页 / 共47页
程序设计基础实验报告.docx_第4页
第4页 / 共47页
程序设计基础实验报告.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

程序设计基础实验报告.docx

《程序设计基础实验报告.docx》由会员分享,可在线阅读,更多相关《程序设计基础实验报告.docx(47页珍藏版)》请在冰豆网上搜索。

程序设计基础实验报告.docx

程序设计基础实验报告

程序设计基础

实验一

(3)<2>读入三个整数a、b、c,交换它们中的数,使a存放b的值,b存放c的值,c存放a的值。

#include

voidmain()

{

inta,b,c,temp;

cout<<"inputa,b,c";

cin>>a>>b>>c;

temp=a;

a=b;

b=c;

c=temp;

cout<

(3)<3>对任意输入的四位整数,分别求出其各位数字,并按从后到前的顺序依次输出。

例如,输入为1234时,输出结果为4,3,2,1。

#include

voidmain()

{

inta,b,c,d,n;

cout<<"inputnumbern";

cin>>n;

if(n>999&&n<10000){

a=n/1000;

b=(n%1000)/100;

c=(n%100)/10;

d=n%10;

cout<

}elsecout<<"error";

}

实验二

(2)<1>求解下面函数的值。

ex+yx<0,y<0

z=ln(x+y)1≤x+y〈10

log10|x+y|+1其它情况

#include

#include

voidmain()

{

floatx,y,z;

cout<<"input2number";

cin>>x>>y;

if(x<0&&y<0){

z=exp(x+y);

}

if(x+y>=1&&x+y<10){

z=log(x+y);

}elsez=log10(fabs(x+y)+1);

cout<

}

<2>编程求解下列各计算式:

1)S=

=1+2+3+…+100

#include

voidmain()

{

inti,n,s;

s=0;

for(i=1;i<=100;i++){

s=s+i;

}

cout<

}

2)S=

=1!

+2!

+…+7!

#include

voidmain()

{

inti,t,s;

s=0;

t=1;

for(i=1;i<=7;i++){

t=t*i;

s=s+t;

}

cout<

}

4)Y=X-

+…+(-1)n+1

+…的值,精确到10-6。

#include

#include

usingnamespacestd;

floatf(intx,intn)

{

ints=1;

for(inti=1;i<=n;i++)s*=i;

returnpow(x,n)/s;

}

intmain()

{

floatx,y=0;

cout<<"enterx"<

cin>>x;

for(inti=1;i+=2;){

y+=pow(-1,i+1)*f(x,i);

if(f(x,i)<1e-6)break;

}

cout<

return0;

}

<3>打印下面图形。

1

131

13531

1357531

135797531

…………………

13……21………31

#include

#include

#include

intmain()

{

for(inti=1;i<=11;i++){

for(intj=1;j<=11-i;j++)

cout<<"";

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

cout<

}

return0;

}

<4>编程产生出1到10以内的所有数对并输出,其中i>j。

#include

voidmain()

{

inti,j;

for(i=1;i<=10;i++){

for(j=1;j

cout<<"<"<";

cout<

}

}

<5>编程求出10000以内的所有符合如下条件的数:

其高位数字小于低位数字。

如12,238,3578等。

但21,548不符合条件。

#include

voidmain()

{

inti;

for(i=10;i<100;i++){

if(i/10

}

for(i=100;i<1000;i++){

if(i/100<(i%100)/10&&(i%100)/10

}

for(i=1000;i<10000;i++){

if(i/1000<(i%1000)/100&&(i%1000)/100<(i%100)/10&&(i%100)/10

}

}

实验三

<1>编程产生下列数组,并输出。

2)(13610152128364555)

#include

voidmain()

{

inti,a[10];

for(i=0;i<10;i++){

a[i]=(i+1)*(i+2)/2;

}

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

cout<

}

⑵二维数组

4)ABCDEF

BCEHLQ

CDFIMR

DEGJNS

EFHKOT

#include

voidmain()

{

inti,j;

chara[5][6];

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

a[i][j]='A'+j;

for(i=1;i<5;i++)

for(j=0;j<6;j++){

a[i][j]='A'+i+j*(j+1)/2;

}

for(i=0;i<5;i++){

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

cout<

cout<

}

}

<4>随机输入一组数组元素值,利用题<2>使一个数组有序。

然后随机输入一个数,用折半查找法在数组中查找,如在数组中,则输出元素在数组中的位置;如不在,则输出提示

#include

usingnamespacestd;

constintn=10;

intmain()

{

inti,k,temp,a[n];

for(k=0;k

cin>>a[k];

for(k=0;k<10;k++){

for(i=0;i<10;i++){

if(a[i]>a[i+1]){

temp=a[i];

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

a[i+1]=temp;

}

}

}

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

cout<

cout<

intmid;

intlow=1,high=n;

intnum;

cin>>num;

while(low<=high){

mid=(low+high)/2;

if(num==a[mid])

break;

elseif(num

high=mid-1;

elselow=mid+1;

}

if(num==a[mid])

cout<<"所查找的数在第"<

else

cout<<"不存在这个数"<

return0;

}

<2>判断一个二维数组是否有“鞍点”,即该位置上的元素在该行上最大,在该列上最小。

如有,输出其行列号和值;若无,给出提示。

(数组元素的值用scanf输入)

#include

#include

constintrow=3;

constintcol=3;

voidmain()

{

inti=0,j=0,d;

intb,c,count=0;

inta[row][col];

cout<<"输入数组"<

for(i=0;i

for(j=0;j

for(i=0;i

b=i;c=j;

for(j=0;j

if(a[b][c]<=a[i][j]){

b=i;

c=j;

}

}

for(d=0;d

if(a[d][c]

}

if(d==row){

cout<<"("<

count++;

}

}

if(count==0)cout<<"没有鞍点"<

}

实验四

(2)编写程序实现下列问题的求解。

<1>求方程ax2+bx+c=0的根,用三个函数分别求b2-4ac大于0、等于0和小于0时的根,并输出结果。

从主函数输入a、b、c的值。

#include

#include

voidf1(floatx,floaty,floatz)

{

floatx1,x2;

x1=((-y)+sqrt(y*y-4*x*z))/(2*x);

x2=((-y)-sqrt(y*y-4*x*z))/(2*x);

cout<<"x1="<

cout<<"x2="<

}

voidf2(floatx,floaty)

{

floatx1,x2;

x1=x2=(-y)/(2*x);

cout<<"x1=x2="<

}

voidf3(float)

{

cout<<"无实数根"<

}

voidmain()

{

floata,b,c;

cin>>a>>b>>c;

if(b*b>4*a*c)f1(a,b,c);

if(b*b==4*a*c)f2(a,b);

if(b*b<4*a*c)f3(a);

}

<3>编写一个将十进制整数转换为十六进制字符串的函数。

#include

usingnamespacestd;

voidmain()

{

charc[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

charr[100],i=0;

intn;

cout<<"输入一个十进制数"<

cin>>n;

while(n>0){

r[i]=n%16;

i++;

n/=16;

}

cout<<"转化成16进制后"<

for(intj=i-1;j>=0;j--)cout<

cout<

}

实验五

〈1〉输入三个整数,按由小到大的顺序输出,然后将程序改为:

输入三个字符串,按由小到大的顺序输出。

#include

voidmain()

{

inti,j,temp,a[3];

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

cin>>a[i];

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

for(j=0;j<3;j++){

if(a[j]>a[j+1]){

temp=a[j];

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

a[j+1]=temp;

}

}

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

cout<

}

〈2〉将一个3*3的矩阵转置,用一个函数实现。

在主函数中用scanf输入以下矩阵元素:

{2,4,6,8,10,12,14,16,18}。

将数组名作为函数参数。

函数调用后在主函数中输出已转置的矩阵。

#include

usingnamespacestd;

voids(inta[])

{

printf("转置后\n");

printf("%d%d%d\n%d%d%d\n%d%d%d\n",a[0],a[3],a[6],a[1],a[4],a[7],a[2],a[5],a[8]);

}

intmain()

{

inta[9];

printf("输入9个整数\n");

scanf("%d%d%d%d%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8]);

printf("转置前\n");

printf("%d%d%d\n%d%d%d\n%d%d%d\n",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);

s(a);

return0;

}

〈3〉自己写一个strcmp函数,实现两个字符串的比较。

两个字符串s1,s2由main函数输入,strcmp函数的返回值也在main函数中输出。

#include

usingnamespacestd;

intstrcmp(chara[],charb[])

{

inti,j;

for(i=0;(a[i]!

='\0')||(b[i]!

='\0');i++)

{

if(a[i]>b[i]){j=1;break;}

elseif(a[i]=b[i])j=0;

else{j=-1;break;}

}

returnj;

}

intmain()

{

inti,j;

chara[20],b[20];

cout<<"inputtowstrings"<

cin>>a>>b;

cout<

return0;

}

〈4〉动态链表的每个结点包括一个整数和一个后继指针。

分别编写过程完成如下操作:

(1)从键盘输入数据建立链表,并按数据的输入顺序建立链表。

(2)依次打印其中各结点的数据。

#include

#include

structlist

{

intvalue;

structlist*next;

};

voidmain()

{

intn,i=0,m;

structlist*p,*q,*head,*tmp;

//第一行输入数据个数n;

printf("请输入链表的长度:

");

scanf("%d",&n);

if(n<1)return;

//第二行依次输入n个整数;

printf("请输入节点的值:

");

p=(structlist*)malloc(sizeof(structlist));

head=p;

q=p;

q->next=NULL;

scanf("%d",&p->value);

for(i=1;i

{

p=(structlist*)malloc(sizeof(structlist));

scanf("%d",&p->value);

q->next=p;

q=p;

q->next=NULL;

}

//第三行输入欲删除数据m;

printf("请输入要删除的数值:

");

scanf("%d",&m);

//第一行输出原始单链表的长度;

q=head;

i=0;

while(q->next)

{

i++;

q=q->next;

}

printf("原链表长度为:

%d\n",i+1);

//第二行依次输出原始单链表的数据;

printf("链表数据为:

\n");

q=head;

while(q->next)

{

printf("%d",q->value);

q=q->next;

}

printf("%d\n",q->value);

//删除

p=head;

while(head->value==m&&head->next!

=NULL)

{

head=head->next;

free(p);

p=head;

}

if(head->value==m&&head->next==NULL)

{

printf("删除后的链表长度为0\n");

printf("删除后的链表为空\n");

return;

}

p=q=tmp=head;

while(q->next)

{

q=q->next;

while(q->value==m&&q->next!

=NULL)

{

tmp=q;

q=q->next;

free(tmp);

}

if(q->next==NULL&&q->value==m)

{

p->next=NULL;

}else

{

p->next=q;

}

p=q;

}

//第三行输出完成删除后的单链表长度;

q=head;

i=0;

while(q->next)

{

i++;

q=q->next;

}

printf("删除后的链表长度为%d\n",i+1);

//第四行依次输出完成删除后的单链表数据;

printf("删除后的链表为:

\n");

q=head;

while(q->next)

{

printf("%d",q->value);

q=q->next;

}

printf("%d\n",q->value);

}

 

实验六

<1>在某系的成绩登记册中,每个班最多有40个学生,每份成绩表中的成绩信息包括:

学号(9位字符),姓名(8位字符),成绩(百分制),备注(20位字符)。

设计程序以处理一个班级的成绩信息,包括输入、输出、查询(给定分数以上或以下的学生信息)、按分数排序等。

#include

structstudent

{

intnum;

charname[8];

intgread;

charbeizhu[20];

}student[40];

voidmain()

{

inti,j,k,temp;

for(i=0;i<40;i++){

cout<<"输入学号";

cin>>student[i].num;

cout<<"输入姓名";

cin>>student[i].name;

cout<<"输入成绩";

cin>>student[i].gread;

cout<<"输入备注";

cin>>student[i].beizhu;

}

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

cout<

cout<<"输入分数线";

cin>>j;

for(i=0;i<40;i++){

if(student[i].gread>j)

cout<

}

for(i=0;i<40;i++){

for(k=0;k<40;k++){

if(student[k].gread>=student[k+1].gread){

temp=student[k].gread;

student[k].gread=student[k+1].gread;

student[k+1].gread=temp;

}

}

}

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

cout<

}

实验七

1.下面程序定义了一个以hours,minutes和seconds作为数据成员的Time类。

设计了成员函数将两个Time对象相加(即时间相加),并进行相应的检查,查看增加的分钟数及秒数是否大于59。

如果秒数大于59,则分钟数向前递增1。

类似地,如果分钟数大于59,则小时数向前增1。

#include

classTime

{

private:

inthours,minutes,seconds;

public:

voidget_time()

{

cin>>hours>>minutes>>seconds;

}

voiddisplay_time()

{

cout<

'<

'<

}

voidadd_time(Time&t1,Time&t2)

{

hours=t1.hours+t2.hours;

minutes=t1.minutes+t2.minutes;

seconds=t1.seconds+t2.seconds;

if(seconds>=60)

{

seconds-=60;

minutes++;

}

if(minutes>=60)

{

minutes-=60;

hours++;

}

if(hours>=24)

{

hours-=24;

}

}

};

voidmain()

{

Timeone,two,three;

cout<<"\nEnterthef

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1