提示:
-
注意所有符号都是英文,最后没有回车。
-
将要求输出字符串之外的所有printf或者cout的输出全部删除
-
将return 0;之前的getchar();或者system("pause");等暂停程序运行的输出都删除。
-
提交之前先在自己的开发环境下运行成功再拷贝到作业区提交。
-
输出的语句最好拷贝到程序中,避免不小心的键盘按键错误输入造成扣分。
1 #include <stdio.h> 2 3 int main() 4 { 5 printf("hello! welcome to computer world!"); 6 return 0; 7 }
2、多行打印
打印下面的3行数据:
Please display these words:
1. press return keyboard to enter the game.
2. press esc keyboard to exist the game.
-
注意所有符号都是英文,最后没有回车。
-
将要求输出字符串之外的所有printf或者cout的输出全部删除
-
将return 0;之前的getchar();或者system("pause");等暂停程序运行的输出都删除。
-
提交之前先在自己的开发环境下运行成功再拷贝到作业区提交。
-
输出的语句最好拷贝到程序中,避免不小心的键盘按键错误输入造成扣分。
-
1.和2.后面有一个空格。
1 #include <stdio.h> 2 3 int main() 4 { 5 printf("Please display these words: 6 1. press return keyboard to enter the game. 7 2. press esc keyboard to exist the game."); 8 return 0; 9 }
某明星每年都会做慈善,小明统计了一下这个明星今年做了3次慈善,第一次捐助希望小学x万元,第二次捐助一个癌症患者y万元,第三次举办了慈善晚会,募捐z万元,其中有t万元是其他人捐助的。
请问,这个明星今年一共捐助了多少钱?(万元)
输入: 4个空格分开的正实数(单精度实数)
输出:总共捐款数(只输出数值,保留小数点后的小数2位)
如果输入不合法,则输出error
例如:
输入:3.2 5 7 5.5
输出:10.50
输入:5 -2 1 3
输出:error
输入:3 a 2 1
输出:error
1 #include <stdio.h> 2 3 int main() 4 { 5 float x,y,z,t; 6 int ret = scanf("%f%f%f%f",&x,&y,&z,&t); 7 if(ret != 4 || x<=0 || y<=0 || z<=0 || t<=0) 8 printf("error"); 9 else 10 printf("%.2f", x+y+z-t); 11 return 0; 12 }
4、发工资
小明每个月基本工资x元,还有奖金y元,每迟到1次扣奖金的50元。这个月迟到z次,最多将所有奖金扣完。
请问小明这个月领多少钱?
输入:3个正整数
输出:1个整数
如果输入不合法,则输出"error"
比如:
输入:3000 200 2
输出: 3100
输入:5600 500 3
输出:5950
输入:1000 -2 5
输出:error
输入: 2000 200 6
输出:2000
输入:8000 200 -3
输出: error
1 #include <stdio.h> 2 int main() 3 { 4 int x,y,z,t; 5 int ret = scanf("%d%d%d",&x,&y,&z); 6 7 if(ret != 3 || x<=0 || y<=0 || z<=0){ 8 printf("error"); 9 } 10 else{ 11 t = y-z*50; 12 if( t<0 ) t = 0; 13 printf("%d", x+t); 14 } 15 return 0; 16 }
5、闰年判断
题目内容:
输入一个1900-2200之间的年份,
判断这一年是不是闰年,是闰年输出yes,不是则输出no
闰年判断条件:
1、能整除4且不能整除100
2、能整除400
如果输入不合法,输出error
输入样例:
1900
输出样例:
no
1 #include <stdio.h> 2 3 int main() 4 { 5 int y; 6 int ret = scanf("%d",&y); 7 if(ret != 1 || y<1900 && y>2200) 8 printf("error"); 9 else if(y%4==0&&y%100!=0||y%400==0) 10 printf("yes"); 11 else 12 printf("no"); 13 return 0; 14 }
6、百钱百鸡
题目内容:
一只公鸡值5钱,
一只母鸡值3钱,
三只小鸡值1钱,
现在用百钱买百鸡,
请问公鸡、母鸡、小鸡各多少只?
列举所有可能,从公鸡数目小到大排列,公鸡相同则按照母鸡递增顺序,公鸡母鸡都相同,则按照小鸡递增顺序
输出结果:
a,b,c
d,e,f
.....
(a,d...对应公鸡数量,b,e...对应母鸡数量,c,f...对应小鸡数量)
1 #include <stdio.h> 2 int main() 3 { 4 int i,j,k; 5 for(i=0; i<=100/5; ++i){ 6 for(j=0; j<=100/3; ++j){ 7 k = 100 - i - j; //百鸡 8 if(k%3==0 && 100 == k/3 + i*5 + j*3) //百钱 9 printf("%d,%d,%d ",i,j,k); 10 } 11 } 12 return 0; 13 }
7、猴子摘桃
题目内容:
一个猴子摘了些桃子,
第一天吃掉其中的一半然后多吃了1个,
第二天照此方法又吃掉了剩下桃子的一半加1个,
以后每天如此,直到第十天晚上,猴子发现只剩下了1个桃子,
请问猴子第一天总共摘了多少个桃子?
并反向打印每天所剩桃子数。
即a,b,c,d.....,sum
分别表示第九天剩余桃子,第八天剩余桃子,....,第一天剩余桃子,总桃子数。
比如,如果总桃子10个,第一天剩余10/2-1=4个,第二天剩余4/2-1=1个,根据题目要求应该输出第一天剩余桃子,总桃子分别为:
4,10
1 #include <stdio.h> 2 int main() 3 { 4 int day = 10, remain = 1; 5 for(day =10; day>0; --day) 6 { 7 remain = 2 * (remain + 1); 8 if(day!=10) 9 printf(","); 10 printf("%d", remain); 11 } 12 return 0; 13 }
8、回文判断
题目内容:
回文测试:输入一30个字符以内的字符串,判断是否为回文;如果是,则打印"true";否则打印"false"。像"aba"这样的从左往右读与从右往左读一致就是回文。
输入样例1:
ayzya
输出样例1:
true
输入样例2:
ayzy
输出样例2:
false
1 #include <stdio.h> 2 #include <string.h> 3 int main() 4 { 5 char str[31] = ""; 6 scanf("%s",str); 7 char *p1=str, *p2 = str+strlen(str)-1; 8 while(p1<p2 && *p1==*p2){ 9 p1++,p2--; 10 } 11 if(p1>=p2) 12 printf("true"); 13 else 14 printf("false"); 15 return 0; 16 }
9、设计数字时钟
题目内容:
按照下面要求定义一个时钟结构体类型:
struct clock
{
int hour;
int minute;
int second;
};
typedef struct clock CLOCK;
然后,编程实现将时钟模拟显示在屏幕上。注意:时钟是24小时的。需要判断输入的数据是否合法。
输入样例1:
10,20,3
输出样例1:
10:20:03
输入样例1:
25,100,200
输出样例2:
error
1 #include <stdio.h> 2 #include <string.h> 3 4 struct clock 5 { 6 int hour; 7 int minute; 8 int second; 9 }; 10 typedef struct clock CLOCK; 11 12 int main() 13 { 14 CLOCK c; 15 int ret = scanf("%d,%d,%d",&c.hour,&c.minute,&c.second); 16 if(ret!=3 || c.hour>=24 || c.minute>=60 || c.second>=60){ 17 printf("error"); 18 } 19 else{ 20 printf("%02d:%02d:%02d",c.hour,c.minute,c.second); 21 } 22 return 0; 23 }
10、排序
题目内容:
接受若干非负整数(数据不重复),当个数超过10个或者遇到负数时停止接受,将这几个整数按升序排列输出,并且奇数在前,偶数在后。
输出要求,每个数字后输出空格与其他数字隔开,最后一个数字后也有空格
输入样例1:
10 9 8 7 6 5 4 3 2 1
输出样例1:
1 3 5 7 9 2 4 6 8 10回车
输入样例2:
2 3 4 5 -1
输出样例2:
3 5 2 4回车
1 #include <stdio.h> 2 #include <string.h> 3 4 void InsertSort(int *arr, int n) 5 { 6 int i; 7 for(i=1; i<n; ++i){/*第0个元素有序,从第1个元素向右无序*/ 8 int j=i-1,key=arr[i];/*保存第i个元素,左边的元素i-1*/ 9 while(j>=0 && key<arr[j]){/*保存的元素key与之前的元素从右向左逐个比较*/ 10 arr[j+1]=arr[j];/*移动(向后赋值)*/ 11 j--; 12 } 13 arr[j+1]=key;/*j--退出,恢复正确值j+1*/ 14 } 15 } 16 17 int main() 18 { 19 int i=0,x,flag=0, arr[10]={0}; 20 21 scanf("%d",&x); 22 while(i<10 && x>0){ 23 arr[i++] = x; 24 scanf("%d",&x); 25 } 26 27 InsertSort(arr,i); 28 for(int j=0; j<i; ++j){ 29 if(arr[j]%2){ 30 if(flag) printf(" "); 31 flag = 1; 32 printf("%d",arr[j]); 33 } 34 } 35 36 for(int j=0; j<i; ++j){ 37 if(arr[j]%2==0) 38 printf(" %d",arr[j]); 39 } 40 41 return 0; 42 }
11、最大整数
题目内容:
输入3个整数a,b,c,用指针p=&a,q=&b,请用max指向最大整数并输出。
输出按照如下格式输出: printf("max=%d ",*pmax);
输入样例:
1,2,3
输出样例:
max=3
1 #include <stdio.h> 2 int main() 3 { 4 int a,b,c,max; 5 int *pmax = &max; 6 scanf("%d,%d,%d",&a,&b,&c); 7 8 if(a>b) 9 max = a; 10 else 11 max = b; 12 if(c>max) 13 max = c; 14 printf("max=%d ",*pmax); 15 return 0; 16 }
12、删除字符串中连续的重复字符
题目内容:
功能:实现删除字符串中连续的重复字符(除字母和数字)。 输入为字符串,将字符串中连续重复的,非字母和数字的字符删去,然后输出处理后的字符串。要求用指针指向输入的字符串进行操作。
输入格式:
输入字符串最长50个字符,之后截断,只输出处理后的字符串。
输出格式:
输入样例:
1+++2==3
输出样例:
1+2=3
1 #include <stdio.h> 2 #define N 100 3 int main() 4 { 5 char str[N] = ""; 6 char *p = str; 7 gets(str); 8 9 while(*p){ 10 printf("%c",*p++); 11 while(*p&&!(*p>='0'&&*p<='9'||*p>='a'&&*p<='z'||*p>='A'&&*p<='Z')&&*p==*(p-1)) 12 p++; 13 } 14 printf(" "); 15 return 0; 16 }
13、统计输出字符串中的字母个数和数字个数。
题目内容:
编写程序,输入一个字符串,分别统计输出该字符串中的字母个数和数字个数。要求用指针指向这个字符串进行处理。
输入格式:
字符串
输出格式:
英文逗号分隔的2个整数,第一个整数是字母个数,第二个整数的数字个数。
输入样例:
the day the month the year 123
输出样例:
21,3
1 #include <stdio.h> 2 #define N 100 3 int main() 4 { 5 char str[N] = ""; 6 char *p = str; 7 int letters = 0, digits = 0; 8 gets(str); 9 10 while(*p){ 11 if(*p>='0'&&*p<='9') 12 digits++; 13 if(*p>='a'&&*p<='z'||*p>='A'&&*p<='Z') 14 letters++; 15 p++; 16 } 17 printf("%d,%d ",letters,digits); 18 19 return 0; 20 }
14、比较字符串是否相等(25分)
题目内容:
编写程序,输入两个字符串,通过2个指针p和q分别指向这2个字符串,比较字符串是否相等。 要求不使用strcmp函数。
输入格式:
string1回车string2回车
string1和string2最长为256,可能包含空格
输出格式:
相等输出: equal
不等输出: unequal
输入样例:
string1
string2
输出样例:
unequal
1 #include <stdio.h> 2 #define N 300 3 int main() 4 { 5 char str1[N] = ""; 6 char str2[N] = ""; 7 char *p = str1, *q = str2; 8 9 gets(str1); 10 gets(str2); 11 12 while(*p&&*q&&*p==*q){ 13 p++; q++; 14 } 15 16 if(!(*p)&&!(*q)) 17 printf("equal "); 18 else 19 printf("unequal "); 20 21 return 0; 22 }
15、水仙花数
设有一个3位数,它的百位数、十位数、个位数的立方和正好等于这个3位数,如153=1+125+27。
编写函数,返回小于等于传入参数n且满足该条件的三位数(称为水仙花数)的个数。
(指定函数原型:int find(int n))
返回值要求:如果传入参数n不是三位数或者在该范围内没有找到,则find返回0,
否则返回找到的水仙花数的个数。
注意:不要在find函数中打印(如调用printf或puts等函数)任何数据,否则视为错误。
提交的程序需要包含需要的头文件及如下的main函数:
#include<stdio.h>
#include<stdlib.h>
int find(int n);
int main()
{
int n,r;
r=scanf("%d",&n);
if(r!=-1){printf("error",return -1;}
r=find(n);
printf("%d",r);
return 0;
}
输入1:
400
输出1:
3
输入2:
59
输出2:
0
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int find(int n); 5 int main() 6 { 7 int n,r; 8 r=scanf("%d",&n); 9 if(r!=1){printf("error"); return 0;} 10 r=find(n); 11 printf("%d",r); 12 return 0; 13 } 14 int find(int n){ 15 int cnt = 0; 16 if(n>=100&&n<=999) 17 for(int i = 123; i<=n; ++i ){ 18 int a = i%10, b = i/10%10, c = i/100; 19 if(a*a*a + b*b*b + c*c*c == i) cnt++; 20 } 21 return cnt; 22 }
16、最小公倍数
编写程序,从键盘输入5个正整数,然后求出它们的最小公倍数,并显示输出。
(通过调用对两个正整数求最小公倍数的函数实现)(参考函数原型:int LCM(int x, int y))
输入输出格式要求:
编写函数int LCM(int x, int y);返回值为x和y的最小公倍数。
要求在main函数接收5个正整数,然后通过调用LCM函数最终得到这5个数的最小公倍数,最后输出最小公倍数。
如果输入数据错误,输出"error"。
例如:
输入:2 3 6 9 10
输出:90
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int LCM(int x, int y); 5 int GCD(int x, int y); 6 int main() 7 { 8 /* */ 9 int a,b,c,d,e,ret; 10 ret = scanf("%d%d%d%d%d",&a,&b,&c,&d,&e); 11 if(ret!=5 || a<=0 || b<=0 || c<=0 || d<=0 || e<=0) 12 printf("error"); 13 else 14 printf("%d",LCM(LCM(LCM(LCM(a,b),c),d),e)); 15 return 0; 16 } 17 18 int LCM(int x, int y){ 19 return x/GCD(x,y)*y; 20 } 21 int GCD(int x, int y){ 22 return y == 0 ? x : GCD(y, x%y); 23 }
17、字符串的拷贝
编程实现函数:void my_strcpy(char * destination,char * source);
函数功能:将source指向的字符串拷贝到destination指向的位置。
注意:使用空格字符来表示字符串的结束。例如source指向位置,依次保存了字符'a',字符'b',字符空格' ',字符'c',则source指向的字符串为"ab"。destionation原来存储的字符串是"xyz tdk",则拷贝后,destionation存储的应该是“ab tdk”。遇到异常情况,输出"error";否则不要随意输出,会视为错误.
您的main函数需要读入2个长度不超过80字节的字符串(按行及下面顺序读入source和destionation字符串),然后调用my_strcpy函数,最后用puts函数输出destionation里面存储的字符串。
例如:
输入1:
xyz abc
a kp
输出1:
xyz
输入2:
xyz abc
a kppp
输出2:
xyz pp
1 #include<stdio.h> 2 3 void my_strcpy(char * destination,char * source); 4 int main() 5 { 6 char source[81] = ""; 7 char destination[81]=""; 8 gets(source); 9 gets(destination); 10 11 my_strcpy(destination,source); 12 puts(destination); 13 14 return 0; 15 } 16 void my_strcpy(char * destination,char * source){ 17 if(destination == NULL||source ==NULL||source[0] ==' '){ 18 printf("error"); 19 return; 20 } 21 char *p1 = destination, *p2 = source; 22 while((*p1++ = *p2++) != ' '); 23 }
18、完成point类
定义一个点类Point,并定义成员函数double Distance(const & Point) 求两点的距离。
输入两个点的坐标,创建两个点, 然后调用Point类的Distance方法输出两个点的距离。
在你的代码中除了实现Point类以外,还需一如下main函数:
int main(){
double a,b,c,d;
cin>>a>>b>>c>>d;
Point A(a,b),B(c,d);
cout<<A.Distance(B)<<endl;
return 0;
}
如输入:
1 2 3 4回车
输出:
2.83
1 #include <iostream> 2 #include <iomanip> 3 #include <cmath> 4 using namespace std; 5 class Point{ 6 double a,b; 7 public: 8 Point(double a, double b){ 9 this->a = a; 10 this->b = b; 11 } 12 double Distance(const Point &p){ 13 return sqrt((a-p.a)*(a-p.a)+(b-p.b)*(b-p.b)); 14 } 15 }; 16 // 17 int main() 18 { 19 double a,b,c,d; 20 cin>>a>>b>>c>>d; 21 22 Point A(a,b),B(c,d); 23 cout<<setprecision(3)<<A.Distance(B)<<endl; 24 return 0; 25 }
19、实现Usr类
实现User类的构造函数和AddUser方法添加新用户,
实现int login(char *name,char * pass)方法,该方法接受用户名和密码,
判断用户名对应的密码是否正确,如果正确返回用户的编号,如果不正确返回-1。
User类的使用示意如下所示,在你的代码中除了实现User类以外,还需一如下main函数
int main(){
char name[10],name1[10],pass[10],pass1[10];
cin>>name>>pass>>name1>>pass1;
User user("LiWei","liwei101");
user.AddUser(name,pass);
if (user.login(name1,pass1) >=0)
{
cout<<"Success Login!"<<endl;
}
else{
cout<<"Login failed!"<<endl;
}
return 0;
}
例如输入:
test 1234567 test 123456回车
输出:
Login failed!
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 #define N 100 5 class User{ 6 string name[N]; 7 string pass[N]; 8 static int index; 9 public: 10 User(string name,string pass){ 11 this->name[index] = name; 12 this->pass[index] = pass; 13 index++; 14 } 15 ~User(){index--;} 16 void AddUser(string name,string pass){ 17 this->name[index] = name; 18 this->pass[index] = pass; 19 index++; 20 } 21 int login(string name,string pass){ 22 for(int i=0; i<=index; ++i) 23 if(this->name[i] == name && this->pass[i] == pass) 24 return 1; 25 return -1; 26 } 27 }; 28 int User::index = 0; 29 /* class User{ 30 string name; 31 string pass; 32 public: 33 User(string name,string pass){ 34 this->name = name; 35 this->pass = pass; 36 } 37 void AddUser(string name,string pass){ 38 this->name = name; 39 this->pass = pass; 40 } 41 int login(string name,string pass){ 42 if(this->name == name && this->pass == pass) 43 return 1; 44 return -1; 45 } 46 }; */ 47 48 int main() 49 { 50 char name[10],name1[10],pass[10],pass1[10]; 51 cin>>name>>pass>>name1>>pass1; 52 53 User user("LiWei","liwei101"); 54 55 user.AddUser(name,pass); 56 57 if (user.login(name1,pass1) >=0) 58 { 59 cout<<"Success Login!"<<endl; 60 } 61 else{ 62 cout<<"Login failed!"<<endl; 63 } 64 return 0; 65 }
20、实现Sutdent类
设计一个学生类Student,包含学生学号(最长10位)、姓名(不用支持中文最长12位)、三门课程成绩(成绩是单精度实数类型)等基本信息,
计算每门课程学生的平均成绩。
需实现Student的display成员函数,依次输出学号 姓名 和三门课的成绩,每个输出以空格隔开
成员函数 average1 ,average2 ,average3 ,分别返回三门课的平均成绩。
Student类的使用方法如下所示,在你的代码中除了实现Student类,还需引入以下代码:
int main(){
Student *stu1,*stu2,*stu3;
char name1[10],name2[10],name3[10];
char num1[12],num2[12],num3[12];
int grade1[3],grade2[3],grade3[3];
cin>>name1>>num1>>grade1[0]>>grade1[1]>>grade1[2];
cin>>name2>>num2>>grade2[0]>>grade2[1]>>grade2[2];
cin>>name3>>num3>>grade3[0]>>grade3[1]>>grade3[2];
stu1 = new Student(name1,num1,grade1[0],grade1[1],grade1[2]);
stu2 = new Student(name2,num2,grade2[0],grade2[1],grade2[2]);
stu3 = new Student(name3,num3,grade3[0],grade3[1],grade3[2]);
stu1->display();
stu2->display();
stu3->display();
cout<<"The average grade of course1:"<<setprecision(4)<<stu2->average1()<<endl;
cout<<"The average grade of course2:"<<setprecision(4)<<stu2->average2()<<endl;
cout<<"The average grade of course3:"<<setprecision(4)<<stu2->average3()<<endl;
return 0;
}
上述代码执行时
输入:
200906294 LiWeiwei 88 75 91 200902164 ChenHanfu 86 78 93 200908079 ZhanGaolin 94 69 97
输出:
200906294 LiWeiwei 88 75 91回车
200902164 ChenHanfu 86 78 93回车
200908079 ZhanGaolin 94 69 97回车
The average grade of course1:89.33回车
The average grade of course2:67.33回车
The average grade of course3:93.67回车
1 #include <iostream> 2 #include <iomanip> 3 #include <cmath> 4 using namespace std; 5 class Student{ 6 string name, num; 7 float grade1,grade2,grade3; 8 static float ave1,ave2,ave3; 9 static int count; 10 public: 11 Student(string name,string num, float grade1,float grade2,float grade3){ 12 this->name = name; 13 this->num = num; 14 this->grade1 = grade1; 15 this->grade2 = grade2; 16 this->grade3 = grade3; 17 count++; 18 ave1 += grade1; 19 ave2 += grade2; 20 ave3 += grade3; 21 } 22 void display(){ 23 cout<<name<<" "<<num<<" "<<grade1<<" "<<grade2<<" "<<grade3<<endl; 24 } 25 float average1(){ 26 return ave1 /= count; 27 } 28 float average2(){ 29 return ave2 /= count; 30 } 31 float average3(){ 32 return ave3 /= count; 33 } 34 }; 35 float Student::ave1 = 0.0; 36 float Student::ave2 = 0.0; 37 float Student::ave3 = 0.0; 38 int Student::count = 0; 39 40 int main() 41 { 42 Student *stu1,*stu2,*stu3; 43 char name1[10],name2[10],name3[10]; 44 char num1[12],num2[12],num3[12]; 45 int grade1[3],grade2[3],grade3[3]; 46 47 cin>>name1>>num1>>grade1[0]>>grade1[1]>>grade1[2]; 48 cin>>name2>>num2>>grade2[0]>>grade2[1]>>grade2[2]; 49 cin>>name3>>num3>>grade3[0]>>grade3[1]>>grade3[2]; 50 51 stu1 = new Student(name1,num1,grade1[0],grade1[1],grade1[2]); 52 stu2 = new Student(name2,num2,grade2[0],grade2[1],grade2[2]); 53 stu3 = new Student(name3,num3,grade3[0],grade3[1],grade3[2]); 54 55 stu1->display(); 56 stu2->display(); 57 stu3->display(); 58 59 cout<<"The average grade of course1:"<<setprecision(4)<<stu2->average1()<<endl; 60 /**/cout<<"The average grade of course2:"<<setprecision(4)<<stu2->average2()<<endl; 61 cout<<"The average grade of course3:"<<setprecision(4)<<stu2->average3()<<endl; 62 return 0; 63 }
21、形状类
已知基类ShapeFactory的声明如下:
const float pi=3.1416;
class ShapeFactory
{
public:
ShapeFactory(){};
virtual ~ShapeFactory(){};
virtual float Circumstance(){return 0;};
}
ShapeFactory *Create(float a,float b,float c);
ShapeFactory *Create(float a,float b,float c,float d);
ShapeFactory *Create(float r);
请写出三角形(Triangle)、四边形(Quadrangle)、圆形(Circle)三个派生类,构造函数分别传入三边/四边/半径的长度(不用检查是否符合三角形、矩形、圆的条件,没有异常输出),重写出求周长的函数(Circumstance函数)。
然后实现基类的Create函数,这里重载的三个Create函数,分别生成三角形、四边形、圆形的对象。
比如三角形类为Triangle:
ShapeFactory * ShapeFactory::Create(float a,float b,float c)
{
ShapeFactory *p=new Triangle(a,b,c);
return p;
}
如果三角形输入的三边长度是 3 4 5,四边形输入的四条边的长度是2 3 4 7,圆的半径是3,则要求程序运行能够得到如下的提示和输出:
1 #include <iostream> 2 using namespace std; 3 4 const float pi=3.1416; 5 class ShapeFactory 6 { 7 public: 8 ShapeFactory(){}; 9 virtual ~ShapeFactory(){}; 10 virtual float Circumstance(){return 0;}; 11 }; 12 13 class Triangle:public ShapeFactory 14 { 15 float a,b,c; 16 public: 17 Triangle(float a,float b,float c){ 18 this->a = a; 19 this->b = b; 20 this->c = c; 21 } 22 float Circumstance(){ 23 return a+b+c; 24 } 25 }; 26 27 class Quadrangle:public ShapeFactory 28 { 29 float a,b,c,d; 30 public: 31 Quadrangle(float a,float b,float c,float d){ 32 this->a = a; 33 this->b = b; 34 this->c = c; 35 this->d = d; 36 } 37 float Circumstance(){ 38 return a+b+c+d; 39 } 40 }; 41 42 class Circle:public ShapeFactory 43 { 44 float r; 45 public: 46 Circle(float r){ 47 this->r = r; 48 } 49 float Circumstance(){ 50 return 2*pi*r; 51 } 52 53 }; 54 int main() 55 { 56 float a,b,c,d,r; 57 cout<<"输入三角形的3边长度:"; 58 cin>>a>>b>>c; 59 Triangle t(a,b,c); 60 cout<<"三角形的周长为:"<<t.Circumstance()<<endl; 61 62 cout<<"输入四边形的4边长度:"; 63 cin>>a>>b>>c>>d; 64 Quadrangle q(a,b,c,d); 65 cout<<"四边形的周长为:"<<q.Circumstance()<<endl; 66 67 cout<<"输入圆的半径:"; 68 cin>>r; 69 Circle ci(r); 70 cout<<"圆的周长为:"<<ci.Circumstance()<<endl; 71 72 return 0; 73 }
22、实现带日期的时钟类
实现带日期的时钟类,具体要求如下:
已知时钟类的定义如下:
#include<iostream>
using namespace std;
bool leap(int year)
{
if(year%400==0||(year%4==0 && year%100!=0))
return true;
return false;
}
class Clock{
public:
Clock(int h,int m,int s)
{
hour =(h>23? 0:h);
minute = (m>59?0:m);
second = (s>59?0:s);
}
virtual void run()
{
second = second+1;
if (second>59)
{
second =0;
minute+=1;
}
if (minute>59)
{
minute =0;
hour+=1;
}
if (hour>23)
{
hour =0;
}
}
virtual void showTime()
{
cout<<"Now:"<<hour<<":"<<minute<<":"<<second<<endl;
}
int getHour(){return hour;}
int getMinute(){return minute;}
int getSecond(){return second;}
protected:
int hour;
int minute;
int second;
};
日期类定义如下:
class Date{
public:
Date(int y=1996,int m=1,int d=1)
{
if (m>12||m<1)
{
m=1;
}
if(d>days(y,m))
{
day = 1;
}
day =d;
year =y;
month =m;
};
int days(int year,int month);
void NewDay();
void showTime()
{
cout<<year<<"-"<<month<<"-"<<day<<endl;
}
protected:
int year;
int month;
int day;
};
int main()
{
int h,m,s,day,month,year;
cin>>h>>m>>s>>day>>month>>year;
ClockWithDate cd1(h,m,s,day,month,year);
cd1.showTime();
cout<<"现在运行x秒:";
int x;
cin>>x;
for(int i=0;i<x;++i)
cd1.run();
cd1.showTime();
return 0;
}
需要类外实现Date类的days方法,根据年和月,返回该年该月对应的天数
实现Date类的NewDay方法,该方法将Date代表的日期增加一天。
实现ClockWithDate类,它继承至Clock类和Date类,记录时间和日期
重新实现ClockWithDate类的showTime方法和run方法。
showTime方法输出当的时间和日期,先输出时间再输出日期。
run方法每次将现在的时间增加一秒,并且当时间超过23:59:59时,更新日期。
比如某次程序运行输入当前时间是:1 1 1 7 10 2000(2000年10月7号1点1分1秒),然后输入运行时间x: 5,则程序运行的输入输出如下:
输入:
1 1 1 7 10 2000
5
输出:
Now:1:1:1
2000-10-7
现在运行x秒:Now:1:1:6
2000-10-7
1 #include<iostream> 2 using namespace std; 3 4 bool leap(int year) 5 { 6 if(year%400==0||(year%4==0 && year%100!=0)) 7 return true; 8 return false; 9 } 10 11 class Clock 12 { 13 public: 14 Clock(int h,int m,int s) 15 { 16 hour =(h>23? 0:h); 17 minute = (m>59?0:m); 18 second = (s>59?0:s); 19 } 20 virtual void run() 21 { 22 second = second+1; 23 if (second>59) 24 { 25 second =0; 26 minute+=1; 27 } 28 if (minute>59) 29 { 30 minute =0; 31 hour+=1; 32 } 33 if (hour>23) 34 { 35 hour =0; 36 } 37 } 38 39 virtual void showTime() 40 { 41 cout<<"Now:"<<hour<<":"<<minute<<":"<<second<<endl; 42 } 43 int getHour(){return hour;} 44 int getMinute(){return minute;} 45 int getSecond(){return second;} 46 47 private: 48 int hour; 49 int minute; 50 int second; 51 }; 52 53 class Date 54 { 55 public: 56 Date(int y=1996,int m=1,int d=1) 57 { 58 if (m>12||m<1) 59 { 60 m=1; 61 } 62 if(d>days(y,m)) 63 { 64 day = 1; 65 } 66 day =d; 67 year =y; 68 month =m; 69 }; 70 71 int days(int year,int month){ 72 int days[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; 73 int d = days[month]; 74 if(leap(year)&&month==2) 75 d++; 76 return d; 77 } 78 void NewDay(){ 79 day++; 80 if(day>days(year,month)) 81 { 82 day = 1; 83 month++; 84 } 85 if(month>12){ 86 month = 1; 87 year++; 88 } /* */ 89 }; 90 void showTime() 91 { 92 cout<<year<<"-"<<month<<"-"<<day<<endl; 93 } 94 private: 95 int year; 96 int month; 97 int day; 98 }; 99 100 class ClockWithDate:public Clock,Date 101 { 102 public: 103 ClockWithDate(int h,int m,int s,int day,int month,int year):Clock(h,m,s),Date(year,month,day){} 104 void showTime() 105 { 106 Clock::showTime(); 107 Date::showTime(); 108 } 109 virtual void run() 110 { 111 if(getSecond()==59&&getMinute()==59&&getHour()==23){ 112 NewDay(); 113 } 114 Clock::run(); 115 } 116 }; 117 118 int main() 119 { 120 int h,m,s,day,month,year; 121 cin>>h>>m>>s>>day>>month>>year; 122 ClockWithDate cd1(h,m,s,day,month,year); 123 cd1.showTime(); 124 cout<<"现在运行x秒:"; 125 126 int x; 127 cin>>x; 128 for(int i=0;i<x;++i) 129 cd1.run(); 130 cd1.showTime(); 131 return 0; 132 }
设有一个3位数,它的百位数、十位数、个位数的立方和正好等于这个3位数,如153=1+125+27。 编写函数,找出所有满足该条件的数(称为水仙花数)。 (参考函数原型:int find(int n)) 输入输出格式要求: 编写函数int find(int n); 在find里输出所有小于等于n的水仙花数,以逗号分隔 返回值要求:如果没有,则find返回0,否则返回找到的水仙花数的个数 例如: n为:400 输出:153,370,371 find函数返回3
1 # include <stdio.h> 2 int find(int n) 3 { 4 int flag=0; 5 for(int i=100; i<=n; ++i) 6 { 7 int a=i%10; 8 int b = i/10%10; 9 int c = i/100; 10 if(a*a*a+b*b*b+c*c*c==i) 11 { 12 if(flag) 13 printf(","); 14 printf("%d",i); 15 flag++; 16 } 17 } 18 printf(" "); 19 return flag; 20 } 21 int main() 22 { 23 int n; 24 scanf("%d",&n); 25 printf("%d ",find(n)); 26 return 0; 27 }
2、逆序memcpy
实现逆序的Memcpy方法。 void * reversememcpy ( void * destination, const void * source, int num ); 从source所指的内存地址的起始位置开始拷贝num个字节,逆序保存到目标destination所指的内存地址的起始位置中。 返回destination。 注意为逆序拷贝。source指向位置,依次保存了10,20,30,当num=3时,则逆序拷贝后destination指向的位置应该依次保存30,20,10.
输入:1,2,3
输出:3,2,1
(逆序拷贝,实参指针类型与函数指针类型必须一致,否则只能正序拷贝)
1 # include <stdio.h> 2 #define N 100 3 void * reversememcpy ( void * destination, const void * source, int num ); 4 int main() 5 { 6 int arr[N] = {0},num = 3; 7 scanf("%d,%d,%d",&arr[0],&arr[1],&arr[2]); 8 9 int *p = (int *)reversememcpy(&arr[num],&arr[0],num); 10 for(int i=0; i<num;++i) 11 { 12 if(i) 13 printf(","); 14 printf("%d",p[i]); 15 } 16 return 0; 17 } 18 void *reversememcpy(void *destination,const void *source,int num) 19 { 20 int *des=(int*)destination,*src=(int*)source; 21 des += num-1; 22 while(num--) 23 { 24 *des-- = *src++; 25 } 26 return destination; 27 }
memcpy源码(源头与目标内存重叠或源与目标内存不重叠(前后之分),从源头开始复制;源尾与目标内存重叠,从源尾开始复制)
1 void *memcpy(void *dst, const void *src, size_t len) 2 { 3 if(NULL == dst || NULL == src){ 4 return NULL; 5 } 6 7 void *ret = dst; 8 9 if(dst <= src || (char *)dst >= (char *)src + len){ 10 //目标低于等于源或目标高于等于源+len,从源头地址开始复制 11 while(len--){ 12 *(char *)dst = *(char *)src; 13 dst = (char *)dst + 1; 14 src = (char *)src + 1; 15 } 16 }else{ 17 //目标高于源并且小于源+len,从源尾地址开始复制 18 src = (char *)src + len - 1; 19 dst = (char *)dst + len - 1; 20 while(len--){ 21 *(char *)dst = *(char *)src; 22 dst = (char *)dst - 1; 23 src = (char *)src - 1; 24 } 25 } 26 return ret; 27 }
3、扩展String类
首先输入一个字符串,然后依次将功能显示出来
输入:testtesttest,3,test,t,a,test,str,t,es
输出:4,aesaaesaaesa,strstrstr,eseses,tttttt
1 #include <iostream> 2 #include <cstring> 3 #define N 256 4 using namespace std; 5 class String 6 { 7 protected: 8 char *mystr; 9 int len; 10 public: 11 String(const char *p) 12 { 13 len = strlen(p); 14 mystr = new char[len+1]; 15 strcpy(mystr,p); 16 } 17 ~String() 18 { 19 if (mystr !=NULL) 20 { 21 delete []mystr; 22 mystr = NULL; 23 len = 0; 24 } 25 } 26 void showStr(){cout <<mystr;} 27 char * GetStr(){return mystr;} 28 virtual bool IsSubString(const char *str) 29 { 30 int i,j; 31 for (i =0;i<len;i++) 32 { 33 int k = i; 34 for (j =0;str[j] !='