第七周C++作业
2014-04-17 00:11
495 查看
1.调试分析课本每一个例题,有可能的话更改成2-3个方法的新程序;
2.编程实现课本每一个编程习题。
/*************说明实参求值的顺序***************/ #include<iostream> using namespace std; int ncomp(int i,int j) { if(i>j)return 1; if(i==j)return 0; return -1; } int main() { int k=2; int n=ncomp(k,++k); cout<<n; return 0; } /*这题答案为零,证明系统按右向左顺序求实参的值,又如: int i = 10; printf("%d %d %d\n", ++i, i, --i); 问输出的结果是什么.解答说按规定,printf的参数从右向左执行, 原因是参数一般为从右往左压栈的.先从栈顶取数据, 所以从右向左求值并压栈是有他的道理的**********/
/*************比较两个数大小,输出较大的数**************/ #include<iostream> using namespace std; int max(int u,int v) { int w; w=u>v? u:v; return w; } int main() { int a,b,c; cout<<"please input two numbers: "; cin>>a>>b; c=max(a,b); cout<<"a= "<<a<<" b= "<<b<<endl; cout<<"max is "<<c<<endl; return 0; }
/*************用引用调用的方法实现两个数据互换**************/ #include<iostream> using namespace std; void swap(int &u, int &v); int main() { int a=3; int b=4; cout<<"a = "<<a<<"\tb = "<<b<<endl; swap(a,b); cout<<"a = "<<a<<"\tb = "<<b<<endl; return 0; } void swap(int &u,int &v) { int temp=v; v=u; u=temp; } /*****引用调用是把变量的地址传进去,函数内对引用的操作就是对 函数外部变量的操作。指针调用其实是把指针变量又拷贝了一份给函 数,只有在函数内部修改指针所指向的值才会对起外部指针产生影响, 要是把传进来的指针的地址变了,对函数外面指针指向的值没有影响。 引用和指针不要混淆了****************************************/
/*********void类型中return语句的作用**************/ #include<iostream> using namespace std; void display(int x,float y) { cout<<x<<" "<<y; return; //这里return仅有的作用是返回到主函数,可以省略 } int main() { float a; int b; cin>>b>>a; display(b,a); return 0; }
/*********函数的嵌套使用:求sum=(2^2)!+(3^2)!**************/ #include<iostream> using namespace std; long f2(int); long f1(int p) //求平方 { int k; long r; k=p*p; r=f2(k); return r; } long f2(int q)//求阶乘 { long fact=1; for(int i=1;i<=q; i++) fact*=i; return fact; } int main() { int i; long sum=0; for(i=2;i<=3;i++) sum+=f1(i); cout<<"sum = "<<sum<<endl; return 0; }
/*********例5.15递归实例**************/ #include<iostream> using namespace std; float factorial(int n); int main() { int a; float f; cout<<"input aninteger number: "; cin>>a; f=factorial(a); cout<<a<<"!= "<<f<<endl; return 0; } float factorial(int n) { float fact; if(n==0) fact=1; else fact=n*factorial(n-1); //递归,直接调用 return fact; } /********直接递归调用就是在函数a(或过程)中直接引用 (调用)函数a本身间接递归调用就是在函数a(或过程)中 调用另外一个函数b,而该函数b又引用(调用)了函数a***/
/*********作用域运算符的使用**************/ #include<iostream> using namespace std; int i=1; int main() { cout<<"i= "<<i<<endl; //输出1 int i =5; cout<<"i= "<<i<<endl;//输出5 { int i =7 cout<<"i= "<<i<<endl; //输出7 cout<<"i= "<<::i<<endl; //输出1 } cout<<"i= "<<i<<endl;//输出5 cout<<"i= "<<::i<<endl;//输出1 return 0; } /***作用域运算符能解决局部变量与全局变量的重名问题 就是在局部变量的作用域内,可用::对被屏蔽的同名的全 局变量进行访问**********************************/
2.编程实现课本每一个编程习题。
/******编写判断一个正整数是否是素数的函数******/ #include <iostream> using namespace std; int judge(int); int main() { int i,b; cout<<"请输入一个正整数"<<endl; cin>>i; if(judge(i)) cout<<i<<"是一个素数"<<endl; else cout<<i<<"不是一个素数"<<endl; return 0; } int judge(int i) { for(int j=2;i%j!=0 && j<=i;j++); //1不是素数! if(j==i) return 1; else return 0; }
/******编写一个函数,返回与所给十进制正整数数字相反的整数。 例如已知整数是1234,函数返回值是4321********************/ #include <iostream> #include <cstring> using namespace std; change(char num2[50]); int main() { char num1[50]; cout<<"请输入一个正整数"<<endl; cin.get(num1,50); cout<<endl; change(num1); return 0; } change(char num2[50]) { int i; i=strlen(num2); cout<<"数字相反后= "; for(i-=1;i>=0;i--) cout<<num2[i]; cout<<endl; }
/******编写一个函数,按按所给百分制分数, 返回与该分数对应的等级代号字符*********/ #include <iostream> using namespace std; void grade(double a) { if(a>100) cout<<"impossible!"<<endl; if(a>=90&&a<=100) cout<<"the grade is A!"<<endl; if(a>=80&&a<90) cout<<"the grade is B!"<<endl; if(a>=60&&a<80) cout<<"the grade is C!"<<endl; if(a>=0&&a<60) cout<<"the grade is D!"<<endl; if(a<0) cout<<"impossible!"<<endl; } int main() { double a; cout<<"请输入一个百分数"<<endl; cin>>a; cout<<"你输入的是"<<a<<"%"<<endl; grade(a); return 0; }
/******编写一个函数,内放10个学生成绩,求平均成绩*********/ #include <iostream> using namespace std; void ave(double a[10]) { double sum=0,ave; for(int i=0;i<10;i++) sum+=a[i]; ave=sum/10; cout<<"10个学生平均成绩为:"<<ave<<endl; } int main() { double a[10]; cout<<"请分别输入10个学生的成绩"<<endl; for(int i=0;i<10;i++) cin>>a[i]; ave(a); return 0; }
/*****编写一个函数分别求两个函数的最大公约数 和最小公倍数。用主函数调用这两个函数*******/ #include <iostream> using namespace std; int max(int a,int b) //求最大公约数 { int temp; if(a<b) { temp=a; a=b; b=temp; } while(b!=0) { temp=a%b; a=b; b=temp; } return a; } int min(int a,int b,int c )//求最小公倍数 { int d; d=a*b/c; return d; } int main() { int a,b,c,d; cout<<"请输入两个正整数: "<<endl; cin>>a>>b; c=max(a,b); d=min(a,b,c); cout<<"它们的最大公约数为:"<<c<<endl; cout<<"它们的最小公倍数为:"<<d<<endl; return 0; }
/*****编写3个函数以三种不同方式输出乘法口诀表*******/ #include <iostream> using namespace std; void first(void) { int a,b; for(a=1;a<=9;a++) { for(b=1;b<=9;b++) cout<<a<<"*"<<b<<"="<<a*b<<'\t'; cout<<endl; } } void second(void) { int a,b; for(a=1;a<=9;a++) { int c=1; for(b=a;b<=9;b++) cout<<a<<"*"<<b<<"="<<a*b<<'\t'; cout<<endl; while (c<=a) { c++; cout<<'\t'; } } cout<<endl; } void third(void) { int a,b; for(a=1;a<=9;a++) { for(b=1;b<=a;b++) cout<<a<<"*"<<b<<"="<<a*b<<'\t'; cout<<endl; } } int main() { int a; cout<<"若要输出9行9列乘法表请输入1"<<endl; cout<<"若要输出乘法表主对角线以上元素请输入2"<<endl; cout<<"若要输出乘法表主对角线以下元素请输入3"<<endl; cin>>a; if(a==1) first(); else if(a==2) second(); else if(a==3) third(); else cout<<"输入有误"<<endl; return 0; }
/*****编写函数求3个整数的最大值、最小值、平均值 要求分别用以下三种方式实现主调函数与被调用函数 之间的数据传递*******************************/ #include <iostream> using namespace std; int a,b,c; //全局变量 void max(int i,int j,int k) //值调用 { if(i<j) i=j; if(i<k) i=k; cout<<"3个整数中最大值为:"<<i<<endl; } void min(int &i,int &j,int &k)//引用调用 { if(i>j) i=j; if(i>k) i=k; } void ave(int a,int b,int c) { int i; i=(a+b+c)/3; cout<<"3个整数的平均值为:"<<i<<endl; } int main() { cout<<"请输入3个整数"<<endl; cin>>a>>b>>c; max(a,b,c); ave(a,b,c); min(a,b,c); cout<<"3个整数中最小值为:"<<a<<endl; return 0; }