C语言程序设计习题6.doc
习题习题 6 参考解答参考解答 1 请解释以下术语的含义 地址 指针 指针变量 直接访问 间接访问 解 解 1 地址 内存单元的编号叫做地址 2 指针 内存单元的编号叫做地址 通常也叫做指针 3 指针变量 在 语言中 允许用一个变量来存放指针 这种变量称为指针变量 4 直接访问 通过变量名称引用变量内存单元的方式称为直接访问 5 间接访问 利用了指针变量 通过变量的指针 即变量的内存地址 来引用内存 单元的值 这种方式称为间接访问 2 指针能参与哪几种运算 举例说明 解 解 1 指针变量和整数可以进行加 减运算 p p p i p i p i p i 2 指针变量可进行赋值运算 p 变量 a 的地址赋给 p 即指针 p 指向 a p array 数组 array 首地址赋给 p p 数组元素 array i 的地址赋给 p p max 函数 max 的入口地址赋给 p p1 p2 指针 p2 的值赋给指针 p1 即 p1 p2 所指的数据相同 3 同类指针变量在一定的条件下可以作相减运算 p q 4 同类指针变量在一定的条件下可以作比较运算 p q 3 判断下面两个程序的正误 若错误指出原因 1 include int main char p p DATA printf s n p return 0 解 解 该程序错 应为 printf s n p 2 include int main int p p 25 printf d p return 0 解 解 该程序错 指针变量没有赋初值 4 输入 3 个整数 输出其中最大数 要求用指针变量实现 解 解 include stdio h int main int a 0 b 0 c 0 int aa NULL bb NULL cc NULL p NULL aa printf 3 number scanf d d d printf a d b d c d n a b c p aa if p bb p bb if p cc p cc printf d n p return 0 程序运行情况如下 3 number 4 5 9 a 4 b 5 c 9 9 5 有 3 个整型变量 i j k 请编写一个程序 设置 3 个指针变量 p1 p2 p3 分别 指向 i j k 然后通过指针变量使 i j k 3 个变量的值顺序交换 即原来 i 的值赋给 j 把 j 的原值赋给 k 把 k 的原值赋给 i i j k 的原值由键盘输入 要求输出 i j k 的原值和 新值 解 解 include int main int i j k tmp int p1 p2 p3 scanf d d d printf Before change d t d t d n i j k p1 p2 p3 tmp p3 p3 p2 p2 p1 p1 tmp printf After change d t d t d n i j k return 0 程序运行情况如下 1 2 3 Before change 1 2 3 After change 3 1 2 6 输入一个 10 个元素的一维数组 在主函数中用 scanf 函数输入 用指针方式编程找 出最大和最小数 并指出最大数和最小数的位置 解解 int y max int p int n int max p i k 0 for i 0 i n i 这里判断到 i n 而不是 i n if max p i k i max p i 记得要在这里更新一下 max 的记录 return k define N 10 include int main int a N int i m max for i 0 i N i scanf d for i 0 i N i printf d a i m y max a N printf nmax a d d m a m return 0 程序运行情况如下 1 5 6 78 9 6 4 7 2 3 1 5 6 78 9 6 4 7 2 3 max a 3 78 7 输入一段文字 统计其中所包含的数字字符和字母字符个数 解 解 include include include define N 80 int cnum 0 dnum 0 全局变量用于在两个函数之间传递数据 int main char ch N void count char c int i n gets ch n strlen ch for i 0 i 0 return 0 程序运行情况如下 hello12345 5 5 8 请写出下列程序段的输出结果 1 include int main int a 1 2 3 4 5 6 p p a p 3 2 printf d d p p 3 return 0 解 解 1 6 2 include int main int a 1 2 3 4 5 6 int p p a printf 5d 5d 5d 5d n p p p p printf 5d 5d n p a 2 return 0 解 解 3 3 2 1 2 3 3 include include int main char s1 AbDeG char s2 AbdEg s1 2 s2 2 printf d n strcmp s1 s2 return 0 解 解 1 4 include include fun char w int n char t s1 s2 s1 w s2 w n 1 while s1 s2 t s1 s1 s2 s2 t s1 s2 int main char p 1234567 fun p strlen p puts p return 0 解 解 7654321 5 include int main char a Pascal C language dBase Coble char p int j p a 3 for j 3 j 0 j printf s n p return 0 解 解 Coble dBase C language Pascal 9 用一个函数实现两个字符串的比较 即自己写一个 strcmp 函数 strcmp s1 s2 如果 s1 s2 则函数返回值为 0 如果 s1 s2 返回它们两者第一个不同字符的 ASCII 码差值 如 BOY 与 BAD 第二个字符不同 O 与 A 之差为 79 65 14 如果 s1 s2 则输出正值 如果 s1 s2 则输出负值 两个字符串 s1 s2 由 main 函数输入 strcmp 函数的返回值也在 main 函数中输出 解 解 include int strcmp char s1 char s2 for s1 s2s1 s2 找不同的字符 return s1 s2 void main char a 10 b 10 gets a gets b printf d n strcmp a b 程序运行结果如下 hello world 15 10 设计一个程序 管理一个班的计算机成绩 要求采用一维数组来存储学生的成绩 解 解 include int main void float a 10 int i 0 double sum 0 0 float avg 0 0 for i 0 i 10 i printf 请输入第 d 个同学的成绩 i 1 scanf f printf n sum a i avg sum 10 0 printf f n avg return 0 程序运行结果如下 请输入第 1 个同学的成绩 85 请输入第 2 个同学的成绩 89 请输入第 3 个同学的成绩 90 请输入第 4 个同学的成绩 78 请输入第 5 个同学的成绩 69 请输入第 6 个同学的成绩 58 请输入第 7 个同学的成绩 78 请输入第 8 个同学的成绩 95 请输入第 9 个同学的成绩 100 请输入第 10 个同学的成绩 89 83 100000 11 输入 10 个整数 将其中最小的数与第一个数对换 把最大的数与最后一个数对换 用指针来实现 解 解 include void aa int array int i for i 0 i 10 i scanf d void bb int array int max min t int p max min array for p array p array 9 p if max p min p t max max array 9 array 9 t t min min array 0 array 0 t void cc int array int p for p array p array 9 p printf d p void main int number 10 aa number bb number cc number 程序运行结果如下 0 9 10 20 30 40 50 60 70 66 9 0 10 20 30 40 50 60 66 70 12 分析下列程序的运行结果 include int f1 int x return x 1 int f2 int x return x 1 int sum square int f int m int n int k sum 0 for k m k n k sum f k f k return sum int main printf result d n sum square f1 1 2 sum square f2 1 2 return 0 解 解 result 14