第十三周编程总结

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)运行结果截图
posted @ 2018-12-15 13:41  xirfly  阅读(1271)  评论(0编辑  收藏  举报