第十三週程式設計總結
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+y1i和c2=x2+y2ic_2=x_2 + y_2 ic2=x2+y2i,則它們的乘積為 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=(x1x2−y1y2)+(x1y2+x2y1)i。
本題要求實現一個函式計算兩個複數之積。
函式介面定義:
double result_real, result_imag;
void complex_prod( double x1, double y1, double x2, double y2 );
其中使用者傳入的引數為兩個複數x1
+y1
iii和x2
+y2
iii;函式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 );
其中x
和y
是兩個正整數,函式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位正整數(N≥3),它的每個位上的數字的N次冪之和等於它本身。例如:153=13+53+33。 本題要求編寫兩個函式,一個判斷給定整數是否水仙花數,另一個按從小到大的順序打印出給定區間(m,n)內所有的水仙花數。
函式介面定義:
int narcissistic( int number );
void PrintN( int m, int n );
函式narcissistic
判斷number
是否為水仙花數,是則返回1,否則返回0。
函式PrintN
則列印開區間(m
, n
)內所有的水仙花數,每個數字佔一行。題目保證100≤m
≤n
≤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)執行結果截圖