提示:
注意所有符号都是英文,最后没有回车。
将要求输出字符串之外的所有printf或者cout的输出全部删除
将return 0;之前的getchar();或者system("pause");等暂停程序运行的输出都删除。
提交之前先在自己的开发环境下运行成功再拷贝到作业区提交。
输出的语句最好拷贝到程序中,避免不小心的键盘按键错误输入造成扣分。
1 #include
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
2
3 int main()
4 {
5 printf("Please display these words:\n\
6 1. press return keyboard to enter the game.\n\
7 2. press esc keyboard to exist the game.");
8 return 0;
9 }
1 /*
2 printf 的参数为不定参数 可以使用三对引号打印
3 函数原型 int printf ( const char * format, ... );
4 */
5 #include
6
7 int main()
8 {
9 printf("Please display these words:\n"
10 "1. press return keyboard to enter the game.\n"
11 "2. press esc keyboard to exist the game.");
12 return 0;
13 }
某明星每年都会做慈善,小明统计了一下这个明星今年做了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
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
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
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
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\n",i,j,k);
10 }
11 }
12 return 0;
13 }
1 #include
2 int main()
3 {
4 int i,j,k;
5 for(i=0; i<=14; ++i){ // 根据j与i关系式 在j为0的情况下i最大14
6 /*100 = k + i + j; //百鸡
7 100 = k/3 + i*5 + j*3 //百钱 */
8
9 j = (200-14*i)/8; //根据题目条件消元
10 k = (200+2*i)*3/8; //同上
11
12 if(k%3==0 && 100 == k + i + j && 100 == k/3 + i*5 + j*3)
13 printf("%d,%d,%d\n",i,j,k);
14 }
15 return 0;
16 }
7、猴子摘桃
题目内容:
一个猴子摘了些桃子,
第一天吃掉其中的一半然后多吃了1个,
第二天照此方法又吃掉了剩下桃子的一半加1个,
以后每天如此,直到第十天晚上,猴子发现只剩下了1个桃子,
请问猴子第一天总共摘了多少个桃子?
并反向打印每天所剩桃子数。
即a,b,c,d.....,sum
分别表示第九天剩余桃子,第八天剩余桃子,....,第一天剩余桃子,总桃子数。
比如,如果总桃子10个,第一天剩余10/2-1=4个,第二天剩余4/2-1=1个,根据题目要求应该输出第一天剩余桃子,总桃子分别为:
4,10
1 //2022版 解题代码
2 #include
3 int main()
4 {
5 int day, remain = 1, n;
6 scanf("%d",&n);
7 for(day = n; day>0; --day)
8 {
9 remain = 2 * (remain + 1);
10 }
11 printf("%d", remain);
12 return 0;
13 }
1 #include
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
2 #include
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)
12 printf("true");
13 else
14 printf("false");
15 return 0;
16 }
题目内容:
书有书名(字符串长度不超过50字节),价格(单精度实数),分类(正整数)。
书的结构定义如下:
struct book
{
char name[50];
float price;
int classification;
};
输入n本书(n<=100),及每本书的书名,价格和分类(空格分隔输入数据),
请分别根据价格递增顺序排序,如果价格相同,则按照书名(ASCII码)递增排序。
最后输出排序后的结果,每行一本书详细信息,按照:书名,价格(保留2位小数),分类由逗号分隔。
例子:
输入:
3
program 35 1
history 35 2
cloudy-computing 57 1
输出
history,35.00,2
program,35.00,1
cloudy-computing,57.00,1
1 //2022版 C 解题代码
2 #include
3 #include
4 #include //strcmp 头文件
5
6 #define M 50
7 typedef struct book{
8 char name[M];
9 float price;
10 int classification;
11 }book;
12
13 int main()
14 {
15 int n = 0;
16 book s[50], tmp;
17 int i, j, max;
18
19 scanf("%d",&n); //题目要求
20
21 for (i = 0; i < n; i++)
22 scanf("%s%f%d", s[i].name, &s[i].price, &s[i].classification);
23
24 //选择排序
25 for (i = 0; i < n-1; i++)
26 {
27 max = i;
28 for (j = i + 1; j strcmp( s[j].name,s[max].name ) //价格相等 比较字符串
30 || s[j].price < s[max].price) //或者比较价格
31 max = j;
32 if( max!=i ) //交换条件
33 {
34 tmp = s[i];
35 s[i] = s[max];
36 s[max] = tmp;
37 }
38 }
39 for (i = 0; i < n; i++)
40 printf("%s,%.2f,%d\n", s[i].name, s[i].price, s[i].classification);
41 return 0;
42 }
1 //2022版 C++ 解题代码
2 #include
3 #include
4 using namespace std;
5
6 const int M = 50;
7 struct book
8 {
9 char name[M];
10 float price;
11 int classification;
12 bool operator <(const struct book &b)const //运算符重载
13 {
14 if( b.price == price)
15 return 0 < strcmp( b.name,name);
16 return b.price > price;
17 }
18 };
19
20 int main()
21 {
22 int n = 0;
23 book s[50], tmp;
24 int i, j, max;
25
26 cin >> n; //题目要求
27
28 for (i = 0; i < n; i++)
29 cin >> s[i].name >> s[i].price >> s[i].classification;
30
31 //选择排序
32 for (i = 0; i < n; i++)
33 {
34 max = i;
35 for (j = i + 1; j
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
2 #include
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
2 #include
3
4 void InsertSort(int *arr, int n)
5 {
6 int i;
7 for(i=1; i=0 && key0){
23 arr[i++] = x;
24 scanf("%d",&x);
25 }
26
27 InsertSort(arr,i);
28 for(int j=0; j
1 //2022版 解题代码
2 #include
3 #include
4
5 void InsertSort(int *arr, int n)
6 {
7 int i;
8 for(i=1; i=0 && key0 ){
24 arr[i++] = x;
25 if( i>9 ) break;
26 scanf("%d",&x);
27 }
28
29 InsertSort(arr,i);
30 for(int j=0; j
1 //2022版 解题代码
2 #include
3 #include
4
5 void InsertSort(int *arr, int start, int end)
6 {
7 int i;
8 for(i=start+1; i=0 && key0 ){
32 if(x%2){
33 arr[start++] = x;
34 }
35 else{
36 arr[end--] = x;
37 }
38 if( start>end )
39 break;
40 scanf("%d",&x);
41 }
42
43 //奇偶分别排序
44 InsertSort(arr,0,start);
45 InsertSort(arr,end+1,10);
46
47 //奇偶分别输出
48 PrintArr(arr,0,start);
49 PrintArr(arr,end+1,10);
50 printf("\n"); //格式最后有回车
51
52 return 0;
53 }
1 //2022版 解题代码
2 #include
3 #include
4
5 void InsertSort(int *arr, int start, int end)
6 {
7 int i;
8 for(i=start+1; i=0 && key0 ){
25 if(x%2){
26 arr[start++] = x;
27 }
28 else{
29 arr[end--] = x;
30 }
31 if( start>end )
32 break;
33 scanf("%d",&x);
34 }
35
36 //奇偶分别排序
37 InsertSort(arr,0,start);
38 InsertSort(arr,end+1,10);
39
40 //输出
41 for(int i=0; i<10; ++i){
42 if(i>=start && i<=end) //非数据排除
43 continue;
44 printf("%d ",arr[i]);//格式最后有空格
45 }
46 printf("\n"); //格式最后有回车
47
48 return 0;
49 }
1 //2022版 解题代码
2 #include
3 #include
4
5 void InsertSort(int *arr, int start, int end)
6 {
7 int i;
8 for(i=start+1; i=0 && key0 ){
25 if(x%2){
26 arr[start++] = x;
27 }
28 else{
29 arr[end--] = x;
30 }
31 if( start>end )
32 break;
33 scanf("%d",&x);
34 }
35
36 //奇偶分别排序
37 InsertSort(arr,0,start);
38 InsertSort(arr,end+1,10);
39
40 if(startend ? 10:start
47 for(int i=0; i<( start>end ? 10:start ); ++i){
48 printf("%d ",arr[i]);//格式最后有空格
49 }
50 printf("\n"); //格式最后有回车
51
52 return 0;
53 }
11、最大整数
题目内容:
输入3个整数a,b,c,用指针p=&a,q=&b,请用max指向最大整数并输出。
输出按照如下格式输出: printf("max=%d\n",*pmax);
输入样例:
1,2,3
输出样例:
max=3
#include
int main()
{
int a,b,c;
int *p=NULL,*q=NULL,*pmax=NULL;
scanf("%d,%d,%d",&a,&b,&c);
p=&a,q=&b,pmax=&c; //假设c是最大的
if(*p>*pmax)
pmax = p; //更新
if(*q>*pmax)
pmax = q; //再更新
printf("max=%d\n",*pmax); //pmax始终指向最大的
return 0;
}
12、删除字符串中连续的重复字符
题目内容:
功能:实现删除字符串中连续的重复字符(除字母和数字)。 输入为字符串,将字符串中连续重复的,非字母和数字的字符删去,然后输出处理后的字符串。要求用指针指向输入的字符串进行操作。
输入格式:
输入字符串最长50个字符,之后截断,只输出处理后的字符串。
输出格式:
输入样例:
1+++2==3
输出样例:
1+2=3
改进后的解法1
#include
#define N 100
int main()
{
char str[N] = "";
char *p = str;
gets(str);
printf("%c",*p++); //打印字符
while( *p ) //是否到文件尾
{ //如果与上一个字符相同且非字母数字,忽略,否则打印,判断下一个字符
if( *p==*(p-1) && (*p<'0'||*p>'9')&& (*p<'a'|| *p>'z')&& (*p<'A'|| *p>'Z'))
p++;
else
printf("%c",*p++); //打印字符
}
printf("\n");
return 0;
}
改进后的解法2
#include
#define N 100
int main()
{
char str[N] = "";
char *p = str;
gets(str);
printf("%c",*p++); //打印字符
while( *p ) //是否到文件尾
{ //如果与上一个字符相同且非字母数字,忽略,否则打印,判断下一个字符
if( *p==*(p-1) && !(*p>='0'&&*p<='9'||*p>='a'&&*p<='z'||*p>='A'&&*p<='Z'))
p++;
else
printf("%c",*p++); //打印字符
}
printf("\n");
return 0;
}
改进后的解法3
#include
#define N 100
int main()
{
char str[N] = "";
char *p = str;
gets(str);
printf("%c",*p); //打印第一个字符
while( *++p ) //从第2个字符开始, 是否到文件尾
{ //如果与上一个字符不同或为字母数字, 打印字符
if( *p!=*(p-1) || *p>='0'&&*p<='9' || *p>='a'&&*p<='z' || *p>='A'&&*p<='Z' )
printf("%c",*p);
}
printf("\n");
return 0;
}
改进前的解法
1 #include
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("\n");
15 return 0;
16 }
13、统计输出字符串中的字母个数和数字个数。
题目内容:
编写程序,输入一个字符串,分别统计输出该字符串中的字母个数和数字个数。要求用指针指向这个字符串进行处理。
输入格式:
字符串
输出格式:
英文逗号分隔的2个整数,第一个整数是字母个数,第二个整数的数字个数。
输入样例:
the day the month the year 123
输出样例:
21,3
1 #include
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\n",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
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\n");
18 else
19 printf("unequal\n");
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
#include
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
2 #include
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
2 #include
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
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< return 0; } 如输入: 1 2 3 4回车 输出: 2.83
1 #include
2 #include
3 #include
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<
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!"< } else{ cout<<"Login failed!"< } return 0; } 例如输入: test 1234567 test 123456回车 输出: Login failed! 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:"< cout<<"The average grade of course2:"< cout<<"The average grade of course3:"< 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回车 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 //2022版 解题代码
2 #include
1 #include
1 #include
1 #include
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<<"三角形的周长为:"<>a>>b>>c>>d;
64 Quadrangle q(a,b,c,d);
65 cout<<"四边形的周长为:"<>r;
69 Circle ci(r);
70 cout<<"圆的周长为:"<
1 #include
2 using namespace std;
3
4 const float pi=3.1415926; //2022 版
5
6
7 // A类中有B类
8 class ShapeFactory
9 {
10 public:
11 ShapeFactory(){};
12 virtual ~ShapeFactory(){}
13 virtual float Circumstance(){return 0;}
14 //程序设计原则之一:依赖倒置原则
15 //工厂设计模式
16 ShapeFactory *Create(float a,float b,float c);
17 ShapeFactory *Create(float a,float b,float c,float d);
18 ShapeFactory *Create(float r);
19 };
20
21
22 //B类中有A类
23 class Triangle:public ShapeFactory
24 {
25 float a,b,c;
26 public:
27 Triangle(float a,float b,float c){
28 this->a = a;
29 this->b = b;
30 this->c = c;
31 }
32 float Circumstance(){
33 return a+b+c;
34 }
35 };
36
37 class Quadrangle:public ShapeFactory
38 {
39 float a,b,c,d;
40 public:
41 Quadrangle(float a,float b,float c,float d){
42 this->a = a;
43 this->b = b;
44 this->c = c;
45 this->d = d;
46 }
47 float Circumstance(){
48 return a+b+c+d;
49 }
50 };
51
52 class Circle:public ShapeFactory
53 {
54 float r;
55 public:
56 Circle(float r){
57 this->r = r;
58 }
59 float Circumstance(){
60 return 2*pi*r;
61 }
62
63 };
64
65 //在B类声明之后实现函数重载
66 ShapeFactory * ShapeFactory::Create(float a,float b,float c)
67 {
68 ShapeFactory *p = new Triangle(a,b,c);
69 return p;
70 }
71
72 ShapeFactory * ShapeFactory::Create(float a,float b,float c,float d)
73 {
74 ShapeFactory *p = new Quadrangle(a,b,c,d);
75 return p;
76 }
77
78 ShapeFactory * ShapeFactory::Create(float r)
79 {
80 ShapeFactory *p = new Circle(r);
81 return p;
82 }
83
84 int main()
85 {
86 float a,b,c,d,r;
87 ShapeFactory *sf = NULL;
88
89 cout<<"输入三角形的3边长度:";
90 cin>>a>>b>>c;
91 sf = ShapeFactory().Create(a,b,c);
92 cout<<"三角形的周长为:"< Circumstance()<>a>>b>>c>>d;
98 sf = ShapeFactory().Create(a,b,c,d);
99 cout<<"四边形的周长为:"< Circumstance()<>r;
105 sf = ShapeFactory().Create(r);
106 cout<<"圆的周长为:"< Circumstance()<
22、实现带日期的时钟类
实现带日期的时钟类,具体要求如下:
已知时钟类的定义如下:
#include
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:"< } 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< } 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 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
设有一个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
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("\n");
19 return flag;
20 }
21 int main()
22 {
23 int n;
24 scanf("%d",&n);
25 printf("%d\n",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
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
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
2 #include
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 <>s;
140 /* 1.实现int IsSubString(int start, const char *str); */
141 //---------------------s1,count,s2
142 char* p = strtok (s," ,.-");
143 strcpy(s1,p);
144 p = strtok (NULL," ,.-");
145 count = atoi(p);
146 p = strtok (NULL," ,.-");
147 strcpy(s2,p);
148 EditString es1(s1);
149 cout<
1 int main()
2 { //testtesttest,3,test,t,a,test,str,t,es
3 char s[N]="";
4 gets(s);
5 EditString str(s);
6 str.EditChar(',',' ');
7 strcpy(s,str.GetStr());
8 char s1[N]="",s2[N]="",s3[N]="",s4[N]="",s5[N]="";
9 char c1,c2,c3;
10 int count;
11 sscanf(s,"%s%d%s %c %c%s%s %c%s",s1,&count,s2,&c1,&c2,s3,s4,&c3,s5);
12 /* 1.实现int IsSubString(int start, const char *str); */
13 //---------------------s1,count,s2
14 EditString es1(s1);
15 cout<
1 #include
2 #include
3 using namespace std;
4 class String{
5 protected:
6 char *mystr;
7 int len;
8 public:
9 String(const char *p){
10 len = strlen(p);
11 mystr = new char[len+1];
12 strcpy(mystr,p);
13 }
14 ~String(){
15 if (mystr !=NULL)
16 {
17 delete []mystr;
18 mystr = NULL;
19 len = 0;
20 }
21 }
22 void showStr(){cout <
4、完备数
如果一个数正好是他的所有约数(除了它本身以外)的和,称为完备数,
如:6,它的约数有1,2,3,并且1+2+3=6.
请输出n以内的所有完备数(完备数递增输出),每个完备数1行,每行按照下例输出:
比如某完备数是6,则该行输出:6=1+2+3
如果输入错误,则输出"error"。
例如:
输入:
40
输出:
6=1+2+3空格回车
28=1+2+4+7+14空格回车
1 #include
2
3 int fun(int i)
4 {
5 int sum=0;
6 int t = i-1,j;
7 int arr[100] = {0};
8 int index =0;
9 while(t)
10 {
11
12 if(i%t==0)
13 {
14 arr[index++] = t;
15 sum += t;
16 //printf("%d,%d,%d\n",i,sum,t);
17 }
18 t--;
19 }
20 if(sum==i){
21 printf("%d=",i);
22 for( j=index-1; j>=0; --j)
23 {
24 if(j1)
42 printf("\n");
43 else{
44 printf(" \n");
45 }
46 flag++;
47 }
48 }
49 return 0;
50 }
5、逆序memcpy
实现逆序的Memcpy方法。
void * reversememcpy ( void * destination, const void * source, int num );
从source所指的内存地址的起始位置开始拷贝num个字节,逆序保存到目标destination所指的内存地址的
起始位置中。返回destination首地址。
注意为逆序拷贝。比如source指向的位置,依次保存了abcdef,当num=3时,则逆序拷贝后destination指向的
位置应该依次保存cba.
输入:abcdef
输出:cba
提交的程序包括main函数,具体内容如下:
#include
#include
void * reversememcpy ( void * destination, const void * source, int num );
int main()
{
char source[100],destionation[100];
int n;
scanf("%s",source);
scanf("%d".&n);
destionation=reversememcpy (destionation,scource,strlen(source),n);
printf("%s",destionation);
return 0;
}
注意:目标地址不能为空,源和目标空间首地址差应该大于num。如果num>strlen(source),应该输出error
1 #include
2 #include
3 void * reversememcpy ( void * destination, const void * source, int num )
4 {
5 char *des = (char*)destination, *src = (char*)source;
6 if(strlen(src)
6、冒泡排序
题目内容:
输入n个整数,用冒泡排序对这n个数进行递增/非递减排序,输出排序后的结果.如果输入不符要求,则输出"error"
输入格式:第一行是待排序的数据个数n,第二排是逗号分隔的n个正整数
9
9,8,7,6,5,4,3,2,1
输出格式:输出排序后的用逗号分隔的n个数据,最后1个数据后面没有逗号
1,2,3,4,5,6,7,8,9
1 #include
2 #define N 100
3 /*冒泡排序--递归*/
4 void BubbleSort(int *a,int left, int right)
5 {
6 if(lefta[j])/*相邻比较*/
10 t=a[j],a[j]=a[j-1],a[j-1]=t;
11 }
12 BubbleSort(a,j+1,right);/*递归*/
13 }
14 }
15
16 int main()
17 {
18 int arr[N] ={0};
19 int t,n;
20 int ret = scanf("%d",&n);
21 if(!ret){
22 printf("error");return 0;
23 }
24
25 for(int i=0; i1)printf(",");
37 printf("%d",arr[i]);
38 }
39 printf("\n");
40
41 return 0;
42 }
7、实现三角形类
实现一个三角形类 Ctriangle
该类有一个GetPerimeter方法返回三角形的周长;
GetArea方法返回三角形的面积;
该类还提供一个display方法显示三角形的三边长度;
最终在main函数中生成该类,
输入三条边的长度(不用考虑三条边不能构成三角形的情况);
展示三角形的三边长度以及周长和面积
Ctriangle类的使用如下,在你的代码中除了实现Ctriangle类还需引入一下代码。
int main()
{
double a, b, c;
cin >> a >> b >> c;
Ctriangle T(a, b, c);
T.display();
cout << "Perimeter:" <
输出格式
输入:3 4 5
输出:
Ctriangle:a=3,b=4,c=5
Perimeter:12
Area:6
1 #include
2 #include
3 #include
4 #include
5 using namespace std;
6 class Ctriangle
7 {
8 protected:
9 double a,b,c;
10 public:
11 Ctriangle(double x,double y,double z)
12 {
13 a=x;b=y;c=z;
14 }
15 double GetPerimeter()
16 {
17 return a+b+c;
18 }
19 double GetArea()
20 {
21 double p = (a+b+c)/2;
22 return sqrt(p*(p-a)*(p-b)*(p-c));
23 }
24 void display()
25 {
26 cout<<"Ctriangle:a="<> a >> b >> c;
34 Ctriangle T(a, b, c);
35 T.display();
36 cout << "Perimeter:" <
//2022版 解题代码
#include
#include
void InsertSort(int *arr, int start, int end)
{
int i;
for(i=start+1; i=0 && key0 ){
if(x%2){
arr[start++] = x;
}
else{
arr[end--] = x;
}
if( start>end )
break;
scanf("%d",&x);
}
//奇偶分别排序
InsertSort(arr,0,start);
InsertSort(arr,end+1,10);
//输出
for(int i=0; i<10; ++i)
{
if(i>=start && i<=end) //非数据排除
continue;
printf("%d ",arr[i]);//格式最后有空格
}
printf("\n"); //格式最后有回车
return 0;
}