西安交大C++程序的设计课外测验作业.docx
- 文档编号:12309422
- 上传时间:2023-04-18
- 格式:DOCX
- 页数:21
- 大小:268.39KB
西安交大C++程序的设计课外测验作业.docx
《西安交大C++程序的设计课外测验作业.docx》由会员分享,可在线阅读,更多相关《西安交大C++程序的设计课外测验作业.docx(21页珍藏版)》请在冰豆网上搜索。
西安交大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.问题分析: 题目的说法并不明确,难以理解,只能按照自己的理解做: 先要求输入一个递增数组;再输入要插入的数,然后将要插入项插到正确的位置并输出。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西安 交大 C+ 程序 设计 课外 测验 作业