第十三周編程總結


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)運行結果截圖


免責聲明!

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



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