西安交大C++程序设计课外测验作业.docx

上传人:b****4 文档编号:24290475 上传时间:2023-05-26 格式:DOCX 页数:21 大小:267.91KB
下载 相关 举报
西安交大C++程序设计课外测验作业.docx_第1页
第1页 / 共21页
西安交大C++程序设计课外测验作业.docx_第2页
第2页 / 共21页
西安交大C++程序设计课外测验作业.docx_第3页
第3页 / 共21页
西安交大C++程序设计课外测验作业.docx_第4页
第4页 / 共21页
西安交大C++程序设计课外测验作业.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

西安交大C++程序设计课外测验作业.docx

《西安交大C++程序设计课外测验作业.docx》由会员分享,可在线阅读,更多相关《西安交大C++程序设计课外测验作业.docx(21页珍藏版)》请在冰豆网上搜索。

西安交大C++程序设计课外测验作业.docx

西安交大C++程序设计课外测验作业

西安交通大学实验报告

课程__计算机程序设计__实验名称_课外实验题目__第1页共19页

系别__________实验日期2014年4月3日

专业班级____组别_____________实验报告日期2014年4月5日

姓名________学号__报告退发(订正、重做)

同组人_________________________________教师审批签字

 

一、实验目的

复习巩固本阶段所学的知识,包括数组的使用、函数的使用、循环语句和条件语句的使用等。

二、实验内容

(一)第一题:

1、编写一个程序,计算m~n范围内的每个正整数的全部素因子。

其中的m和n由键盘输入。

评分标准:

(1)程序框架完整,代码规范;(20%)

(2)数据类型的定义和使用方法正确;(20%)

(3)程序控制结构使用正确;(20%)

(4)算法正确,清晰合理;(20%)

(5)运行结果正确,输入和输出格式如下所示。

(20%)

请输入m和n:

1518

15的非平凡因子:

35

16的非平凡因子:

248

17的非平凡因子:

18的非平凡因子:

2369

1.源程序代码:

#include

usingnamespacestd;

voidsuyinzi(intx);

intmain()

{

intm,n;

cout<<"请输入正整数m和n(m<=n):

";

cin>>m>>n;

while(m>n)

{

cout<<"您输入有误,m应该小于等于n,请重新输入:

";

cin>>m>>n;

}

for(intj=m;j<=n;j++)//对于范围内的正整数逐一判断寻找因子

{

suyinzi(j);

}

return0;

}

voidsuyinzi(intx)//寻找并输出x的所有非平凡因子

{

cout<

";

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

{

if(x%i==0)

{

cout<

}

}

cout<

}

2.实验结果:

3.问题分析:

此题简单,但当该数没有非平凡因子时,如能够输出:

“x没有非平凡因子!

”而非仅仅输出空白则更好。

为此,需要将非平凡因子个数储存下来,在判断完毕后根据个数是否为0决定是否输出“x的非平凡因子为:

”这句话。

然而这样的代价就是较为麻烦,增加了程序运行的时间,因而没有尝试。

(二)第二题:

编写函数求反正切三角函数值,函数原型:

doublemy_arctg(doublex);反正切三角函数公式如下:

n=0,1,2,......,要求结果值精确到107,并编写主函数测试。

评分标准,该题共20分:

(1)程序开始执行时显示“Pleaseenterx:

”,开始输入x的值,程序能正确接受该数值(5分);

(2)能够正确计算数据(5分);

(3)能够输出正确的计算结果。

(5分)。

(4)调用系统数学库函数atan(x)检验计算结果是否正确,并输出检测结果(5分)。

1.源程序代码:

#include

#include

usingnamespacestd;

doublemy_arctg(doublex);

intmain()

{

doublex;

cout<<"Pleaseenterx:

";

cin>>x;

cout<<"自定义函数计算结果:

"<

cout<<"系统函数计算结果:

"<

return0;

}

doublemy_arctg(doublex)

{

doublesum=x;

doubleu=x;

inti;

for(i=1;u>0.0000001||u<-0.0000001;i++)

{

u=u*(-1)*x*x*(2*i-1)/(2*i+1);

sum=sum+u;

}

returnsum;

}

2.实验结果:

发现当|x|>1时程序进入死循环无法结束,可能是公式不再适用。

以下对各种情况作以检测:

(1)输入为绝对值小于等于1的正数或负数及0时,能够计算出结果并且准确:

(2)绝对值超过1,无法计算结果:

3.问题分析:

|x|>1时则无法输出结果,为了了解是哪里的问题,将程序添加对u的输出语句,并进行了测试,得到以下结果:

由结果分析,应该是无法达到结束循环的条件,此时程序进入死循环,所以无法输出。

因而,应该是公式不再适用。

因此,输入值应该限定在[-1,1]内。

所以提出修改意见:

在输入语句后增加判断是否在[-1,1]内的程序:

While(x>1||x<-1)

{

Cout<<“您的输入有误,请输入x在[-1,1]范围内:

\n”;

Cin>>x;

}

出于原题要求,没有在结果中进行改动。

(三)第三题:

编写程序,用二维数组存储N×N整数矩阵,判断矩阵是否为对称矩阵(沿主对角线对称,N大于3)?

先输出该矩阵,然后输出判断结果。

再将次对角线上的N个元素加到主对角线上N个元素,保持矩阵的对称性,并再输出该矩阵。

(可以不用函数方法)

评分标准:

该题共20分。

(1)数据定义和产生正确(5分)

(2)判断对称矩阵的控制结构正确(5分)

(3)主对角线与次对角线元素相加正确(5分)

(4)输出结果正确(5分)

1.源程序代码:

#include

usingnamespacestd;

voidchuli(intnum[4][4]);

intpanduan(intnum[4][4]);

intmain()

{

inta[4][4]={1,2,3,4,

2,3,4,1,

3,4,1,2,

4,1,2,3

};

intb[4][4]={3,4,3,4,

2,3,8,1,

4,4,3,2,

7,1,2,3

};

chuli(a);

chuli(b);

return0;

}

intpanduan(intnum[4][4])

{

inti,j,x=0;

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

{

for(j=0;j

{

if(num[i][j]==num[j][i])

x++;

}

}

if(x>5)

return1;

return0;

}

voidchuli(intnum[4][4])

{

inti,j;

cout<<"矩阵为:

\n";

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

{

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

cout<

cout<

}

if(panduan(num)!

=0)

{

cout<<"该矩阵是对称的,改变后结果为:

\n";

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

num[i][i]=num[i][i]+num[i][3-i];

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

{

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

cout<

cout<

}

}

else

cout<<"该矩阵不是对称的\n";

}

2.实验结果:

3.问题分析:

对题意的理解不是很明确。

按照自己的理解进行了编写:

定义了两个固定的函数,一个为对称的,另一个不对称;编写了一个自定义函数判断矩阵是否对称;然后对这两个矩阵分别进行判断,若不对称则输出不对称,若对称则进一步进行处理将次对角线元素加到主对角线。

(四)第四题:

编写函数,判断任意一个字符串是否为对称字符串,例如:

对称字符串为“IaI”、“POP”、“21++12”。

要求编写主函数加以测试。

判断函数原型如下:

intpanduan(charccc[]);

评分标准:

该题共20分。

(1)字符串数据定义和产生正确(5分)

(2)判断函数编写正确(10分)

(3)测试函数编写正确,并输出结果(5分)

1.源程序代码:

#include

usingnamespacestd;

intpanduan(charccc[]);//自定义函数判断字符串ccc是否对称

intmain()

{

charin[40];

cout<<"请输入字符:

";

cin.get(in,39);

if(panduan(in)==1)

cout<<"您输入的"<

"<

else

cout<<"您输入的"<

"<

return0;

}

intpanduan(charccc[])

{

intm=strlen(ccc);//获取字符串长度

inti,x=0;

for(i=0;i<(m+1)/2;i++)//逐一判断对称位置字符是否相同

{

if(ccc[i]==ccc[m-i-1])

{

x++;

}

}

if(x>=m/2)//对称位字符全部分别相同时输出是

return1;

return0;

}

2.实验结果:

考虑到奇数个字符、偶数个字符、数字形式字符、字母、以及多种不对称的形式进行检测:

(1)数字:

(2)字母:

(3)首尾字符不对称:

(4)中心字符不对称:

(5)含空格字符串:

五、第五题:

编写函数:

intcount(intm);该函数完成如下功能:

输入一个整数m,统计并返回m左端连续相同数字的个数。

如:

2220511左端连续相同数字2的个数是3;-923000左端连续相同数字9的个数是1。

编写主程序,测试该函数。

评分标准:

(1)数据类型、程序控制结构使用正确(5分)

(2)函数的定义和调用方法正确(5分)

(3)程序结构规范、清晰、合理(5分)

(4)运行结果正确(5分)

1.源程序代码:

#include

usingnamespacestd;

intcount(intm);

intmain()

{

intm;

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

";

cin>>m;

if(m<0)

m=-m;//取绝对值

cout<

return0;

}

intcount(intm)//读取得到最高位数字;判断连续该数字的个数;输出个数

{

intn,u=m,num[10];

for(n=0;u>=1;n++)

{

num[n]=u%10;

u=u/10;

}

cout<<"左端连续相同数字"<

inti=1;

while(num[n-i]==num[n-i-1])

{

i++;

}

returni;

}

2.实验结果:

(1)正数:

(2)负数:

3、问题分析:

起初没有考虑正负的问题。

六、第六题:

编写程序:

求1-9999之内所有递减数的平均数,所谓递减数指该数各位数字从左至右递减排列,例如:

4332211、654321、9955、22222222等都是递减数。

例如:

32768、43987、123498都不是递减数。

假设求出递减数是4个,分别是A、B、C、D,则按下面格式输出结果:

(A+B+C+D)/4=结果值

评分标准:

(1)程序框架完整,结构清晰(5分)

(2)整数中的数字分离正确(5分)

(3)循环控制结构正确(5分)

(4)计算结果正确,输出格式清楚。

(5分)。

1.源程序代码:

#include

usingnamespacestd;

intmy(intn);

intmain()

{

intm,n=0,sum=0;

intnum[10000];

for(m=0;m<=9999;m++)

{

if(my(m)!

=0)

{

num[n]=m;

sum=sum+m;

n++;

}

}

inti;

cout<<"("<

for(i=1;i

{

cout<<"+"<

}

cout<<")/"<

return0;

}

intmy(intn)

{

intnum[4];

intu=0,i=0;

do

{

num[u]=n%10;

n=n/10;

u++;

}while(n>=1);

while(num[i]<=num[i+1]&&i

i++;

if(i==u-1)

return1;

return0;

}

2.实验结果:

共有997个递增数,平均值为5740:

3.问题分析:

起初将判断是否递减的条件设为个位<=十位<=百位<=千位,这样就将一位数、两位数、三位数全部都否定了,因为它们都有一部分位上都为0,这样则无法满足递减。

(七)第七题:

设有一个有序的整形数组,数据元素从小到大排列,初始时数组中没有元素,用户从键盘输入若干整数,将其插入到数组的合适位置,使数组保持有序,并打印插入后数组的元素。

程序要考虑数组满时的情况处理。

注意每个整数插入时,若采用冒泡排序方法使数组有序则视为错误。

编程要求:

1)程序在开始执行时提示:

“请输入元素个数:

2)数组中有序元素是:

”的格式输出

3)程序提示:

“输入插入的整数”,插入后,数组元素仍然有序,并按“数组有序元素是:

”的格式输出

评分标准:

(1)程序框架完整,代码规范(20%)

(2)数据类型的定义和使用方法正确(20%)

(3)程序控制结构使用正确(20%)

(4)算法正确,清晰合理(20%)

(5)运行结果正确(20%)

1.源程序代码:

#include

usingnamespacestd;

intmain()

{

intm,n,i,a[60],b[30];

cout<<"请输入一个从小到大排列的数组的数的个数:

";

cin>>m;

cout<<"请输入每一项:

\n";

for(i=0;i

cin>>a[i];

cout<<"请输入要插入的数的个数:

\n";

cin>>n;

cout<<"请输入每一个要插入的数:

\n";

for(i=0;i

cin>>b[i];

for(i=0;i

{

intj=0,u;

while(b[i]>a[j]&&j

j++;

for(u=m+i;u>j;u--)

{

a[u]=a[u-1];

}

a[j]=b[i];

}

cout<<"排序结果是:

\n";

for(i=0;i

cout<

cout<

return0;

}

2.实验结果:

3.问题分析:

题目的说法并不明确,难以理解,只能按照自己的理解做:

先要求输入一个递增数组;再输入要插入的数,然后将要插入项插到正确的位置并输出。

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

当前位置:首页 > 解决方案 > 学习计划

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

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