实验8_参考答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;