1. 程式人生 > >C語言-第一次作業

C語言-第一次作業

.net return amp cnblogs float 回文字符 程序 spl alt

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

1.設計思路
(1)主要描述題目算法
第一步:看主函數知道程序輸入浮點型變量a,b,通過函數計算輸出和與差。
第二步:函數部分將a賦值op1,b賦值op2,&sum賦值到指針變量psum,&diff賦值到指針變量pdiff。
第三步:在函數內寫出計算過程。
(2)流程圖
主函數:
技術分享圖片

調用函數:
技術分享圖片
2.實驗代碼

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

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

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

1.設計思路
(1)主要描述題目算法
第一步:主函數定義浮點型變量x, fracpart;整形變量intpart。輸入x並通過調用函數splitfloat計算,之後輸出結果。
第二步:x賦值給x,&intpart賦值給intpart, &fracpart賦值給fracpart。
第三步:將x強制轉化為整型,用實數部分減去整數部分得到小數部分。
(2)流程圖
主函數:
技術分享圖片

調用函數:
技術分享圖片

2.實驗代碼

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

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

題目6-1 在數組中查找指定元素

1.設計思路
(1)主要描述題目算法
第一步:主函數定義整型變量i, index, n, x,a[10],輸入n,for循環輸入數組元素,輸入待查元素x,通過函數search得到index值,若index不為-1,則輸出index
的值,否則輸出Not found;
第二步:定義指針變量p,整型變量i;p指向list[i];
第三步:通過for循環以及if判斷語句觀察數組中是否有x的值,若得到則將i返回,否則返回-1。
(2)流程圖
主函數:
技術分享圖片

調用函數:
技術分享圖片

2.實驗代碼

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

3.本題調試過程碰到問題及解決辦法
使用指針變量時,在循環內應用*p++表示數組元素。

題目6-2 找最大值及其下標

1.設計思路
(1)主要描述題目算法
第一步:定義N為10.主函數定義整型變量a[N],i,max,p=0;for循環輸入數組元素,經過函數fun(a,&p,N)調用,得到最大值max及下標p的值;輸出。
第二步:fun(a,&p,N)中的變量賦值給int fun(int a,int b,int n)中的變量;
第三步:先將首元素賦給max作為最大值,然後通過for循環一次比較,將最大的留下,並將下標賦給b。
(2)流程圖
主函數:
技術分享圖片

調用函數:
技術分享圖片

2.實驗代碼

int fun(int *a,int *b,int n)
{
  int i;
  int  max=*a;
  for(i=1;i<N;i++)
  {
    if(*(a+i)>*a)
    {
      *b=i;
      max=*(a+i);
    }
  }
  return max;
}

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

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

1.設計思路
(1)主要描述題目算法
第一步:本題主要是通過調用三個函數之後得到並輸出結果。第一個和第三個函數運用for循環輸入和輸出。
第二步:第二個函數最主要。分為兩部分,先用for循環將所有元素中的最大值和最小值找出,然後將最大值與第一個數交換,最小值與最後一個數交換即可。、
(2)流程圖
主函數:
技術分享圖片

調用函數:
①input(int *arr,int n)
技術分享圖片

②max_min(int *arr,int n)
技術分享圖片

③output(int *arr,int n)
技術分享圖片
2.實驗代碼

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

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

題目6-2 指針選擇法排序

1.設計思路
(1)主要描述題目算法
第一步:本題要調用一個選擇排序法的函數,需要用到雙循環結構。
第二步:調用函數第一層循環為趟數,第二層為比較大小,一次比較找出最值放到最前面。
(2)流程圖
主函數:
技術分享圖片

調用函數:
技術分享圖片
2.實驗代碼

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

3.本題調試過程碰到問題及解決辦法
大括號較多導致後面缺少一個作結尾,編譯錯誤。
仔細檢查後發現錯誤並改正。
技術分享圖片

6-1 判斷回文字符串

1.設計思路
(1)主要描述題目算法
第一步:觀察主函數,將數組元素輸入之後通過調用palindrome判斷字符串是否為回文字符串。最後輸出。
第二步:通過strlen函數讀取該數組的長度。
第三步:比較字符串中對稱位置的字符是否相等,若有不相等的則返回值為false,若沒有返回false,則palindrome函數返回值為true。
(2)流程圖
主函數:
技術分享圖片

調用函數:
技術分享圖片

2.實驗代碼

bool palindrome( char *s )
{
    int i;
    int n = strlen(s);
    for(i=0;i<=n/2;i++)
    {
        if(*(s+i)!=*(s+n-i-1))
        return false;
    }
    return true;
}

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

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

1.設計思路
(1)主要描述題目算法
第一步:主函數定義字符串t[MAXN], s[MAXN](MAXN=20),變量m。
第二步:引用函數strmcpy( char t, int m, char s )來實現字符串部分復制。輸出。
(2)流程圖
主函數:
技術分享圖片

調用函數:
技術分享圖片

2.實驗代碼

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

3.本題調試過程碰到問題及解決辦法
本題函數部分不知道怎麽實現,通過同學講解幫助完成。

附加題

實驗代碼

#include<stdio.h>
int main()
{
    char c;
    while((c=getchar())!=‘\n‘)
    {
        if((c>=‘a‘&&c<=‘z‘)||(c>=‘A‘&&c<=‘Z‘))
        {
            c=c+2;
            if(c>‘Z‘&&c<=‘Z‘+2||c>‘z‘)
            c=c-26;
        }
        printf("%c",c);
    }
    printf("\n");
    return 0;
}

技術分享圖片

學習總結和進度

1、總結兩周裏所學的知識點有哪些學會了?哪些還沒有學會?
學會了指針在程序中的運用。了解到指針變量與之前所學的一些變量之間的運用。
還學到了統計字符串長度的方法(運用strlen函數)。
還沒學到的或者說希望學到的是對指針變量更熟練地運用,目前還很生疏,應多多練習。
2、git地址: https://git.coding.net/ZJY15/ZJY15.git
上傳:
技術分享圖片
3、點評:
王姝雯 http://www.cnblogs.com/phsudie/p/8590614.html
豐大為 http://www.cnblogs.com/DavidPark/p/8551402.html
董雅潔 http://www.cnblogs.com/exo123/p/8575595.html
4、請用表格和折線圖呈現你本周(3/12 8:00~3/26 8:00)的代碼行數和所用時間、博客字數和所用時間
技術分享圖片

技術分享圖片

C語言-第一次作業