第十三周编程总结

Posted lmcmha

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十三周编程总结相关的知识,希望对你有一定的参考价值。

题目13-1?使用函数计算两点间的距离?(10 分)

本题要求实现一个函数,对给定平面任意两点坐标(x?1??,y?1??)和(x?2??,y?2??),求这两点之间的距离。

#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
", dist(x1, y1, x2, y2));

    return 0;
}

/* 你的代码将被嵌在这里 */

1)实验代码

double dist( double x1, double y1, double x2, double y2 )
{
  double distance;
  distance = sqrt(pow(x1-x2,2)+pow(y1-y2,2));
  
  return distance;
}

2)设计思路

第一步输入自定义函数名称
第二步定义变量
第三步计算距离

3)

问题:变量定义出错
解决方法:重新定义

4)运行结果截图

技术分享图片

题目13-2?符号函数?(10 分)

本题要求实现符号函数sign(x)。

#include <stdio.h>

int sign( int x );

int main()
{
    int x;

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

    return 0;
}

/* 你的代码将被嵌在这里 */

1)实验代码

int sign( int x )
{
  int s;  
  if(x>0){
    s = 1;
  }
  else if(x==0){
    s = 0;
  }
  else{
    s = -1;
  }  
  return s;
}

2)设计思路

第一步 使用if-else语句对于X不同情况的讨论
第二步 分别输出答案

3)

问题:返回值错误

4)运行结果截图

技术分享图片

题目13-3?使用函数计算两个复数之积?(10 分)

若两个复数分别为:c?1??=x?1??+y?1??i和c?2??=x?2??+y?2??i,则它们的乘积为?c?1??×c?2??=(x?1??x?2???y?1??y?2??)+(x?1??y?2??+x?2??y?1??)i。

本题要求实现一个函数计算两个复数之积。

#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
", result_real, result_imag);
    
    return 0;
}

/* 你的代码将被嵌在这里 */

1)实验代码

void complex_prod( double x1, double y1, double x2, double y2 )

{

    result_real = x1*x2 - y1*y2;

    result_imag = x1*y2 + x2*y1;

}

2)设计思路

将算式写出即可

3)

问题:使用了返回值
解决方法:去掉返回值

4)运行结果截图

技术分享图片

题目13-4?使用函数求最大公约数?(10 分)

本题要求实现一个计算两个数的最大公约数的简单函数。

#include <stdio.h>

int gcd( int x, int y );

int main()
{
    int x, y;

    scanf("%d %d", &x, &y);
    printf("%d
", gcd(x, y));

    return 0;
}

/* 你的代码将被嵌在这里 */

1)实验代码

int gcd( int x, int y )
{
  int i,j,result;
  for(i=1;i<=x;i++){
  for(j=1;j<=y;j++){
    if(x%i==0&&y%j==0)
        if(i==j) result=i;    
  }
}
  return result;
}

2)设计思路

第一步 依次找出两个数的公约数
第二步 判断两个数的公因数是否相等,再循环赋值,得到最大公约数
第三步 返回值

3)本周调试过程遇到的问题及解决方法

注意主函数名称后面不能加标点

4)运行结果截图

技术分享图片

题目13-5?使用函数输出水仙花数?(20 分)

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=1?3??+5?3??+3?3??。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。

#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
", m);
    PrintN(m, n);
    if ( narcissistic(n) ) printf("%d is a narcissistic number
", n);

    return 0;
}

/* 你的代码将被嵌在这里 */

1)实验代码

int narcissistic(int number)
{
  int digit, powersum, integer, count;
  count = 0;
  integer = number;
  while(integer > 0)
  {
    integer = integer / 10;
    count++;
  }
  
  powersum = 0;
  integer = number;
  
  for(int i=0; i < count; i++)
  {
    digit = integer % 10;
    integer = integer / 10;
    powersum = powersum + pow(digit, count);
    
  }
  
  if(powersum == number)
    return 1;
  else
    return 0;
}

void PrintN(int m, int n)
{
  int i;
  for(i = m + 1; i < n; i++)
    if (narcissistic(i) == 1)
            printf("%d
", i);
}

2)设计思路

第一步使用while循环统计他的位数,并得到每位上的数字
第二步使用for循环得到他的余数。并计算,每位上数字的位数方的结果
第三步使用if-else语句来判断是否为水仙花数

3)本周调试过程遇到的问题及解决方法

此题需要再定义一个函数来打印区间,此时应当把返回1和返回0的代码放入此函数

4)运行结果截图

技术分享图片

以上是关于第十三周编程总结的主要内容,如果未能解决你的问题,请参考以下文章

2017-2018-1 20155333 《信息安全系统设计基础》第十三周学习总结

20145311 《信息安全系统设计基础》第十三周学习总结

20175306《信息安全系统设计基础》第十三周学习总结

20145317《信息安全系统设计基础》第十三周学习总结

2017-2018-1 20155232 《信息安全系统设计基础》第十三周学习总结

第十三周总结