2018第一次做業

一:PTA

1.計算兩數的和與差

(1).設計思路

主要描述題目算法

第一步:觀察函數定義
第二步:進行加減運算過程html

(2).實驗代碼

`
#include <stdio.h>

void sum_diff( float op1, float op2, float *psum, float *pdiff );

int main()
{
float a, b, sum, diff;

scanf("%f %f", &a, &b);
sum_diff(a, b, &sum, &diff);
printf("The sum is %.2f\nThe diff is %.2f\n", sum, diff);

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

(3).遇到的問題及解決方法

開始指針忘記加*,加上後答案正確。git

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

(1).設計思路

主要描述題目算法

第一步:觀察函數定義。
第二步:將整數部分賦值給int型傳入數據,以後用float型傳入數據減去整數部分得出小數部分。算法

(2).實驗代碼

`
#include <stdio.h>

void splitfloat( float x, int *intpart, float *fracpart );

int main()
{
float x, fracpart;
int intpart;

scanf("%f", &x);
splitfloat(x, &intpart, &fracpart);
printf("The integer part is %d\n", intpart);
printf("The fractional part is %g\n", fracpart);

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

(3).遇到的問題及解決方法

本題沒有遇到問題。數組

3.在數組中查找指定元素

(1).設計思路

1).主要描述題目算法

第一步:觀察函數定義。
第二步:判斷遍歷數字是否與查找數字相同,若是相同index=i,並跳出循環,不相同則等於-1,直到循環結束,返回index的值。函數

2).流程圖

(2).實驗代碼

`#include <stdio.h>
#define MAXN 10

int search( int list[], int n, int x );

int main()
{
int i, index, n, x;
int a[MAXN];

scanf("%d", &n);
for( i = 0; i < n; i++ )
    scanf("%d", &a[i]);
scanf("%d", &x);
index = search( a, n, x );
if( index != -1 )
    printf("index = %d\n", index);
else
    printf("Not found\n");

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

(3).遇到的問題及解決方法

開始將return放進了循環中致使程序不能結束,改正後答案正確。學習

4.找最大值及其下標

(1).設計思路

1).主要描述題目算法

第一步:觀察函數定義。
第二步:用if語句判斷遍歷數與a[i]的大小,若是a[i]小於遍歷數則把a[i]賦值給max,其下標存到指針b所指變量,函數返回最大值。.net

2).流程圖

(2).實驗代碼

`
#include<stdio.h>
#define N 10
int fun(int *a,int *b,int n);
int main()
{ int a[N],i,max,p=0;
for(i=0;i<N;i++) scanf("%d",&a[i]);
 max=fun(a,&p,N);
 printf("max=%d,position=%d\n",max,p);
 return 0;
}
int fun(int *a,int *b,int n){
  int i;
  for(i=0;i<n;i++){
    if(a[i]>*a){
      *a = a[i];
      *b = i;
    }
  }return *a;
}
`

(3).遇到的問題及解決方法

本題沒有問題。設計

5.最小數放前最大數放後

(1).設計思路

1).主要描述題目算法

第一步:觀察函數定義。
第二步:用if語句比較當前數與最小值的大小,若是大於最大值則將數組下標賦值給idx,判斷idx是否爲0,如不等於0則將a[idx]與a[0]調換。3d

2).流程圖

(2).實驗代碼

`
#include<stdio.h>
void input(int *arr,int n);
void max_min(int *arr,int n);
void output(int *arr,int n);
int main()
{ int a[10];
input(a,10);
 max_min(a,10);
 output(a,10);
 return 0;
}
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 idx=0,i,t;
    for ( i = 0; i < n; i++ ) 
    { 
         if ( arr[i] < arr[idx] )
        { 
          idx=i; }      
    }   
   
    if(idx!=0){
        t=arr[0];arr[0]=arr[idx];arr[idx]=t;
    }
    idx=0;
    for ( i = 0; i < n; i++ ) 
    { 
         if ( arr[i] > arr[idx] )
        { 
           idx=i;}      
    } 

    if(idx!=(n-1)){
        t=arr[n-1];
        arr[n-1]=arr[idx];
        arr[idx]=t;}
}

void output(int *arr,int n)
{
    int i;
    for(i = 0;i < n;i++){
        printf("%3d",*(arr + i));
    }   
}
`

(3).遇到的問題及解決方法

arr[i]與arr[idx]比較大小時符號錯誤,改正後答案正確。指針

6.指針選擇法排序

(1).設計思路

1).主要描述題目算法

第一步:觀察函數定義。
第二步:用for循環遍歷數組,用if語句判斷遍歷數與後一個數的大小,若後一個數大於遍歷數則兩數交換。

2).流程圖

(2).實驗代碼

`
#include<stdio.h>
void sort(int *x,int n);
int main ( )
{int *p,i,a[10];
 p=a;
 for (i=0;i<10;i++)  scanf("%d",p++);
     p=a;
 sort(a,10);
 for(i=0;i<10;i++)  printf("%4d",*p++);
 printf("\n");
 return 0;
 }    
 void sort(int *x,int n)
 {
    int j,i,t;
    for(j=1;j<=n-1;j++)
       for(i=0;i<=n-j-1;i++)
          if(x[i]<x[i+1])
         {t=x[i]; x[i]=x[i+1]; x[i+1]=t;}
 }
`

(3).遇到的問題及解決方法

本題沒有問題。

7.判斷迴文字符串

(1).設計思路

1).主要描述題目算法

第一步:觀察函數定義。
第二步:用for循環便利數組,用if語句判斷相應字符是否相等,若相等則k加一,不然返回false,以後判斷k是否等於n,相等則返回true。

2).流程圖

(2).實驗代碼

`
#include <stdio.h>
#include <string.h>

#define MAXN 20
typedef enum {false, true} bool;

bool palindrome( char *s );

int main()
{
    char s[MAXN];

    scanf("%s", s);
    if ( palindrome(s)==true )
        printf("Yes\n");
    else
        printf("No\n");
    printf("%s\n", s);

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

 if(k == n){
    return true;
 }

  }
`

(3).遇到的問題及解決方法

開始誤將k與n的比較放入for循環中,致使程序錯誤,放到循環外後答案正確。

8.使用函數實現字符串部分複製

(1).設計思路

1).主要描述題目算法

第一步:觀察函數定義。
第二步:先求出長度n,以後判斷m與n的大小,若m>n則返回空數組,不然用for語句遍歷,將數組t的第m個開始的元素數值賦值給數組s,最後一個地址填入'/0'。

2).流程圖

(2).實驗代碼

`
#include <stdio.h>
#define MAXN 20

void strmcpy( char *t, int m, char *s );
void ReadString( char s[] );

int main()
{
    char t[MAXN], s[MAXN];
    int m;

    scanf("%d\n", &m);
    ReadString(t);
    strmcpy( t, m, s );
    printf("%s\n", s);

    return 0;
 }
 void strmcpy( char *t, int m, char *s )
  {
int n = strlen(t);
int i;
if(m <= n){
    for(i = 0;*(t + i) != '\0';i ++){
        *(s+i) = *(t + m - 1 + i);
    
    }
    *(s + n) = '\0';
}else{
    *s = '\0';
}
  }
`

(3).遇到的問題及解決方法

if語句條件開始寫錯,且‘\0’表示錯誤,修改後正確。

9.額外加題3

(1).設計思路

1).主要描述題目算法

第一步:獲取字符串並傳入函數。
第二步:用for語句遍歷,用if語句判斷遍歷字符是否爲y,z,若不是則碼值加二,如果則分別變爲a,b。

2).流程圖

3).運行結果

(2).實驗代碼

`
#include<stdio.h>
#define max 100
void jiami(char *);
int main()
{
    char name[max];
    gets(name);
    jiami(name);
    printf("%s",name);
    return 0;  
}
void jiami (char *s)
{
    for(;*s!='\0';s++)
    {
        if(*s=='z'){
            *s='b';
        }else if(*s=='y'){
            *s='a';
        }else{
            *s=*s+2;
        }
    }
} 
`

(3).遇到的問題及解決方法

本題沒有問題。

二:學習總結和進度

1.學習內容

這兩週所學知識對我來講比較困難,目前只瞭解了指針和字符串的基本知識,對這部分的知識還須要花費時間去練習。

2.git

https://coding.net/u/q807443119/p/zuoye/git/commit/ee2eff4fcacf5e380ffed10735d6d02a7ffe31bb?public=true

3.點評

豐大爲 http://www.cnblogs.com/DavidPark/p/8551402.html
高立彬 http://www.cnblogs.com/gao628526/p/8551285.html
班慶澤 http://www.cnblogs.com/wsbqz/p/8641741.html

4.學習進度

相關文章
相關標籤/搜索