1. 程式人生 > >第十三週程式設計總結

第十三週程式設計總結

6-1 使用函式計算兩點間的距離 (10 分)

本題要求實現一個函式,對給定平面任意兩點座標(x1​​,y1​​)和(x2​​,y2​​),求這兩點之間的距離。

函式介面定義:

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

其中使用者傳入的引數為平面上兩個點的座標(x1, y1)和(x2, y2),函式dist應返回兩點間的距離。

裁判測試程式樣例:

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

/* 你的程式碼將被嵌在這裡 */

輸入樣例:

10 10 200 100

輸出樣例:

dist = 210.24
1)實驗程式碼
double dist(double x1, double y1, double x2, double y2) {   
    return sqrt(pow(x2-x1,2)+pow(y2-y1,2));
} 2)設計思路 1.自定義函式名稱 2.一個公式 3)本題除錯過程碰到問題及解決辦法 無 4)執行結果截圖

6-2 符號函式 (10 分)

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

函式介面定義:

int sign( int x );

其中x是使用者傳入的整型引數。符號函式的定義為:若x大於0,sign(x) = 1;若x等於0,sign(x) = 0;否則,sign(x) = 1。

裁判測試程式樣例:

#include <stdio.h>

int sign( int x );

int main()
{
    int x;

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

    return 0;
}

/* 你的程式碼將被嵌在這裡 */

輸入樣例:

10

輸出樣例:

sign(10) = 1
1)實驗程式碼 int sign( int x )
{
 if(x>0)
 x=1;
 else if(x==0)
 x=0;
 else
 x=-1;
 return x;
} 2)設計思路 1.自定義函式名稱 2.x分三種情況討論 3.返回x 3)本題除錯過程碰到問題及解決辦法 無 4)執行結果截圖

6-7 使用函式計算兩個複數之積 (10 分)

若兩個複數分別為:c1=x1+y1ic_1=x_1 + y_1 ic1​​=x1​​+y1​​ic2=x2+y2ic_2=x_2 + y_2 ic2​​=x2​​+y2​​i,則它們的乘積為 c1×c2=(x1x2−y1y2)+(x1y2+x2y1)ic_1 \times c_2 = (x_1 x_2 - y_1 y_2) + (x_1 y_2 + x_2 y_1)ic1​​×c2​​=(x1​​x2​​y1​​y2​​)+(x1​​y2​​+x2​​y1​​)i

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

函式介面定義:

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

其中使用者傳入的引數為兩個複數x1+y1iiix2+y2iii;函式complex_prod應將計算結果的實部存放在全域性變數result_real中、虛部存放在全域性變數result_imag中。

裁判測試程式樣例:

#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 2
-2 -3

輸出樣例:

product of complex is (4.000000)+(-7.000000)i
1)實驗程式碼 void complex_prod( double x1, double y1, double x2, double y2 )   //定義求複數之積函式
{
 result_real=x1*x2-y1*y2;        //c1*c2=(x1*x2-y1*y2)+(x1*y2+x2*y1)i
 result_imag=x1*y2+x2*y1;
} 2)設計思路 1.自定義函式名稱 2.公式 3.注意:最後不需要return 3)本題除錯過程碰到問題及解決辦法 函式型別為void,表示為不返回結果 4)執行結果截圖

 

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

函式介面定義:

int gcd( int x, int y );

其中xy是兩個正整數,函式gcd應返回這兩個數的最大公約數。

裁判測試程式樣例:

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

/* 你的程式碼將被嵌在這裡 */

輸入樣例:

32 72

輸出樣例:

8
1)實驗程式碼 int gcd( int x, int y )
{
 int i;
 for(i=x;i>=1;i--)
 {
  if(x%i==0&&y%i==0)
     break;
    }
 return i;
} 2)設計思路 1.自定義函式名稱 2.迴圈,從x遞減 3.判斷都能被x和y整除的數,跳出迴圈 4.返回i 3)本題除錯過程碰到問題及解決辦法 無 4)執行結果截圖

6-11 使用函式輸出水仙花數 (20 分)

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

函式介面定義:

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

函式narcissistic判斷number是否為水仙花數,是則返回1,否則返回0。

函式PrintN則列印開區間(m, n)內所有的水仙花數,每個數字佔一行。題目保證100mn≤10000。

裁判測試程式樣例:

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

/* 你的程式碼將被嵌在這裡 */

輸入樣例:

153 400

輸出樣例:

153 is a narcissistic number
370
371
1)實驗程式碼 int narcissistic( int number )

 int x,count=0,i,sum=1,a,b=0; 
 x=number;
 while(x!=0)
 { 
  x=x/10;
  count++; //這裡求n的位數
 } 
 x=number; //初始化x的值 進過while函式後x變化
 while(x!=0)
 { 
  a=x%10;  //求餘
  for(i=1;i<=count;i++)
  {
   sum=sum*a;  //餘數累乘
  }
  b=sum+b;   //累加
  x=x/10;   //位數減1
  sum=1; //初始化i sum 的值,發現迴圈裡面套迴圈 end的值會變的很大 sum也是
 } 
 if(b==number)
 { 
  return 1;
 }else
 {
  return 0; 
 }
}   void PrintN( int m, int n )

 int i;  //從m+1位開始
 for(i=m+1;i<n;i++)     //同一個程式碼 新建一個原始檔以後就可以了
 {                               //前面之所以使用x=number 是因為後面需要重置number的值;這裡不需要重置 不用int M N
  if(narcissistic( i )==1)    //滿足條件為真
   printf("%d\n",i);
 }
} 2)設計思路 1.自定義函式名稱 2.定義變數 3.計算位數 4.做迴圈,判斷每一位數的位數次方的和是否等於n 5.輸出 3)本題除錯過程碰到問題及解決辦法 有些值做完計算後沒有初始化 4)執行結果截圖