习题课-2

更新时间:2024-03-09 02:07:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

习题课2 2010-11-19

程序测试2-2

编写一个加密程序。输入一个6位整数的明码,按以下方法加密:首先将每位数字替换成它与7相加之和再用10求模的结果;然后逆置;输出密码。再编写程序,把这个密码还原成明码。若输入错误,则显示错误信息后退出程序。 //软件2班庞博-加密解密程序 #include using namespace std;

int encipher(int t)//函数一:加密 { int i,m,a,b; for(i=0,a=100000,b=0;i<6;i++) { m=(t+7); b=m*a+b; a=a/10; t=t/10;

} return b; }

int exemption(int x)//函数二:解密 { int i,n,a,b; for(i=0,a=100000,b=0;i<6; i++) { if( x<7) n=x+10-7; else n=(x-7); b=a*n+b; a=a/10; x=x/10; }

return b; }

int main()//主函数 { int a,b,c; cout<<\请输入六位整数:\; cin>>a; if(a<100000||a>999999) { cout<<\<

}

b=encipher(a); c=exemption(b);

cout<<\密码是:\<

}

问题:

(1)调用pow函数会降低运行效率 {for (i=5;i>=0;i--)

b+=(((int) (a/pow(10,i))+7))*(int)pow(10,(5-i)); }

(2)在循环结束后输出效率更高

for(i=6;i>=1;i--) {c=c*10;

b=((a)+7); c=c+b; a=a/10;

//cout<

cout<

(3)输入明码“000000”0一类的,但是在我的程序中没有办法对这种数字比较大小进行判断。

(4)输入明码“333333”,密码会出现0,而不是000000,或者是输入明码777733,会输出4444,而不是004444,为了在不同情况下补齐到六位又该怎样设计比较好?

程序测试3-1

1、编写一个程序,测试3个函数,它们都能够把main函数中的变量count的值增至3倍。这3个函数说明如下:

(a)tripleByValue函数通过值传递count的一份副本,把值增至3倍并返回这一结果。 (b)tripleByReference函数通过引用参数传递count,用别名(即引用参数)把count原来的值增至3倍。

(c)tripleByPointer函数通过指针参数传递count的地址,用间址方式把count原来的值增至3倍。

#include using namespace std;

double tripleByValue( double x ) { return x * 3; //传值参数不能修改实参的值 }

double tripleByReference( double &x ) { x = x * 3; //指针参数通过间址修改实参的值 return x; }

double tripleByPointer( double *x ) { *x = *x * 3; //引用参数通过别名修改实参的值 return *x; }

int main()

{ double count;

cout<<\; cin>>count;

count=tripleByValue( count ); //通过函数返回值修改count的值 cout<<\<>count;

tripleByReference( count ); //也可以count=tripleByReference(count) cout<<\<>count;

tripleByPointer( &count ); //也可以count=tripleByPointer(&count) cout<<\<

问题:

(1)求值函数应该用return返回计算结果值,不应在函数内输出求值结果

void tripleByValue (double x) { x=x*3;

cout<

void tripleByReference (double &x) { x=x*3;

cout<

void tripleByPointer (double *x) { *x=*x*3; cout<<*x; }

(2)引用参数和指针参数的应用。引用参数和指针参数都可以通过形参读/写实参。

2、已知勒让德多项式为

1??pn(x)??x?((2n?1)p(x)?(n?1)p(x))/nn?1n?2?n?0n?1

n?1编一程序,定义递归函数求 double poly( double &x, int n );

pn(x)的值。主函数从键盘上输入x和n的值, 调用poly函数测试。

//计科()-王洁锋

#include using namespace std;

double poly( double &, int );

int main() { int n;

double x,p;

cout<<\; cin>>n;

cout<<\; cin>>x;

p=poly(x,n); cout<

double poly( double &x, int n ) { if (n==0) return 1; else

{ if (n==1) return x;

else return ( (2*n-1) * poly( x, n-1 ) - (n-1) * poly( x, n-2 ) ) / n; } }

问题:

(1)为什么x用引用参数?

(2)warning C4715: “poly”: 不是所有的控件路径都返回值

double poly(double &x,int n) {

if(n==0) return 1.0; if(n==1) return x;

if(n>1) return ((2*n-1)*poly(x,(n-1))-(n-1)*poly(x,(n-2)))/n; }

//如果条件都不成立怎么办?

(3)表达式计算:

return ((2*n-1)*poly(x,n-1)-(n-1)*poly(x,n-2)/n);

return (2*n-1)*poly(x,n-1)-(n-1)*poly(x,n-2)/n; if(n==0) return 0;

指出以下程序中的错误: double poly(double &x,int n) {

if(n=0)return 0; else if(n=1)return x; else

return(((2*n-1)*poly(double&x,int(n-1))-(n-1)*poly(double&x,int(n-2)))/n); }

1 “==”与“=” ○2 return 1 ○

3 形参与实参的形式 ○函数原型

函数调用 4 表达式书写 ○

double poly(double &x,int n);

poly( double &x, int(n-1) )

程序测试4-1

本程序的main函数调用RandAry函数,生成20个1~20之间的随机数;调用OutAll函数显示生成的随机数序列;调用OutUnlike函数,删除生成序列中的重复数值,仅显示序列中的不同数值。显示数据不改变原来的相对顺序。

#include #include #include using namespace std;

void RandAry( int ary[], int n, int min, int max ); //生成随机数序列 void OutAll( int ary[], int n ); //输出数组全部元素 void OutUnlike( int ary[], int n ); //输出数组中不相同元素

int main()

{ const int N=20; int ary[N];

cout<<\生成20个1~20之间的整数:\\n\; RandAry(ary, N, 1, 20); //生成N个1~20之间的随机整数放在数组ary中 OutAll(ary,N); //输出数组全部原始数据 cout<<\输出不相同数据序列:\\n\;

OutUnlike(ary,N); //输出不相同的数据,不改变原来的相对顺序 }

本文来源:https://www.bwwdw.com/article/2k3a.html

Top