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)實驗代碼
return sqrt(pow(x2-x1,2)+pow(y2-y1,2));
}
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
{
if(x>0)
x=1;
else if(x==0)
x=0;
else
x=-1;
return x;
}
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
{
result_real=x1*x2-y1*y2; //c1*c2=(x1*x2-y1*y2)+(x1*y2+x2*y1)i
result_imag=x1*y2+x2*y1;
}
本題要求實現一個計算兩個數的最大公約數的簡單函數。
函數接口定義:
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
{
int i;
for(i=x;i>=1;i--)
{
if(x%i==0&&y%i==0)
break;
}
return i;
}
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
{
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;
}
}
{
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);
}
}