1.调试分析课本每一个例题,有可能的话更改成2-3个方法的新程序;
例5.1
#include<iostream>
using namespace std;
void display()
{
cout<<"This is an example."<<endl;
}
int main()
{
display();
return 0;
}
另一种方法:
#include<iostream>
using namespace std;
int main()
{
cout<<"This is an example.\n";
return 0;
}
例5.2
#include<iostream>
using namespace std;
double min(double x,double y)
{
return x<y?x:y;
}
int main()
{
cout<<min(6.0,5.0)<<endl;
return 0;
}
例5.3
#include<iostream>
using namespace std;
double circleArea(double);
int main()
{
double area = circleArea(5.0);
cout<<"area = "<<area<<endl;
return 0;
}
double circleArea(double r)
{
double pi = 3.14;
double area = pi * r * r;
return area;
}
例5.4
#include<iostream>
using namespace std;
int sum(int x,int y)
{
int temp;
temp = x + y;
return temp;
}
int main()
{
int a,b,c;
a = 10; b = 5;
c = sum(a,b);
cout<<a<<" + "<<b<<" = "<<c<<endl;
return 0;
}
另一种方法:
#include<iostream>
using namespace std;
int main()
{
int a,b,s=0;
a=10;
b=5;
s=a+b;
cout<<a<<" + "<<b<<" = "<<s<<endl;
return 0;
}
例5.5
#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<<endl;
return 0;
}
例5.6
#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;
}
例5.7
#include<iostream>
using namespace std;
int sqr(int x)
{
x = x * x;
return x;
}
int main()
{
int t = 10;
int s = sqr(t);
cout<<"t = "<<t<<'\t'
<<"sqr("<<t<<") = "<<s<<endl;
return 0;
}
例5.8
#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;
temp=u;
u=v;
v=temp;
}
例5.9
#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;
}
例5.10
#include<iostream>
using namespace std;
void display(int x,float y)
{
cout<<x<<" "<<y;
return ;
}
int main()
{
float a;
int b;
cin>>b>>a;
display(b,a);
return 0;
}
例5.11
#include<iostream>
#include<cmath>
using namespace std;
void GetRoots(/*in*/double,/*in*/double,/*in*/double,
/*out*/double&,/*out*/double&);
int main()
{
double a,b,c;
double root1,root2;
cout<<"输入方程的三个系数 a,b,c: "<<endl;
cin>>a>>b>>c;
GetRoots(a,b,c,root1,root2);
cout<<"root1 = "<<root1<<" root2 = "<<root2<<endl;
return 0;
}
void GetRoots(/*in*/double a,/*in*/double b,/*in*/double c,
/*out*/double& root1,/*out*/double& root2)
{
double temp;
temp = b*b-4.0*a*c;
root1 = (-b+sqrt(temp))/(2.0*a);
root2 = (-b-sqrt(temp))/(2.0*a);
}
例5.12
#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(/*inout*/int &u,/*inout*/int &v)
//两个参数均为流入流出参数,是引用调用,对应实参必须是变量且具有初始值
{
int temp = v;
v = u;
u = temp;
}
例5.13
#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.14
#include<iostream>
#include<cmath>
using namespace std;
float f(float x);
float root(float x1,float x2);
float point(float x1,float x2);
int main()
{
float x1,x2,y1,y2,x;
do
{
cout<<"请输入根所在的范围: ";
cin>>x1>>x2;
y1 = f(x1);
y2 = f(x2);
cout<<"两端点的值为["<<y1<<","<<y2<<"]"<<endl;
}
while(y1 * y2 >= 0);
x = root(x1,x2);
cout<<"在"<<x1<<"与"<<x2<<"之间,方程的解为"<<x<<endl;
return 0;
}
float f(float x)
{
return(x * x * x - 4 * x * x + 6 * x - 10);
}
float root(float x1,float x2)
{
float y1,x,y;
y1 = f(x1);
do
{
x = point(x1,x2);
y = f(x);
if(y * y1 > 0)
{
y1 = y;
x1 = x;
}
else x2 = x;
}
while(fabs(y) >= 0.0001);
return x;
}
float point(float x1,float x2)
{
float y;
y = (x1 * f(x2) - x2 * f(x1))/(f(x2) - f(x1));
return y;
}
例5.15
#include<iostream>
#include<cmath>
using namespace std;
double Factorial(int n);
int main()
{
int a;
double f;
cout<<"input an integer number:";
cin>>a;
f = Factorial(a);
cout<<a<<"!="<<f<<endl;
return 0;
}
double Factorial(int n)
{
double fact;
if(n == 0)
fact = 1;
else
fact = n * Factorial(n - 1);
return fact;
}
例5.16
#include<iostream>
using namespace std;
const N = 8;
long fibo(int n);
int main()
{
long f = fibo(N);
cout<<"Fibonacci数列第8项的值为: "<<f<<endl;
return 0;
}
long fibo(int n)
{
if(n == 1)return 1L;
else if(n == 2)return 1L;
else
return fibo(n - 1) + fibo(n - 2);
}
例5.17
#include<iostream>
using namespace std;
int i;
int main()
{
i=5;
{
int i;
i=7;
cout<<"内层i= "<<i<<endl;
}
cout<<"外层i= "<<i<<endl;
return 0;
}
例5.18
#include<iostream>
using namespace std;
int i = 1;
int main()
{
cout<<"i = "<<i<<endl;
int i = 5;
cout<<"i = "<<i<<endl;
{
int i = 7;
cout<<"i = "<<i<<endl;
cout<<"i = "<<::i<<endl;
}
cout<<"i = "<<i<<endl;
cout<<"i = "<<::i<<endl;
return 0;
}
例5.19
#include<iostream>
using namespace std;
int max(int x,int y)
{
int z;
z = x > y? x:y;
return z;
}
int main()
{
extern int a,b;
cout<<max(a,b)<<endl;
return 0;
}
int a =13,b = -8;
例5.20
#include<iostream>
using namespace std;
void sort(int);
void echoa();
int a[5] = {6,3,9,8,2};
int main()
{
echoa();
sort(5);
echoa();
return 0;
}
void echoa()
{
for(int i=0;i<5;i++)
cout<<a[i]<<'\t';
cout<<endl;
}
void sort(int n)
{
int i,j,min,temp;
for(i=0;i<n-1;i++)
{
min = i;
for(j=i+1;j<n;j++)
if(a[j]<a[min])
min = j;
temp = a[i];
a[i]=a[min];
a[min]=temp;
}
}
例5.21
#include<iostream>
using namespace std;
int a = 3,b = 5;
int main()
{
int a = 8;
int c;
c = a > b? a:b;
cout<<c<<endl;
return 0;
}
例5.22
#include<iostream>
using namespace std;
int f(int a)
{
auto int b = 0;
static int c = 3;
b++;
c++;
return(a + b + c);
}
int main()
{
int a = 2,i;
for(i = 0;i<3;i++)
cout<<f(a)<<endl;
return 0;
}
例5.23
#include<iostream>
using namespace std;
int fun(int);
int main()
{
int i,k;
cout<<"请输入一个非负整数: ";
cin>>k;
for(i = 1;i <= k;i++)
cout<<i<<"!= "<<fun(i)<<endl;
return 0;
}
int fun(int n)
{
static int f = 1;
f = f * n;
return f;
}
例5.24
#include<iostream>
using namespace std;
int fun(int);
int main()
{
int i,k;
cout<<"请输入一个非负整数: ";
cin>>k;
for(i = 1;i <= k;i++)
cout<<i<<"!= "<<fun(i)<<endl;
return 0;
}
int fun(int n)
{
register int i,f = 1;
for(i = 1;i <= n;i++)
f = f * i;
return f;
}
例5.25
#include<iostream>
using namespace std;
int a;
int power(int n);
int main()
{
int b = 3,c,d,m;
cout<<"enter a and m: "<<endl;
cin>>a>>m;
c = a * b;
cout<<"a = "<<a<<"\tb = "<<b<<"\tc = "<<c<<endl;
d = power(m);
cout<<"a = "<<a<<"\tm = "<<m<<"\td = "<<d<<endl;
return 0;
}
extern int a;
int power(int n)
{
int i,y = 1;
for(i = 1;i <= n;i++)
y *= a;
return y;
}
2.编程实现课本每一个编程习题。
习题1
#include<iostream>
#include<cmath>
using namespace std;
double squ(double x);
int main()
{
double x;
cout<<"Please input x: ";
cin>>x;
cout<<"The square root of "<<x<<" is "<<squ(x)<<endl;
return 0;
}
double squ(double x)
{
double s1,s2;
s1 = 0.5 * (1.0 + x);
do
{
s2 = s1;
s1 = (s2 + x/s2) * 0.5;
}
while(fabs(s2 - s1) > 1.0E-6);
return s1;
}
习题2
#include <iostream>
using namespace std;
long int Power(int base,int exponent);
int main()
{
int base,exponent,result;
cout<<"任意输入一个基数:";
cin>>base;
cout<<"任意输入一个幂的值:";
cin>>exponent;
result = Power(base,exponent);
cout <<base<<"的"<<exponent<<"次幂的值为: "<<result<<endl;
return 0;
}
long int Power(int base,int exponent)
{
int i,result=1;
for(i=0;i<exponent;i++)
{
result *= base;
}
return result;
}
习题3
#include <iostream>
using namespace std;
void judge(int n);
int main()
{
int n;
cout<<"任意输入一个正整数: ";
cin>>n;
judge(n);
return 0;
}
void judge(int n)
{
int i,judge=0;
for(i=2;i<n;i++)
if(n%i == 0)
{
cout<<n<<" 不是素数.\n";
judge++;
break;
}
if(judge == 0)
cout<<n<<" 是素数.\n";
}
习题4
#include<iostream>
using namespace std;
int fun(int num);
int main()
{
int num,result;
cout<<"请输入一个整数: ";
cin>>num;
result = fun(num);
cout <<"颠倒后结果为:"<<result<<endl;
return 0;
}
int fun(int num)
{
int result = 0;
while(num)
{
result += num % 10;
num = num / 10;
result *= 10;
}
result /= 10;
return result;
}
习题5
#include <iostream>
using namespace std;
void fun(int num);
int main()
{
int num;
cout<<"请输入0到100之间的分数: ";
cin>>num;
fun(num);
return 0;
}
void fun(int num)
{
if(num>=90)
cout <<"该分数对应的等级代号为A."<<endl;
else if(num>=80)
cout <<"该分数对应的等级代号为B."<<endl;
else if(num>=70)
cout <<"该分数对应的等级代号为C."<<endl;
else if(num>=60)
cout <<"该分数对应的等级代号为D."<<endl;
else
cout <<"该分数为不及格."<<endl;
}
习题6
习题7
#include <iostream>
using namespace std;
int divisor(int n1,int n2);
int multiple(int n1,int n2);
int main()
{
int n1,n2,C_d,C_m,fac;
cout<<"任意输入第一个整数: ";
cin>>n1;
cout<<"任意输入第二个整数: ";
cin>>n2;
if(n1<n2)
{
fac = n1;
n1 = n2;
n2 = fac;
}
C_d = divisor(n1,n2);
C_m = multiple(n1,n2);
cout<<"这两个整数的最大公约数是: "<<C_d
<<" ,最小公倍数是: "<<C_m<<endl;
}
int divisor(int n1,int n2)
{
int C_d = 0;
while(n1 % n2 != 0)
{
C_d = n1 % n2;
n1 = n2;
n2 = C_d;
}
return C_d;
}
int multiple(int n1,int n2)
{
int C_m;
if(n1 % n2 == 0)
C_m = n1;
else
C_m = (n1 * n2)/divisor(n1,n2);
return C_m;
}
习题8
(1)
#include <iostream>
using namespace std;
int main()
{
cout<<"9行9列乘法表全部输出为:\n";
int fac_1,fac_2,pro;
for(fac_2=1;fac_2 <= 9;fac_2++)
{
for(fac_1=1;fac_1 <= fac_2;fac_1++)
{
pro=(fac_1 * fac_2);
cout<<fac_1<<"×"<<fac_2<<"="<<pro<<" ";
}
cout<<endl;
}
return 0;
}
(2)
(3)
习题9
习题10
#include<iostream>
using namespace std;
void func();
int n = 1;
int main()
{
static int a;
int b = -10;
cout<<"a: "<<a<<"\tb: "<<b<<"\tn: "<<n<<endl;
b += 4;
func();
cout<<"a: "<<a<<"\tb: "<<b<<"\tn: "<<n<<endl;
n += 10;
func();
return 0;
}
void func()
{
static int a = 2;
int b = 5;
a += 2;
n += 12;
b += 5;
cout<<"a: "<<a<<"\tb: "<<b<<"\tn: "<<n<<endl;
}
3. 编程实现输入两个4X5矩阵和5X3矩阵,定义函数并在主函数中调用计算它们的积。
4.编程计算S[n]=1!+21+3!+...n!。要求定义两个函数,一个计算n!,一个计算s[n],在后一个函数中调用前一个函数。然后在主程序中输入数n的值,然后调用定义函数输出结果。
#include <iostream>
using namespace std;
int count(int n);
int fac(int n);
int main()
{
int n,add;
cout<<"任意输入一个整数n: ";
cin>>n;
add = count(n);
cout<<"S[n]=1!+2!+…+n! = "<<add<<endl;
return 0;
}
int fac(int n)
{
int i,add=n;
for(i = n-1;i>0;i--)
add *= i;
return add;
}
int count(int n)
{
int i,add=0;
for(i=n;i>0;i--)
add += fac(i);
return add;
}
5.编写一个函数,输入一个十六进制数,输出相应的十进制数。
#include<iostream>
using namespace std;
void htod()
{
int num;
cout<<"任意输入一个十六进制数为: ";
cin>>hex>>num;
cout<<dec<<"输出其相应的十进制数为: "<<num<<endl;
cout<<endl;
}
int main()
{
htod();
return 0;
}