(3)测试数据: (4)运行结果:
(5)问题及解决方法:
4、输入一个字符串,内有数字和非数字字符,例如: A123cdf 456.78cpc876.9er 849.1 将其中连续的数字作为一个实数,依次存放到一数组a中。例如123存放在a[0],456.78存放在a[2],依次类推,统计共有多少个数,并输出这些数。 (1)算法描述: f(a,b); for(j=0;j<4;j++) printf(\(2)源代码及说明: #include
void f(char *sp,float b[]) { char *p; float value; int power,i=0,j=0; p=sp; while(*p) { for(;!(*p>='0'&&*p<='9');p++) value=0; for(value=0;(*p>='0'&&*p<='9');p++,i++) value=value*10+*p-'0'; if(*p=='.') p++; for(power=1;(*p>='0'&&*p<='9');p++,i++) { value=value*10+*p-'0'; power=power*10; } value=value/power; b[j++]=value; } printf(\数字个数为:%d\\n\}
void main() { int j; float b[4]={0}; char *a=\ f(a,b); for(j=0;j<4;j++)
第 31 页 共 31 页
printf(\}
(3)测试数据: (4)运行结果:16
123.00 456.78 876.90 849.18 (5)问题及解决方法:无 三、实验总结:
(1)掌握了用指针进行函数参数传递的方法。
(2)掌握了指针数组和二维数组间的关系以及进行参数传递时的写法。
实验八 结构体 实验 (验证性 综合性 实验 2学时)
一、目的要求:
(1)掌握结构体的定义、数据输入方法。 (2)掌握结构体成员变量的两种访问方法。
(3)掌握编写程序完成单链表的建立和查询方法。 (4)编写实验报告。
二、实验内容(参考实验指导书):
1、编写一个建立单链表的函数,设链表的表元素信息包含学号、姓名、一门课的成绩;写一个按照学号查学生成绩的函数;最后写一个主函数,它先调用建立函数,再调用查询函数,显示查到学生的姓名和成绩。 (1)算法描述: for(k=0;k<4;k++) { printf(\请输入学号:(1~4)\\n\scanf(\ for(j=0;j<4;j++) if(stu[j].num==i) (2)源代码及说明: #include
stu[4]={{1,\main() { int i,j,k; for(k=0;k<4;k++) {
第 32 页 共 32 页
printf(\请输入学号:(1~4)\\n\scanf(\ for(j=0;j<4;j++) if(stu[j].num==i) printf(\ } }
(3)测试数据:
(4)运行结果: (5)问题及解决方法:无
2、编一程序,能把从终端输入的一个字符串中的小写字母全部转换成大写字母,要求输入的字符的同时指定该字符在字符串中的序号(即字符在字符串中的顺序号,例如第1个字符的序号为1),字符和序号存入结构体中,字符串存入结构体数组中,然后显示结构体数组的结果(用字符!表示输入字符串的结束)。 (1)算法描述: while(1) { scanf(\ if(s[i].a!='!') s[i].num=i+1; else break; if(s[i].a>'Z') s[i].a=s[i].a-32; printf(\ i++; }
(2)源代码及说明: #include
第 33 页 共 33 页
int i=0; printf(\请输入字母,以!为结束标志\\n\ while(1) { scanf(\ if(s[i].a!='!') s[i].num=i+1; else break; if(s[i].a>'Z') s[i].a=s[i].a-32; printf(\ i++; } }
(3)测试数据:
(4)运行结果:
(5)问题及解决方法:无
3、在本实验的实验内容1的基础上,实现在链表元素index之前插入元素的操作Insert( struct node *head, int index)和删除指定位置元素的操作Delete( struct node * head, int index),并编写主函数测试。 (1)算法描述: (2)源代码及说明: #include
struct student * fun() { struct student *p,*q,*head;
第 34 页 共 34 页
q=head=NULL; char str[15]={'\\0'}; printf(\请依次输入学生的姓名,学号,成绩:(以'0'作为结束标志)\\n\ while(1) { scanf(\ if(str[0]=='0') break; p=(struct student *)malloc(sizeof(struct student)); strcpy(p->name,str); scanf(\ scanf(\ if(head==NULL) head=q=p; else { q->next=p; q=p; } } q->next=NULL; return head; }
struct student * park(struct student *head) { int i; char str[15]; struct student *p,*q; printf(\你想要删除某个学生的信息吗?是/否(1/0)\\n\ scanf(\ if(!i) return head; printf(\请输入你想要删除的学生姓名\\n\ scanf(\ for(p=head,q=NULL;p!=NULL;q=p,p=p->next) if(!strcmp(p->name,str)) break; if(p==NULL) { printf(\没有你要删除的学生的信息\\n\ return head; } else {
第 35 页 共 35 页