贺利坚练习(3)
来源:互联网 发布:java项目开发全程实录 编辑:程序博客网 时间:2024/06/07 14:45
【项目1-函数版星号图】
这一组的练习意在通过调用函数输出星号图,体会与理解函数的工作过程,并为其后编制自定义函数实现特定功能。
(1)补充完下面的程序,使程序输出星号图:
void printstars(int m) //定义能输出一行m个星号的函数 { for (int j = 1; j <= m; ++j) cout << '*';}int _tmain(int argc, _TCHAR* argv[]){ int n = 6; //n代表要输出的行数 for (int i = 1; i <= n; ++i) { //请在下面写上调用printstars函数的语句,使程序输出右图 printstars(i); cout << endl; } return 0;}
(2)根据main函数中对printchs函数的调用,以及printchs的功能要求,编写printchs函数。、
//在下面写printchs函数的定义,功能是输出一行若干个指定字符void printchs(int m,char a) { for (int j = 1; j <= m; ++j) cout << a;}int _tmain(int argc, _TCHAR* argv[]){ int n = 6; //n代表要输出的行数 int i; //通过在下面的循环里调用printchs函数,输出右面的图 for (i = 1; i <= n; ++i) { printchs(n - i, ' '); printchs(2 * i - 1, '*'); cout << endl; } return 0;}
(3)在上面的程序中,只改动一处,输出下面的图形:
void printchs(int m,char a) //定义能输出一行m个星号的函数 { for (int j = 1; j <= m; ++j) cout << a;}int _tmain(int argc, _TCHAR* argv[]){ int n = 6; //n代表要输出的行数 int i; //通过在下面的循环里调用printchs函数,输出右面的图 for (i = 1; i <= n; ++i) { printchs(n - i, ' '); printchs(2 * i - 1, 'A'+i-1); //修改处 cout << endl; } return 0;}
【项目2-求最大公约数】
(1)输入两个数,并求出其最大公约数
笨方法:
int gcd(int x, int y) //定义用于求两数的最大公约数的函数,函数只管求值,不管输出。输出由main完成 { int z; if (x%y == 0) { z = y; } else if (y%x == 0) { z = x; } else { if (x < y) { for (int i = 1; i < x; ++i) { if ((x%i == 0) && (y%i == 0)) z = i; } } else { for (int i = 1; i < y; ++i) { if ((x%i == 0) && (y%i == 0)) z = i; } } } return z;}int _tmain(int argc, _TCHAR* argv[]){ int a, b, g; cin >> a >> b; g = gcd(a, b); cout << "最大公约数是: " << g; return 0;}
用辗转相除法:
int gcd(int x, int y) //定义用于求两数的最大公约数的函数,函数只管求值,不管输出。输出由main完成 { int r; while(y>0) { r=x%y; x=y; y=r; } return x; }int _tmain(int argc, _TCHAR* argv[]){ int a, b, g; cin >> a >> b; g = gcd(a, b); cout << "最大公约数是: " << g; return 0;}
(2)在上面程序基础上,增加函数gcds函数的声明和定义,实现求4数最大公约数的功能
int gcd(int x, int y) //定义用于求两数的最大公约数的函数,函数只管求值,不管输出。输出由main完成 { int r; while(y>0) { r=x%y; x=y; y=r; } return x; }int gcds(int x, int y, int z, int w) //调用gcd()求四数的最大公约数 { int r1 = gcd(x, y); int r2 = gcd(z, w); int r3 = gcd(r1, r2); return r3;}int _tmain(int argc, _TCHAR* argv[]){ int a, b,c,d, g; cin >> a >> b>>c>>d; g = gcds(a, b,c,d); cout << "最大公约数是: " << g; return 0;}
【项目4-特殊三位数】
请输出满足条件n=a!+b!+c!的所有三位数n,其中,a、b、c分别是n的百、十、个位数。要求用自定义函数实现求阶乘。
long fac(int n){ long result = 1; for (n; n > 0; --n) result *= n; return result;}int _tmain(int argc, _TCHAR* argv[]){ int a, b, c; for (int i = 100; i <= 999; ++i) { a = i / 100; b = i % 100 / 10; c = i % 10; if ((fac(a) + fac(b) + fac(c)) == i) cout << i << endl; } return 0;}
【项目5-当年第几天】
定义一个函数,其参数为年、月、日的值,返回这一天为该年的第几天。要求在main函数中输入年月日,然后调用这个函数求值,并在main函数中输出结果。
笨方法:
int days(int y, int m, int d){ int Cnt; if (year%4==0&&year%100!=0||year%400==0) { switch (m) { case 1: Cnt = d; break; case 2: Cnt = d + 31; break; case 3: Cnt = d + 60; break; case 4: Cnt = d + 91; break; case 5: Cnt = d + 121; break; case 6: Cnt = d + 152; break; case 7: Cnt = d + 182; break; case 8: Cnt = d + 213; break; case 9: Cnt = d + 244; break; case 10: Cnt = d + 274; break; case 11: Cnt = d + 305; break; case 12: Cnt = d + 335; break; } } else { switch (m) { case 1: Cnt = d; break; case 2: Cnt = d + 31; break; case 3: Cnt = d + 59; break; case 4: Cnt = d + 90; break; case 5: Cnt = d + 120; break; case 6: Cnt = d + 151; break; case 7: Cnt = d + 181; break; case 8: Cnt = d + 212; break; case 9: Cnt = d + 243; break; case 10: Cnt = d + 273; break; case 11: Cnt = d + 304; break; case 12: Cnt = d + 334; break; } } return Cnt;}int _tmain(int argc, _TCHAR* argv[]){ int year, month, day; cout << "输入年 月 日" << endl; cin >> year >> month >> day; cout << "这是该年的第" << days(year, month, day) << "天" << endl; return 0;}
简单方法1:
#include<iostream> using namespace std; int days(int y, int m, int d); int main() { int year, month, day; cout<<"输入年 月 日"<<endl; cin>>year>>month>>day; cout<<"这是该年的第"<<days(year, month, day)<<"天"<<endl; return 0; } int days(int y, int m, int d) { int sum=d; //加上前m-1月的天数 for(int i=1;i<m;i++) { switch(i) { case 2: sum+=((y%4==0&&y%100!=0)||y%400==0)?29:28; break; case 4: case 6: case 9: case 11: sum+=30; break; default: sum+=31; break; } } return sum; }
简单方法2:
#include<iostream> using namespace std; int days(int y, int m, int d); int main() { int year, month, day; cout<<"输入年 月 日"<<endl; cin>>year>>month>>day; cout<<"这是该年的第"<<days(year, month, day)<<"天"<<endl; return 0; } int days(int y, int m, int d) { int sum=d; //加上前m-1月的天数 for(int i=1; i<m; i++) { if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) sum+=31; else if (i==4||i==6||i==9||i==11) sum+=30; else sum+=((y%4==0&&y%100!=0)||y%400==0)?29:28; } return sum; }
简单方法3:
#include<iostream> using namespace std; int days(int y, int m, int d); int main() { int year, month, day; cout<<"输入年 月 日"<<endl; cin>>year>>month>>day; cout<<"这是该年的第"<<days(year, month, day)<<"天"<<endl; return 0; } int days(int y, int m, int d) { int sum=d; int a[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31}; for(int i=1; i<m; i++) { sum+=a[i]; } if(m>2&&((y%4==0&&y%100!=0)||y%400==0)) //若闰年,且晚于2月,加一天 sum++; return sum; }
【项目6-回文、素数】
(1)编制一个函数reverse,返回给定数据的“反序数”,例如输入1234,输出4321。请编制reverse函数,在下面代码的基础上补充相关的部分,实现要求的功能。
int reverse(int x) //函数只管求值,不管输出。输出由main函数完成 { int y,z=0; while (x > 0) { y = x % 10; x = x / 10; z = z * 10 + y; } return z;}int _tmain(int argc, _TCHAR* argv[]){ int m, n; cin >> m; n = reverse(m); cout << n << endl; return 0;}
(2)编制isPalindrome(),用于判断参数是否是回文数——回文数,即从前往后读和从后往前读都一样的数,如1122和121都是回文数,而1231、123都不是回文数。请编制isPalindrome(函数,在下面代码的基础上补充相关的部分,实现要求的功能。
bool isPalindrome(int x){ int save = x; int y, z = 0; while (x > 0) { y = x % 10; x = x / 10; z = z * 10 + y; } if (z == save) return 1; else return 0;}int _tmain(int argc, _TCHAR* argv[]){ int m; cin >> m; if (isPalindrome(m)) cout << m << "是回文数,噢耶!" << endl; else cout << m << "不是回文数。回文有什么好!" << endl; return 0;}
(3)编制一个返回值为bool型的函数isPrimer(),用于判断参数是否为素数(是素数返回true,否则false),自编main函数用于测试;
bool isPrimer(int n) //在这个函数中只管判断,不能出现cout语句! { for (int i = 3; i < n; ++i) { if (n%i == 0) return false; else if((i == n-1)&&(n%i != 0)) return true; }}int _tmain(int argc, _TCHAR* argv[]){ int num; cin >> num; if (isPrimer(num)) cout << "是质数 " << endl; else cout << "不是质数" << endl; return 0;}
- 贺利坚练习(3)
- 贺利坚练习(1)
- 贺利坚练习(2)
- 贺利坚练习(4)
- 贺利坚练习(5)
- 贺利坚练习(6)
- 贺利坚练习(7)
- html练习(3)
- leetCode练习(3)
- 练习代码(3)
- (3)选择器练习
- (3)练习
- JS练习(3)
- Java练习(3)
- Linux练习(3)
- 编程练习(3)
- CRACKME练习3(原创)
- 数据结构(java)练习3
- Mutations #Facebook Relay文档翻译#
- cdoj 84 Binary Operations
- lintcode-x的平方根-141
- ffmpeg 接收解码rtp h264视频流
- UVA301回溯法求坐火车问题的最大收益
- 贺利坚练习(3)
- vc中如何绘制直方图
- How to find the crash point: Android Native crash
- 黑马程序员-反射篇
- 深入理解WeakHashmap
- Cstyle的UEFI导读:第21.0篇 UEFI的N种实现及差别
- UGUI基本概念
- jQuery源码学习 之 ready与load事件 ---- day4
- 网络连接失败