实验六 指针实验 下载本文

内容发布更新时间 : 2025/1/10 18:11:33星期一 下面是文章的全部内容请认真阅读。

C语言程序设计 实验报告

专业 信息安全 班级 1103 日期 成绩 实验组别 第 1次实验 指导教师

学生姓名 严志颖 学号 U201114113 同组人姓名

实验名称 指针 实验

一、 实验目的

1.熟练掌握指针的说明、赋值、使用。

2.掌握用指针引用数组的元素,熟悉指向数组的指针的使用。

3.熟练掌握字符数组与字符串的使用,掌握指针数组及字符指针数组的用法。

4.掌握指针函数与函数指针的用法。 二、实验任务 1.源程序改错题

下面程序是否存在错误?如果存在,原因是什么?如果存在错误,要求在计算机上对这个例子程序进行调试修改,使之能够正确执行。

#include \int main(void { float *p; scanf(\

printf(\return 0; }

2.源程序完善、修改、替换题

(1)下面的程序通过函数指针和菜单选择来调用字符串拷贝函数或字符串连接函数,请在下划线处填写合适的表达式、语句、或代码片段来完善该程序。

#include \#include \int main(void {

char a[80],b[80],c[160],*result=c; int choice,i; do{

printf(\printf(\printf(\

printf(\scanf(\

}while(choice<1 || choice>5; switch(choice{ case 1: p=strcpy; break; case 2: p=strcat; break; case 3: goto down; } getchar(;

printf(\

i=0;

printf(\i=0;

result= (a,b;

printf(\down: ;

return 0; }

(2)为了使程序不受scanf、getchar、gets等函数输入后回车符的影响,请修改第(1)题程序,按要求输出下面结果:((输入)表示该数据是键盘输入数据) 1 copy string. 2 connect string. 3 exit.

input a number (1-3 please! 2 (输入)

input the first string please! the more you learn, (输入) input the second string please! the more you get. (输入)

the result is the more you learn,the more you get. 3.跟踪调试源程序 #include \

char *strcpy(char *,char *;

int main(void {

char a[20],b[60]=\ printf(\ }

char *strcpy(char *s,char *t {

while(*s++=*t++ ;

return (s; }

(1)单步执行。进入strcpy时watch窗口中s为何值?返回main时, watch窗口中s为何值?

(2)排除错误,使程序输出结果为: there is a boat on the lake.

(3)选做:由于watch窗口中只显示s所指串的值,不显示s中存储的地址值,怎样才能观察到s值的变化呢? 4.程序设计

(1)一个长整型变量占4个字节,其中每个字节又分成高4位和低4位。试从该长整型变量的高字节开始,依次取出每个字节的高4位和低4位并以数字字符的形式进行显示。

(2)利用大小为n的指针数组指向用gets函数输入的n行,每行不超过80个字符。编写一个函数,它将每一行中连续的多个空格字符压缩为一个空格字符。在调用函数中输出压缩空格后的各行,空行不予输出。

(3)编写一个程序,输入n个整数,排序后输出。排序的原则由命令行的的可选参数-d定并且有参数-d时按递减顺序排序,否则按递增顺序排序。要求将排序算法定义成函数,利用指向函数的指针使该函数实现递增或递减排序。

(4)设某个班有N个学生,每个学生修了M门课程(用#define定义N、M)。输入M门课程的名称,然后依次输入N个学生中每个学生所修的M门课程的成绩并且都存放到相应的数组中。编写下列函数: a.计算每个学生各门课程平均成绩; b.计算全班每门课程的平均成绩;

c.分别统计低于全班各门课程平均成绩的人数;

d.分别统计全班各门课程不及格的人数和90分以上(含90分)的人数。 在调用函数中输出上面各函数的计算结果。(要求都用指针操作,不得使用下标操作。)

二、 实验步骤及结果 1, 源程序改错 更改之后得到的程序: #include int main(void { float *p; float a[10]; p=&a[0]; scanf(\ printf(\ return 0; }

运行结果: