第一次做業

PTA第一次做業html

第一題:計算兩個數的和與差。
1 設計思路
(1)主要描述題目算法
第一步:閱讀題目與函數。
第二步:先定義四個標識符a,b,sum,diff,對a,b賦值,而後把a的值給op1,把b的值給op2,將sum的地址給psum,將diff的地址給pdiff,而後輸出兩個數的和與差。
第三步:輸出兩數的和與差。
第四步:a+b是兩個數的sum,a-b是兩個數的差,所以在調用函數sum_diff中兩個數的和psum等於op1+op2,兩個數的差diff等於op1-op2。git

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

(2)本題調試過程碰到問題及解決辦法算法

編程

第二題:拆分實數的整數與小數部分數組

(1). 主要描述題目算法函數

第一步:閱讀題目並瞭解函數及其定義。學習

第二步:找到對應函數中的實參和形參。.net

第三步:將X分爲整數而後賦值給intpart,用x減去整數就是小數部分,而後將小數部分的值賦值給fracpart.設計

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

(2)本題調試過程碰到問題及解決辦法3d

問題:沒有把x轉化爲整型。

改正方法:轉化以後再賦給*intpart。

PTA第二次做業

第一題:在數組中查找指定元素

(1). 主要描述題目算法

第一步:閱讀題目並瞭解函數及其定義,找到對應函數中的實參和形參並寫出函數接口。

第二步:用變量i來遍歷數組,若是有list[]==x的狀況就表明了這個元素爲了防止屢次遍歷。

第三步:而後把數組中全部的元素與指定元素x進行判斷,若是不符合要求return -1若是隻要有一個符合要求就return i。

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

}

(2)流程圖

img

(3)本題調試過程碰到問題及解決辦法

遍歷概念不太清楚致使本身編譯不少遍才所有正確,之後要多學多練。

第二題:尋找最大值及其下標

(1). 主要描述題目算法

第一步:閱讀題目並瞭解函數及其定義

第二步:先定義變量i而後利用變量遍歷數組。

第三步:而後定義一個最大值

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;
}

(2)流程圖

img

(3)本題調試過程碰到問題及解決辦法

指針使用錯誤,數值和地址弄混。

*和&使用錯誤

PTA第三次做業

第一題:最小數放前最大數放後
(1). 主要描述題目算法

第一步:閱讀題目並瞭解函數及其定義,定義接口函數。

第二步:找到對應函數中的實參和形參。

第三步:用for循環尋找出最大值與第一個數交換
(2)流程圖

(3)實驗代碼

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 q=0,w=0;        for(i=0;i<n;i++){            if(min>*(arr+i)){                min=*(arr+i);                q=i;            }             if(max<*(arr+i)){                max=*(arr+i);                w=i;            }        }        temp=*(arr+0);*(arr+0)=*(arr+q);*(arr+q)=temp;        temp=*(arr+n-1);*(arr+n-1)=*(arr+w);*(arr+w)=temp;    }    void output(int *arr,int n){        int i;        for(i=0;i<n;i++){            printf("%3d",*(arr+i));        }    }

(4)本題調試過程碰到問題及解決辦法

第二題:指針選擇法排序
(1). 主要描述題目算法
第一步:閱讀題目並瞭解函數及其定義,定義接口函數。
第二步:定義兩個for循環.而後把數組第一個元素小標0定爲最大值
第三步:判斷數組中是否存在比arr+max大的數,假若有則記錄它的角標,而後把小標賦值給max.
第四步:在for循環裏判斷數組小標和最大值max小標是否相同,若是不一樣,則交換倆數的小標。
第五步:用第一個數與最大值交換

(2)流程圖

(3)實驗代碼

void sort(int *x,int n)
 {
    int q=0,b=0,temp=0,maxium=0;
    for(q=0;q<n-1;q++)
    {
        maxium=q;
        for(b=q;b<n;b++)
            {
                if(*(x+maxium)<*(x+b))
                    {
                        maxium=b;
                    }
            }
        if(maxium!=q)
            {
                temp=*(x+maxium);
                *(x+maxium)=*(x+q);
                *(x+q)=temp;
            }
    }
 }

PTA第四次做業

第一題:判斷迴文字符串

(1). 主要描述題目算法 第一步:閱讀題目並瞭解函數及其定義,定義接口函數。
第二步:找出形參實參
第三步:用迴文法求出字符串長度
第四步:用for循環比較出第一個和最後一個字符一不同

(2)流程圖

(3)實驗代碼

bool palindrome( char *s )
{
    int x,i,cnt=0;
    x=strlen(s);
 
        for(i=0;i<x/2;i++)
        {
        if(s[i]==s[x-1-i])
        {
            cnt++;
        }
        }
        if(cnt==x/2)
        {
            return true;
        }else
        {
            return false;
        }
   
    
}

(4)本題調試過程碰到問題及解決辦法
編譯錯誤
地址符忘記加*(基本錯誤)

第二題:使用函數實現字符串部分複製

(1). 主要描述題目算法

第一步:閱讀題目並瞭解函數及其定義,定義接口函數並找出形參實參。

第二步:調用函數strmcpy,而後再把函數i,a循環

第三步:結束

(2)流程圖

(3)實驗代碼

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'; 
      }
}

(4)本題調試過程碰到問題及解決辦法
編譯錯誤

‘\0'也佔一個字符須要*(s+a) = '\0'才能夠執行

學習總結

(1)在這兩週中對於指針的知識理解不透徹,本身也在看mooc彌補。還有就是編程時間較少,有些手生,打起代碼不流暢。

(2)點評網址

1

1

1

(3)託管代碼

img

(4)表格

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息