c++基础技能练习详解(回文数,字符串计数,指针比大小,递归求和,类的应用)
//1. 调用函数实现判定用户输入的正整数是否为“回文数“,所谓“回文数”是指正读反读都相同的数。 (25分) bool hw(string s) { for (int i = 0; i < (s.length()) / 2; i++) { if (s[i] != s[s.length() - 1 - i]) { return false; } } return true; } int main() { string s; cin >> s; cout<<hw(s); } ************************************************** bool hw() { string s; cout << "请输入一行数字" << endl; cin >> s; for (int i = 0; i < s.length() / 2.0; i++) { if (s[i] != s[s.length() - i - 1]) { cout << "该数是不回文数" << endl; return false; } } cout << "该数是回文数" << endl; return true; } //2. 编程实现从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔。 int main() { string s; cin >> s; getline(cin,s); int count = 1; for (int i = 0; i < s.length(); i++) { if (s[i] == ' ') { count += 1; } } cout << count; } //3. 计算一个字符串中子串出现的次数。 注意:strstr(str1,str2) 此时千万要记住,这是在判断str2是否是str1的子串!! int count(char* str1, char * str2) { int len = strlen(str2); int n = 0; while (str1 = strstr(str1, str2)) { n += 1; str1 += len; } return n; } int main() { char str1[100]; char str2[100]; cin >>str1; cin >>str2; cout<<count(str1,str2); } ********************************** char str1[100]; char str2[100]; cout << "请输入父串" << endl; cin >> str1; //gets_s(str1); cout << "请输入子串" << endl; cin >> str2; //gets_s(str2); int a=countshu(str1, str2); cout << a << endl; //4. 从键盘输入一行字符,将字符数组a中下标值为偶数的元素从小到大排列,其它元素不变。 int main() { int arr[10]; for (int i = 0; i < 10; i++) { cin >> arr[i]; } for (int i = 0; i < 10; i++) { cout << arr[i]<<"\t"; } for (int i = 0; i < 8; i+=2) { for (int j = 0; j < 10 - 2 - i; j+=2) { if (arr[j] > arr[j + 2]) { int temp = arr[j]; arr[j] = arr[j + 2]; arr[j + 2] = temp; } } } cout << "\n"; for (int i = 0; i < 10; i++) { cout << arr[i]<<"\t"; } } 5.使用指针比较2个数的大小,并输出最大的数。 int *p1,*p2; int *p; //临时指针 int a,b; cout << "input a: " << endl; cin >> a; cout << "input b: " << endl; cin >> b; p1=&a;p2=&b; if(a<b) { p=p1; p1=p2; p2=p; } cout << "a=" << a; cout << " "; cout << "b=" << b; cout << endl; cout << "较大的数:" << *p1 << "较小的数: "<< *p2 <<endl; 6.//2. 输入6个数,输出6个数,调用排序函数对6个数进行冒泡排序,并输出排序后的值,要求形参为指针变量。 (共50分) //输入正确 10分 //输出正确 10分 //排序函数正确 20分 //输出排序后值 10分 void zhizhen(char *arr) { int temp; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5-i; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } cout << "排序后" << endl; for (int i= 0; i < 6; i++) { cout << arr[i] << "\t"; } } cout << "请输入6个数" << endl; char arr[6]; for (int i = 0; i < 6; i++) { cin >> arr[i]; } cout << "排序前" << endl; for (int i = 0; i < 6; i++) { cout << arr[i] << "\t"; } zhizhen(arr); 6.编写一个函数用递归的方法求1+2+3+4+…+n的值。在主函数中进行输入输出。 int digui(int a) { if (a==1) { return 1; } return a + digui(a - 1); } int a=digui(100); cout << a; 7.编写一个函数power(float x,int n),用于计算x的n次幂。在主函数中实现输入输出 float power(float x ,int n) { float sum = 0; sum=pow(x, n); cout << "幂次方" << sum; return sum; } cout << "请输入一个数" << endl; int n,x; cin >> x; cout << "请输入次方数" << endl; cin >> n; power(x, n); 8.1. 定义一个学生成绩类Score,描述学生成绩的公有数据成员为学号(No)、姓名(Name[8])、数学(Math)、物理(Phi)、总分(Sum)。在主函数中用Score类定义学生成绩对象数组s[3],输入学生成绩,计算每个学生的总分,最后显示每个学生的成绩。 (100分) 定义学生成绩类 20分 定义类对象数组 10分 输入学生成绩 25分 计算每个学生的总分 20 显示每个学生的成绩 25 class Score { public: int Num; char Name[8]; int Math; int Poi; int Sum; int Total; Score(int Num,char *name,int Math,int Poi,int Sum) { this->Num = Num; this->Math = Math; this->Poi = Poi; this->Sum = Sum; strcpy_s(Name, name); } void sum() { Total = Num + Math + Poi; } void show() { cout << "学号=" << Num << ",姓名=" << Name << ",数学=" << Math << ",物理=" << Poi << ",总分=" << Total << endl; } }; int main() { char name[10] = "MH"; Score s1 = Score(1001, name, 100, 98, 97); s1.sum(); s1.show(); }