一、实验题目,设计思路,实现方法
实验题目:十一次 11-7 十二次12-8 十三次 13-5 十四次 14-3 十五次 15-7
设计思路:11-7:鞍点就是行最大列最小,分两点,一:只有一行一列则必然是鞍点,二:二维(行列大于1)。先从第一行开始找行最大,再在这个数字所对应的列中寻找列最小,若就是行最大,则输出该点的行列下标,不是则进入下一行继续寻找。
12-8:计算字符长度,字符串排序,除去排好字符里的重复字符,并放入新的字符组里,然后输出
13-5:计算字符串长度,i从0开始增,j从长度减一开始减,当i=j则输出是回文。
14-3:值得注意的是要返回是的首地址,先找到s的首地址,然后t从首地址依次赋给s末地址及后面的地址。
15-7:根据规律,找到递归出口和递归调用函数。
二、源程序
11-7
#include
intmain()
{int a[6][6];//定义二维数组
intn;
scanf("%d",&n);inti,j;for(i=0; i
{
scanf("%d",&a[i][j]);
}int k=0,y=0,flag=1,p=0;if(n==1)
printf("0 0");//只有一个点时,一定是鞍点
else{for(i=0; i
{
y=i;for(p=0; p
{if(a[i][k]<=a[i][p])//数组元素之间比较,若比a[i][k]大,则将数组列标赋给k
{
k=p;
}
}for(j=0; j
{if(a[y][k]>a[j][k])//若此行最大值不是列所在最小值,把小的行标赋给y
{
y=j;break;
}
}if(i==y)//行最大且列最小,判断条件行标不改变
{
flag=0;break;
}
}if(flag==0)
printf("%d %d",i,k);else printf("NONE");
}return 0;
}
12-8:
#include#include#include#include
intmain()
{int min,i,j,k=0;char str[80],str_pr[80],t;
gets(str);intc;
c=strlen(str);//strlen计算字符长度,头文件string.h
for(j=0;j
min=j;for(i=j+1;istr[i])
min=i;
t=str[min];
str[min]=str[j];
str[j]=t;
}//字符串排序
for(i=0;i
str_pr[k]=str[j];for(int x=0;x
str[x]=0;
}
}
k++;
}
}
}//除去排好字符里的重复字符,并放入str_pr字符组里
for(i=0;i
printf("%c",str_pr[i]);
}return 0;
}
13-5:
bool palindrome( char *s )
{int len=strlen(s);int k=0,i=0,j=len-1;while(i
i++;
j--;
}if(i>=j)return true;else
return false;
}
14-3:
char *str_cat( char *s, char *t )
{while(*s!=0)
s++;while(*t!=0){*s=*t;
s++;
t++;
}*s='\0';returns;
}
15--7:
int f( intn ){if(n==0) return 0;else if(n==1) return 1;else{return f(n-2)+f(n-1);
}
}
三、遇到的问题及解决方法、心得体会
11-7
遇到的问题:在寻找列最小时忽略了验证该数是否与行最大在同一行且为同一个
解决方法:增加了验证了列最小的数所对应的行坐标是否等于行最大的行标
12-8
遇到的问题:删除重复字符并放入新的字符串中,在输出时,有出现乱码
解决方法:问同学,重新整理思路,换了一种写法
14-3
遇到的问题:把简单的问题复杂化了
解决方法:在同学的指点下成功完成了该代码
15-7
遇到的问题:初学还不是很懂递归的应用
解决方法:多看看书里的写法,多练习
心得体会:
1、下学期要多多敲代码,特别是课本上的例题,用的做法很经典,而自己一直用笨方法解题,费时费力;
2、多把时间放在PTA上,但也要经常复习课本的基础知识,温故而知新,基础知识就像我们搭建搭建房子的砖头一样,不起眼但缺一不可;
3、手写代码依然存在较大问题,以后要锻炼自己的手写能力;
4、不会就要多问问同学,如果遇到同学也不会的就问老师。