C语言实验6 实验报告(指针).docx
C语言程序设计实验报告实验六使用指针的程序设计(1)班级 2012153学号 201215317姓名 杜顺永一、实验目的(1)掌握指针的概念,会定义和使用指针变量;(2)能正确使用数组的指针和指向数组的指针变量;(3)熟悉指针做函数参数的使用方法;(4)能正确使用字符串的指针和指向字符串的指针变量。二、实验内容及步骤1、按要求完善程序下列程序的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参n给了数组中 数据的个数,利用指针。dd返回奇数之和,利用指针even返回偶数之和。例如:数组中的值 依次为:1, 9, 2, 3, 11, 6;则利用指针。dd返回奇数之和24;利用指针even返回偶数之 和8。请在下面空白处将实现这一功能的函数完善,并且调试运行出结果。程序代码如下所示:ftinclude <stdio. h>define N 20void fun(int *a, int n, int *odd, int *even)(int i;*odd=0;*even=0;for (i=0;i<n;i+, a+)if(*a%2=0)*even=*even+*a;else*odd=*odd+*a;)void main ()(int aN = l, 9, 2, 3, 11, 6, i, n=6, odd, even;printf (/zThe original data is:n);for(i=0;i<n;i+)printf (炕d,* (a+i);printf(nn);fun (a, n, &odd, &even);printf (/zThe sum of odd numbers :%dn,z, odd);printf (zzThe sum of even number:%dnz,, even);)运行结果:Q:文档南程Debug侯睑6 (1) .exe-The original data is : 192311The sun of odd number is :24The sum of euen number is :8Press any key to continue2 .假设每班人数最多不超过30人,具体人数由键盘输入,试编程打印最高分及其学号。 要求:用一维数组和指针变量作函数参数,编程打印某班一门课成绩的最高分和学号。请编 写相应的程序代码,并调试运行出正确结果。程序代码:#include<stdio.h>void main()(float search(float *p,int n);int num30p=num3;long int n;float score30q=score,temp;printf(”请输入班级人数n (n<=30):n);scanf(n%d,&n);for(i=0;i<n;i+,p+,q+)(printf请依次输入学号、成绩:nn);scanf(H%d%rp,q);)temp=search(score,n);printf("最高分学号 如下:nM);for(i=0;i<n;i+)if(scorei=temp)printf(M%5.1f%15dn,scorei,numi);)float search(float *p,int n)(int ij;float max=*p;for(i=0;i<n;i+9p+)if(*p>max)max=*p;return(max);运行结果:Q:文档南程Debug供睑6 ( 2 ) .exew道输入覆级白裂n30): 5 请他次输入学号、成绩:201215314 98请依次输入学号、成绩:201215302 94请依次输入学号、成绩:201215309 96请依次输入学号、成绩:201215317 100请依次输入学号、成绩:201215326最高分100.0100.0100学号如下:ress any201215317201215326 key to continue3 .矩阵转置;要求:从主程序中输入一个3*3的整形矩阵,调用一个函数,将此矩阵转置,用指针作 为函数的形参,在主程序中输出转置后的矩阵。程序代码:#include<stdio. h>void main()void ex(int (*p) 3, int *q);int str3 3,i,j;printf(请按行输入矩阵(3*3) :n);for(i=0;i<3;i+)(for(j=0;j<3;j+)scanf C%4dzr, &stri j);)ex(str, str0);printf (逆置后矩阵为:n");for(i=0;i<3;i+)|for(j=0;j<3;j+)printf ("%4d”, striEj);printf(n);)void ex (int(*p)3, int *q)int i, temp;for (i=0;i<2;i+) p+;q+; temp=*q;*q=*p;*p=temp;)temp=*(*p+l);*(*p+l)=* (q+3);*(q+3)=temp;)运行结果:li 9:阳温理Debug供缝6 ( 3 ) exJ请按行输入矩阵(3吗):45 56 2320 12 3098 25 29逆置后矩阵为:45 20 9856 12 2523 30 29Press any key to continue4.从键盘输入一个字符串,实现利用字符指针将字符串的字符顺序逆置并输出。(例如输入 abcdef,输出fedcba)。请编写相应的程序代码,并调试运行出正确结果。程序代码:#include<stdio. h>void main()void change(char a); char a100;printf (请输入一个字符串:); scanf ("%s”, a);change(a);printf ("逆置 后字符串为:%sn", a);void change(char a)int i, n, temp;for(i=0;ai!=, 0, ;i+) n=i+l;char*q=a+n-l;for (i=l;i<=n/2;i+, a+, q-)temp=*a;*a=*q;*q=temp;运行结果:.S3 9:文档流程'Debug供验6 ( 4 ) .exe-请输入一个字符串:123rtycgh£j 速置后字符串为:jfhffcytr321Press any key to continue5.编写在字串strl中找出所有非数字的字符串当成一个空格,存入字符数组str2中(所 有数字字符也必须依次存入str2中),strl不变仍为原字串的程序。例如,字符串strl为 $Ts!47&*s456 a23*+B9k,调用函数 fun 后,字符数组 str2 将存入 47 456 23 9 ,strl 仍然是$Ts! 47&*s456 a23* +B9k。程序代码:#include<stdio. h>#include<stdlib. h>void main()void change(char *q, char *p);char strl100, str2100;printf (请输入字符串:);gets (strl);change(strl, str2);printf ("变换后字符串:%sn”, str2);)void change(char *q, char *p)|for (;*q!='0' ;q+)(if (*q>=' O') && (*q<=,9')*p=*q;p+;)else(if(*(pT)='') continue;else*p=p+)if (*q=, 0,)*p=' 0;运行结果:Q:3m招程Debug供验6 ( 5 ) .exe-入后度又 y wtke¥ Xgyufgs4566&&*hgsdg236z4566 236 7546 to continue7546三、实验心得. .实验中对数据排序、最大值问题理解不够深刻,指针运用有待提高,算法问题依然存在, 花费时间多,效率不高。