第一篇:C语言结构体与指针实验
实验一 C语言结构体与指针
一、实验内容
1)学生信息的显示,具体要求如下: 定义一个结构体描述学生信息(学号,姓名,性别,年龄,住址); 设计一个函数,用于显示单个学生信息,函数的参数为前面定义的结构体类型; 设计一个主函数,在主函数中输入学生的信息,并调用前面定义的函数进行显示(学生人数不少于5人)。
2)输入若干个整数作为数组元素值,然后按输入时顺序的就地逆置排序,最后打印出逆置后的元素值。要求用指针和动态内存分配方法实现。例如 输入:10 2 30 4 5,逆置后显示为:5 4 30 2 10。
二、代码
1)#include
struct Student { int studentID;char name[20];char sex[2];//m=male f=female int age;char address[50];};
void showTheDetail(struct Student s){ printf(“%dn”,s.studentID);printf(“%sn”,s.name);printf(“%sn”,s.sex);printf(“%dn”,s.age);printf(“%snn”,s.address);}
void main(){ int i;struct Student student[5];for(i=0;i<5;i++){
printf(“student%dn”,i);
scanf(“%d”,&student[i].studentID);
}
scanf(“%s”,&student[i].name);scanf(“%s”,&student[i].sex);scanf(“%d”,&student[i].age);scanf(“%s”,&student[i].address);} for(i=0;i<5;i++){ showTheDetail(student[i]);} 2)#include
int temp,i,j,m=(n-1)/2;
for(i=0;i<=m;i++)
{
j=n-1-i;
temp=x[i];x[i]=x[j];x[j]=temp;
}
return;}
int main(){
int n,i;printf(“please insert the amount of the numbers:n”);scanf(“%d”,&n);int array[n];printf(“please insert the numbers:n”);for(i=0;i scanf(“%d”,&array[i]);} change(array,n);for(i=0;i printf(“%d”,array[i]);} } 三、心得体会 复习了c语言中的数组,结构体的知识,编程中没有出现问题。 C语言结构体指针变量作函数参数 在ANSI C标准中允许用结构变量作函数参数进行整体传送。但是这种传送要将全部成员逐个传送,特别是成员为数组时将会使传送的时间和空间开销很大,严重地降低了程序的效率。因此最好的办法就是使用指针,即用指针变量作函数参数进行传送。这时现金网96y.org由实参传向形参的只是地址,从而减少了时间和空间的开销。 计算一组学生的平均成绩和不及格人数。用结构指针变量作函数参数编程。 struct stu{ int num; char *name; char sex; float score; }boy[5]={ {101,Li ping,M,45},{102,Zhang ping,M,62.5},{103,He fang,F,92.5},{104,Cheng ling,F,87},{105,Wang ming,M,58} }; main(){ struct stu *ps; void ave(struct stu *ps); ps=boy; ave(ps); } void ave(struct stu *ps){ int c=0,i; float ave,s=0; for(i=0;i5;i++,ps++){ s+=ps-score; if(ps-score60)c+=1; } printf(s=%fn,s); ave=s/5; printf(average=%fncount=%dn,ave,c); } 本程序中定义了函数ave,其形参为结构指针变量ps。boy被定义为外部结构数组,因此在整个源程序中有效。在main函数中定义说明了结构指针变量ps,并把boy的首地址赋予它,使ps指向boy数组。然后博彩娱乐棋牌q07i5.org以ps作实参调用函数ave。在函数ave中完成计算平均成绩和统计不及格人数的工作并输出结果。 由于本程序全部采用指针变量作运算和处理,故速度更快,程序效率更高。 C语言指向结构体数组的指针 指针变量可以指向一个结构数组,这时结构指针变量的值是整个结构数组的首地址。结构指针变量也可指向结构数组的一个元素,这时结构指针变量的值是该结构数组元素的首地址。 设ps为指向结构数组的指针变量,则ps也指向该结构数组的0号元素,ps+1指向1号元素,ps+i则指向i号元素。这与普通数组的情况现金网96y.org是一致的。 用指针变量输出结构数组。 struct stu{ int num; char *name; char sex; float score; }boy[5]={ {101,Zhou ping,M,45},{102,Zhang ping,M,62.5},{103,Liou fang,F,92.5},{104,Cheng ling,F,87},{105,Wang ming,M,58} }; main(){ struct stu *ps; printf(NotNametttSextScoretn); for(ps=boy;psboy+5;ps++) printf(%dt%stt%ct%ftn,ps-num,ps-name,ps-sex,ps-score); } 在程序中,定义了stu结构类型的外部数组boy并作了初始化赋值。在main函数内定义ps为指向stu类型的指针。在循环语句for的表达式1中,ps被赋予boy的首地址,然后循环5次,输出boy数组中各成员值。 应该注意的是,一个结构指针变量虽然可以用来访问结构变量或结构数组元素的成员,但是,不能博彩公司排名q07i5.org使它指向一个成员。也就是说不允许取一个成员的地址来赋予它。因此,下面的赋值是错误的。 ps=boy[1].sex; 而只能是: ps=boy;(赋予数组首地址) 或者是: ps=boy[0];(赋予0号元素首地址) C语言程序设计实验十——指针 【实验1】 实验题目: 1、下列代码片段哪里有错误? char var1,ptr1; var1 = „x‟; ptr1 = &var1; 2、设有如下定义: Double var1, *ptr1, *ptr2; Float* ptr3; Int var2, *var4; 那么,var1, *ptr1, ptr2,*ptr2,ptr3,* ptr3,var2, var4,*var4个属于哪种数据类型? 3、下列代码片段在哪里有错误? Char c = ‟ A ‟; Char * p; p = c;或*p=‟A‟; 4、下列代码片段的输出结果是什么? charvar1 = „ S „; charvar2 = „ X ‟; char*ptr1, *ptr2; ptr1 = &var1; ptr2 = &var2; *ptr2 = *ptr1; printf(“%ct%cn”, *ptr1, var2); 【实验2】 实验题目:输入3个整数,按由小到大的顺序输出。 【实验3】 实验题目:输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。 实验要求:写3个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。 【实验4】输入年和天数,输出对应的年、月、日。 例如:输入2000和61,输出2000-3-1。 要求:都用指针实现。 一 实验目的 实验七 指针 了解指针的概念,学会定义和使用指针变量。2 掌握指针、变量和数组的关系及使用方法。3 学会使用指向函数的指针变量。 二 实验内容 编写函数fun(float *sn,int n),其功能是:根据以下公式计算s,计算结果通过形参sn传回;n通过实参传入,n的值大于等于0。上机运行并记录输入输出(主函数已给出)。 s11111 3572n1fun(float *sn,int n){ 定义变量:和s,通项w,符号f,循环控制变量i; /* 其中s、f要初始化 */ 循环求累加和s { 改变符号;/* 由负变正或由正变负 */ 求通项w;累加:s+=w;} 形参指针变量sn赋值;/* 通过形参sn传回累加和s */ } main(){ float s;int n;printf(“n=”);scanf(“%d”,&n);fun(&s,n);printf(“s=%fn”,s);} 完整程序如下: #include 输出结果如下图: 想使指针变量pt1指向a和b中的大者,pt2指向小者,以下程序能否实现此目的? swap(int *p1,int *p2){ int *p;p=p1;p1=p2;p2=p } main(){ int a,b;int *pt1,*pt2;scanf(“%d,%d”,&a,&b);pt1=&a;pt2=&b;if(a 上机调试此程序。如果不能实现题目要求,指出原因并修改之。 子函数swap改成下面程序方可实现目的,主函数不变: swap(int *p1,int *p2){ int p;p=*p1;*p1=*p2;*p2=p;} 下面的程序用来实现将一个3×3的矩阵转置。#include 程序修改如下: #include 应改为: printf(“%cn”,*pt++); 实验总结:本次实验主要掌握指针的概念,学会定义和使用指针变量,掌握指针、变量和数组的关系及使用方法,学会使用指向函数的指针变量,通过本次实验,很好的了解了指针的使用,加深了对指针的认识。第二篇:C语言结构体指针变量作函数参数
第三篇:C语言指向结构体数组的指针
第四篇:C语言程序设计实验十指针
第五篇:C语言实验程序、总结 实验七 指针