yuan的第二次隨筆


第一題:

            計算兩數的和與差

設計思路:

                  1:看題目:主函數與函數聲明,知道它要你干什么
                  2:理解與分析:在main中,定義兩個實數a,b;要你求兩數的和與差
                  3:解答:通過調用函數sum_diff,指針psum接收&sum,指針pdiff接收&diff,實數op1接收實數a,實數op2接收實數b,計算兩數的和與差:*psum=op1+op2;,*pdiff=op1-op2
                  4:輸出

流程圖:

實驗代碼:

 void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
  *psum=op1+op2;
  *pdiff=op1-op2;
}

錯誤信息:

第二題:

拆分實數的整數與小數部分

設計思路:

               1:看題目:主函數與函數聲明,知道它要你干什么
               2:理解與分析:在main中,給你一個實數x,要求你將他的整數與小數分離
               3:解答:在splitfloat中,利用實數x接收main中的x,利用指針intpart接收main中的&intpart,利用指針fracpart接收main中的&fracpart,再先分解x整數部分:*intpart=(int)x,小數等於x減去整數:*fracpart=x-*intpart

流程圖:

實驗代碼:

void splitfloat( float x, int *intpart, float *fracpart )
{
  *intpart=(int)x;
  *fracpart=x-*intpart;
}

錯誤信息:

            1:求整數時,寫成了*intpart=x/1

改正方式:

           1:將它改為:*intpart=(int)t;

小結:

             整數除以整數還是整數,浮點數(或者整數)除以整數(或者浮點數)是浮點數,浮點數除以浮點數還是浮點數

疑問:為什么這個也可以通過?

void splitfloat( float x, int *intpart, float *fracpart )
{
  *intpart=x/1;
  *fracpart=x-*intpart;
}

第三題:

           在數組中查找指定元素

設計思路:

                 1:看題目:主函數與函數聲明,知道它要你干什么
                 2:理解與分析:題目給你一個數組a[MAXN],里面存有一些數字,然后再讓你輸入一個數字x,看數組中是否存在這個數,在調用函數list{},判斷這個數是否在數組中,若在,返回這個數的下標,反之,返回-1

流程圖:

實驗代碼:

int search( int list[], int n, int x )
{
  int s=-1;
  int i;
  for(i=0;i<n;i++)
  {
    if(list[i]==x)
    {
      s=i;break;
    }
  }
  return s;
}

錯誤信息:

第四題:

            找最大值及其下標

設計思路:

                   1:看題目:主函數與函數聲明,知道它要你干什么
                   2:理解與分析:題目給你一個數組a[N],讓你調用函數fun找出最大值max,,並輸出它的下標p
                   3:解答:在函數fun中,指針a接受數組a[ ],n接受數組大小N,用指針p接受最大的下標,再用一個for循環找出最大值及其下標

流程圖:

實驗代碼:

int fun(int *a,int *b,int n)
{
  int i;
  int s=a[0];
  for(i=1;i<n;i++)
  {
    if(s<a[i])
    {
      s=a[i];
      *b=i;
    }
  }
  return s;
}

錯誤信息:

改正方式:

我的總結

       在這兩周中,我們學習了許多知識點,其中有通過調用函數:在數組中查找指定元素,這題目判斷一個數是否在數組中;找最大值及其下標,這題目要求我們在數組中找出最大值及其下標;計算兩數的和與差,這題目要求我們計算兩個數的和與差;拆分實數的整數與小數部分,這題目要求我們將一個實數分解成整數部分,及小數部分;還有就是,這兩周中,我的打字速度也進步了許多,以前不會用電腦畫流程圖,現在也會了。每次學到許多新的東西,我都會感到開心,並也感謝教我學習的人。

第五題:

            最小數放前最大數放后

設計思路:

                  1:看題目:主函數與函數聲明,知道它要你干什么 
                  2:理解與分析:在main中,給你一個數組,其中有十個整數 ,希望你通過調用函數,把最小數放前最大數放后       
                  3:解答: 
                                第一步:在input中,它用指針arr接收數組a[],用整數n接收數組的大小10,再用一個for循環,給數組a賦值
                                第二步:在max_min中,它用指針arr接收數組a[],用整數n接收數組的大小10,先定義並賦值兩個整形變量,分別為:max=a[0],min=a[0];利用兩個for循環,找到最大值最小值,再定義一個整型變量t,實現把最小數放前最大數放后
                                第三步:在output中,它用指針arr接收數組a[],用整數n接收數組的大小10,定義並賦值一個整型變量i =0,再用一個for循環,將數組a[]中的元素輸出

流程圖:

實驗代碼:

void max_min(int *arr,int n)
{
  int t,s,x=0,y=0,i,min,max;
  min=arr[0];max=arr[0];
  for(i=0;i<n;i++)
  {
    if(min>arr[i])
    {
      min=arr[i];
      x=i;
    }
  }
  t=arr[0];arr[0]=arr[x];arr[x]=t;
  for(i=0;i<n;i++)
  {
    if(max<arr[i])
    {
      max=arr[i];
      y=i;
    }
  }
  s=arr[n-1];arr[n-1]=arr[y];arr[y]=s;
}
void input(int *arr,int n)
{
  int i;
  for(i=0;i<n;i++)
  scanf("%d",&arr[i]);
}
void output(int *arr,int n)
{
  int i;
  for(i=0;i<n;i++)
  printf("%3d",arr[i]);
}

錯誤信息:

                    1.輸出時:printf("  %d",arr[i]);
                     2.找最大值與最小值時,只用一個for循環

改正方式:

                    1.printf("%3d",arr[i]);
                     2.找最大值與最小值時,只用兩個for循環,分別.找最大值與最小值

小結:

            “  %d”與“%3d”不同,一個是前面空兩格在輸出,一個是元素輸出占3個字符寬

第六題:

             指針選擇法排序

設計思路:

                  1:看題目:主函數與函數聲明,知道它要你干什么 
                  2:理解與分析:在main中,給你一個數組,其中有十個整數 ,希望你通過調用函數,將10個數進行由大到小的排序輸出
                  3:解答:
                                 第一步:定義t,i=0,j=i+1,max;其中t記錄最大值下標,i用於選擇法排序中外層for循環,而(i+1)表示進行到了第幾輪交換,j用於選擇法排序中內層for循環,表示x[i]后面元素的下標,max用於儲存最大值
                                 第二步:進入第一個for循環:將max,t初始化,max=x[i]; t=i;
                                 第三步:進入第二個for循環:判斷max<x[j]?若成立:max=x[j];t=j;
                                 第四步:離開第二個for循環后,判斷t!=i?若成立:max=x[t];x[t]=x[i];x[i]=max;找到了最大值,並把它放在了第一,之后就重復第二步到第四步,直到跳出第一個for循環

流程圖:

實驗代碼:

 void sort(int *x,int n)
{
  int t,i,j,max;
  for(i=0;i<(n-1);i++)
  {
    max=x[i];
    t=i;
  for(j=i+1;j<n;j++)
  {
    if(max<x[j])
    {
     max=x[j];
    t=j;
    }
  }
  if(t!=i)
  {
    max=x[t];x[t]=x[i];x[i]=max;
  }
  }
}

錯誤信息:

第七題:

            判斷回文字符串

設計思路:

                  1:看題目:主函數與函數聲明,知道它要你干什么,了解“回文”是指順讀和倒讀都一樣的字符串
                  2:理解與分析:在main中,給你一個字符串s,要你判斷它是不是回文
                  3:解答:
                                 第一步:在main中,定義一個數組s[MAXN]
                                 第二步:在palindrome中,指針s接收數組s,再定義i,n,k,j,其中,n=strlen(s),i=0,j=n-1
                                 第三步:再利用一個for循環,條件1:i=0,j=n-1;條件二:i<j;條件三:i++,j--
                                 第四步:在for循環中,判斷:s[i]!=s[j],若成立,break;反之,繼續
                                 第五步:判斷i<j?成立:return false;反之:return true;

流程圖:

實驗代碼:

bool palindrome( char *s )
{
  
  int i,n,k,j;
  n=strlen(s);
  i=0,j=n-1;
  for(i=0,j=n-1;i<j;i++,j--)
  {
    if(s[i]!=s[j])
    {
      break;
    }
  }
  if(i<j)
  return false;
  else
  return true;
}

錯誤信息:

第八題:

             使用函數實現字符串部分復制

設計思路:

                  1:看題目:主函數與函數聲明,知道它要你干什么,希望你寫一個函數,實現字符串部分復制
                  2:理解與分析:在main中,給你一個字符串t,要求你從第m個字符開始的全部字符復制到字符串s中
                  3:解答:
                                 第一步:在strmcpy中,用指針t接收字符串t,用指針s接收字符串s,用m接收main中m(從第幾個數開始復制)
                                 第二步:定義i,j,n;其中i,j用於循環嵌套,n統計字符串s長度
                                 第三步:調用函數strcpy,將t全部復制到s中,再調用函數strlen,統計字符串s長度,並賦值給n
                                 第四步:再用兩個for循環,實現數組s[]向左移動的單位為m-1,其一:for(i=m-1;i>0;i--);其二:for(j=i;j<n;j++);在里面為:s[j-1]=s[j];
                                 第五步:令s[n-m+1]等於'\0',代表結束,完成了從第m個字符開始的全部字符復制到字符串s中

流程圖:

實驗代碼:

void strmcpy( char *t, int m, char *s ){  
    int i,j,n; 
    strcpy(s, t);
    n = strlen(s);  
    for(i=m-1;i>0;i--){  
        for(j=i;j<n;j++){  
            s[j-1]=s[j];  
        }  
    }  
    s[n-m+1]='\0';  
}

錯誤信息:

                    沒寫s[n-m+1]='\0'

改正方式:

                     加上s[n-m+1]='\0'

小結:

             字符串后面都有一個'\0'

.托管截圖及網址

表格:

作業點評:

辛靜瑤:http://www.cnblogs.com/X-JY/
李伍壹:http://www.cnblogs.com/chenxidream/
姜健:http://www.cnblogs.com/jj990519/
陳天胤:http://www.cnblogs.com/cty-1/
李新華:http://www.cnblogs.com/Lixinhua18/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM