代码改变世界

c语言第二次实验

2018-01-23 22:34  怪人多多  阅读(972)  评论(0编辑  收藏  举报

c语言 第二次实验报告

 

·实验题目,设计思路,实现方法

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。

实现方法:利用递归思想,在函数里调用函数本身来实现复杂的循环计算。

·源程序

题目111-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;

题目212-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++)

 题目313-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; }
题目414-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(),使得编程步骤简单很多。