天天看點

第1次作業

作業要求一

請将pta作業程式設計題目的解題思路和調試過程記錄在部落格中,每道題目的具體格式如下:

題目6-1 計算兩數的和與差

1.設計思路

     (1)主要描述題目算法。可以用文字描述(不允許使用僞代碼),

         第一步:函數裡的psum、pdiff為指針變量,把a指派給op1,b指派到op2,&sum指派到psum,&diff指派到pdiff

         第二步:對*psum及*pdiff進行指派

         第三步:輸出結果

2.實驗代碼

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

題目6-2 拆分實數的整數與小數部分

         第一步:函數裡的intpart、fracpart為指針變量,x指派給x,&intpart指派給intpart, &fracpart指派給fracpart

         第二步:用int定義整型函數

         第三步:用減法定義小數部分計算式

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

6-3 在數組中查找指定元素

         第一步:通過主函數可得定義整型變量 j, list[], n, x, q, index

         第二步:設q=-1,利用for循環,周遊數組,當有一個對應元素時,跳出循環

         第三步:若x等于list[q],則傳回q的值,若沒有,則使index為-1

      (2)流程圖

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

6-4 找最大值及其下标

     (1)主要描述題目算法。可以用文字描述(不允許使用僞代碼),

         第一步:定義一個長度為10的數組,用j記錄最大值對應的下标

         第二步:令max=a[0],周遊數組

         第三步:利用for循環輸入a[i]的值,根據被調用函數比較出a、&p、N的最大值;

         第四步:輸出所得的最大值和p的值

      (2)流程圖

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

6-5 最小數放前最大數放後

         第一步:調用題目中定義的input(int *arr,int n)函數,定義i,使用for循環結構,當i小于元素個數n時,輸入arr資料,函數調用結束

         第二步:調用函數max_min(int arr,int n),周遊數組,使得最大值位于函數元素的首位,最小值位于函數元素中的最後一位

         第三步:調用函數 output(int *arr,int n) ,周遊數組,按照格式輸出arr數組中的元素

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

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

      錯誤資訊:

       錯誤原因:取位址時*arr+i缺括号,取位址對象錯誤。

       改正方法:對于整體取位址,括号位置應為*(arr+i)。

6-6指針選擇法排序  

         第一步:定義指針變量p、循環變量i、和一個數組,将數組首元素的位址指派給指針變量p

         第二步:使用選擇排序法對數組進行從大到小的排序,輸出數組元素

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

       錯誤原因:for循環初始值表達錯誤,對指針了解不清晰

       改正方法:通過查找資料對for循環知識進行鞏固

6-7 判斷回文字元串

         第一步:定義字元數組s[20],輸入字元串指派給s

         第二步:用循環結構,判斷在數組元素内是s[i]與s[j]是否相等。若是,則傳回true;若不是則傳回false

第1次作業
第1次作業
bool palindrome( char *s ){
        int i,count=0,q;
        count=strlen(s);
        q=count/2;
        for(i=0;i<q;i++){
            if((*(s+i))!=(*(s+count-i-1))){
                return(false);
            }
        }
        if(i==q){
            return(true);
        }
    }      

    錯誤資訊:

第1次作業

 錯誤原因:指針定義錯誤,缺少函數名額

 改正方法:添加strlen(s)函數定義,取位址時*後加括号

第1次作業
第1次作業

6-8 使用函數實作字元串部分複制

         第一步:定義兩個字元數組t[20],s[20],m,輸入一個數賦給m

         第二步:調用函數strmcpy,并通過for循環條件,輸出字元數組s

第1次作業
第1次作業
void strmcpy( char *t, int m, char *s ){
        int i;
        for(i=m;*(t+i-1)!='\0';i++){
          *(s+i-m)=*(t+i-1);
        }
        *(s+i-m)='\0';
    }      

要求三、學習總結和進度

1、總結兩周裡所學的知識點有哪些學會了?哪些還沒有學會?

       學習了指針及其應用,用指針變量做函數參數,還有數組指針和字元指針。了解了在引用數組元素的時候,指針變量和數組之間的互相轉化。但是對函數的掌握還是不熟練,對字元串與指針的組合題目掌握不熟練,對*()的應用還要多加練習。

2、将PTA作業的源代碼使用ggit位址it送出到托管平台上,要求給出上傳成功截圖和你的git位址。

第1次作業

git位址:https://git.coding.net/Downager/180325.git

3、點評3個同學的本周作業(在作業中給出被點評同學部落格的連結),并邀請3名同學點評你的作業。

http://www.cnblogs.com/sun031915/  http://www.cnblogs.com/phsudie/  http://www.cnblogs.com/gu-an-cheng-wxm/

4、請用表格和折線圖呈現你本周(3/12 8:00~3/26 8:00)的代碼行數和所用時間、部落格字數和所用時間。

第1次作業
第1次作業
第1次作業