第一次作業


第一題:

          計算兩數的和與差

設計思路:

描述方法:

     第一步:閱讀主函數和函數聲明,弄清楚程序中每個函數的意義
     第二步:通過op1和op2計算所需要的數值並將其賦給pusm和pdiff
     第三步:輸出函數

流程圖:

實驗代碼:

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

遇到的問題:

第二題:

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

設計思路:

描述方法:

    第一步:閱讀主函數和函數聲明,弄清楚程序中每個函數的意義
    第二步:先通過實數求出其整數部分並賦值給*inpart,再用減法用實數減去整數部分並賦值給*fracpart

實驗代碼:

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

遇到的問題:

第三題:

         在數組中查找指定元素

設計思路:

描述方法:

   第一步:閱讀主函數和函數聲明
   第二步:看題目的要求,遍歷數組,從一個數組中找到所需要的數,如果找到則返回其下角標;如果沒有找到,則返回-1

流程圖:

實驗代碼:

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

return -1;
	
}

遇到的問題:

第四題:

           找最大值及其下標

設計思路:

描述方法:

   第一步:將最大值存儲在max里
   第二步:利用for循環來比較數組中的每個數來找出最大值,再將其下標賦值給*b

流程圖:

實驗代碼:

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

遇到的問題:

                   錯誤信息:將i復制給*b的時候沒寫*
                   改正方法:*b=i

第五題:

          最小數放前最大數放后

設計思路:

描述方法:

   第一步:將數據存放到input數組中
   第二步:通過max_min遍歷數組找到最大值和最小值,並按照題目要求進行交換
   第三步:通過output輸出所求數據

流程圖:

實驗代碼:

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

遇到的問題:

                    錯誤信息:忘記了怎么交換數組的位置
                    改正方法:參考別人的作業
                    錯誤信息:最后輸出的時候忘記了題目要求的3列
                    改正方法:%d→%3d

第六題:

           指針選擇法排序

設計思路:

描述方法:

   第一步:遍歷數組找到最大值放到第一位
   第二步:循環上一步知道將所有數都排序完成
   第三步:輸出

流程圖:

實驗代碼:

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

遇到的問題:

                   錯誤信息:第一次編寫時錯誤的寫成了冒泡排序法
                   改正方法:用選擇排序法重新編寫

第七題:

          判斷回文字符串

設計思路:

描述方法:

   第一步;將字符串輸入進數組
   第二步:利用循環分兩次將字符串從前往后和從后往前定義並進行比較
   第三步:如果相同則返回true,如果不同則返回false

流程圖:

實驗代碼:

bool palindrome(char *s)
{
    int a,b;
    int n=strlen(s);
    a=0,b=n-1;
    while(b>a)
    {
        if(s[a]!=s[b])
        {
            return false;
        }
        a++,b--;
    }
    return true;
}

遇到的問題:

第八題:

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

設計思路:

描述方法:

                  第一步:調用函數strmcpy進行復制
                  第二步:判斷m是否超過字符串長度,如果超過則為'/0',若沒超過則進行復制

流程圖:

實驗代碼:

void strmcpy(char *t,int m,char *s)
{
    int i;
    int sum=0; 
    for(i=0;t[i]!='\0';i++)  {sum++;}
    if(sum<m)              {s[0]='\0';}
    else
      {
          for(i=0;t[m-1]!='\0';i++,m++)
            {
              s[i]=t[m-1];
            }
        
          s[i]='\0'; 
      }
}

遇到的問題:

                   錯誤信息:編譯錯誤 for循環時忘記了t[m-1]='\0',m++

學習總結和進度

1、這兩周主要學習了指針的用法,雖然指針占了主要部分,但在習題中也用到了很多別的知識,本來基礎就不好,又得重新看C語言的書,不僅能當作復習,還加深了我對其他知識的印象。

2、

    https://gitee.com/lhdsb666/zuoye

3、

        [梁聖然] (http://www.cnblogs.com/messi6/p/8626565.html)
        [張琪] (http://www.cnblogs.com/zhang03/p/8641322.html)
        [林松] (http://www.cnblogs.com/BigFace123/p/8635570.html)

4

5


免責聲明!

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



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