c++程序设计实验辅导及习题解答实验8(1、3、7)和实验9
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(int i=0;i<bits;i++) Out[i]=(In[i/8]>>(i%8))&1;
} int _tmain(int argc, _TCHAR* argv[]) {
bool a[K]; char b[K/8+1]="ab"; int i; ByeToBit(a,b,K); for(i=0;i<K;i++)
return x*y; } int d(int x,int y) {
return x/y; } void main() {
char ch; int(*p[4])(int,int)={a,b,c,d},i,x,y,z; int k=12; srand((int)time(0)); while(k) {
实验九
任务 1:程序调试。指针作为函数的参数。
程序如下:
#include "stdafx.h" #include<iostream> using namespace std; #define K 16 void ByeToBit(bool *Out,const char *In,int bits) {
任务 5:程序设计。命令行参数的应用。
用程序实现文件的加密和解密。约定:程序取名为 lock.c,程序
的可执行文件名为 lock.exe,其用法为:lock+|-<被处理的文件名>,
其中+为加密,-为解密。
设计代码运行如下:
#include<iostream> using namespace std;
程序设计如下:
#include "stdafx.h" #include<iostream> using namespace std;
void swap(int &p1,int &p2) {
int p; p=p1; p1=p2; p2=p; } int _tmain(int argc, _TCHAR* argv[]) { int a,b; cin>>a>>b; swap(a,b); cout<<a<<' '<<b<<endl; return 0;
int x; char name[20]; public: person(int a,char *n) {
x=a; strcpy_s(name,n); } void print() { cout<<"x="<<x<<"name:"<<name<<endl; } }; int _tmain(int argc, _TCHAR* argv[]) { int x; char name[20]; cin>>x>>name; person *p=new person(x,name); p->print(); delete p; return 0; }
实验八
任务 1:程序调试。指针作为函数参数。
(1)设计一个函数 swap,函数的参数为指针,函数的功能是交换 main
函数中的 a,b 值。
思考:如果上上述 swap 函数设计为:
void swap(int *p1,int *p2) {
int p; p=p1; p1=p2; p2=p1; }
程序运行会有什么样的结果?为什么?
运行结果如下:
任务 3:程序设计。函数指针的应用。
参照任务 2,用函数指针来实现以下表达式的计算。
X (x<0)
2x-5 (0<=x<5)
3x+4 (x>=5)
设计一个程序,输入 x 的值,输出相应表达式的值。
程序如下:
#include<iostream> using namespace std; double f1(double x) { return x; } double f2(double x) { return 2*x-5; } double f3(double x) { return 3*x+4; }
return x>y?x:y; } int min(int x,int y) {
return x<y?x:y; } void pp(int x,int y,int(*p)(int,int)) {
int result; result=(*p)(x,y); cout<<result<<endl; } int _tmain(int argc, _TCHAR* argv[]) { int a,b; cin>>a>>b; cout<<"max="; pp(a,b,max); cout<<"min="; pp(a,b,min); return 0; }
答:只是利用指针交换了双方的地址,但内容没有变化,所以输出结
果并未改变。
如果上述 swap 函数设计为:
void swap(int *p1,int *p2) {
int p; p=*p1; *p1=*p2; *p2=p; }
程序运源自文库会有什么样的结果?为什么?
(2)用引用的方法交换 main 函数中 a、b 的值,请重新设计函数。
int main (int argc,char*argv[]) { char c; if(argc!=3)cout<<"参数个数不对!\n"; else { c=*argv[1]; switch(c) { case '+':
{ cout<<"执行加密程序段"<<endl; } break; case '-': { cout<<"执行解密程序段"<<endl; } break; default:cout<<"第二个参数错误!"<<endl; } } return 0;
void main() { double f1(double x),f2(double x),f3(double x); double (*p)(double x);
double a; While(1) {
while(cin>>a) {
if(a<0) p=f1;
else if(a<5) p=f2;
}
运行结果如下:
任务 7:程序设计与程序调试。应用 new 与 delete 为用户自 定义的类型分配内存空间与释放内存空间。
程序如下:
#include "stdafx.h" #include<iostream> using namespace std; #include<string.h>
class person { private:
for(i=0;i<100;i++) {
x=(int)(100.0*rand()/(RAND_MAX+1.0))%10; y=(int)(100.0*rand()/(RAND_MAX+1.0))%10; z=(int)(100.0*rand()/(RAND_MAX+1.0))%4; } switch(z) { case 0:ch='+';break; case 1:ch='-';break; case 2:ch='*';break; case 3:ch='/';break; } i=(*p[z])(x,y); cout<<x<<ch<<y<<'='<<i<<endl; k--; } }
char*q=p; for(;*p!='\0';p++)
if(*p!=x)
*q++=*p; *q='\0'; } int _tmain(int argc, _TCHAR* argv[]) { char c[N],*pt=c,x; cout<<"请输入字符串:"; cin>>pt; cout<<"请输入所需删除的字符"<<endl; cin>>x; del_char(pt,x); cout<<"The new string is;"<<c<<endl; return 0;
cout<<a[i]<<' '; cout<<endl; return 0; }
运行结果如下:
任务 2:程序调试。函数指针的应用。
定义两个函数 max、min,分别求两个整型数的最大值与最小值。
然后定义一个函数指针分别指向两个不同的函数。为了方便调用设计
一个函数 pp,作为函数调用时统一的接口,使得每次调用的形式保
else p=f3;
cout<<"result="<<p(a)<<endl; }
} }
运行结果如下:
任务 4:程序设计。函数指针的应用。
程序类似一个自动试题命题系统,分成三类题。第一类是数学运算 题,在“+”、“-”、“*”、“/”中任选一题。第二类是字符运算题,在 字符串复制、连接、比较中任选一题。第三类为简单题,在五道简答 题中任选一道。
}
任务 3:程序设计。应用指针删除字符串中的某个字符。
设计一个程序,在 main()中输入一个字符串,然后再输入一个字
符,调用函数 void del_char(char*p,char x),删除在字符串中
的这个字符。
程序设计如下:
#include "stdafx.h" #include<iostream> using namespace std; #define N 80 void del_char(char *p,char x) {
}
运行结果如下:
持一致。输入 a 和 b 两个数,第一次调用 pp 时找出 a 和 b 中的大者,
第二次找出其中的小者。
代码如下:
#include "stdafx.h" #include<iostream> using namespace std;
int max(int,int); int min(int,int); void pp(int,int,int(*p)(int,int)); int max(int x,int y) {
程序为:
#include<iostream> using namespace std; #include<time.h>
#include<stdlib.h> int a(int x,int y) {
return x+y; } int b(int x,int y) {
return x-y; } int c(int x,int y) {
} int _tmain(int argc, _TCHAR* argv[]) {
bool a[K]; char b[K/8+1]="ab"; int i; ByeToBit(a,b,K); for(i=0;i<K;i++)
return x*y; } int d(int x,int y) {
return x/y; } void main() {
char ch; int(*p[4])(int,int)={a,b,c,d},i,x,y,z; int k=12; srand((int)time(0)); while(k) {
实验九
任务 1:程序调试。指针作为函数的参数。
程序如下:
#include "stdafx.h" #include<iostream> using namespace std; #define K 16 void ByeToBit(bool *Out,const char *In,int bits) {
任务 5:程序设计。命令行参数的应用。
用程序实现文件的加密和解密。约定:程序取名为 lock.c,程序
的可执行文件名为 lock.exe,其用法为:lock+|-<被处理的文件名>,
其中+为加密,-为解密。
设计代码运行如下:
#include<iostream> using namespace std;
程序设计如下:
#include "stdafx.h" #include<iostream> using namespace std;
void swap(int &p1,int &p2) {
int p; p=p1; p1=p2; p2=p; } int _tmain(int argc, _TCHAR* argv[]) { int a,b; cin>>a>>b; swap(a,b); cout<<a<<' '<<b<<endl; return 0;
int x; char name[20]; public: person(int a,char *n) {
x=a; strcpy_s(name,n); } void print() { cout<<"x="<<x<<"name:"<<name<<endl; } }; int _tmain(int argc, _TCHAR* argv[]) { int x; char name[20]; cin>>x>>name; person *p=new person(x,name); p->print(); delete p; return 0; }
实验八
任务 1:程序调试。指针作为函数参数。
(1)设计一个函数 swap,函数的参数为指针,函数的功能是交换 main
函数中的 a,b 值。
思考:如果上上述 swap 函数设计为:
void swap(int *p1,int *p2) {
int p; p=p1; p1=p2; p2=p1; }
程序运行会有什么样的结果?为什么?
运行结果如下:
任务 3:程序设计。函数指针的应用。
参照任务 2,用函数指针来实现以下表达式的计算。
X (x<0)
2x-5 (0<=x<5)
3x+4 (x>=5)
设计一个程序,输入 x 的值,输出相应表达式的值。
程序如下:
#include<iostream> using namespace std; double f1(double x) { return x; } double f2(double x) { return 2*x-5; } double f3(double x) { return 3*x+4; }
return x>y?x:y; } int min(int x,int y) {
return x<y?x:y; } void pp(int x,int y,int(*p)(int,int)) {
int result; result=(*p)(x,y); cout<<result<<endl; } int _tmain(int argc, _TCHAR* argv[]) { int a,b; cin>>a>>b; cout<<"max="; pp(a,b,max); cout<<"min="; pp(a,b,min); return 0; }
答:只是利用指针交换了双方的地址,但内容没有变化,所以输出结
果并未改变。
如果上述 swap 函数设计为:
void swap(int *p1,int *p2) {
int p; p=*p1; *p1=*p2; *p2=p; }
程序运源自文库会有什么样的结果?为什么?
(2)用引用的方法交换 main 函数中 a、b 的值,请重新设计函数。
int main (int argc,char*argv[]) { char c; if(argc!=3)cout<<"参数个数不对!\n"; else { c=*argv[1]; switch(c) { case '+':
{ cout<<"执行加密程序段"<<endl; } break; case '-': { cout<<"执行解密程序段"<<endl; } break; default:cout<<"第二个参数错误!"<<endl; } } return 0;
void main() { double f1(double x),f2(double x),f3(double x); double (*p)(double x);
double a; While(1) {
while(cin>>a) {
if(a<0) p=f1;
else if(a<5) p=f2;
}
运行结果如下:
任务 7:程序设计与程序调试。应用 new 与 delete 为用户自 定义的类型分配内存空间与释放内存空间。
程序如下:
#include "stdafx.h" #include<iostream> using namespace std; #include<string.h>
class person { private:
for(i=0;i<100;i++) {
x=(int)(100.0*rand()/(RAND_MAX+1.0))%10; y=(int)(100.0*rand()/(RAND_MAX+1.0))%10; z=(int)(100.0*rand()/(RAND_MAX+1.0))%4; } switch(z) { case 0:ch='+';break; case 1:ch='-';break; case 2:ch='*';break; case 3:ch='/';break; } i=(*p[z])(x,y); cout<<x<<ch<<y<<'='<<i<<endl; k--; } }
char*q=p; for(;*p!='\0';p++)
if(*p!=x)
*q++=*p; *q='\0'; } int _tmain(int argc, _TCHAR* argv[]) { char c[N],*pt=c,x; cout<<"请输入字符串:"; cin>>pt; cout<<"请输入所需删除的字符"<<endl; cin>>x; del_char(pt,x); cout<<"The new string is;"<<c<<endl; return 0;
cout<<a[i]<<' '; cout<<endl; return 0; }
运行结果如下:
任务 2:程序调试。函数指针的应用。
定义两个函数 max、min,分别求两个整型数的最大值与最小值。
然后定义一个函数指针分别指向两个不同的函数。为了方便调用设计
一个函数 pp,作为函数调用时统一的接口,使得每次调用的形式保
else p=f3;
cout<<"result="<<p(a)<<endl; }
} }
运行结果如下:
任务 4:程序设计。函数指针的应用。
程序类似一个自动试题命题系统,分成三类题。第一类是数学运算 题,在“+”、“-”、“*”、“/”中任选一题。第二类是字符运算题,在 字符串复制、连接、比较中任选一题。第三类为简单题,在五道简答 题中任选一道。
}
任务 3:程序设计。应用指针删除字符串中的某个字符。
设计一个程序,在 main()中输入一个字符串,然后再输入一个字
符,调用函数 void del_char(char*p,char x),删除在字符串中
的这个字符。
程序设计如下:
#include "stdafx.h" #include<iostream> using namespace std; #define N 80 void del_char(char *p,char x) {
}
运行结果如下:
持一致。输入 a 和 b 两个数,第一次调用 pp 时找出 a 和 b 中的大者,
第二次找出其中的小者。
代码如下:
#include "stdafx.h" #include<iostream> using namespace std;
int max(int,int); int min(int,int); void pp(int,int,int(*p)(int,int)); int max(int x,int y) {
程序为:
#include<iostream> using namespace std; #include<time.h>
#include<stdlib.h> int a(int x,int y) {
return x+y; } int b(int x,int y) {
return x-y; } int c(int x,int y) {