西安交大C程序设计作业

合集下载

西安交大C++程序设计第九章作业

西安交大C++程序设计第九章作业

西安交大C++程序设计第九章作业(总20页)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March西安交通大学实验报告课程__计算机程序设计__实验名称__继承__第 1 页共页系别____ ______ 实验日期 2014 年 5 月日专业班级__ ___组别_____________ 实验报告日期 2014 年月日姓名___ ______学号_ _ 报告退发 ( 订正、重做 )同组人_________________________________ 教师审批签字一、实验目的熟练继承的用法,进一步训练类的编程,并练习不同继承方式下对基类的成员的访问的控制。

二、实验内容(一)第一题:从类Person中派生出一个教师类,新增的属性有:专业、职称和主讲课程(一门),并为这些属性定义相应的方法。

1.源程序代码:#include<iostream>using namespace std;class Person{protected:char *Name;char Sex;int Age;public:Person(){Name="csj";Sex='M';Age=18;}Person(char *name,char sex,int age){Register(name,sex,age);}~Person(){delete []Name;}void Register(char *name,char sex,int age){int m=strlen(name);Name=new char[m+1];strcpy(Name,name);Sex=sex;;Age=age;}void print(){cout<<"姓名:"<<Name<<"\t性别:"<<Sex<<"\t年龄:"<<Age<<endl;}};class Teacher:public Person{protected:char *zhuanye;char *zhicheng;char *course;public:Teacher();Teacher(char*,char,int,char*,char*,char*);void Register(char*,char,int,char*,char*,char*);~Teacher();void print();};Teacher::Teacher(){Person::Register("罗先觉",'M',61);strcpy(zhuanye,"电气工程及其自动化");strcpy(zhicheng,"教授");strcpy(course,"电路");}Teacher::Teacher(char *name,char sex,int age,char *zy,char *zc,char *cor){Register(name,sex,age,zy,zc,cor);}void Teacher::Register(char *name,char sex,int age,char *zy,char *zc,char *cor) {Person::Register(name,sex,age);zhuanye=new char[strlen(zy)+1];strcpy(zhuanye,zy);zhicheng=new char[strlen(zc)+1];strcpy(zhicheng,zc);course=new char[strlen(cor)+1];strcpy(course,cor);}Teacher::~Teacher(){delete []zhuanye;delete []zhicheng;delete []course;}void Teacher::print(){cout<<"姓名:"<<Name<<"\t性别:"<<Sex<<"\t年龄:"<<Age<<"\t 专业"<<zhuanye<<"\t职称:"<<zhicheng<<"\t主讲课程:"<<course<<endl;}int main(){Person person;("csj",'M',18);();Teacher teacher("lll",'M',56,"math","jiaoshou","gaoshu");();("某某",'M',58,"数学","教授","高等数学");();return 0;}2.实验结果:(二)第二题:第二题:许多研究生既有学生的属性,又有教师的属性。

西安交通大学C++程序设计第三章作业

西安交通大学C++程序设计第三章作业

西安交通大学实验报告课程_计算机程序设计_实验名称_控制结构_第 1 页共 15页系别_______________ 实验日期 2014年 3 月 10 日专业班级___ ____组别_____________ 实验报告日期 2014年 3 月 15 日姓名_ ___ __学号____ 报告退发 ( 订正、重做 ) 同组人_________________________________ 教师审批签字一、实验目的:掌握C++语言中的基本控制结构:顺序结构、条件结构、循环结构(do……while ;for ;while等)的使用,尤其是多重循环和条件结构的复合。

二、实验内容:1.第一题:编写程序求斐波那契数列的第n项和前n项和。

斐波那契数列是形如:0、1、1、2、3、5、8、13、……其通项为:F0=0; F1=1; Fn=Fn-1+Fn-2.(1)要点分析:步骤一:输入需要计算的项数n;步骤二:判断输入的项数是否合理,若否,返回第一步;步骤三:从第一项逐项加到第n项;步骤四:输出计算结果;步骤五:选择是否继续运算,若是,返回第一步;否则结束程序。

(2)源程序代码:#include<iostream>using namespace std;int main(){int an_1=0,ch,an=1,S=0,i=1,m=0;double n;//将n定义为双精度以便检验输入是否合理;do//开始循环体;{cout<<"请输入一个正整数n,将计算数列的前n项和:";cin>>n;while(n<=0||n!=(int)n)//对n输入有误的重新输入;{cout<<"您输入的不是正整数!请重新输入:";cin>>n;}while(i<n)//求前n项和,由1到n逐项相加;{S=S+an;m=an;//将an储存于m中;an=an+an_1;an_1=m;//将原来的an赋予an_1;i=i+1;}cout<<"前"<<n<<"项和为:"<<S<<";第"<<n<<"项为:F("<<n-1<<")="<<m<<endl;cout<<"如需继续计算请按1;如要结束请按2!";cin>>ch;}while(ch==1);//选择是否再进行新一轮运算;cout<<"运行结束!";return 0;}(3)实验结果:测试了输入合理和输入不合理以及多次输入的功能:(4)问题分析:不知道第n项是Fn还是Fn-1,最终按照Fn-1算了。

西安交大C 程序设计第四章作业2汇总

西安交大C  程序设计第四章作业2汇总

西安交通大学实验报告课程__计算机程序设计__实验名称__结构体__第 1 页共 29 页系别____ ______ 实验日期 2014 年 4月 26日专业班级__ ____组别_____________ 实验报告日期 2014 年 4 月 27日姓名___ _______学号_ _报告退发 ( 订正、重做 )同组人_________________________________ 教师审批签字一、实验目的掌握结构体的使用方法,学会用结构体的方法定义变量并对变量进行处理;掌握枚举法的使用方法。

二、实验内容(一)第一题: 1、输入某小组5个人的姓名、性别、出生年份等信息,统计男女人数以及1988年以后(含1988年)出生的人数。

1.源程序代码://输入某小组个人的姓名、性别、出生年份等信息,统计男女人数以及年以后(含年)出生的人数。

#include<iostream>using namespace std;struct xinxi{char name[20];char sex;int year;};//定义结构体xinxi,包含名称(字符串)、性别(字符)、出生时间(整数)三个变量int main(){xinxi cy[5];int i,s=0,m=0;for(i=0;i<5;i++){cout<<"请输入第"<<i+1<<"个成员的信息:\n姓名:";cin>>cy[i].name;cout<<"性别(男的输入“b”,女的输入“g”):";cin>>cy[i].sex;cout<<"出生年份:";cin>>cy[i].year;}cout<<"您输入的是:\n";for(i=0;i<5;i++)//显示输入内容cout<<cy[i].name<<"\t"<<cy[i].sex<<"\t"<<cy[i].year<<endl;for(i=0;i<5;i++)//统计男女、之后个数{if(cy[i].sex=='b')s++;if(cy[i].year>=1988)m++;}cout<<"其中男生人数为:"<<s<<"\t女生人数为:"<<5-s<<endl;cout<<"1988年以后(含)出生的的人数为:"<<m<<endl;return 0;}2.实验结果:3.问题分析:略。

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

西安交大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: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没有非平凡因子!”而非仅仅输出空白则更好。

西安交大C++程序设计第二章作业

西安交大C++程序设计第二章作业

西安交大C++程序设计第二章作业(总7页)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March西安交通大学实验报告课程计算机程序设计_实验名称基本数据类型的熟悉_第 1页共12页系别__ ___________ 实验日期 2014 年 3月 4日专业班级___ ____组别_____________ 实验报告日期 2014年3月 8 日姓名___ ____学号 __ 报告退发 ( 订正、重做 )同组人_________________________________ 教师审批签字一.实验目的1.通过实验熟悉整数类型变量、字符变量、双精度类型变量等基本数据类型的使用;2.学会小数的取整(通过强制类型转换的方法)、整数的求余、表达式中算术运算符的使用;3.条件语句(if else)、循环语句(while)的使用。

二.实验内容(一)第一题:编写一个程序,要求完成以下要求:1)提示用户输入任意的三个小数;2)显示这三个小数;3)将这三个小数相加并显示结果;4)将结果四舍五入转换成整数并显示。

1.要点分析:第一步:输入三个小数;第二步:显示所输入的小数;第三步:求和并显示;第四步:对所求得的和取整(强制类型转换,将双精度类型变量转换为整数变量),再用和减去该数从而得到和的小数部分;第五步:通过判断小数部分的大小(是>=还是<)决定是“四舍”还是“五入”,根据不同的情况输出“四舍五入”所得的结果(小于则直接输出取整所得;大于等于则取整后加1);第六步:选择是否再次开始,若是,循环前五步;否则,结束程序。

2.源程序代码:#include<iostream>using namespace std;int main(){double a,b,c,sum,left;验结果:(二)第二题:输入两个角度值x、y,计算如下式子的值(C++中的三角函数的输入是弧度):1.要点分析:第一步:输入两个角度值;第二步:判断所输入的值下式子是否有意义(即x与y之和是不是90+n*360),若无,提示重新输入直至正确;若有意义,进行下一步;第三步:将所输入的角度制下的值转化为弧度制下的值(需要用到pi,只能预先输入较为精确的pi值);第四步:计算并输出结果。

西安交大C++程序设计第十一章作业

西安交大C++程序设计第十一章作业

西安交⼤C++程序设计第⼗⼀章作业西安交通⼤学实验报告课程计算机程序设计实验名称_标准库和输⼊输出流_第 1页共25页系别____ ______ 实验⽇期 2014 年 6 ⽉ 7 ⽇专业班级__ ____组别__ ________ 实验报告⽇期 2014 年 6 ⽉ 7 ⽇姓名___ ______学号_ _报告退发 ( 订正、重做 )同组⼈_________________________________ 教师审批签字⼀、实验⽬的掌握C++语⾔输⼊和输出操作的⽅法、流和流类库的使⽤⽅法。

⼆、实验内容(⼀)第⼀题:编写⼀个程序,分别⽤不同的域宽(0~10)打印出整数12345和浮点数1.2345。

观察当域宽⼩于数值的实际需要域宽时会发⽣什么状况。

1.源程序代码:#includeusing namespace std;void main(){int WIDTH;for(WIDTH=10;WIDTH>0;WIDTH--){cout<<"域宽、精度为"<cout.precision(WIDTH);//全局作⽤cout.width(WIDTH);//只起⼀次作⽤cout<<12345<<"\n"<<1.2345<}}2.实验结果:3.结论:(1)域宽不够时会⾃动补⾜。

(2)精度只需⼀次定义则⼀直有效。

(3)域宽需要每次输出时均进⾏定义(⼆)第⼆题:编写⼀个程序,将华⽒温度0度~212度转化为浮点型摄⽒温度,浮点精度为3.转换公式为如下:Celsius=5.0/9.0*(Fahrenheit-32);输出⽤两个右对齐序列,摄⽒温度前⾯加上正负号。

1.源程序代码:#includeusing namespace std;void main(){double Celsius,Fahrenheit;cout.precision(3);cout<<"转换结果为:\n";for(Fahrenheit=0;Fahrenheit<=212;Fahrenheit++){cout.unsetf(ios::showpos);Celsius=5.0/9.0*(Fahrenheit-32);cout<<"华⽒"<cout.setf(ios::showpos);cout<}}2.实验结果:(三)第三题:编写⼀个程序,打印出ASCⅡ字符集中码值为33~126的字符的ASCⅡ码表。

西安交大C程序设计作业

西安交大C程序设计作业

西安交大C程序设计作业文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]西安交通大学实验报告课程__计算机程序设计__实验名称__指针与函数__第 1 页共 25 页系别____ _______ 实验日期 2014 年 4月 18日专业班级__ ____组别_____________ 实验报告日期 2014 年 4 月 19日姓名___ _______学号_ _报告退发 ( 订正、重做 )同组人_________________________________ 教师审批签字一、实验目的学会使用递归函数和函数重载,进一步熟练动态分配等指针使用方法。

二、实验内容(一)第一题:1、(必做题)使用递归算法编写如下程序:对于任意给定的实数 X 和整数k( k>0) ,计算 Xk 。

1.源程序代码:#include<iostream>using namespace std;double yunsuan(double x,int k);验结果:(1)输入X正实数:(2)输入X正整数:(3)输入x为负数:(4)输入k为负数:3.问题分析:该函数的循环方式是:x^k=x*x^(k-1).设f(x,k)=x^k,那么就有f(x,k)=f(x,k-1)*x.而其结束递归的条件是k=1,此时有f(x,1)=x,由此给出初值。

(二)第二题:使用递归算法编写求斐波那契数列的第 n 项的函数,并编出主函数进行验证。

1.源程序代码:#include<iostream>using namespace std;int fib(int n)验结果:(1)输入项数正确(0或正整数):(2)输入项数有误(负数):3.问题分析:该题的递归方式:第n项为之前两项之和,即:fib(n)=fib(n-1)+fib(n-2),由此递归至fib(1)和fib(2)时结束递归,而fib(1)和fib(2)已知。

西安交大C++程序设计第六章作业

西安交大C++程序设计第六章作业

西安交大C++程序设计第六章作业(总11页)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March西安交通大学实验报告课程__计算机程序设计__实验名称_ 指针__第 1 页共 12 页系别____ _______ 实验日期 2014 年 4月 12日专业班级_ ___组别_____________ 实验报告日期 2014 年4 月 12日姓名__ _______学号_ _ 报告退发 ( 订正、重做 )同组人_________________________________ 教师审批签字一、实验目的掌握指针的使用方法,学会使用指针来处理数组、字符串问题,体会使用指针的优点。

二、实验内容(一)第一题:编写程序,将某一个输入的位数不定的正整数按照标准的三位分节的格式输出,例如,当用户输入时,程序输出82,668,634.1.源程序代码:#include<iostream>using namespace std;int main(){int n;cout<<"请输入正整数:";cin>>n;int m,x;for(m=0,x=n;x>=1;m++)验结果:(二)第二题:用指针编写一个程序,当输入一个字符串后,要求不仅能够统计其中字符的个数,还能分别指出其中的大、小写字母、数字及其他字符的个数。

1.源程序代码:#include<iostream>using namespace std;int main(){char u[51];cout<<"请输入字符串:\n";(u,50);int i;int a=0,b=0,c=0,d=0;int n=strlen(u);for(i=0;i<n;i++)验结果:(三)第三题:编写一个函数,用于将一个字符串转换成整型数值。

西安交通大学《程序设计基础》作业考核试题

西安交通大学《程序设计基础》作业考核试题

单选题(共30 道试题,共60 分。

)得分:521. 若有说明int a[3][4];则a数组元素的非法引用是(D)。

A. a[0][2*1]B. a[1][3]C. a[4-2][0]D. a[0][4]满分:2 分得分:22. 函数rewind的作用是(A)。

A. 使位置指针重新返回文件的开头B. 将位置指针指向文件中所要求的特定位置C. 使位置指针指向文件的末尾D. 使位置指针自动移至下一个字符位置满分:2 分得分:23. 结构体类型的定义允许嵌套是指(C)。

A. 成员是已经或正在定义的结构体型B. 成员可以重名C. 结构体型可以派生D. 定义多个结构体型满分:2 分得分:04. 下面有关for循环的正确描述是(D)。

A. for循环只能用于循环次数已经确定的情况B. for循环是先执行循环循环体语句,后判断表达式C. 在for循环中,不能用break语句跳出循环体D. for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来满分:2 分得分:25. C语言中,定义结构体的保留字是(B)。

A. unionB. structC. enumD. typedef满分:2 分得分:26. 以下运算符中,优先级最高的运算符是(C)。

A. ||B. %C. !D. ==满分:2 分得分:27. 以下叙述中错误的是(D)。

A. 二进制文件打开后可以先读文件的末尾,而顺序文件不可以B. 在程序结束时,应当用fclose函数关闭已打开的文件C. 在利用fread函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据D. 不可以用FILE定义指向二进制文件的文件指针满分:2 分得分:28. 在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是(B)。

A. 地址传递B. 单向值传递C. 由实参传给形参,再由形参传回实参D. 传递方式由用户指定满分:2 分得分:29. 若k为int型变量,则以下程序段的执行结果是(B)。

西安交大C++程序设计第四章作业

西安交大C++程序设计第四章作业

西安交通大学实验报告课程_计算机程序设计_实验名称_数组与结构体_第 1 页共 15页系别_______________ 实验日期 2014年 3 月 18 日专业班级___ ___组别_____________ 实验报告日期 2014年 3 月 22 日姓名__ __ __学号____ 报告退发 ( 订正、重做 )同组人_________________________________ 教师审批签字一、实验目的:掌握数组与字符串的输入方法,包括一维数组、二位数组,不含空格的一个字符串以及含空格的多个字符串的输入以及处理。

二、实验内容:1.第一题:编写一个程序将给出的矩阵转置。

(1)源程序代码:#include<iostream>using namespace std;int main(){int jz[4][4]={{4,6,8,9},{2,7,4,5},{3,8,16,15},{1,5,7,11}};int zz[4][4];int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++){zz[i][j]=jz[j][i];cout<<zz[i][j]<<" ";}cout<<endl;}return 0;}(2)实验结果:2.第二题:改写例4-5冒泡排序程序,由每轮挑选最小元素改为每轮挑选最大元素。

(必做题)(1)源程序代码:#include<iostream>using namespace std;int main(){const int COUNT=16;int list[COUNT]={503,87,512,61,908,170,897,275,653,426,154,509,612,677,765,703};for(int i=COUNT-1;i>=0;i--){for(int j=0;j<i;j++){if(list[j+1]<list[j]){int tmp=list[j+1];list[j+1]=list[j];list[j]=tmp;}}}cout<<"结果是:"<<endl;for(int k=0;k<16;k++)cout<<list[k]<<" ";cout<<endl;return 0;}(2)实验结果:3.第三题:编写程序:输入N(例如N为20)个整数,统计输出负数的个数、正整数的个数及0的个数;计算输出所有负数之和、所有正整数之和。

西安交大C 程序设计第十章作业

西安交大C  程序设计第十章作业

_ 报 告 退 发 ( 订正 、 重做 )
同 组 人_________________________________ 教 师 审 批 签 字
一、实验目的
理解掌握多态的使用方法,学会用虚函数。
二、实验内容
(一)第一题:定义一个类 Base,该类含有虚函数 display,然
后定义它的两个派生类 FirstB 和 SecondB,这两个派生类均含有
double sidelength; public:
Square(int x=0,int y=0,double s=0.0):Rectangle(x,y) {
Seta(s); } void Seta(double s) {
sidelength=s; } virtual double Area() const {
virtual void display() {
cout<<"sound!sound!sound!"; } }; class FirstB:public Base
{ public:
void virtual display() {
cout<<"miao!miao!miao!"; } }; class SecondB:public Base { public: void virtual display() {
#endif
//square.h正方形类,几乎跟矩形类一样而已
#ifndef SQUARE_H #define Square_H #include"rectangle.h" #include<iostream> using namespace std; class Square:public Rectangle {

西安交大钱班第一次C 作业(DOC)

西安交大钱班第一次C 作业(DOC)

西安交通大学实验报告课程_计算机程序设计_实验名称C++集成开发环境的使用第 1 页共 12 页系别钱学森班_实验日期 201x 年 2 月 24日专业班级 _钱学森班____ 组别__________ 实验报告日期 201x 年 2 月 24日姓名 _ ___ __学号 21xxxxxxxx_ 报告退发 ( 订正、重做 ) 同组人_________________________________ 教师审批签字∙实验目的(1)掌握集成开发环境的使用方法;(2)了解C++程序的基本特点。

(3)掌握变量与常量的定义与使用方法;(4)掌握基本数据类型和表达式的使用方法,掌握C++的基本语句。

理解结构化和面向对象程序设计的基本思想和有关概念,掌握C++程序的基本框架和上机调试计算机程序的过程。

∙实验内容(-)实验题目一:编写一个计算三角形面积的程序。

1.要点分析1.begin2.输入底边长L和高H3.计算输出4.end2.程序源代码#include<iostream>using namespace std;int main(){int L,H,S;cout<<"请输入底边长和高后按回车键"<<endl;cin>>L>>H;S=(L+H)/2;cout<<"面积为:"<<S<<endl;return 0;}3.实验结果(二)输入长、宽、高(为实数),计算长方体的表面积和体积。

1.要点分析1.begin2.输入长宽高3.计算输出表面积和体积4.end2.程序源代码#include<iostream>using namespace std;int main(){int A,B,C,S,V;cout<<"请输入长方体的长宽高"<<endl;cin>>A>>B>>C;S=(2*((A*B)+(B*C)+(A*C)));V=(A*B*C);cout<<"S"<<"="<<S<<endl;cout<<"V"<<"="<<V<<endl;return 0;}3.实验结果(三)编写程序:实现整数拼接。

西安交大C 程序设计 作业

西安交大C 程序设计 作业

西安交通大学实验报告课程__计算机程序设计__实验名称_____函数______第 1 页共 18 页系别____ _______ 实验日期 2014 年 3月 28日专业班级____组别_____________ 实验报告日期 2014 年 3 月 29日姓名___ _______学号_ _报告退发 ( 订正、重做 )同组人_________________________________ 教师审批签字一、实验目的掌握函数的概念,使用函数的优越性,定义函数的方法以及调用函数的方法。

二、实验内容(一)第一题:编写字符串反转函数mystrrev(),该函数的功能是将指定字符串中的字符顺序颠倒排列。

然后再编写主函数验证之。

1.源程序代码:#include<iostream>#include<cstring>using namespace std;void mystrrev(char string[]);验结果:由于函数中有“for(int i=0;i<m/2;i++)”的语句,为避免该循环条件不准确,对奇数和偶数个的字符均进行了检测,并有对含空格和符号的字符串的检测:(1)奇数:(2)偶数:(3)含空格字符串:3.问题分析:(1)起初没有用“.get”,不够全面;(2)如果一直执行到i=m的话,就等于反转两次又回到了原来的字符串顺序,因而要考虑只执行一半,而由于字符串长度有奇偶的问题,所以容易错误;(3)第一次编写时,没有写string[m]='\0';这使得输出结果混乱。

(二)第二题:编写一组求数组中最大元素和最小元素的函数。

其函数原型为:int imax(int array[],int count);int imin(int array[],int count);1.源程序代码:#include<iostream>using namespace std;int imax(int array[],int count);验结果:3.问题分析:(1)起初误将:cout<<"最大值为:"<<imax(num,n)<<endl;cout<<"最小值为:"<<imin(num,n)<<endl;写成imin、imax,不能执行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西安交大C程序设计作业文件管理序列号:[K8UY-K9IO69-O6M243-OL889-F88688]西安交通大学实验报告课程__计算机程序设计__实验名称__指针与函数__第 1 页共 25 页系别____ _______ 实验日期 2014 年 4月 18日专业班级__ ____组别_____________ 实验报告日期 2014 年 4 月 19日姓名___ _______学号_ _ 报告退发 ( 订正、重做 )同组人_________________________________ 教师审批签字一、实验目的学会使用递归函数和函数重载,进一步熟练动态分配等指针使用方法。

二、实验内容(一)第一题:1、(必做题)使用递归算法编写如下程序:对于任意给定的实数 X 和整数k( k>0) ,计算 Xk 。

1.源程序代码:#include<iostream>using namespace std;double yunsuan(double x,int k);//递归函数用于计算x^kint main(){double x;int k;cout<<"请输入实数x:";cin>>x;cout<<"请输入正整数k:";cin>>k;while(k<=0)//判断输入的k是否满足要求,若否则提示输入错误并重新输入{cout<<"您的输入有误!请输入正整数:";cin>>k;}cout<<"计算结果是:"<<x<<"^"<<k<<"="<<yunsuan(x,k)<<endl;//输出运算结果return 0;}double yunsuan(double x,int k){if(k==1)//k=1时不再进行循环,输出值为xreturn x;else{double s=x*yunsuan(x,k-1);//对于k大于1的情况,进入下一循环return s;}}2.实验结果:(1)输入X正实数:(2)输入X正整数:(3)输入x为负数:(4)输入k为负数:3.问题分析:该函数的循环方式是:x^k=x*x^(k-1).设f(x,k)=x^k,那么就有f(x,k)=f(x,k-1)*x.而其结束递归的条件是k=1,此时有f(x,1)=x,由此给出初值。

(二)第二题:使用递归算法编写求斐波那契数列的第 n 项的函数,并编出主函数进行验证。

1.源程序代码:#include<iostream>using namespace std;int fib(int n) //递归函数,计算斐波那契数列的第n项{if(n==0)//对于n=0不再进行递归,返回值0return 0;else{if(n==1)return 1;//对于n=1不再进行递归,返回值1else{int s=fib(n-1)+fib(n-2);//将计算第n项归为计算第n-1和n-2项return s;}}}int main(){int n;cout<<"请输入要计算的项数(非负整数):";//提示输入项数,首项为第0项cin>>n;while(n<0)//对于不符合要求的输入值重新输入{cout<<"输入有误,请输入非负整数:";cin>>n;}cout<<"计算结果是:fib["<<n<<"]="<<fib(n)<<endl;//输出计算结果return 0;}2.实验结果:(1)输入项数正确(0或正整数):(2)输入项数有误(负数):3.问题分析:该题的递归方式:第n项为之前两项之和,即:fib(n)=fib(n-1)+fib(n-2),由此递归至fib(1)和fib(2)时结束递归,而fib(1)和fib(2)已知。

(三)第三题:重载判断两个数值大小的函数 max ,这些数值可能是整型数、实型数和字符型,函数的返回值为两个数值中的最大值。

1.源程序代码:#include<iostream>using namespace std;double zhuanhuan(char *c)//为了避免语句的重复,将字符与数值转换部分作为函数{int i=0;double x=0;if(c[0]=='-'||c[0]=='+')//若首字符为‘-’或者‘+’则跳过i++;while(c[i]!='\0'&&c[i]!='.')//对于整数部分逐位累加,直至遇到小数点或者数字结束{x=x*10+(c[i]-'0');i++;}if(c[i]=='.')//对于小数部分进行累加{double s;//s用来反映数字所在位置是小数点后第几位,就用该数乘以的负几次方(s)i++;//从小数点后的一位开始循环for(s=0.1;c[i]!='\0';i++){x=x+s*(c[i]-'0');s=s/10;}}if(c[0]=='-')//若为负数,则在上述计算基础上乘以-1得到最终值x=-x;return x;//返回x作为char c的对应的数值}int imax(int a,int b)//对整型数进行处理{if(a>=b)return a;return b;}double imax(double a,double b)//对实数进行处理{if(a>=b)return a;return b;}double imax(char *c,char *d)//对字符型进行处理{double x=zhuanhuan(c);double y=zhuanhuan(d);return (x>=y?x:y);}int main(){int n;cout<<"请选择您要输入的数的类型,\n如果是整型请输入,实数型输入,字符型输入:";cin>>n;while(n!=1&&n!=2&&n!=3){cout<<"输入有误!重新选择:";cin>>n;}int a[2];double b[2];char c[12],d[12];if(n==1)//处理整型数{cout<<"请输入两个数:";cin>>a[0]>>a[1];cout<<"最大值为:"<<imax(a[0],a[1]);}else{if(n==2)//处理实数{cout<<"请输入两个数:";cin>>b[0]>>b[1];cout<<"最大值为:"<<imax(b[0],b[1]);}else//处理字符型{cout<<"请输入第一个数:";cin>>c;cout<<"请输入第二个数:";cin>>d;cout<<"最大值为:"<<imax(c,d);}}cout<<endl;return 0;}2.实验结果:(1)输入整数型:(2)输入为实数:(3)输入为字符:正数:(带正号):(不带正号):整数:负数:3.问题分析:该题的重点在于字符型的处理。

在实验报告中,采取了两个数字逐个分开输入的方法,因而主要只需要判断开头是否为负号、中间是否有小数点并区别小数点前后处理方法的不同这几个问题。

如果能够一次性输入两个数中间用空格隔开的话,就需要判断空格的位置,然后对空格之后的部分再进行与前半部分相同的判断方法,显得更加麻烦。

对字符型的处理思路:首先判断首字符是不是“-”或者“+”,如果是的话,先跳过从第二个字符开始处理,在最终的结果中再乘以-1即可;然后对于接下来的整数部分进行累加,直到遇见小数点,若没有小数点则一直执行到字符结束;如果有小数点的话,对于小数点后的部分再进行累加得到结果。

四、第四题:编写一个函数,用于去掉字符串前面的空格,其原型为 :char *myltrim(char *string);其中参数 string 为字符串,返回值为指向 string 的指针。

1.源程序代码:#include<iostream>using namespace std;char *myltrim(char *string){int i=0,j=0;while(*(string+i)==' ')i++;do{*(string+j)=*(string+i);i++;j++;}while(*(string+i-1)!='\0');return string;}int main(){char string[41];cout<<"请输入字符串:";cin.get(string,40);cout<<"去掉开头的空格之后为:\n"<<myltrim(string)<<endl;return 0;}2.实验结果:为验证处理空格时仅是将开头处理而不处理中间空格:(1)中间无空格:(2)中间有空格:3.问题分析:曾经出现的问题:起初运行时发现,即使没有判断开头空格的程序,输出结果也是没有空格的,后来检查发现是输入语句没有写为cin.get导致空格不被录入。

五、第五题:用牛顿迭代法求任意一元方程: anXn+an-1Xn-1+......+a1X1+a0 = 0 的根。

提示:迭代公式:Xn+1 = Xn + f(Xn) / f'(Xn)结束迭代过程的条件为(|f(Xn+1)|<ε )与(|Xn+1 - Xn|<ε )同时成立,其中ε 为预先给定的精度要求。

1.源程序代码:#include<iostream>using namespace std;double cf(double x,int k)//乘方函数,输出结果为x的k次方{double s=1;while(k>0){s=s*x;k--;}return s;}double f(int n,double *a,double x)//计算函数值f(x)的函数{double sum=0;for(int i=0;i<n;i++){sum=sum+(*(a+i))*cf(x,i);}return sum;}double f_(int n,double *a,double x)//求导f_(x)函数{double sum=0;for(int i=1;i<n;i++){sum=sum+(*(a+i))*i*cf(x,i-1);}return sum;}double result(int n,double *a,double x) //求根函数{double u=0.00000001;//给定精确度double m;//设m为中间变量储存x,以便于进行循环条件的判断do{m=x;x=x-(f(n,a,x)/f_(n,a,x));}while(f(n,a,x)>=u||f(n,a,x)<=-u||x-m>=u||x-m<=-u);//循环直到达到精度return x;//返回最终计算结果}int main(){int n,i;cout<<"请输入最高项次数:";cin>>n;double *a=new double[n+1];//申请数组空间cout<<"请从低到高输入系数:";for(i=0;i<n+1;i++)cin>>*(a+i);double x=0;cout<<"计算结果为:"<<result(n+1,a,x)<<endl;delete a;//释放数组空间return 0;}2.实验结果:3.问题分析:思路分析:程序中用到的多个函数:乘方函数、计算f(x)、f_(x)的函数、自定义的求根的主体的函数、主函数。

相关文档
最新文档