我是靠谱客的博主 虚心乌冬面,最近开发中收集的这篇文章主要介绍CODE:4737-C++程序设计(习题及答案)习题1习题2习题3习题4习题5习题6习题7习题8习题9习题10,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
习题1
一、单项选择题
- 下列选项中不是C++语言关键字的是(B)。
A.typedef
B.mycase
C.typeid
D.typename
- 下列选项中不是C++语言合法标识符的是(C)。
A.area
B._age
C.-xy
D.w123
- 下列选项中正确的标识符是(C)。
A.case
B.de。fault
C.c_ase
D.a.b
二、填空题
- 用来处理标准输入的是 cin ,用来处理屏幕输出的是 cout 。
- 动态分配内存使用关键字 new ,释放内存使用关键字 delete 。
- 为整数55分配一块内存的语句为 new int[1] 。
三、改错题
- 分析如下主程序中的错误。
void main() {
//int num;
int& ref = num;
ref = ref + 100;
num = num + 50;
}
答:变量num没有声明。
2. 分析如下主程序中的错误。
void main() {
int x = 58, y = 98;
const int *p = &x;
y = *p;
*p = 65;
p = &y;
}
答:code:5: error:只读变量不可更改。
3. 分析如下主程序中的错误。
void main() {
int x = 58, y = 98, z = 55;
int* const p = &x;
*p = 65;
p = &y;
z = *p;
}
答:code:5: error:常量指针不可更改。
四、编程题
- 分别用字符和ASCII码形式输出整数值
65
和66
。
#include <iostream>
using namespace std;
int main()
{
int temp1 = 65, temp2 = 66;
cout << (char)temp1 << " " << (char)temp2 << endl;
cout << temp1 << " " << temp2 << endl;
return 0;
}
- 编写一个为
int
型变量分配100个整形量空间的程序。
#include <iostream>
using namespace std;
int main()
{
int *ptr = new int[100];
delete []ptr;
return 0;
}
- 编写完整的程序,它读入
15
个float
值,用指针把它们存放在一个存储块里,然后输出这些值的和以及最小值。
#include <iostream>
using namespace std;
const int num = 15;
int main()
{
float temp[num];
float count = 0.0f;
float mini = 0.0f;
cout << "Please insert 15 numbers." << endl;
for (int i = 0; i < num; ++i)
{
cin >> temp[i];
count += temp[i];
if (temp[i] < mini || i == 0)
{
mini = temp[i];
}
}
cout << "equal: " << count << endl;
cout << "mininum: " << mini << endl;
return 0;
}
- 声明如下数组:
int a[] = {1, 2, 3, 4, 5, 6, 7, 8};
先查找4
的位置,将数组a
复制给数组b
,然后将数组a
的内容反转,再查找4
的位置,最后分别输出数组a
和b
的内容。
#include <iostream>
using namespace std;
const int num = 8;
int find(int a[], int key, int n)
{
for (int i = 0; i < n; ++i)
{
if (a[i] == key)
{
return i + 1;
}
}
return 0;
}
void copy(int a[],int b[], int n)
{
for (int i = 0; i < n; ++i)
{
b[i] = a[i];
}
}
void reverse(int a[], int n)
{
int temp;
int i, j = n - 1, m = (n - 1) / 2;
for (i = 0; i <= m; ++i)
{
j = n - 1 - i;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
int main()
{
int a[] = {1, 2, 3, 4, 5, 6, 7, 8};
cout << find(a, 4, num) << endl;
int b[num];
copy(a, b, num);
reverse(a, num);
cout << find(a, 4, num) << endl;
for (int i = 0; i < num; ++i)
{
cout << a[i] << " ";
}
cout << endl;
for (int i = 0; i < num; ++i)
{
cout << b[i] << " ";
}
cout << endl;
return 0;
}
习题2
一、单项选择题
- 使用
string
类建立对象的不正确方式是( D )。
A.string str(" OK");
B.string str=" OK";
C.string str;
D.string str='OK';
- 下面所列各项中,不是面向对象程序设计所具特点的选项是(D)。
A. 封装 B. 继承 C. 抽象 D. 函数
二、作图题
- 已知一个学生类具有性别和年龄两个属性,男学生张明的年龄为12岁,女学生李红的年龄为11岁。给出这个学生类的类图和它们的对象图。
- 一个圆具有圆心坐标和半径两个属性,并且能够给出圆的面积,请画出这个圆类的类图。
- 画出一个班级类的类图,为它设计必需的属性以表示这个类的特征。
- 画出一种电话卡的类图,为它设计必要的属性。
- 为上题的电话卡设计必要的成员函数,以便提供基本服务。
三、编程题
- 使用多种方法编写将两个字符串连接在一起的程序。
#include <iostream>
#include <string>
using std::string;
using std::cout;
using std::endl;
string push_back(string str1, string str2)
{
string::iterator iter = str2.begin();
for (; iter != str2.end(); ++iter)
{
str1.push_back(*iter);
}
return str1;
}
int main()
{
string str1("Cconnect ");
string str2("String!");
string temp(str1);
cout << "+ or +=: " << str1 + str2 << endl;
cout << "append: " << str1.append(str2) << endl;
str1 = temp;
cout << "push_back: " << push_back(str1, str2) << endl;
cout << "others:insert() or str[] .." << endl;
return 0;
}
- 已知一个
string
的对象str
的内容为“We are here!”,使用多种方法输出字符“h”。
#include <iostream>
#include <string>
using std::string;
using std::cout;
using std::endl;
int main()
{
string str("We are here!");
cout << str[str.find('h')] << endl;
cout << str.substr(str.find('h'), 1) << endl;
return 0;
}
习题3
一、填空题
- 在C++语言中,函数“
double abc(double, char);
”表示的含义是 声明一个返回double类型的,且第一个参数为double和第二个参数为char的函数abc 。 - 定义内联函数的关键字为 inline 。
- C++函数参数传递的方式有 传值和传引用 。
- 函数声明
char& func(char, int)
的含义是 声明一个返回char&引用类型的,且第一个参数为char和第二个参为int的函数func 。 - 函数
fun
的返回值是指针,其中一个参数是字符,另一个是参数int
类型的引用,声明fun
的函数的原型是int * fun(char, int &);
。
二、单项选择题
- 不允许调用者改变函数参数的函数原型声明是( A )。
A.string input(const int);
B.string input(int &);
C.string* input(int *);
D.string input(string &);
- 关于函数重载的正确叙述是( C )。
A. 函数的参数个数不能相同 B. 函数参数的数据类型不能相同 C. 函数的返回值可以相同 D. 函数的返回值不能相同 - 下列对模板的声明中正确的一项是( C )。
A.template<T>
B.template<class T1, T2>
C.template<class T1, class T2>
D.template<class T1; class T2>
三、改错题
- 下面程序错在何处?
template <class T>
T fun(T x) {
T y;
//y = x * x - T;
y = x * x - y;
return y;
}
答:code:4: error: 'T'
不是有效的变量或常量。
2. 找出下面程序中的错误并改正之。
#include <iostream.h>
template <class Type>
//Type max(T x, y)
Type max(Type x,Type y)
{ return (x > y) ? (x) : (y); }
答:code:3: error:'T'
和'y'
不是有效的变量
3. 找出下面程序中的错误并改正之。
//void change(const string &s)
void change(string &s)
{ s = s + "pig!"; }
//}
void main() {
string str(" it is a");
change(str);
}
答:code:1: error:常量s
的值不能改变
四、编程题
- 编写一个求方程 ax2+bx+c=0 的根的程序,用3个函数分别求当 b2−4ac 大于零、等于零、小于零时的方程的根。要求从主函数输入a、b、c的值并输出结果。
#include <iostream>
#include <math.h>
//大于0时,方程ax^2 + bx + c = 0有2个相同的解
void solver1(int a, int b, int c) {
double x1, x2, temp;
temp = b * b - 4 * a * c;
x1 = (-b + sqrt(temp)) / (2 * a);
x2 = (-b + sqrt(temp)) / (2 * a);
std::cout << x1 << " " << x2 << std::endl;
}
//等于0时,方程ax^2 + bx + c = 0有2个相同的解
void solver2(int a, int b, int c) {
double x1, x2, temp;
x1 = -b / (2 * a);
x2 = 0;
std::cout << x1 << " " << x2 << std::endl;
}
//小于0时,方程ax^2 + bx + c = 0无解
void solver3(int a, int b, int c) {
std::cout << "null" << std::endl;
}
int main()
{
int a = 0, b = 0, c = 0;
std::cout << "一元二次方程:" << "ax^2 + bx + c = 0" << std::endl;
std::cout << "请输入a, b, c:(用空格断开)" << std::endl;
std::cin >> a >> b >> c;
int delta = b * b - 4 * a * c;
if(delta > 0) {
solver1(a, b, c);
} else if(delta == 0) {
solver2(a, b, c);
} else {
solver3(a, b, c);
}
return 0;
}
- 定义函数
up(ch)
,如字符变量ch
是小写字母就转换成大写字母并通过up
返回,否则字符ch
不改变。要求在短小而完全的程序中显示这个程序是怎样被调用的。
#include <iostream>
char up(char ch) {
return toupper(ch);
}
int main()
{
char ch;
std::cout << "Plase enter a character:";
std::cin >> ch;
std::cout << up(ch) << std::endl;
return 0;
}
- 编写主程序调用带实数
r
和整数n
两个参数的函数并输出r
的n
次幂。
#include <iostream>
double exponentiation(double r, int n) {
double result = 1.0;
for(int i = 0; i < n; ++i) {
result *= r;
}
return result;
}
int main()
{
double r = 0.0;
int n = 0;
std::cout << "Please enter r and n:" << std::endl;
std::cin >> r >> n;
std::cout << "r^n:" << exponentiation(r, n) << std::endl;
return 0;
}
- 编写有字符型参数
C
和整型参数N
的函数,让它显示出由字符C
组成的三角形。其方式为第1行有1个字符C
,第2行有2个字符C
等等。
#include <iostream>
void print_triangle(char c, int n) {
for(int i = 0; i < n; i++) {
for(int j = 0; j <= i; j++) {
std::cout << c;
}
std::cout << std::endl;
}
}
int main()
{
char c;
int n;
std::cout << "Plase enter c and n:" << std::endl;
std::cin >> c >> n;
print_triangle(c, n);
return 0;
}
- 编写一个求字符串长度的函数
strlen()
,再用strlen()
函数编写一个函数revers(s)
的倒序递归程序,使字符串s逆序。
#include <iostream>
#include <string>
int strlen(char *str) {
int len = 0;
while(str[len] != '