题目内容:
输入一个英文句子,句子中的单词用空格隔开,隔开单词的空格可能不止一个,现要求去掉单词之间多余的空格,使得两个单词之间只有一个空格,且句子开头无空格,再统计句子中单词的个数并输出。
输入格式:
输入占一行,是一个包含空格的英文句子,以回车结束
输出格式:
输出包括两行,第一行是去掉多余空格后的英文句子;第二行是一个数值,表示句子中单词的个数。
输入样例:
I am happy.
输出样例:
I am happy.
3
1 #include <iostream> 2 using namespace std; 3 #define N 250 4 5 int main() 6 { 7 char str[N] = ""; 8 char *p = str,*p1=str; 9 gets(str); 10 int count = 0; 11 12 while(*p) 13 { 14 if(*p!=' ') 15 { 16 *p1++ = *p; 17 if(*(p+1)==' '||!(*(p+1))) 18 { 19 count++; 20 *p1++ = ' '; 21 } 22 } 23 p++; 24 } 25 *(p1-1)='\0'; 26 27 cout<<str<<endl; 28 cout<<count<<endl; 29 30 return 0; 31 }
题目内容:
设计一个时间类(class Time),其中有表示“时、分、秒”的数据成员,设计初始化3个数据成员的构造函数,实参缺省时均初始化为0;设计拷贝构造函数,用一个已经存在的Time对象初始化正在创建的新对象;设计成员函数SetTime设置时间的值;设计成员函数Print以24小时格式输出时间(如“09:20:45”、“14:30:00”)。注意,若表示时、分、秒的数据不在合理范围内,则将不合理的数据取0值。以下是主函数:
int main()
{
int h,m,s;
cin>>h>>m>>s; //从键盘依次输入时、分、秒的值
Time t1(h);
t1.Print();
t1.SetTime(h,m,s);
t1.Print();
Time t2(t1);
t2.Print();
return 0;
}
输入格式:
输入3个整型数,分别表示时、分、秒,数据之间以空格隔开。
输出格式:
输出包括三行,每行都是一个以24小时格式输出的时间。
输入样例:
4 50 66
输出样例:
04:00:00
04:50:00
04:50:00
请注意:提交代码时,需要完整的程序,即除了类的设计,还需要包括以上主函数。
1 #include <iostream> 2 #include <iomanip> 3 using namespace std; 4 5 class Time{ 6 int hour,minute,second; 7 public: 8 Time(int h=0,int m=0,int s=0){ 9 if(h>=24) h=0; 10 if(m>=60) m = 0; 11 if(s>=60) s = 0; 12 hour = h; 13 minute = m; 14 second = s; 15 } 16 Time(const Time &t) 17 { 18 hour = t.hour; 19 minute = t.minute; 20 second = t.second; 21 } 22 void SetTime(int h,int m,int s){ 23 if(h>=24) h=0; 24 if(m>=60) m = 0; 25 if(s>=60) s = 0; 26 hour = h; 27 minute = m; 28 second = s; 29 } 30 void Print(){ 31 cout<<setw(2)<<setfill('0')<<hour<<":"; 32 cout<<setw(2)<<setfill('0')<<minute<<":"; 33 cout<<setw(2)<<setfill('0')<<second<<endl; 34 } 35 }; 36 int main() 37 { 38 int h,m,s; 39 cin>>h>>m>>s; //从键盘依次输入时、分、秒的值 40 Time t1(h); 41 t1.Print(); 42 t1.SetTime(h,m,s); 43 t1.Print(); 44 Time t2(t1); 45 t2.Print(); 46 47 return 0; 48 }
3、逆序字符串
用指针处理从键盘输入的字符串,使其逆序并输出。重复这个过程直到输入空串为止。
1 //修正 2 #include "iostream" 3 #include <string.h> 4 using namespace std; 5 #define N 100 6 int main() 7 { 8 char s[N] = "";//gets(s); 9 while(cin.getline(s,N)&& strcmp(s,"\0")) 10 { 11 int n = strlen(s); //字符串长度 12 char *p = s + n -1;//字符串尾指针 13 cout<<"逆序后:"; 14 while(n--) //从后向前打印 15 { 16 cout<<*p--; 17 } 18 cout<<endl; 19 } 20 cout<<"输入了空串,程序终止"<<endl; 21 return 0; 22 }
4、动态创建整形数组
编写程序,根据用户输入的值n,建立长度为n的整型数组,再向数组输入n个元素的值,并求其所有元素之和。
1 #include "iostream" 2 using namespace std; 3 int main() 4 { 5 int n,sum = 0; 6 cout<<"n=?"<<endl; 7 cin>>n; 8 int *p = new int[n]; 9 10 for(int i=0; i<n; ++i) 11 { 12 cin>>p[i]; 13 sum += p[i]; 14 } 15 cout<<"数组元素的和为:"<<sum<<endl; 16 delete(p); 17 return 0; 18 }
5、合并字符串
输入两个字符串a和b,并动态构造一个新的字符串c。要求是:将a和b对应字符中的较大者存入c对应的位置上,若a和b不一样长,则将较长字符串多出部分的字符全部依序存入c中。
1 #include "iostream" 2 #include <string.h> 3 using namespace std; 4 #define N 100 5 int main() 6 { 7 char a[N] = "", b[N] = "", c[2*N] = ""; 8 cout<<"请输入两个字符串:"<<endl; 9 cin>>a>>b; 10 char *pa=a,*pb=b,*pc=c; 11 12 while(*pa&&*pb) 13 { 14 if(*pa>*pb) 15 *pc=*pa; 16 else 17 *pc=*pb; 18 pa++,pb++,pc++; 19 } 20 21 if(pa) 22 strcat(c,pa); 23 if(pb) 24 strcat(c,pb); 25 cout<<"新的字符串是:"<<c<<endl; 26 return 0; 27 }
6、编写程序,求能被7整除 且个位数字为9的所有三位数,将满足条件的数每10个一行显示,并输出满足条件的数的个数。
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 cout<<"满足条件的数有:"<<endl; 7 int count = 0; 8 for(int i=109; i<=999; ++i){ 9 if(i%7==0 && i%10==9){ 10 count++; 11 cout<<i<<" "; 12 if(count%10==0){ 13 cout<<endl; 14 } 15 } 16 } 17 cout<<endl<<"满足条件的数共有:"<<count<<"个"<<endl; 18 return 0; 19 }
7、编写程序,输入两个正整数m和n,求出这两个数的最大公约数并显示出来。
1 #include <iostream> 2 using namespace std; 3 int GCD(int x, int y); 4 int main() 5 { 6 cout<<"请输入两个正整数:"; 7 int a,b; 8 cin>>a>>b; 9 cout<<a<<"和"<<b<<"的最大公约数"<<GCD(a,b)<<endl; 10 return 0; 11 } 12 int GCD(int x, int y){ 13 return y == 0 ? x : GCD(y, x%y); 14 }
8、猴子吃桃问题,猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第五天早上想再吃时,见只剩下一个桃子了。请编程求第一天共摘了多少个桃子?
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 int day = 4, remain = 1; 7 //因为第5天早上想吃的时候只剩一个,从计算第4天吃之前的桃子数开始 8 for(day =4; day>0; --day) 9 { 10 remain = 2 * (remain + 1);//第一轮计算第4天早上的没吃的时候的桃子,以此类推 11 } 12 13 cout<<"第一天一共摘了"<<remain<<"个桃子"<<endl; 14 return 0; 15 }
9、输入整型数组的元素个数n,依次输入n个数组元素,求其中负数的和。
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 cout<<"请输入数组元素个数:"<<endl; 7 const int N = 100; 8 int arr[N] = {0}, n, index=0, sum = 0; 9 10 cin>>n; 11 while(n--) 12 { 13 cin>>arr[index]; 14 if(arr[index]<0) 15 sum += arr[index]; 16 index++; 17 } 18 cout<<"数组中负数元素的和为:"<<sum<<endl; 19 return 0; 20 }
10、求一个n阶矩阵的转置。输入n值及矩阵的所有元素,存储在二维数组a中,要求在a中进行转置。
1 #include<iostream> 2 using namespace std; 3 const int N = 100; 4 5 void Print(int arr[][N], int n); 6 int main() 7 { 8 cout<<"请输入矩阵阶数:"<<endl; 9 int arr[N][N] = {0}, n; 10 cin>>n; 11 12 /* 输入矩阵 */ 13 for(int i=0; i<n; ++i){ 14 for(int j=0; j<n; ++j){ 15 cin>>arr[i][j]; 16 } 17 } 18 /* 输出矩阵 */ 19 cout<<"原矩阵为:"<<endl; 20 Print(arr,n); 21 22 /* 转置矩阵 */ 23 for(int i=0; i<n; ++i){ 24 for(int j=0; j<i; ++j){ 25 int t = arr[i][j]; 26 arr[i][j] = arr[j][i]; 27 arr[j][i] = t; 28 } 29 } 30 /* 输出转置矩阵 */ 31 cout<<"转置后矩阵为:"<<endl; 32 Print(arr,n); 33 return 0; 34 } 35 36 void Print(int arr[][N], int n) 37 { 38 for(int i=0; i<n; ++i){ 39 for(int j=0; j<n; ++j){ 40 cout<<arr[i][j]<<"\t"; 41 } 42 cout<<endl; 43 } 44 }
11、假设一个字符串中不含空格,输入该字符串并统计其中字母和非字母的个数。
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 cout<<"请输入一个不含空格的字符串:"<<endl; 7 const int N = 100; 8 char arr[N] = ""; 9 cin>>arr; 10 11 int count1 = 0, count2 = 0; 12 for(int i=0; arr[i]; ++i){ 13 if(arr[i]>='a'&&arr[i]<='z' || arr[i]>='A'&&arr[i]<='Z') 14 count1++; 15 else 16 count2++; 17 } 18 cout<<"字符串中字母的个数为:"<<count1<<endl; 19 cout<<"字符串中非字母的个数为:"<<count2<<endl; 20 return 0; 21 }
12、输入不含空格的字符串s及待删除的字符ch,将s中所有与ch相同的字符都删除掉,输出删除后得到的新串。要求直接在数组s中进行删除,得到的新串仍然在数组s中。
1 #include<iostream> 2 #include <string.h> 3 using namespace std; 4 #define N 100 5 6 void deletechar(char s[],char c); 7 int main() 8 { 9 cout<<"请输入一个不含空格的字符串:"<<endl; 10 char s[N] = "", c; 11 cin>>s; 12 13 cout<<"请输入要删除的字符:"<<endl; 14 cin>>c; 15 16 deletechar(s,c); 17 cout<<"删除后的字符串为:"<<s<<endl; 18 return 0; 19 } 20 void deletechar(char s[],char c){ 21 char t[N] = ""; 22 char *p = s, *q = t; 23 while(*p) 24 { 25 if(*p!=c) 26 *q++ = *p; 27 p++; 28 } 29 strcpy(s,t); 30 }
1 void deletechar(char s[],char c){ 2 char *p = s, *q = s; 3 while(*p) 4 { 5 if(*p!=c) 6 *q++ = *p; 7 p++; 8 } 9 *q = '\0'; 10 }
13、用指针处理从键盘输入的字符串,使其逆序并输出。重复这个过程直到输入空串为止。
栈中变量地址分配是从高地址到低地址的顺序压栈,数据是从低位向高位存储
#include <stdio.h> #include <string.h> int main() { int x = 'a'; char str[10] = "123456789"; putchar(str[10]); //栈从高地址到地地址顺序压栈 putchar('\n'); strcpy(str,"0123456789b"); // x 最低一个字节 被'b'覆盖 printf("%d,%d\n",x,'b'); int boo = *((char*)&x+1) == '\0'; //x地址向上一字节是字符串结束标志'\0' printf("%d\n",boo); x = ('b'<< 8) + 'b'; //strcpy(str,"0123456789bb"); 即x为"bb"覆盖 printf("%d\n", x); return 0; }
字符数组越界
#include "iostream" #include <string.h> using namespace std; #define N 100 int main() { char s[N] = "";//gets(s); while(cin.getline(s,N)&& strcmp(s,"\0")) { char *p = s+strlen(s)-1; cout<<"逆序后:"; while(*p) //错误! { cout<<*p--; } cout<<endl; } cout<<"输入了空串,程序终止"<<endl; return 0; }
#include "iostream" #include <string.h> using namespace std; #define N 100 int main() { char s[N] = "";//gets(s); while(cin.getline(s,N)&& strcmp(s,"\0")) { int len = strlen(s); char *p = s+len-1; cout<<"逆序后:"; while(len--) //! { cout<<*p--; } cout<<endl; } cout<<"输入了空串,程序终止"<<endl; return 0; }
14、编写程序,根据用户输入的值n,建立长度为n的整型数组,再向数组输入n个元素的值,并求其所有元素之和。
1 #include "iostream" 2 using namespace std; 3 int main() 4 { 5 int n,sum = 0; 6 cout<<"n=?"<<endl; 7 cin>>n; 8 int *p = new int[n]; 9 10 for(int i=0; i<n; ++i) 11 { 12 cin>>p[i]; 13 sum += p[i]; 14 } 15 cout<<"数组元素的和为:"<<sum<<endl; 16 delete(p); 17 return 0; 18 }
15、输入两个字符串a和b,并动态构造一个新的字符串c。要求是:将a和b对应字符中的较大者存入c对应的位置上,若a和b不一样长,则将较长字符串多出部分的字符全部依序存入c中。
1 #include "iostream" 2 #include <string.h> 3 using namespace std; 4 #define N 100 5 int main() 6 { 7 char a[N] = "", b[N] = "", c[2*N] = ""; 8 cout<<"请输入两个字符串:"<<endl; 9 cin>>a>>b; 10 char *pa=a,*pb=b,*pc=c; 11 12 while(*pa&&*pb) 13 { 14 if(*pa>*pb) 15 *pc=*pa; 16 else 17 *pc=*pb; 18 pa++,pb++,pc++; 19 } 20 21 if(pa) 22 strcat(c,pa); 23 if(pb) 24 strcat(c,pb); 25 cout<<"新的字符串是:"<<c<<endl; 26 return 0; 27 }
16、计算4名学生3门课程成绩的平均分。在主函数中给定各门课程的成绩和输出计算得到的各平均分,avg函数用于计算各课程的平均分。
1 #include<iostream> 2 using namespace std; 3 4 double avg(double a, double b, double c){ 5 return (a+b+c)/3; 6 } 7 8 int main() 9 { 10 int n = 4; 11 double a,b,c; 12 while(n--) 13 { 14 cin>>a>>b>>c; 15 cout<<avg(a,b,c)<<endl; 16 } 17 return 0; 18 }
17、编写程序,求出输入的一个正整数n的阶乘。要求设计递归函数求出n的阶乘。
1 #include<iostream> 2 using namespace std; 3 4 long fac(int n){ 5 if(n==1) 6 return 1; 7 return n*fac(n-1); 8 } 9 10 int main() 11 { 12 int n; 13 cin>>n; 14 cout<<fac(n)<<endl; 15 return 0; 16 }
18、编写程序。输入一个正整数判断其是否是质数。要求设计一个函数对正整数n是否是质数进行判断,是质数函数返回1,不是质数返回0。
1 #include<iostream> 2 using namespace std; 3 4 bool isPrime(int n){ 5 for(int i=2; i<n; ++i) 6 if(n%i==0) 7 return false; 8 return true; 9 } 10 11 int main() 12 { 13 int n; 14 cin>>n; 15 if(isPrime(n)) 16 cout<<"是质数\n"<<endl; 17 else 18 cout<<"不是质数\n"<<endl; 19 return 0; 20 }