西安交大C--程序设计第六章作业DOC
西安交大C--程序设计第六章作业DOC
西安交通大学实验报告课程计算机程序设计实验名称指针与函数第 1 页共 25 页系别实验日期 2014 年 4月 18日专业班级组别实验报告日期 2014 年 4 月 19日姓名学号_ _报告退发 ( 订正、重做 )同组人教师审批签字一、实验目的学会使用递归函数和函数重载,进一步熟练动态分配等指针使用方法。
二、实验内容(一)第一题:1、(必做题)使用递归算法编写如下程序:对于任意给定的实数 X 和整数k( k>0) ,计算。
1.源程序代码:<>;( k)递归函数用于计算x^k(){x;k;<<"请输入实数x:";>>x;<<"请输入正整数k:";>>k;(k<=0)判断输入的k是否满足要求,若否则提示输入错误并重新输入{<<"您的输入有误!请输入正整数:";>>k;}<<"计算结果是:"<<x<<"^"<<k<<"="<<()<<输出运算结果0;}( k){(1)1时不再进行循环,输出值为xx;{*(1)对于k大于1的情况,进入下一循环s;}}2.实验结果:(1)输入X正实数:(2)输入X正整数:(3)输入x为负数:(4)输入k为负数:3.问题分析:该函数的循环方式是:x^*x^(1).设f()^k,那么就有f()(1)*x.而其结束递归的条件是1,此时有f(x,1),由此给出初值。
(二)第二题:使用递归算法编写求斐波那契数列的第 n 项的函数,并编出主函数进行验证。
1.源程序代码:<>;( n)递归函数,计算斐波那契数列的第n项{(0)对于0不再进行递归,返回值00;{(1)1对于1不再进行递归,返回值1{(1)(2)将计算第n项归为计算第1和2项s;}}}(){n;<<"请输入要计算的项数(非负整数):"提示输入项数,首项为第0项>>n;(n<0)对于不符合要求的输入值重新输入{<<"输入有误,请输入非负整数:";>>n;}<<"计算结果是:["<<n<<"]="<<(n)<<输出计算结果0;}2.实验结果:(1)输入项数正确(0或正整数):(2)输入项数有误(负数):3.问题分析:该题的递归方式:第n项为之前两项之和,即:(n)(1)(2),由此递归至(1)和(2)时结束递归,而(1)和(2)已知。
西安交大c++程序设计第六章作业
西安交大c++程序设计第六章作业Document number:NOCG-YUNOO-BUYTT-UU986-1986UT西安交通大学实验报告课程__计算机程序设计__实验名称__指针与函数__第 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 程序设计教程 - 西安交通大学共25页文档
语句序列可以是一个语句,也可以是复合语句结构(分程序)
6
分程序
{ <局部数据变量说明部分> <执行语句段>
}
▪ 分程序在语法上是一个整体,相当于一个语句。 ▪ 分程序中也可以再嵌套新的分程序,用以构成更加复杂
的控制结构。
7
选择结构(之二)
▪ 多路(开关)选择语句 :
switch(整数表达式)
{ case 数值1: 语句序列1; …... case 数值n: 语句序列n; [default : 语句序列n+1;]
条件?
不成立
9
循环结构(之二)
▪ for语句用来实现计数循环: for (<表达式1>; <表达式2>; <表达式3>)
<循环体>
10
C++数据类型的分类
11
类型不同的数据之间的混合算术运算
▪ 不同类型的数据在参加运算之前会自动转换成 相同的类型, 然后再进行运算。
▪ 转换规则
• 转换的原则是由低级向高级转换 char -> int -> float -> double
化)处理,最后到求解域中只是比较简单的编程问题。
20
基本思想和方法
▪ 基本思想
• 从问题本身开始,经过逐步求精,将解决问题的步骤分解为由 基本程序结构模块组成的结构化程序框图,据此编写程序。
▪ 基本方法
• 从题目本身开始, 找出解决问题的基本思路, 将其用结构化框 图(可能是非常粗糙)表示。
• 对框图中的比较抽象的、用文字描述的模块进一步分析细化, 结果仍用结构化框图表示。
23
结束语
c 程序设计教程习题6_8章参考答案
习题及实验解答第六章一、选择题1、应为4(无正确选项)2、D3、B C4、D5、A6、A7、C8、B9、A 10、A二、程序填空1、stu[i].score k=j p[k]=p[i] p[i]=temp2、p!=NULL p->data p->next3、struct node * s->data=ch r=s NULL三、编程题1、#include "iostream.h"struct staff{char num[6];char name[8];float salary[3]; //分项工资float gs; //实得工资}s[100];void main( ){int i,j,n;cin>>n; /*输入职工人数*/for(i=0;i<n;i++){cin>>s[i].num>>s[i].name;for(j=0;j<3;j++)cin>>s[i].salary[j];}cout<<"NO. salary\n";for(i=0;i<n;i++){s[i].gs= s[i].salary[0]+ s[i].salary[1]- s[i].salary[2] ;cout<<s[i].num<<'\t'<<s[i].gs<<endl;}}2、#include "iostream.h"#include "stdio.h"struct str{char ch;struct str *next;};void main(){char s[100];int i=0,num=0;struct str *insert,*head=NULL,*p;gets(s);while(s[i]!='\0'){insert=new str;insert->ch=s[i];if(head==NULL){head=insert ;head->next=NULL;}else{insert->next=head ;head=insert;}i++;}p=head;while(p!=NULL){if(p->ch>='A'&&p->ch<='Z')num++;cout<<p->ch;p=p->next;}cout<<endl<<"num="<<num<<endl; }3、#include "iostream.h"#include "stdio.h"struct node{char ch;int count;struct node *next;};void main( ){struct node *head,*p1,*p2,*insert;char c;head=NULL;while((c=getchar())!='\n'){p1=head;while(p1!=NULL&&c>p1->ch){p2=p1;p1=p1->next;}if(p1==NULL){insert=new node;insert->ch=c;insert->count=1;if(head==NULL){insert->next=head;head=insert;}else{insert->next=NULL;p2->next=insert;}}else if(c==p1->ch)p1->count++;else{insert=new node;insert->ch=c;insert->count=1;if(p1==head){insert->next=head;head=insert;}else{insert->next=p1;p2->next=insert;}}}p1=head;while(p1!=NULL){cout<<p1->ch<<' '<<p1->count<<'\t';p1=p1->next;}}4、#include "stdio.h"#include "iostream.h"struct node{int coef;int expn;struct node *next;};struct node *creat(){struct node *head,*tail,*p;int c,e;head=NULL;cin>>c>>e;while(c!=0) //约定以输入系数为0作为多项式的结束{p=new node;p->coef=c;p->expn=e;if(head==NULL)head=p;elsetail->next=p;tail=p;cin>>c>>e;}tail->next=NULL;return head;}void print(struct node *h){struct node *p;p=h;while(p!=NULL){if(p->next!=NULL)cout<<p->coef<<'x'<<p->expn<<'+';else{if(p->coef!=0&&p->expn!=0)cout<<p->coef<<'x'<<p->expn<<endl;else if(p->coef!=0)cout<<p->coef<<endl;elsecout<<endl;}p=p->next;}}void main(){struct node *h1,*p1,*h2,*p2,*h3,*p3,*newnode,*t3;h1=creat();print(h1);h2=creat();print(h2);p2=h2;h3=NULL;p1=h1;p2=h2;p3=h3;t3=h3;while(p1!=NULL&&p2!=NULL){newnode=new node;if(p1->expn>p2->expn){newnode->coef=p1->coef;newnode->expn=p1->expn;p1=p1->next;}else if(p1->expn<p2->expn){newnode->coef=p2->coef;newnode->expn=p2->expn;p2=p2->next;}else{newnode->coef=p2->coef+p1->coef;newnode->expn=p2->expn;p2=p2->next;p1=p1->next;}if(h3==NULL){h3=newnode;t3=newnode;}elset3->next=newnode;t3=newnode;}if(p1==NULL)t3->next=p2;elset3->next=p1;print(h3);}第七章一、选择题1、D2、B3、B4、A5、B6、A7、D8、B9、C 10、B二、程序填空1、fname, “w”(ch=getchar())!=’#’count++2、(c=fgetc(fp)) length++ length=03、”wb”&emp, sizeof(employer),1,fp fclose(fp) “rb”&emp, sizeof(employer),1,fp三、编程题1、#include "iostream.h"#include "stdlib.h"#include "stdio.h"void main(){FILE *fp1,*fp2;char ch;fp1=fopen("f1.txt","a");if(fp1==NULL){cout<<"can't open f1.\n";exit(1);}if((fp2=fopen("f2.txt","r"))==NULL){cout<<"can't open f2.\n";exit(1);}while(1){ch=fgetc(fp2);if(feof(fp2))break;cout<<ch;fputc(ch,fp1);}fclose(fp1);fclose(fp2);}2、#include "iostream.h"#include "stdlib.h"#include "stdio.h"void main(){FILE *fp;int a[10],i,j;if((fp=fopen("d1.dat","w"))==NULL){cout<<"can't open d1.\n";exit(1);}for(i=0;i<10;i++)a[i]=rand();for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(a[j]<a[j+1]){int t=a[j];a[j]=a[j+1];a[j+1]=t;}for(i=0;i<10;i++)fprintf(fp,"%d\t",a[i]);fclose(fp);}3、#include "iostream.h"#include "stdlib.h"#include "stdio.h"#include "string.h"void main(){FILE *fp;char s[100];int a[26]={0},i;if((fp=fopen("f.txt","r"))==NULL){cout<<"can't open f.\n";exit(1);}fgets(s,100,fp);strlwr(s);i=0;while(s[i]!='\0'){if(s[i]>='a'&&s[i]<='z')a[s[i]-'a']++;i++;}for(i=0;i<26;i++)cout<<(char)('a'+i)<<":"<<a[i]<<endl;fclose(fp);}4、#include "iostream.h"#include "stdlib.h"#include "stdio.h"struct student{char num[8];char name[20];double s[3],ave;}st[5];void main(){student stu[5];FILE *fp;int i;if((fp=fopen("stu","wb"))==NULL){cout<<"can't open stu.\n";exit(1);}for(i=0;i<5;i++){cin>>stu[i].num>>stu[i].name>>stu[i].s[0]>>stu[i].s[1]>>stu[i].s[2];stu[i].ave=(stu[i].s[0]+stu[i].s[1]+stu[i].s[2])/3;}fwrite(stu,sizeof(student),5,fp);fclose(fp);}第八章一、选择题1、A2、A3、C4、C5、6、D7、B8、D9、C 10、B11、D 12、A 13、B 14、D 15、D二、阅读程序写结果1、con1 calledcon2 calledcon3 calleda=0,b=0a=10,b=10a=10,b=202、0 51 52 53 54 53、4564、10,106,67,95、x=0x=10x=7三、编程题1、#include "iostream.h"#include "string.h"class Cat{private:int age;double weight;char color[10];public:void set(int a,double w,char c[10]){age=a;weight=w;strcpy(color,c);}void print(){cout<<"age:"<<age<<"\tweight:"<<weight<<"\color:"<<color<<endl;}int getage(){return age;}double getweight(){return weight;}char *getcolor(){return color;}};void main(){Cat c1;int a;double w;char c[10];cin>>a>>w>>c;c1.set(a,w,c);c1.print();}2、#include "iostream.h"#include "string.h"#include "stdio.h"class Mystring{private:char *str;public:Mystring(){ }Mystring(char *s){str=new char[100];strcpy(str,s);}void set(char *s){str=new char[100];strcpy(str,s);}void print(){cout<<str<<endl;}int length( ){int i=0;while(str[i]!='\0')i++;return i;}char *stringcat(Mystring s2){int i=0,j=0;while(str[i]!='\0')i++;while(s2.str[j]!='\0')str[i++]=s2.str[j++];str[i]='\0';return str;}};void main(){Mystring s1;char s[100];gets(s);s1.set(s);s1.print();gets(s);Mystring s2(s);s2.print();cout<<s1.stringcat(s2);}3、#include "iostream.h"#include "string.h"#include "stdio.h"class Point{private:double x,y;public:Point(){ }Point(double x1,double y1){x=x1;y=y1;}void set(double x1,double y1){x=x1;y=y1;}void move(double x1,double y1){x=x+x1;y=y+y1;}void print(){cout<<"("<<x<<","<<y<<")"<<endl;}double getx(){ return x;}double gety(){ return y;}};class Circle:public Point{private:double r;public:void set(double x1,double y1,double r1){Point::set(x1,y1);r=r1;}void print(){Point::print();cout<<r<<endl;}double getr(){ return r;}double s(){ return 3.14*r*r;}};void main(){Point p1;Circle c1;double x1,y1,r1;cin>>x1>>y1;p1.set (x1,y1);p1.print ();cin>>x1>>y1;p1.move (x1,y1);p1.print ();cin>>x1>>y1>>r1;c1.set (x1,y1,r1);c1.print ();cout<<c1.s()<<endl;}4、#include "iostream.h"class Point{private:int x,y;public:Point(){ }Point(int x1,int y1){ x=x1; y=y1;}friend Point operator+(Point &p1,Point &p2){Point p(p1.x+p2.x,p1.y+p2.y);return p;}void print(){cout<<"("<<x<<","<<y<<")"<<endl;}};void main(){Point p1(1,2),p2(2,3),p3;p3=p1+p2;p3.print();}5、#include "iostream.h"#include "stdio.h"#include "string.h"class Teacher{private:char name[20];public:void virtual input(){cout<<"input name:";cin>>name;}virtual double wage()=0;void virtual print(){cout<<name<<'\t';}};class Professor:public Teacher{private:int cnum; //课时数public:void input(){Teacher::input ();cout<<"input cnum:";cin>>cnum;}double wage(){return (3000+40*cnum);}void print(){Teacher::print ();cout<<wage()<<endl;}};class ViceProfessor:public Teacher {private:int cnum; //课时数public:void input(){Teacher::input ();cout<<"input cnum:";cin>>cnum;}double wage(){return (2500+30*cnum);}void print(){Teacher::print ();cout<<wage()<<endl;}};class Lecture:public Teacher{private:int cnum; //课时数public:void input(){Teacher::input ();cout<<"input cnum:";cin>>cnum;}double wage(){return (2000+25*cnum);}void print(){Teacher::print ();cout<<wage()<<endl;}};void main(){Teacher *t;Professor *p;ViceProfessor *vp;Lecture *l;char ptitle[20],ch;//职称do{cout<<"input ptitle(professor,viceprofessor or lecture):"<<endl;gets(ptitle);if(!strcmp(ptitle,"professor")){p=new Professor;t=p;}else if(!strcmp(ptitle,"viceprofessor")){vp=new ViceProfessor;t=vp;}else{l=new Lecture;t=l;}t->input ();t->print ();cout<<"continue(y/n)?";cin>>ch;}while(ch=='y');}。
mooc西安交通大学c#第六章答案
在下列代码中,有(B )处实现了拆箱。
int score=5;object o= score;o=10;score =(int)o;object oScore = score;A.2B.1C.0D.32单选(2分)下面控制对成员访问描述错误的是(B )A.如果一个类试图去使用另一个类的私有成员,则编译器会产生错误消息,提示这些私有成员无法访问B.如果类的成员没有用访问修饰符声明,则默认为共有的C.类的私有变量、属性和方法时类的对象无法直接访问的D.访问修饰符public和private控制着对类的变量、方法和属性的访问3单选(2分)有关this引用访问当前对象成员的描述正确的是(D)A.调用特定对象的的非静态方法时,方法体会显式用this引用这个对象的实例变量、其他方法和属性B.如果方法包含与字段同名的局部变量,则方法将引用字段而不是局部变量C.方法中的参数名或局部变量名应尽可能和字段名保持一致,方便阅读D.每个对象都可以用关键字this引用自己4单选(2分)有关构造函数的说法,错误的是()A.要重载构造函数,只需提供具有不同签名的多个构造函数声明B.每个类都必须至少有一个构造函数C.当实现类的方法时,应使用类的属性来访问类的私有数据,这样可以减少代码维护的工作量,降低出错的可能性D.不管是否显式的声明了构造函数,编译器都会创建默认的构造函数5单选(2分)有关析构函数和内存回收的描述正确的是(B)A.在内存回收期回收对象的内存之前,析构函数由内存回收期调用,执行终止清理工作。
析构函数和构造函数类似,可以重载B.析构函数没有任何修饰符、没有任何参数、也不返回任何值C.析构函数的名字由符号“~”加类名组成,其中“~”可以省略D.析构函数可以被自动调用,也可以主动显示的调用下面对readonly和const修饰的实例变量不正确的是(D )A.动态常量(readonly)的值则是在运行的那一刻才获得的,编译器编译期间将其标示为只读常量,而不用常量的值代替,这样动态常量不必在声明的时候就初始化,而可以延迟到构造函数中初始化。
西安交大嵌入式第三版第六章作业答案
Q6-6: a、0.11;b、0.56;c、0.55Q6-9:就绪态表示该进程已经可以执行,等待CPU调度等待态表示该进程的执行条件还不满足,还在等待I/O或其他进程的数据,或触发其运行的定时器尚未期满等Q6-12:进程超周期。
a、10;b、20;c、60Q6-13: 进程超周期为200增加一个P1示例后的CPU利用率= 4/200+4/200+1/10+2/40+6/50=0.31远没有达到RMS的CPU利用率的最小上界0.69,可以增加P1的另一个示例。
Q6-14:进程超周期为100,则 CPU利用率=0.1+0.18+0.1+0.1+x/25,如按5个任务的RMS的利用率的最小上界~74.3%计算x<(0.69-0.48)*25=6.5, P5的最大执行时间可选为6。
Q6-17应用RMS调度的时序图根据RMS的优先级定义,优先级P1>P2>P3,超周期为12EDF调度(该题的EDF和RMS的调度一样)Q6‐18第三个进程截止时限改为8,进程超周期为24采用RMS调度,优先级P1>P2>P3 ,具体调度如下图如果采用EDF调度,如进程距离截止时限一样近,则优先级按P1>P2>P3顺序 ,具体调度如下表所示:时间 运行中的进程 截止时限0 P11 P22 P3 P13 P1 P24 P25 P3 P16 P17 idle P2 ,P38 P2 P19 P110 P311 P3 P1,P212 P113 P214 idle P115 P1 P2,P316 P217 P3 P118 P119 P3 P220 P2 P121 P122 idle23 idle P1,P2,P3Q6‐21使用RMS调度,优先级顺序为P5 P1 P2 P4 P3,进程超周期为120时间 运行中的进程0 P51 P12 P13 P24 P25 P26 P27 P48 P49 P410 P411 P412 P313 P314 P315 P516 P317 P318 P319 P330 P531 P132 P140 P241 P242 P243 P245 P560 P561 P162 P163 P464 P465 P466 P467 P475 P580 P281 P282 P283 P291 P192 P1105 P5若增加上下文切换时间为1,则时间 运行中的进程0 P51 P52 P13 P14 P15 P26 P27 P28 P29 P210 P411 P412 P413 P414 P415 P516 P517 P418 P419 P320 P321 P322 P323 P324 P325 P326 P330 P531 P532 P133 P134 P140 P241 P242 P243 P244 P246 P560 P561 P562 P163 P164 P165 P466 P467 P468 P469 P470 P475 P576 P581 P282 P283 P284 P285 P290 P591 P592 P193 P194 P1105 P5106 P5Q6‐22使用RMS调度,超周期为100。
《大学C++程序设计教程》课后习题-西安交通大学
第1章 C++语言简介1.在计算机上调试运行本章的所有例题,熟悉实验环境和方法。
2.仿照例1-3,编写一个计算矩形面积的程序。
3.乘法计算器程序:可以根据例1-4自行改编。
4.修改例1-5的生日卡程序,使其能够输入和显示日期。
5.使用梯形法计算下式定积分的值。
⎰-+11sin dx e x x积分区域等分数可取为200,并将计算结果和手算结果相比较。
提示:e x 用math.h 中得库函数exp(x)表示。
第2章 控制结构1.编写计算阶乘 n!的程序。
2.编写程序求斐波那契数列的第n 项和前n 项之和。
斐波那契数列是形如0, 1, 1, 2, 3, 5, 8, 13, ...其通项为:F 0 = 0;F 1 = 1;F n = F n -1+F n -2。
3.编程求 ...)12()!(2)!2(...5423132arcsin 221252++++⋅⋅⋅⋅+⋅+≈+n n x n x x x x n n ,其中1<x 。
提示:结束条件可用 ε<u ,其中u 为通项。
4.求解猴子吃桃问题。
猴子在第一天摘下若干个桃子,当即就吃了一半,又感觉不过瘾,于是就多吃了一个。
以后每天如此,到第10天时,就只剩下了一个桃子。
请编程计算第一天猴子摘的桃子个数。
5.用弦截法求一元方程0)(=x f 在区间[]10,x x 之间的一个根。
提示:考虑当区间[]10,x x 足够小,在此区间中方程0)(=x f 仅有一个单根的情况,如图2.14所示。
图2.14 弦截法求方程的解此时如)(0x f 和)(1x f 异号,则可用两点间直线公式求出x 2:)()()(0101002x f x f x f x x x x ---= 然后用x 2代入原式求出f (x 2),判断f (x 2)与f (x 1)和f (x 0)中的哪一个同号,就用x 2和f (x 2)代替之,即如果f (x 2)和f (x 0)同号,就用x 2和f (x 2)代替x 0和f (x 0),反之用x 2和f (x 2)代替x 1和f (x 1),然后再继续上述过程直至|x 2-x 0|或|x 2-x 1|小于给定的误差控制值。
西安交通大学18年9月课程考试《程序设计基础(高起专)》作业考核试题
西安交通大学18年9月课程考试《程序设计基础(高起专)》作业考核试题work Information Technology Company.2020YEAR(单选题) 1: 要打开A盘上user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是()。
A: fopen("A.\user\abc.txt","r")B: fopen("A.\\user\\abc.txt","r+")C: fopen("A.\user\abc.txt","rb")D: fopen("A.\\user\\abc.txt","w")正确答案:(单选题) 2: 语句while(!E);中的表达式!E等价于()。
A: E==0B: E!=1C: E!=0D: E==1正确答案:(单选题) 3: 若执行fopen函数时发生错误,则函数的返回值是()。
A: 地址值B: 0C: 1D: EOF正确答案:(单选题) 4: 以下说法错误的是()A: C语言函数分为由系统提供的标准库函数和由程序员自己定义的函数B: 在主函数main()中可以调用其他函数,其他函数之间不可以相互调用C: C语言的程序是由一个函数或多个函数组成的D: 对于一个很大的任务,一般把它分解成若干源文件,分别编写和调试正确答案:(单选题) 5: 已知int j,i=1;执行语句“j=i++;”后,变量i的值是( )A: 1B: 2C: -1D: -2正确答案:(单选题) 6: 变量的指针,其含义是指该变量的()。
A: 值B: 地址C: 名D: 一个标志正确答案:(单选题) 7: 关于建立函数的目的,以下正确的说法是()。
A: 提高程序的执行效率B: 提高程序的可读性C: 减少程序的篇幅D: 减少程序文件所占内存正确答案:(单选题) 8: 以下对C语言函数的描述中,正确的是()。
交大程序设计C第六章自测题
题目1
C语句: int (* pa)[5]; 中,pa 表示的是一个()
A. 指针数组的名称
B. 指向整型变量的指针
C. 指向函数的指针
D. 指向包含5个整型元素的一维数组的指针正确
正确答案是:指向包含5个整型元素的一维数组的指针
题目2
两个指针变量不能()
A. 比较
B. 相加正确
C. 相减
D. 指向同一地址
正确答案是:相加
题目3
C 语句int *func(); 中,func 表示的是()
A. 指向整型变量的指针
B. 指向函数的指针
C. 指向数组的指针
D. 返回值为指针的函数名称正确
正确答案是:返回值为指针的函数名称
题目4
若C程序中作char str1[10], str2[10], *strp;说明,则交换str1和str2中的内容可用语句strp= str1; str1=str2; str2=strp;实现。
a. 对
b. 错正确
正确答案是:错
题目5
C语言用数组名表示数组的首地址,其值在程序运行期间固定不变。
a. 错
b. 对正确
正确答案是:对。
程序设计基础试题(西安交大)
五.编程题(40 %)
1)设有3x3矩阵
编写程序求解矩阵 ,即矩阵B为矩阵A及其转置阵AT之和。
2)编写程序求小于1000回文数。所谓回文数是指对一个数n,从左向右和从右向左读是相同的。
3)计算并输出一元二次方程的根,要求从键盘输入ax2+bx+c = 0的三个实数系数,计算该方程的实数根并输出。假定方程一定有两个实根(b2-4ac>=0)。要求必须用函数来计算方程的根。注:求平方根的函数是sqrt,包含在头文件math.h中。
西西西西安安安安交交交交通通通通大大大大学学学学考考考考试试试试题题专业班号专业班号专业班号期中期中期中期末期末期末语言规定函数返回值的类型是由语言规定函数返回值的类型是由语言规定函数返回值的类型是由returnreturnreturn语句中的表达式类型所决定语句中的表达式类型所决定语句中的表达式类型所决定调用该函数时的主调函数类型所决定调用该函数时的主调函数类型所决定调用该函数时的主调函数类型所决定调用函数时系统临时决定调用函数时系统临时决定调用函数时系统临时决定在定义该函数时所指定的函数类型所决定在定义该函数时所指定的函数类型所决定在定义该函数时所指定的函数类型所决定简单变量做实参时它与对应形参之间的数据传递方式是简单变量做实参时它与对应形参之间的数据传递方式是简单变量做实参时它与对应形参之间的数据传递方式是地址传递地址传递地址传递单向值传递单向值传递单向值传递由实参传给形参再由形参传回给实参由实参传给形参再由形参传回给实参由实参传给形参再由形参传回给实参由用户指定传递方式由用户指定传递方式由用户指定传递方式下述对下述对下述对cc语言字符数组的描述中错误的是语言字符数组的描述中错误的是语言字符数组的描述中错误的是字将数组可以存放字符串字将数组可以存放字符串字将数组可以存放字符串字符数组的字符串可以整体输入输出字符数组的字符串可以整体输入输出字符数组的字符串可以整体输入输出可以在赋值语句中通过赋值运算将可以在赋值语句中通过赋值运算将可以在赋值语句中通过赋值运算将对字符数组整体赋值对字符数组整体赋值对字符数组整体赋值不可以用关系运算符对字符数组中的字将串进行比较不可以用关系运算符对字符数组中的字将串进行比较不可以用关系运算符对字符数组中的字将串进行比较对两个数组对两个数组对两个数组aa做以下初始化做以下初始化做以下初始化
C第六章习题答案(大题非选做).docx
6-3 (1)#include <iostream>using namespace std;int main(void){int num[10], *p, i, j, temp; cout«**输入10 个整数"vvendl; for(i=0; i<10; i++){ cin»num[订;}for(i=0; i<10; ■++){// 0, 1_________ 8p = &num[i];for(j = i+1; J<10; j++){//1, 2・.・ 9 if(num[i]<=num[J]){p = &num[j];}}cout«*p«endl; temp = *p;*p = num[i]; num[i] = temp;}system(M pause f,);return 0;(2)注:N的数值可以在宏定义中更改,以下是W12的吋候:#include <iostream>using namespace std;#define N 12struct N0DE{int num;NODE *next;};int i:class List{private:NODE list[N];NODE *temp;public:List() {//设置一个结点组成的圈temp = Iist;Iist[0].num = 1 ;Iist[0].next = &list[1];//第一个结点己经完成for(i=1: i<(N-1); ■++){Iist[i].num = i+1:Iist[i].next = &Iist[i+1];}//第二个至倒数第二个已经完成Iist[N-1].num = N;Iist[N-1].next = &list[O];//最后一个结点已经完成void Next2(){temp = temp->next;temp = temp->next;}void Fun(){temp = & list[N-1];//得到链表的最后一个结点地址do{Next2();//当前是0,数到2〃现在temp已经是标号为2的结点的地址了cout«(temp->next)->num«ff M;//$ny出要被删除的结点(p+1) temp->next = (temp->next)->next ;//^ 被删除的结点的前一个(p)和后一个相连接(p+2)}while(temp->next != (temp->next)->next); cout«temp->num;}};int main(void){List one; one.Fun(j; system(ft pause f,); return 0;}(3)#include <iostream>#include <string> using namespace std;#define SIZE 512class Str{private:char str1[SIZE]:char str2[SIZE];char *p;int i, length;public:void set(){cout«ff输入第一个字符串:ff«endl; cin>>str1;cout«ff输人第二个字符串:ft«endl; cin>>str2;}void fun(){Iian(str1, str2):}void Iian(char *m, char *n){ length = strlen(n); for(i=0; i<strlen(n)+1; i++){ P = & n[i];str1 [length+i] = *p;}cout«ft连接之后的结果:\n ft«str1«endl;}};int main(void){ Str one; one.set(); one.funO; system(ft pause f,); return 0;}(4)#include <iostream>#include <string>using namespace std;#define SIZE 512class Str{private:char str[SIZE]:int upper, lower, space, number, other, i:public:Str(){upper=Iower=space=number=other=0;void set(){cout«ff输入一个字符ff«endl;gets(str);}void check(){for(i=0; i<strlen(str); i++){if(str[i]>=w A・ && str[i]<="Z>){upper++;}else if(str[i]>=w a w && str[i]<=w z w){lower++;}else if(str[i]=="・){space++;}else if(str[i]>=w O w && str[i]<=w9w){number++;}else{other++;}}}void te11(){check();coutvv"箕冇大写字母ff«upper«ft个,小写字母"«lower«ff个,空格"vvspacevv”个,数字ff«numbervv”个,其他字符■•vvothervv”个”vvendl;}};int main(void){Str one;one.set();one.tel 1();system(ft pause ff);return 0;}(5)代码中要用到strlen函数,所以包含了string头文件,但strcmp函数在string中己经定义,所以下题屮改用Strcmpo#include <iostream>#include <string>using namespace std;#define SIZE 512class Str{private:char str1[SIZE];char str2[SIZE];■ nt i;public:void get(){cout«ft输入第一个字符串vvendl;OP+Q(Q+r1\■cout«M输入菊二个字符串:“vvendl; gets(str2);}void fun(){ Strcmp(str1, str2);}void Strcmp(char *m, char *n){int num;for(i=0; i<strlen(str1) || i<strlen(str2); i++){if(str1[i]==str2[i]){num = 0;}else{num = str1[i] - str2[i]; break;}}}};irrt main(void){Str one;one.get();one・fun();system(fl pause f,); return 0;}(6)注意:原有数组是不变的,但指针数组是排序Z后的。
(西南交大)C++第6章习题参考答案
}
void main( )
{
char a='A',b='a';
fun(&b,a);
cout<<a<<" "<<b<<endl;
}
A)B a, B)a B C)A b D)b B
18、下列程序运行后的结果是A。
#include<iostream>
using namespace std;
5、要在C++程序中通过引用来传递变量,则应该在函数头的对应形参名前面加上地址运算符&。(对)
6、在C++有返回值的函数中,return语句有而且只能有一条。(错)
7、void函数调用后,可以作为一个值出现在赋值语句的右边赋值给一个变量。(错)
8、变量的生存期指明了该变量在计算机内存中能保留多久。(对)
一、判断题:
1、一个C++程序通常由有而且只能有一个的主函数、若干个子函数和库函数构成。(对)
2、用语句cout<<sin(55*3.14159/180)可以显示一个角度为55度的正弦值。(对)
3、函数头int main ( )是一个自定义有返回值函数的例子。(对)
4、在C++有返回值的函数中,函数体以return语句结尾。(对)
A)地址传递B)引用传递C)值传递D)内容传递
8、以下哪一项可以作为void函数cacl( )的函数原形,并且将传递给该函数两个int型变量的值A。
A) void cacl(int, int);
B) void cacl(int);
西安交大钱班第一次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 程序设计 作业
西安交通大学实验报告课程__计算机程序设计__实验名称_____函数______第 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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安交通大学实验报告课程__计算机程序设计__实验名称__指针与函数__第 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)的函数、自定义的求根的主体的函数、主函数。