作业
day 1 : // p17
1.输入两个整型数,输出最大值。
int max(int x,int y){
return x >= y ? x : y;
}
2.输入三个整型数,输出最大值。
int max(int x, int y, int z) {
return max(x, y) > max(y, z) ? max(x, y) : max(y, z);
}
3.输入三个整型数,输出中间大的数值。
int mid_number(int x, int y, int z) {
if (min(x, y, z) < x && x < max(x, y, z)) return x;
else if (min(x, y, z) < y && y < max(x, y, z)) return y;
else return z;
}
day 2: // p18
1.输出所有的"水仙花数",所谓"水仙花数"是指一个3 位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为
153
=
1
3
+
5
3
+
3
3
。
153=1^3 + 5^3+3^3。
153=13+53+33。
#include<stdio.h>
#include<math.h>
int isWaterNum(int x){
if(x == pow(x/100,3)+pow(x%100/10,3)+pow(x%100%10,3))
return 1;
return 0;
}
int main(){
int i;
for ( i = 100 ; i < 1000; ++i )
{
if(isWaterNum(i))
printf("%d\n", i );
}
return 0;
2.一个球从100m 高度*落下,每次落地后反跳回原高度的一半,再落下,再反弹。求它在第 10次落地时,共经过多少米,第 10次反弹多高。
double floowHightSum(double h,int n){ //》》》假设无能量上损失,所有碰撞皆为弹性碰撞
int i;
double sum = h; //从第一次落地开始累加
for(i=1;i<n;i++){
sum += 2*(1/2.0)*h;//下落高度为h时弹起(1/2)*h,往返2*(1/2)*h
h = h/2; //每次循环h减半
}
return sum;
}
3.输出9*9乘法表
void print(){
int i,j;
for ( i = 1; i < 10; ++i)
{
for ( j= 1; j < i; ++j)
{
int sum = i*j;
printf("%d*%d=%d\t",j,i,sum);
}
printf("\n");
}
}
day 3: //p19
1.定义大小为 n = 10 的整型数组,使用随机函数初始化数组元素,输出数组中的元素值。
#include<stdlib.h>
#include<stdio.h>
int main(){
int a[10],i;
for(i=0;i<10;i++){
a[i] = rand();
}
for(i=0;i<10;i++){
printf("%d\n",a[i]);
}
int b[10];
while(*b++ = *(a+9)--);
for(i=0;i<10;i++){
printf("%d\n",b[i]);
}
}
2.编程实现数组元素的逆转。(数组大小为10,可以是整型数组,也可以是字符串)
void reverse(int* &a,int length) {
int lift = 0;
int right = length - 1;
while (lift < right) {
int temp = a[lift];
a[lift] = a[right];
a[right] = temp;
lift++;
right--;
}
}
3.将数组ar的元素赋值到数组br中(n = 10)。
void copy(int* &oldArray, int* &newArray) {
*(newArray++) = *(oldArray++);
}
4.冒泡排序数组,并输出数组。
void sort(int*& a,int length) {
int indexMax = length - 1;
for (int i = 0; i < indexMax; i++) {
for (int j = i; j < indexMax; j++) {
if (a[i] > a[j]) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
day 4 : // p20
1、使用函数实现,比较三个数的大小返回值:
int min(int x, int y) {
return x > y ? y : x;
}
int max(int x, int y) {
return x > y ? x : y;
}
int max(int x, int y, int z) {
return max(x, y) > max(y, z) ? max(x, y) : max(y, z);
}
int min(int x, int y, int z) {
return min(x, y) > min(y, z) ? min(y, z) : min(x, y);
}
2、使用函数实现,比较三个数的大小返回中间值;
int mid_number(int x, int y, int z) {
if (min(x, y, z) < x && x < max(x, y, z)) return x;
else if (min(x, y, z) < y && y < max(x, y, z)) return y;
else return z;
}
3、编写一个判断闰年的函数。
int is_year(int year) {
//判断year是否是闰年
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return 1;
}
return 0;
}
day 5 : // p26
1、使用辗转相除法计算最大公约数
int gcd(int a, int b) {
//返回a,b的最大公约数
int temp;
while (b!=0)
{
int temp = a % b;
a = b;
b = temp;
}
return a;
}
2、根据上题计算最小公倍数
int minCommonMultiple(int x, int y) {
return (x * y) / gcd(x, y);
}
3、编写一个判断素数的函数
int isPrimeNumber(int number) {
int temp = sqrt(number);
for (int i = 2; i < temp; i++) {
if (number % i == 0) return 0;
}
return 1;
}
4、用牛顿迭代法求开方;
double Newtons_method(int a) {
//用牛顿迭代法求X的开方
//谭浩强-C程序设计-第五章课后习题-第13题(p138)
// 习题解答---谭浩强-C程序设计--学习辅导(P47)
//x[n+1] = 1/2(x[n]+a/x[n])【 x = sqrt(a)】
double x0 = a / 2;
double x1 =(x0 + a / x0)/2;
do {
x0 = x1;
x1 = (x0 + a / x0)/2;
} while (fabs(x1 - x0) > (1e-5));
return x1;
}
5、随机生成1-100之间的数请人猜,猜对了结束游戏,猜错了,提醒是猜大了还是猜小了;
void game() {
int answer;
int count = 0;
srand((int)time(0));
/*void srand( unsigned seed );
功能: 设置rand()随机序列种子。对于给定的种子seed,
rand()会反复产生特定的随机序列.*/
int number = rand() % 100 + 1;
cout << "\t\t------游戏开始-------\n" << "请输入你猜的数(tip:你的输入在1—100之间)"<<endl;
while (1) {
cin >> answer;
count++;
if (answer >number ) {
cout << "你猜大了"<<"请重新输入:"<<endl;
}
else if (answer < number) {
cout << "你猜小了" << "请重新输入:"<<endl;
}
else {
cout << "恭喜你,回答正确!!!\n一共猜了"<<count<<"次" << endl;
break;
}
}
return;
}
主函数
#include<iostream>
#include<math.h>
using namespace std;
int min(int x, int y) {
return x > y ? y : x;
}
int max(int x, int y) {
return x > y ? x : y;
}
int max(int x, int y, int z) {
return max(x, y) > max(y, z) ? max(x, y) : max(y, z);
}
int min(int x, int y, int z) {
return min(x, y) > min(y, z) ? min(y, z) : min(x, y);
}
int mid_number(int x, int y, int z) {
if (min(x, y, z) < x && x < max(x, y, z)) return x;
else if (min(x, y, z) < y && y < max(x, y, z)) return y;
else return z;
}
int is_year(int year) {
//判断year是否是闰年
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return 1;
}
return 0;
}
int gcd(int a, int b) {
//返回a,b的最大公约数
int temp;
while (b!=0)
{
int temp = a % b;
a = b;
b = temp;
}
return a;
}
int minCommonMultiple(int x, int y) {
return (x * y) / gcd(x, y);
}
int isPrimeNumber(int number) {
int temp = sqrt(number);
for (int i = 2; i < temp; i++) {
if (number % i == 0) return 0;
}
return 1;
}
double Newtons_method(int a) {
//用牛顿迭代法求X的开方
//谭浩强-C程序设计-第五章课后习题-第13题(p138)
// 习题解答---谭浩强-C程序设计--学习辅导(P47)
//x[n+1] = 1/2(x[n]+a/x[n])【 x = sqrt(a)】
double x0 = a / 2;
double x1 =(x0 + a / x0)/2;
do {
x0 = x1;
x1 = (x0 + a / x0)/2;
} while (fabs(x1 - x0) > (1e-5));
return x1;
}
void game() {
int answer;
int count = 0;
srand((int)time(0));
/*void srand( unsigned seed );
功能: 设置rand()随机序列种子。对于给定的种子seed,
rand()会反复产生特定的随机序列.*/
int number = rand() % 100 + 1;
cout << "\t\t------游戏开始-------\n" << "请输入你猜的数(tip:你的输入在1—100之间)"<<endl;
while (1) {
cin >> answer;
count++;
if (answer >number ) {
cout << "你猜大了"<<"请重新输入:"<<endl;
}
else if (answer < number) {
cout << "你猜小了" << "请重新输入:"<<endl;
}
else {
cout << "恭喜你,回答正确!!!\n一共猜了"<<count<<"次" << endl;
break;
}
}
return;
}
void reverse(int* &a,int length) {
int lift = 0;
int right = length - 1;
while (lift < right) {
int temp = a[lift];
a[lift] = a[right];
a[right] = temp;
lift++;
right--;
}
}
void copy(int* &oldArray, int* &newArray) {
*(newArray++) = *(oldArray++);
}
void sort(int*& a,int length) {
int indexMax = length - 1;
for (int i = 0; i < indexMax; i++) {
for (int j = i; j < indexMax; j++) {
if (a[i] > a[j]) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
int main() {
//------------------------------------
int year;
cout << "输入年份:"<<endl;
cin >> year;
if (is_year(year)) {
cout << year<<"是闰年"<<endl;
}
else cout << year<<"不是闰年"<<endl;
//------------------------------------
//game();
//-----------------------------------
int a;
cin >> a;
cout<<a<<"的平方根为"<<Newtons_method(a)<<endl;
//------------------------------------
cout << gcd(12, 40)<<endl;
cout << isPrimeNumber(11)<<endl;
cout << minCommonMultiple(12, 40)<<endl;
return 0;
}