C语言程序设计第四次(2.8)实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言程序设计实验报告

专业班级日期11月26日成绩

实验组别第3(2.7) 次实验指导教师李开

学生姓名学号同组人姓名

实验名称实验8 指针实验

一、实验目的

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

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

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

(4)掌握指针函数与函数指针的用法。

(5)掌握带有参数的main函数的用法。

二、实验任务

8.2 实验内容及要求

1.源程序改错

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

3.跟踪调试

4.程序设计

5.选做题

8.3 指定main函数的参数

三、实验步骤及结果

(要求给出源程序和程序运行结果。另外,根据实验内容,记录编辑、编译、链接、调试程序的操作过程和实验现象)

8.2 实验内容及要求

1.源程序改错

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

#include

void main(void)

{

float *p;

scanf("%f",p);

printf("%f\n",*p);

}

存在,错误为指针一开始没有初始化,而sacnf传入的是float型指针指向的地址,我们并不知道系统能给我们分配什么地址,所以说我们输入的地址很有可能使程序崩溃。

修改后代码:

#include

int main(void)

{

float *p;

float a[10];//这里可以换成其他数字

p=&a[0];

scanf("%f",p);

printf("%f\n",*p);

return 0;

}

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

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

#include

#include

void main(void)

{

char*(*p)(char a[],char b[]);

char a[80],b[80],c[160],*result=c;

int choice,i;

do{

printf("\t\t1 copy string.\n");

printf("\t\t2 connect string.\n");

printf("\t\t3 exit.\n");

printf("\t\tinput a number (1-3) please!\n");

scanf("%d",&choice);

}while(choice<1 || choice>5);

switch(choice){

case 1:

p=strcpy;

break;

case 2:

p=strcat;

break;

case 3:

goto down;

}

getchar();

printf("input the first string please!\n");

i=0;

gets(a);

printf("input the second string please!\n");

i=0;

gets(b);

result= p(a,b);

printf("the result is %s\n",result);

down:

;

}

(2)请上机运行第(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 *);

void main(void)

{

char a[20],b[60]="there is a boat on the lake.";

printf("%s\n",strcpy(a,b));

}

char *strcpy(char *s,char *t)

{

while(*s++=*t++)

;

return (s);

}

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

进入strcpy时:

返回main时:

(2)排除错

相关文档
最新文档