实验8 指针
一、实验目的
1. 熟练掌握指针的定义、赋值的方法 2. 掌握间接引用运算符的使用方法 3. 掌握通过指针引用数组元素的方法 4. 掌握使用指针处理字串的方法 二、实验内容
实训1 循环输入学生某门课的成绩,将成绩存储到数组中,统计最高分和获得最高分的学生人数,最后输出统计信息。
1) 在VS2013中新建项目,在项目中新建C++源文件,输入下面程序。
#include
const int n = 5; // 使用常变量定义学生人数 int score[n]; // 定义成绩数组,有n个整型元素 int maxScore = 0; // 最高分,并初始化为 int maxStudent = 0; // 得到最高分的学生人数 int i; // 循环变量 int *p = 0;
p = score; // p指向score[0] for (i = 0; i < n; i++) // 计数循环 { // 开始循环
cout << \请输入第\ << i << \位学生的成绩:\;
cin >> p[i]; // 输入第i位学生的成绩,并存储到score[i] if (maxScore < p[i]) // 如果第i位学生的成绩高于原最高分 { }
maxScore = p[i]; // 将最高分修改为第i位学生的成绩
} // 结束循环 cout << \本班最高分为\ << maxScore << endl; cout << \得到最高分的学生序号为:\ << endl;
for (i = 0; i < n; i++) // 计数循环 { // 循环开始
if (*(p + i) == maxScore) // 如果第i位学生的成绩等于最高分 {
maxStudent++; // 得最高分的学生人数增1 cout << i << endl; // 输出该生序号
}
} // 循环结束
cout << \共有\ << maxStudent << \位学生得到最高分\ << endl; return 0;
} //主函数结束 2)出现下列情况。
3)在第20行处设置断点,然后按F5启动调试,当程序在第20行处暂停时,观察i、p[i]、score[i]、&score[i]、p+i、*(p+i)等表达式的值,说明这些表达式中,哪些具有相同的值。
可以看出p[i]、score[i]、*(p+i)值相同。 而&score[i]、p+i值相同。
实训2 学生成绩存储在数组中,查询得到某一分数的学生的序号。我们对第4章例4.1程序稍作修改即可完成。
1)在VS2013中新建项目,在项目中新建C++源文件,输入下面程序。
#include
const int n = 10; // 使用常变量定义学生人数 // 定义成绩数组,有n+1个整型元素,其中下标处未存放学生成绩 int score[n + 1] = { 0, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98 }; int x; // 待查找的学生成绩 int *p = 0; // 指向数组元素的指针变量 cout << \请输入待查找的学生成绩:\; cin >> x;
score[0] = x; // 在下标处设置监视哨
for (p = score + n; *p != x; p--); // 顺序查找,从后到前循环比较当前元素 if (p == score)
{ } else { } return 0;
cout << \查找到该分数所在的位置为:\ << p - score << endl; cout << \在成绩册中查找不到该分数!\ << endl;
} //主函数结束
2)出现下列情况。
3)在第21行处设置断点,然后按F5启动调试,当程序在第20行处暂停时,观察p、*p、score、p-score等表达式的值。按F10单步执行,观察上述表达式的值。
4) 第20行、21行的循环变量是指针变量p,如果将循环变量改为score,即将第20行改为:for(p = score + n; score < p && *score != x; score++),程序能得到正确的结果吗?说明理由。
能得到正确结果
实训3输入一个字符串,要求按相反的顺序输出各个字符。例如,输入为AbcD,则输出为DcbA。 则NS图如下: