C语言第二次实验报告
一.实验题目
11-7找鞍点:
实现方法:要满足输入格式我们可以通过二维数组and for循环嵌套来实现,要满足他所要求的鞍点,我们可以将其分为两部分,while循环{(1)利用单次for循环找寻行最大值。(2)利用单次for循环将找到的行最大值与其所在列的每一元素进行比较判断其是否是列最小值。}然后是则break,不是则continue;
12-8删除重复字符:
实现方法:利用for循环,直到找到对应的非空字符串,从这个非空字符串开始,每位从前移动一位,即可实现。
13-6数组循环右移:
实现方法:这道题主要是找到规律 b[(j+m)%n]=a[j];然后进行换位a[j]=b[j];
14-6通讯录的录入与显示:
实现方法:通过定义结构数组,通过循环输入和输出存储内容。
15-5建立学生信息列表:
实现方法:单向链表的头尾指针保存在全局变量'head'和'tail'中,输入为若干个学生的信息(学号、姓名、成绩),当输入学号为0时结束。
二.部分代码
11-7:找鞍点
1 int a[6][6];//定义二维数组 2 int n; 3 scanf("%d",&n); 4 int i,j; 5 for(i=0; i<n; i++) 6 for(j=0; j<n; j++) 7 { 8 scanf("%d",&a[i][j]); 9 } 10 int k=0,y=0,flag=1,p=0; 11 if(n==1) 12 printf("0 0");//只有一个点时,一定是鞍点 13 else 14 { 15 for(i=0; i<n; i++) 16 { 17 y=i; 18 for(p=0; p<n; p++) //找行最大值 19 { 20 if(a[i][k]<=a[i][p])//数组元素之间比较,若比a[i][k]大,则将数组列标赋给k 21 { 22 k=p; 23 } 24 } 25 for(j=0; j<n; j++)//判断是否为列最小值 26 { 27 if(a[y][k]>a[j][k])//若此行最大值不是列所在最小值,把小的行标赋给y 28 { 29 y=j; 30 break; 31 } 32 } 33 if(i==y)//行最大且列最小,判断条件行标不改变 34 { 35 flag=0; 36 break; 37 } 38 }
12-8:删除重复字符
1 char a[80],b[80]; 2 int i,j,len,t; 3 gets(a); 4 len=strlen(a); 5 for(i=0;i<len;i++) 6 for(j=i+1;j<len;j++) 7 if(a[i]>a[j]) 8 { 9 t=a[i]; 10 a[i]=a[j]; 11 a[j]=t; 12 } 13 b[0]=a[0]; 14 j=0; 15 for(i=1;i<len;i++) 16 { 17 if(b[j]==a[i]) 18 continue; 19 else 20 { 21 j++; 22 b[j]=a[i]; 23 } 24 } 25 j++; 26 b[j]='\0'; 27 puts(b);
13-6数组循环右移
1 int ArrayShift( int a[], int n, int m ) 2 { 3 int b[n],j; 4 for(j=0;j<n;j++) 5 { 6 b[(j+m)%n]=a[j]; 7 } 8 for(j=0;j<n;j++) 9 { 10 a[j]=b[j]; 11 } 12 }
14-6通讯录的录入与显示
1 int main() 2 { 3 int N,n; 4 scanf("%d",&N); 5 struct message s[11]; 6 int i,j,k; 7 for(i=0;i<N;i++) 8 scanf("%s %s %c %s %s",&s[i].name,&s[i].birth,&s[i].sex,&s[i].number,&s[i].phone); 9 10 scanf("%d",&n); 11 for(i=0;i<n;i++){ 12 scanf("%d",&k); 13 if(k<N&&k>=0){ 14 printf("%s %s %s %c %s\n",s[k].name,s[k].number,s[k].phone,s[k].sex,s[k].birth); 15 } 16 else 17 printf("Not Found\n"); 18 }
15-5建立学生信息列表:
void input(){ struct stud_node *p; head = (struct stud_node*)malloc(sizeof(struct stud_node)); head->next = NULL; p = head; while(1) { tail = (struct stud_node*)malloc(sizeof(struct stud_node)); scanf("%d", &tail->num); if (!tail->num) break; scanf("%s%d", tail->name, &tail->score); p->next = tail; p=tail; } head = head->next; }
三.心得体会
1.在创建链表时一定要注意对每个链表进行空间的分配,注意核对链表最后一个的NEXT是否指向NULL。
2.对指针还是要多加练习,要学会灵活运用getchar()解除缓冲区,利用gets(),puts()等对字符串进行输入输出。
3.在写代码的同时我们也可以寻找规律,这样往往能够节省更多的时间提高代码的效率。