院实验报告
系(教研室): 专业: 年级:
实验课程:C语言程序设计 姓名: 学号: 实验室号:B706 计算机号: 实验时间: 指导教师签字: 成绩: 实验9:指针与结构体、共用体
一、 实验目的和要求
1) 1)通过实验进一步掌握指针的概念,会定义和使用指针变量; 2)能正确使用数组的指针和指向数组的指针变量; 3)能正确使用字符串的指针和指向字符串的指针变量。 4)掌握结构体、共用体类型变量的定义和使用; 5)掌握结构体、共用体类型数组的概念和应用;
二、 实验内容和原理
1.编写一个以指针为形参的函数,实现两数交换
2.用指针方式遍历输出有10个元素的一维数组的所有元素,并逆序输出
3.编写函数sub_copy(oldstring,newstring,m,s),将oldstring从第m个位置开始的s个字符复制到newstring,要求用指针实现。 4.自选。
5.求一个班学生成绩的总分、平均分、最高分、及格人数,要求在一个函数内求出。 6.计算字符串中子串出现的次数。要求:用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。
7.输入四个学生的三科成绩(语文,英语,数学) (1)输入四个学生的学号(01~04),姓名 (2)求每科成绩的最高分 (3)求每个学生成绩的平均分 (4)求每科成绩的平均分
要求学生信息用结构体实现
三、 实验环境
1. 硬件:PC机;
2. 软件:Windows操作系统、Visual C++ 6.0 。
四、 算法描述及实验步骤
1.编写一个以指针为形参的函数,实现两数交换 #include int *p1,*p2; printf(\"please input a,b:\"); scanf(\"%d,%d\ p1=&a; p2=&b; swap(p1,p2); printf(\"a=%d,b=%d\\n\ return 0; } void swap(int *p1,int *p2) { int temp; temp=*p1; *p1=*p2; *p2=temp; } 2.用指针方式遍历输出有10个元素的一维数组的所有元素,并逆序输出 #include 3.编写函数sub_copy(oldstring,newstring,m,s),将oldstring从第m个位置开始的s个字符复制到newstring,要求用指针实现。 #include char sub_copy(char oldstring[],char newstring[],int m,int s); char a[10]=\"chaowen\"; char b[20]=\"china\"; sub_copy(a,b,2,5); printf(\"%s\\n\ return 0; } char sub_copy(char oldstring[],char newstring[],int m,int s) { char *p,*q; int i=0; if(m<0||m>strlen(oldstring)||s<=0) return 0; p=oldstring+m-1; //p=&oldstring[m-1]; q=&newstring[0]; //q=newstring; while(i char*month_name[13]={\"illegalmonth\y\int n; printf(\"input month:\\n\"); scanf(\"%d\ if ((n <=12) && (n >=1)) printf(\"It is %s.\\n\else printf(\"It is wrong.\\n\"); return 0; } 5.求一个班学生成绩的总分、平均分、最高分、及格人数,要求在一个函数内求出。 #include void fun(int score[],int n,int *sum,float *average,int *max,int *count) { int i,max1=0,count1=0; float t=0.0; for(i=0;i count1++; //计算及格人数 } *sum = t; *average = t/n; *max = max1; *count = count1; //将所求结果写入指针所指变量 } void main() { int a[10]; int i; for(i=0;i<10;i++) scanf(\"%d\ int sum,max,count; float average; fun(a,10,&sum,&average,&max,&count); printf(\"sum=%d,average=%.2f,max=%d,count=%d\\n\} 6.计算字符串中子串出现的次数。要求:用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。 #include int subString(char *s1,char *s2); char a[16]=\"abacabasababab\"; char b[4]=\"ba\"; printf(\"%d\\n\ return 0; } int subString(char *s1,char *s2) { int count=0; char *p,*q,*t; p=s1; while(*p!='\\0') { t=p; q=s2; while(*t!='\\0'&&*q!='\\0') { if(*t==*q) {t++;q++;} else {break;} if(!*q) {count++;} } p++; } return count; } 7.输入四个学生的三科成绩(语文,英语,数学) (1)输入四个学生的学号(01~04),姓名 (2)求每科成绩的最高分 (3)求每个学生成绩的平均分 (4)求每科成绩的平均分 要求学生信息用结构体实现 #include void scan_student(struct student stu[4],int n); void print_student(struct student stu[4],int n); void fun(struct student stu[4],int n,int *max,float *av1,float *av2); int main() { int n=3; int *max=stu; float *av1=stu; float *av2=stu; scan_student(struct student stu[4],3); print_student(struct student stu[4],3); fun(struct student stu[4],int n,max,av1,av2); printf(\"%d,%f,%f\ return 0; } void scan_student(struct student stu[4],int n) { int i,j; printf(\"Please input number and name for everyone\\n\"); for(i=0;i<4;i++) { scanf(\"%s%s\ } printf(\"Please input score for everyone\\n\"); for(i=0;i<4;i++) for(j=0;j<3;j++) scanf(\"%d\} void print_student(struct student stu[4],int n) { int i,j; for(i=0;i 第七题调试不出来 六、 实验结果 1. please input a,b:28,26 a=26,b=28 Press any key to continue 2. 1 5 9 7 5 3 7 4 9 6 6 9 4 7 3 5 7 9 5 1 Press any key to continue 3. haowe Press any key to continue 4. input month: 9 It is September. Press any key to continue 5. 99 98 88 85 81 70 60 86 97 59 sum=823,average=82.30,max=99,count=9 Press any key to continue 6. 4 Press any key to continue 7. 七、总结 指针是c语言,比较难懂,在书写程序上有一定的难度。 因篇幅问题不能全部显示,请点此查看更多更全内容4.编写程序,输入月份号,输出该月的英文月名。 #include