第十三周編程總結


題目13-1 使用函數計算兩點間的距離 (10 分)

本題要求實現一個函數,對給定平面任意兩點坐標(x​1​​,y​1​​)和(x​2​​,y​2​​),求這兩點之間的距離。

#include <stdio.h>
#include <math.h>

double dist( double x1, double y1, double x2, double y2 );

int main()
{    
    double x1, y1, x2, y2;

    scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
    printf("dist = %.2f\n", dist(x1, y1, x2, y2));

    return 0;
}

/* 你的代碼將被嵌在這里 */

1)實驗代碼

double dist( double x1, double y1, double x2, double y2 )
{
  double distance;
  distance = sqrt(pow(x1-x2,2)+pow(y1-y2,2));
  
  return distance;
}

2)設計思路

第一步輸入自定義函數名稱
第二步定義變量
第三步計算距離

3)

問題:變量定義出錯
解決方法:重新定義

4)運行結果截圖

題目13-2 符號函數 (10 分)

本題要求實現符號函數sign(x)。

#include <stdio.h>

int sign( int x );

int main()
{
    int x;

    scanf("%d", &x);
    printf("sign(%d) = %d\n", x, sign(x));

    return 0;
}

/* 你的代碼將被嵌在這里 */

1)實驗代碼

int sign( int x )
{
  int s;  
  if(x>0){
    s = 1;
  }
  else if(x==0){
    s = 0;
  }
  else{
    s = -1;
  }  
  return s;
}

2)設計思路

第一步 使用if-else語句對於X不同情況的討論
第二步 分別輸出答案

3)

問題:返回值錯誤

4)運行結果截圖

題目13-3 使用函數計算兩個復數之積 (10 分)

若兩個復數分別為:c​1​​=x​1​​+y​1​​i和c​2​​=x​2​​+y​2​​i,則它們的乘積為 c​1​​×c​2​​=(x​1​​x​2​​−y​1​​y​2​​)+(x​1​​y​2​​+x​2​​y​1​​)i。

本題要求實現一個函數計算兩個復數之積。

#include<stdio.h> 

double result_real, result_imag;
void complex_prod( double x1, double y1, double x2, double y2 );

int main(void) 
{ 
    double imag1, imag2, real1, real2;	

    scanf("%lf %lf", &real1, &imag1); 			
    scanf("%lf %lf", &real2, &imag2); 			
    complex_prod(real1, imag1, real2, imag2); 	
    printf("product of complex is (%f)+(%f)i\n", result_real, result_imag);
	
    return 0;
}

/* 你的代碼將被嵌在這里 */


1)實驗代碼

void complex_prod( double x1, double y1, double x2, double y2 )

{

	result_real = x1*x2 - y1*y2;

	result_imag = x1*y2 + x2*y1;

}

2)設計思路

將算式寫出即可

3)

問題:使用了返回值
解決方法:去掉返回值

4)運行結果截圖

題目13-4 使用函數求最大公約數 (10 分)

本題要求實現一個計算兩個數的最大公約數的簡單函數。

#include <stdio.h>

int gcd( int x, int y );

int main()
{
    int x, y;

    scanf("%d %d", &x, &y);
    printf("%d\n", gcd(x, y));

    return 0;
}

/* 你的代碼將被嵌在這里 */

1)實驗代碼

int gcd( int x, int y )
{
  int i,j,result;
  for(i=1;i<=x;i++){
  for(j=1;j<=y;j++){
    if(x%i==0&&y%j==0)
        if(i==j) result=i;    
  }
}
  return result;
}

2)設計思路

第一步 依次找出兩個數的公約數
第二步 判斷兩個數的公因數是否相等,再循環賦值,得到最大公約數
第三步 返回值

3)本周調試過程遇到的問題及解決方法

注意主函數名稱后面不能加標點

4)運行結果截圖

題目13-5 使用函數輸出水仙花數 (20 分)

水仙花數是指一個N位正整數(N≥3),它的每個位上的數字的N次冪之和等於它本身。例如:153=1​3​​+5​3​​+3​3​​。 本題要求編寫兩個函數,一個判斷給定整數是否水仙花數,另一個按從小到大的順序打印出給定區間(m,n)內所有的水仙花數。

#include <stdio.h>

int narcissistic( int number );
void PrintN( int m, int n );

int main()
{
    int m, n;

    scanf("%d %d", &m, &n);
    if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
    PrintN(m, n);
    if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);

    return 0;
}

/* 你的代碼將被嵌在這里 */

1)實驗代碼

int narcissistic(int number)
{
  int digit, powersum, integer, count;
  count = 0;
  integer = number;
  while(integer > 0)
  {
    integer = integer / 10;
    count++;
  }
  
  powersum = 0;
  integer = number;
  
  for(int i=0; i < count; i++)
  {
    digit = integer % 10;
    integer = integer / 10;
    powersum = powersum + pow(digit, count);
    
  }
  
  if(powersum == number)
    return 1;
  else
    return 0;
}

void PrintN(int m, int n)
{
  int i;
  for(i = m + 1; i < n; i++)
    if (narcissistic(i) == 1)
            printf("%d\n", i);
}

2)設計思路

第一步使用while循環統計他的位數,並得到每位上的數字
第二步使用for循環得到他的余數。並計算,每位上數字的位數方的結果
第三步使用if-else語句來判斷是否為水仙花數

3)本周調試過程遇到的問題及解決方法

此題需要再定義一個函數來打印區間,此時應當把返回1和返回0的代碼放入此函數

4)運行結果截圖


免責聲明!

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



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