西安交大C++程序的设计课外测验作业
交通大学实验报告课程_计算机程序设计_实验名称_课外实验题目_第 1 页 共 19 页系 别_ _ 实 验 日 期 2014 年 4月 3日专业班级_ _组别_ 实 验 报 告 日 期 2014 年4 月 5日姓 名_ _学号_ _ 报 告 退 发 ( 订正 、 重做 )同 组 人_ 教 师 审 批 签 字 一、实验目的 复习巩固本阶段所学的知识,包括数组的使用、函数的使用、循环语句和条件语句的使用等。二、实验容 (一)第一题:1、编写一个程序,计算mn围的每个正整数的全部素因子。其中的m和n由键盘输入。 评分标准:(1)程序框架完整,代码规;(20)(2)数据类型的定义和使用方确;(20)(3)程序控制结构使用正确;(20)(4)算确,清晰合理;(20)(5)运行结果正确,输入和输出格式如下所示。(20)请输入m和n:15 1815的非平凡因子:3 516的非平凡因子:2 4 817的非平凡因子:18的非平凡因子:2 3 6 91.源程序代码: #include<iostream>using namespace std;void suyinzi(int x);int main()int m,n;cout<<"请输入正整数m和n(m<=n):"cin>>m>>n;while(m>n)cout<<"您输入有误,m应该小于等于n,请重新输入:"cin>>m>>n;for(int j=m;j<=n;j+)/对于围的正整数逐一判断寻找因子suyinzi(j);return 0;void suyinzi(int x)/寻找并输出x的所有非平凡因子cout<<x<<"的非平凡因子为:"for(int i=2;i<=x/2;i+)if(x%i=0)cout<<i<<" "cout<<endl;2.实验结果:3.问题分析:此题简单,但当该数没有非平凡因子时,如能够输出:“x没有非平凡因子!”而非仅仅输出空白则更好。为此,需要将非平凡因子个数储存下来,在判断完毕后根据个数是否为0决定是否输出“x的非平凡因子为:”这句话。然而这样的代价就是较为麻烦,增加了程序运行的时间,因而没有尝试。(二)第二题:编写函数求反正切三角函数值,函数原型:double my_arctg(double x);反正切三角函数公式如下:n=0,1,2,.,要求结果值精确到107,并编写主函数测试。评分标准,该题共20分:( 1 )程序开始执行时显示“ Please enter x : ”,开始输入 x 的值,程序能正确接受该数值( 5分);( 2 )能够正确计算数据( 5分);( 3 )能够输出正确的计算结果。( 5分)。( 4 )调用系统数学库函数atan(x)检验计算结果是否正确,并输出检测结果( 5分)。1.源程序代码:#include<iostream>#include<cmath>using namespace std;double my_arctg(double x);int main()double x;cout<<"Please enter x:"cin>>x;cout<<"自定义函数计算结果:"<<my_arctg(x)<<endl;cout<<"系统函数计算结果:"<<atan(x)<<endl;return 0;double my_arctg(double x)double sum=x;double u=x;int i;for(i=1;u>0.0000001|u<-0.0000001;i+)u=u*(-1)*x*x*(2*i-1)/(2*i+1);sum=sum+u;return sum;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;出于原题要求,没有在结果中进行改动。(三)第三题:编写程序,用二维数组存储 NN 整数矩阵,判断矩阵是否为对称矩阵(沿主对角线对称,N 大于3)?先输出该矩阵,然后输出判断结果。再将次对角线上的N个元素加到主对角线上N个元素,保持矩阵的对称性,并再输出该矩阵。(可以不用函数方法)评分标准:该题共 20 分。( 1 ) 数据定义和产生正确( 5 分)( 2 ) 判断对称矩阵的控制结构正确( 5 分)( 3 )主对角线与次对角线元素相加正确(5分)( 4 )输出结果正确( 5 分) 1.源程序代码: #include<iostream>using namespace std;void chuli(int num44);int panduan(int num44);int main()int a44= 1,2,3,4,2,3,4,1,3,4,1,2,4,1,2,3;int b44=3,4,3,4,2,3,8,1,4,4,3,2,7,1,2,3;chuli(a);chuli(b);return 0;int panduan(int num44)int i,j,x=0;for(i=1;i<4;i+)for(j=0;j<i;j+)if(numij=numji)x+;if(x>5)return 1;return 0;void chuli(int num44)int i,j;cout<<"矩阵为:n"for(i=0;i<4;i+)for(j=0;j<4;j+)cout<<numij<<" "cout<<endl;if(panduan(num)!=0)cout<<"该矩阵是对称的,改变后结果为:n"for(i=0;i<4;i+)numii=numii+numi3-i;for(i=0;i<4;i+)for(j=0;j<4;j+)cout<<numij<<" "cout<<endl;elsecout<<"该矩阵不是对称的n"2.实验结果:3.问题分析:对题意的理解不是很明确。按照自己的理解进行了编写:定义了两个固定的函数,一个为对称的,另一个不对称;编写了一个自定义函数判断矩阵是否对称;然后对这两个矩阵分别进行判断,若不对称则输出不对称,若对称则进一步进行处理将次对角线元素加到主对角线。(四)第四题:编写函数,判断任意一个字符串是否为对称字符串,例如:对称字符串为 “I a I” 、 “POP” 、 “21+12” 。要求编写主函数加以测试。判断函数原型如下:int panduan(char ccc);评分标准:该题共 20 分。( 1 ) 字符串数据定义和产生正确( 5 分)( 2 ) 判断函数编写正确( 10 分)( 3 ) 测试函数编写正确,并输出结果( 5 分) 1.源程序代码:#include<iostream>using namespace std;int panduan(char ccc);/自定义函数判断字符串ccc是否对称int main()char in40;cout<<"请输入字符:"cin.get(in,39);if(panduan(in)=1)cout<<"您输入的"<<in<<"是对称字符!"<<endl;elsecout<<"您输入的"<<in<<"不是对称字符!"<<endl;return 0;int panduan(char ccc)int m=strlen(ccc);/获取字符串长度int i,x=0;for(i=0;i<(m+1)/2;i+)/逐一判断对称位置字符是否相同if(ccci=cccm-i-1)x+;if(x>=m/2)/对称位字符全部分别相同时输出是return 1;return 0;2.实验结果:考虑到奇数个字符、偶数个字符、数字形式字符、字母、以及多种不对称的形式进行检测:(1)数字:(2)字母:(3)首尾字符不对称:(4)中心字符不对称:(5)含空格字符串:五、第五题:编写函数: int count(int m); 该函数完成如下功能:输入一个整数 m ,统计并返回 m 左端连续相同数字的个数。如: 2220511 左端连续相同数字 2 的个数是 3 ; -923000 左端连续相同数字 9 的个数是 1 。编写主程序,测试该函数。评分标准:(1) 数据类型、程序控制结构使用正确( 5 分)(2) 函数的定义和调用方确( 5 分)(3) 程序结构规、 清晰、合理( 5 分)(4) 运行结果正确( 5 分)1.源程序代码:#include<iostream>using namespace std;int count(int m);int main()int m;cout<<"请输入一个整数:"cin>>m;if(m<0)m=-m;/取绝对值cout<<count(m)<<endl;return 0;int count(int m)/读取得到最高位数字;判断连续该数字的个数;输出个数int n,u=m,num10;for(n=0;u>=1;n+)numn=u%10;u=u/10;cout<<"左端连续相同数字"<<numn-1<<"的个数为"int i=1;while(numn-i=numn-i-1)