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"); }