c语言第二次实验
2018-01-23 22:34 怪人多多 阅读(977) 评论(0) 编辑 收藏 举报
一·实验题目,设计思路,实现方法
11-7 找鞍点
设计思路:“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序,求一个给定的n阶方阵的鞍点。
实现方法:利用双重for循环,分别比较各列元素和各行元素即可。
12-3 字符串逆序
设计思路:先得出字符串的长度,再通过循环使字符交换位置,从而得到逆序的字符串。
实现方法:在while循环中用getchar()得出字符串的长度i,然后字符逆序需要交换的次数为i/2,用for循环使的字符交换,从而得到逆序字符。字符串需要结束符’/0’。
13-2利用指针寻找最大值
本题要求实现一个简单函数,找出两个数中的最大值。
函数接口定义:
void findmax( int *px, int *py, int *pmax );
设计思路:其中px和px是用户传入的两个整数的指针。函数findmax应找出两个指针所指向的整数中的最大值,存放在pmax指向的位置。
实现方法:因为利用指针函数不仅是传值,还可以通过所指向地址的变化来传递变量。所以在比较完大小之后还可以进行转换。
14-4 输出月份英文名
设计思路:将月份对应的数组存入二维数组,再根据读取的月份数字对应输出月份英文字母。
实现方法:定义二维数组,将月份对应的英文字母存入数组,若月份存在则返回月份对应的英文字母,否则返回空指针。
15-7用递归求斐波那契数列
设计思路:本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:
f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。
实现方法:利用递归思想,在函数里调用函数本身来实现复杂的循环计算。
二·源程序
题目1:11-7找鞍点
for (i=0;i<n;i++)
for (j=0;j<n;j++)
scanf("%d",&matrix[i][j]);
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (matrix[i][n] < matrix[i][j])
matrix[i][n] = matrix[i][j];
for (j=0;j<n;j++){
matrix[n][j] = matrix[0][j];
for (i=0;i<n;i++)
if (matrix[n][j] > matrix[i][j])
matrix[n][j] = matrix[i][j];
}
f=0;
for (i=0;i<n;i++){
for (j=0;j<n;j++){
if (matrix[i][j] == matrix[n][j] && matrix[i][j] == matrix[i][n]){
f=1;
break;
题目2;12-3 字符串逆序
while((str[i]=getchar())!='\n')
i++;
str[i]='\0';
t=i-1;
k=i/2;
for(i=0;i<k;i++)
{
ch=str[i];
str[i]=str[t-i];
str[t-i]=ch;
}
for(i=0;str[i]!='\0';i++)
题目3:13-2利用指针寻找最大值
void findmax( int *px, int *py, int *pmax ) { int a,b,max=0; if(*px>*py){ *pmax=*px; }else if(*px<*py){ *pmax=*py; }
题目4:14-4 输出月份英文名
switch(n)
{
case 1:return "January";
case 2:return "February";
case 3:return "March";
case 4:return "April";
case 5:return "May";
case 6:return "June";
case 7:return "July";
case 8:return "August";
case 9:return "September";
case 10:return "October";
case 11:return "November";
case 12:return "December";
default:return NULL;
题目5:15-7用递归求斐波那契数列
int f( int n ) { int result; if(n == 0) result = 0; else if(n == 1) result = 1; else result = f(n - 2) + f(n - 1); return result; }
三、遇到的问题和解决办法。
一、没有掌握指针的思想。
二、没有透彻理解递归的用法。
三、还不能掌握链表的基本操作。
四、输出月份对应英文单词,开始用switch()出现段错误,后面定义一维数组还是答案错误,,知道应该定义成二维数组。
五、字符串长度函数strlen(),使得编程步骤简单很多。