实验8_参考答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验8指针与引用(2)

请将自己报告部分,文字和程序代码,加粗

完成下面实验内容和实验要求。

自测题

1.编写函数实现字符串函数strcmp()的功能。

要求:使用指针操作完成题目

⑴程序代码如下,请补充完整,使程序能运行且运行正确。

#include

#include

using namespace std;

int My_strcmp(char *str1, char *str2) //声明两个字符指针变量str1和str2

{

while (*str1==*str2&&*str1!='\0'&&*str2!='\0') // 当对应字符相等且两个字符串未结束时循环,注意*str1和*str2之间是“==”不是“=”,并且两个字符串都要判断是否结束循环{

str1++;

str2++;// 将str2指针指向下一个字符

}

return (*str1-*str2); /*返回字符串比较结果,根据主函数中r的分支判断确定应该返回的结果*/不要写成str1-str2,这样变成指针值相减,没有意义,另外写成*str1>*str2?1:-1也是可以的

}

int main()

{

char s1[50], s2[50];

cout << "please input the first string : ";

cin >> s1;

cout << "please input the second string : ";

cin >> s2;

int r;

r = My_strcmp(s1, s2); // 函数调用返回值赋值给r

if (r>0)

cout << s1 << " is larger!" << endl;

else if (r<0)

cout << s2 << " is larger" << endl;

else

cout << s1 << " and " << s2 << " is eqaul" << endl;

return 0;

}

⑵运行结果截图

2.编写程序,以(999)99999-999的形式输入电话号码字符串。

要求:利用strtok()函数获取区号,电话号码的前五位是主机号,后三位是分机号,需将电话号码的八位数连接成一个字符串。程序将区号转化为整型,将电话号码字符串转化为长整型,并打印转化后的区号和电话号码。使用指针操作完成题目。

⑴程序代码如下,请补充完整,使程序能运行且运行正确。

#include

#include

using namespace std;

int main()

{

char phone_number[20];

char *qp = phone_number; //定义一个字符指针qp指向字符串phone_number

int quhao = 0; //区号

long int number = 0; // 电话号码

cout << "please input a phone number with the format(999)99999-999: ";

cin >> phone_number;

qp++; //去掉左括号

while (*qp != ')') // 获取区号

{

quhao = quhao * 10 + (*qp - '0');

qp++; // qp指针指向下一个字符

}

qp++;

while (*qp != '-')

{

number = number * 10 + (*qp - '0'); //获取主机号码,语句数量不限

qp++;

}

qp++;

while (*qp != '\0')

{

number = number * 10 + (*qp - '0'); //获取分机号码,语句数量不限

qp++;

}

cout << "区号是:" << quhao << endl;

cout << "电话号码是: " << number << endl;

return 0;

}⑵运行结果截图

3.使用指针编写程序:定义一个字符数组,并初始化为“hello world!”,编写程序逆序输出此字符数组。参考教材P142 例6-11

⑴程序代码:

#include

using namespace std;

int main()

{

char str[] = "hello world!";// 字符串可以这样定义,最好不要用每个字母来定义

char *p, *q, t;

for (p = str, q = p + strlen(str) - 1; p

{

t = *p;

*p = *q;

*q = t;

}

cout << "The reversed string is:" << str << endl;

return 0;

}

⑵运行结果截图

4.编写一个程序,管理一个班级的学生的c++课程的成绩。参考实验8练习题4

要求:用动态存储分配的方法。键盘输入学生人数n,使用new生成一个动态单精度实型数组,用于保存班级学生的成绩,输出各分数段学生的人数,班级学生的平均成绩及低于平均分的人数。

⑴程序代码:

#include

using namespace std;

int main()

{

int n, i, one = 0, two = 0, three = 0, four = 0, five = 0, lower = 0;

float sum = 0, average;

float *score;

cout << "请输入班级学生的人数:";

cin >> n;

cout << endl;

cout << "请输入班级学生的成绩:" << endl;

score = new float[n]; // 注意是单精度类型

for (i = 0; i

{

cin >> score[i];

sum += score[i];

if (score[i]<60)

one++;

else if (score[i]<70)

two++;

else if (score[i]<80)

three++;

else if (score[i]<90)

four++;

else

five++;

}

average = sum / n;

for (i = 0; i

if (score[i]

lower++;

cout << "不及格的人数为:" << one << endl;

cout << "60~69分的人数为:" << two << endl;

cout << "70~79分的人数为:" << three << endl;

cout << "80~89分的人数为:" << four << endl;

cout << "90~100分的人数为:" << five << endl;

cout << "班级平均成绩是:" << average << "分" << endl;

相关文档
最新文档