C语言实验八指针福建农林大学

福建农林大学实验报告

系(教研室):专业:年级:

实验课程:C语言程序设计姓名:学号:实验室号:

计算机号:实验时间:指导教师签字:成绩:

实验8:指针

一、实验目的和要求

1.通过实验进一步掌握指针的概念

2.能定义和使用指针变量

3.能正确使用字符串的指针和指向字符串的指针变量

二、实验内容和原理

1. 输入3个整数,按由小到大的顺序输出。

2. 写一个函数,求一个字符串的长度。在一个main函数中输入字符串,并输出其长度。

3.输入一行文字,找出其中的大写字母、小写字母、空格、数字以及其他字符各有多

少。

4. 将n个数按输入时顺序的逆序排列。

5. 将字符串a复制到字符串b,用两种方法实现。

6. 下面程序按逆序重新放置a数组N个元素的值,a数组中的值由用户输入。请填空并

调试运行。

# include

# define N 10

main()

{ int a[N], i, *ps, *pe, temp;

for(i=0; i

for(ps=a,pe=a+N-1;ps

{ temp=*ps; *ps=_*pe___; *pe=temp;}

for(i=0;i

printf(“\n”);

}

三、实验环境

1. 硬件:PC机;

2. 软件:Windows操作系统、Visual C++ 6.0 。

四、算法描述及实验步骤

1. 用指针来存放数字,然后作比较,判断结果如果要交换位子用swap来实现交换。

2. 字符串有一个特点,就是末尾以'\0'结束,所以当判断遇到'\0'时,就自增来统计字符串的长度。

3. 用数组来定义这一系列字符即s[] ,用while来实现条件选择判断。

4. 要输出逆序排列,可将原来输入的数字按中间划分为两半,如果是偶数个,就将两边的数字一一对应交换,如果是奇数个,就以中间数为对称一一对应交换。

5. 1)用字符数组实现,分析a, b前后的内容。b中仍保留原来的一部分内容。但输出b中内容时,遇到第一个'\0'时结束。对字符数组只能对各个元素赋值,不可将整个串赋给数组名2)用字符指针实现,用指针变量,即可将整个字符串赋值。

6.编写程序,运用for循环语句,将一数组中的数字按逆序输出,其中数组中的数要求由用户输入。运行程序,分析结果。

五、调试过程

第一题:1.exe - 0 error(s), 0 warning(s)

第二题:2.exe - 0 error(s), 0 warning(s)

第三题:3.exe - 0 error(s), 0 warning(s)

第四题:4.exe - 0 error(s), 0 warning(s)

第五题:5.exe - 0 error(s), 0 warning(s)

5.2.exe - 0 error(s), 0 warning(s)

第六题:6.exe - 0 error(s), 0 warning(s)

六、实验结果

第一题

第二题

第三题

第四题

第五题

第六题

七、总结

1.通过实验进一步掌握指针的概念

2.學會了定义和使用指针变量

3.學會了正确使用字符串的指针和指向字符串的指针变量附录:

第一題

#include

void main()

{ void swap(int *p1,int *p2);

int n1,n2,n3;

int *p1,*p2,*p3;

printf("输入三个整数n1,n2,n3:");

scanf("%d,%d,%d",&n1,&n2,&n3);

p1=&n1;

p2=&n2;

p3=&n3;

if(n1>n2) swap(p1,p2);

if(n1>n3) swap(p1,p3);

if(n2>n3) swap(p2,p3);

printf("从小到大排列:%d,%d,%d\n",n1,n2,n3);

}

void swap(int *p1,int *p2)

{int p;

p=*p1; *p1=*p2; *p2=p;

}

第二题

#include

void main()

{int length(char *p);

int len;

char str[20];

printf(" 输入字符串:");

scanf("%s",str);

len=length(str);

printf("字符串长度%d\n",len);

}

int length(char *p)

{int n;

n=0;

while (*p!='\0')

{n++;

p++;

}

return(n);

}

第三题

#include

void main()

{int upper=0,lower=0,digit=0,space=0,other=0,i=0;

char *p,s[20];

printf("输入串: ");

while ((s[i]=getchar())!='\n') i++;

p=&s[0];

while (*p!='\n')

{if (('A'<=*p) && (*p<='Z'))

++upper;

else if (('a'<=*p) && (*p<='z'))

++lower;

else if (*p==' ')

++space;

else if ((*p<='9') && (*p>='0'))

++digit;

else

++other;

p++;

}

printf("大写字母数:%d 小写字母数:%d\n",upper,lower);

printf("空格数:%d 数字:%d 其他字符:%d\n",space,digit,other); }

第四题

void main()

{void sort (char *p,int m);

int i,n;

char *p,num[20];

printf("输入n的值:");

scanf("%d",&n);

printf("输入n个数:");

for (i=0;i

scanf("%d",&num[i]);

p=&num[0];

sort(p,n);

printf("逆序排放:");

for (i=0;i

printf("%d ",num[i]);

printf("\n");

}

void sort (char *p,int m)

{int i;

char temp, *p1,*p2;

for (i=0;i

{p1=p+i;

p2=p+(m-1-i);

temp=*p1;

*p1=*p2;

*p2=temp;

}

}

第五题(一)

#include

void main ( )

{ char a[ ]="you are great!";

char b[20];

int i;

for (i=0;*(a+i)!='\0';i++)

*(b+i)=*(a+i);

*(b+i)='\0';

printf("串a: %s\n", a);

for (i=0;b[i]!='\0';i++)

printf("%c", b[i]);

printf("\n");

}

第五题(二)

void main ( )

{

char a[ ]="I am a student!";

char b[20], *p1=a, *p2=b;

int i;

for ( ;*p1!='\0';p1++,p2++)

*p2= *p1;

*p2= '\0';

printf("串a: %s\n", a);

for (i=0;b[i]!='\0';i++)

printf("%c", b[i]);

printf("\n");

}

第六题

# include

# define N 10

main()

{ int a[N], i, *ps, *pe, temp;

for(i=0; i

for(ps=a,pe=a+N-1;ps

{ temp=*ps; *ps=*pe; *pe=temp;} for(i=0;i

printf("\n");

}

相关文档
最新文档