当前位置:文档之家› 实验8_参考答案

实验8_参考答案

实验8指针与引用(2)请将自己报告部分,文字和程序代码,加粗完成下面实验内容和实验要求。

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

要求:使用指针操作完成题目⑴程序代码如下,请补充完整,使程序能运行且运行正确。

#include<iostream>#include<cstring>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); // 函数调用返回值赋值给rif (r>0)cout << s1 << " is larger!" << endl;else if (r<0)cout << s2 << " is larger" << endl;elsecout << s1 << " and " << s2 << " is eqaul" << endl;return 0;}⑵运行结果截图2.编写程序,以(999)99999-999的形式输入电话号码字符串。

要求:利用strtok()函数获取区号,电话号码的前五位是主机号,后三位是分机号,需将电话号码的八位数连接成一个字符串。

程序将区号转化为整型,将电话号码字符串转化为长整型,并打印转化后的区号和电话号码。

使用指针操作完成题目。

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

#include<iostream>#include<cstring>using namespace std;int main(){char phone_number[20];char *qp = phone_number; //定义一个字符指针qp指向字符串phone_numberint 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<iostream>using namespace std;int main(){char str[] = "hello world!";// 字符串可以这样定义,最好不要用每个字母来定义char *p, *q, t;for (p = str, q = p + strlen(str) - 1; p<q; p++, q--){t = *p;*p = *q;*q = t;}cout << "The reversed string is:" << str << endl;return 0;}⑵运行结果截图4.编写一个程序,管理一个班级的学生的c++课程的成绩。

参考实验8练习题4要求:用动态存储分配的方法。

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

⑴程序代码:#include<iostream>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<n; 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++;elsefive++;}average = sum / n;for (i = 0; i<n; i++)if (score[i]<average)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;cout << "成绩低于平均分的人数为:" << lower << endl;return 0;}⑵运行结果截图5.【程序调试】下列程序运行均不正确。

请改正其中的语法错误使得程序可以编译成功。

程序编译后,请比较输出结果与实例输出,并对可能存在的逻辑错误进行修改。

实例输出显示了程序如果正确应该输出的结果。

实例输出:错误代码1#include <iostream>23using namespace std;4#include <cstring>56void initialize ( char [ ], int * );7void input ( const char [ ], int * );8void print ( const char *, const int );9void growOlder( const char [ ], int * );10bool comparePeople( const char *, const int *, 11const char *, const int *); 1213int main()14{15char name1[ 25 ], name2 [ 25 ];16int age1, age2;1718initialize (name1, &age1);19initialize( name2, &age2 );2021print ( name1, *age1 );22print ( name2, *age2 );2324input( name1, &age1);25input ( name2, &age2);2627print (& name1, &age1Ptr );28print (& name2, &age2Ptr );2930growOlder ( name2, age2);3132if ( comparePeople( name1, &age1, name2, &age2 ) ) 33cout << “Both people have the same name and age”34<< endl;3536return 0;37}3839void input( const char name [ ], int *age )40{41cout << “Enter a name: “;42cin >> name;4344cout << “Enter an age: “;45cin >> age;46cout << endl;47}4849void initialize( char name[ ], int * age )50{51name = “”;52age = 0;53}5455void print ( const char name[ ], const int age )56{57cout<< “ The value stored in variable name is: “58<< name << endl59<< “The value stored in variable age is: “60<< age << endl << endl;61}6263void growOlder( const char name[ ], int * age)64{65cout << name << “ h as grown one year older\n\n”;66*age++;67}6869bool comparePeople( const char * name1, const int * age1,70const char * name2, const int * age2 )71{72return ( age1 == age2 && strcmp ( name1, name2 ) );73}⑴修改后程序代码,改过的语句标识红色,并添加注释。

相关主题