当前位置:文档之家› 【程序设计实践实验指导书】实验2:指针进阶

【程序设计实践实验指导书】实验2:指针进阶

河南工业大学实验报告课程名称:程序设计实践开课实验室:一、实验目的:1. 理解指针数组的概念,掌握指针数组的基本应用和编程方法。

2. 掌握单向链表的概念和建立方法。

3. 掌握单向链表的基本操作。

二、实验环境:1. 运行Window XP/Windows 7/Windows 8等的操作系统的PC机;2. VC++6.0,CodeBlocks,或Dev C++等编译环境。

三、实验内容:1.编写程序,输入一个月份,输出对应的英文名称,要求用指针数组表示12个月的英文名称。

输入输出示例:5May【源程序】#include<stdio.h>#include <stdlib.h>int main(){ int num;scanf("%d",&num);getchar();char*month[12]={"January","February","March","April","May","June","July","August","September","October","Novermber","December"};printf("%s\n",month[num-1]);return 0;}【运行结果】8AugustProcess returned 0 (0x0) execution time : 2.466 sPress any key to continue.2. 定义一个指针数组将下表的星期信息组织起来,输入一个字符串,在表中查找,若输入输出示例:Tuesday3【源程序】#include<stdio.h>#include <stdlib.h>#include <string.h>int main(){char*month[12]={"January","February","March","April","May","June","July","August","September"," October","Novermber","December"};char mnum[10];scanf("%s",&mnum);getchar();int i=0;for(i=0;i<12;i++){ if(strcmp(mnum,month[i]))printf("%d\n",i+1);return 0;}return 0;}【运行结果】Junuary1Process returned 0 (0x0) execution time : 5.130 sPress any key to continue.3. 编写程序,输入n(n<10)个字符,输出其中最长字符串的有效长度。

要求自定义函数int max_len(char *s[] , int n),用于计算有n个元素的指针数组n中最长的字符串的长度。

6【源程序】#include <stdio.h>#include <stdlib.h>#include <string.h>int max_len(char *s[] ,int n);int main(){int i,n,t;printf("n=");scanf("%d",&n);getchar();char *num[n],str[80];for(i=0;i<n;i++){gets(str);num[i]=(char*)malloc(sizeof(char)*(strlen(str)+1));strcpy(num[i],str);}t=max_len(num,n);printf("%d",t);return 0;}int max_len(char *s[],int n){int i,t,max=0;for(i=0;i<n;i++){t=strlen(s[i]);if(max<t)max=t;}return max;}【运行结果】n=5sdsdsdsdsdddddddddddddd8Process returned 0 (0x0) execution time : 8.274 sPress any key to continue.g4. 输入若干个学生信息(包括学号、姓名和成绩),输入学号为0时输入结束,建立一个单向链表,再输入一个成绩值,将成绩大于等于该值的学生信息输出。

4 Zhao 85【源程序】#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct node{int num;char name[20];—int score;struct node *next;}LNode, *LinkList;void CreateList(LinkList head){LinkList p,rear=head;int num;char temp[20];int tmp;while(scanf("%d %s %d",&num ,&temp,&tmp),num!=0){p=(LinkList)malloc(sizeof(LNode));p->num=num;strcpy(p->name,temp);p->score=tmp;rear->next=p;rear=p;}rear->next=NULL;}void printList(LinkList head,int n){LinkList p=head->next;while(p){ if(p->score>=n){printf("%d %s %d\n",p->num,p->name,p->score);}p=p->next;}}int main(){ int n;LNode mark;LinkList head;head=(LinkList)malloc(sizeof(LNode));head->next=NULL;CreateList(head);scanf("%d",&n);printList(head,n);return 0;}【运行结果】1 zhang 783 ji 874 killer 785 kim 830 0 0802 wang 983 ji 875 kim 83Process returned 0 (0x0) execution time : 71.387 sPress any key to continue.5. 输入若干个正整数(输入-1为结束标志),要求按输入数据的逆序建立一个链表,并输出。

输入输出示例:1 2 3 4 5 6 7 -17 6 5 4 3 2 1【源程序】#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct node{int num;struct node *next;}LNode, *LinkList;void CreateList(LinkList head){LinkList p,rear=head;int num;while(scanf("%d",&num),num!=-1){p=(LinkList)malloc(sizeof(LNode));p->num=num;rear->next=p;rear=p;}rear->next=NULL;}void printList(LinkList head){ int temp;LinkList p=head->next,j;{ j=p->next;while(j){if(p->num<j->num){temp=p->num;p->num=j->num;j->num=temp;}j=j->next;}p=p->next;}p=head->next;while(p){printf("%d ",p->num);p=p->next;}}int main(){ int n;LNode mark;LinkList head;head=(LinkList)malloc(sizeof(LNode));head->next=NULL;CreateList(head);printList(head);free(head);return 0;}【运行结果】1 2 3 4 44 55 33 23 42 45 -155 45 44 42 33 23 4 3 2 1Process returned 0 (0x0) execution time : 14.031 sPress any key to continue.*6、在第4题的基础上,再添加两个函数模块,一个实现将链表中数据存储到磁盘文件“student.dat”中。

另一个实现将磁盘文件“student.dat”中的数据按照学号逆序建立新的链表。

【源程序】【运行结果】—四、实验结果&总结:(列出实验过程中的收获和遇到的困难)。

相关主题