您的位置:首页 > 编程语言 > C语言/C++

第七周C++作业

2014-04-17 00:11 495 查看
1.调试分析课本每一个例题,有可能的话更改成2-3个方法的新程序;

/*************说明实参求值的顺序***************/
#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;

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: