《Linux C编程一站式学习》读书笔记(1)

1.解释执行的语言相比编译执行的语言有什么优缺点?

       解释执行的语言所编的程序由于不需要进行编译,在执行效率上要比编译执行的语言所编的程序要高。编译执行的程序是平台无关的,它们一般都具有很好的可移植性,从一个平台移植到另外一个平台往往只需要对程序做稍许修改甚至无需改动。但届时执行的语言则不具有这个特性。


2.编写一个函数double myround(double x),对小数进行四舍五入。可以调用math.h中的ceil()和floor()实现。

#include <stdio.h>
#include <math.h>

double myround(double x) {
  double c;
  double f;
  f = floor(x);
  c = ceil(x);
  if(fabs(f-x) < fabs(c-x))
   return f;
  else
   return c;
}

int main(void)
{
  double d;
  printf("please input a number:");
  scanf("%lf",&d);
  printf("the result is %lf\n",myround(d));
}</span>

写这个程序的时候,编译报错undefined reference to 'floor' undefined reference to 'ceil'。原因是floor()ceil()都属于包含在数学库中,而linux编译的时候不会自动链接math库,要手动链接。所以在编译的时候加上-lm选项就好了。


3.采用递归的方法求两个数的最大公约数。

#include "stdio.h"
int getGCD(int a,int b) {

 if(a%b == 0)
   return b;
 else
   return getGCD(b,a%b);
}

int main(void) {
  int a,b;
  printf("please input two number:");
  scanf("%d%d",&a,&b);
  int result = getGCD(a,b);
  printf("the greatest common divisor is %d\n",result);
}


4.实现一个打印复数的函数,打印的格式是X+Yi。实部或虚部为零则省略。

#include "stdio.h"
struct struct_complex{
 float x;
 float y;
};

void printcomplex(struct struct_complex a){
  if(a.x != 0)
    printf("%.1f",a.x);
  if(a.y > 0)
    printf("+%.1fi",a.y);
  if(a.y < 0)
    printf("%.1fi",a.y);
  printf("\n");
}

int main(void) {
  struct struct_complex a;
  a.x=1;
  a.y=1;
  printcomplex(a);
}

5.实现一个用分子分母的格式来表示有理数的结构体,并实现加减乘除运算。

#include "stdio.h"

struct struct_rational{
  int molecular;
  int denominator;
};

int getGCD(int a,int b){
  if(a%b == 0)
    return b;
  return getGCD(b,a%b);
}

int getLCM(int a,int b){
  int GCD = getGCD(a,b);
  return (a*b)/GCD; 
}

void print_rational(struct struct_rational sr){
  if(sr.molecular == 0)
    printf("0\n");
  else
    printf("%d\\%d\n",sr.molecular,sr.denominator);
}

struct struct_rational make_rational(int m,int d){
  struct struct_rational sr;
  sr.molecular = m;
  sr.denominator = d;
  return sr;
}

struct struct_rational add_rational(struct struct_rational a,struct struct_rational b){
  int LCM = getLCM(a.denominator,b.denominator);
  int m1 = LCM/a.denominator;
  int m2 = LCM/b.denominator;
  int molecular = a.molecular*m1 + b.molecular*m2;
  int GCD = getGCD(molecular,LCM);
  return make_rational(molecular/GCD,LCM/GCD);
}

struct struct_rational del_rational(struct struct_rational a,struct struct_rational b){
  int LCM = getLCM(a.denominator,b.denominator);
  int m1 = LCM/a.denominator;
  int m2 = LCM/b.denominator;
  int molecular = a.molecular*m1 - b.molecular*m2;
  int GCD = getGCD(molecular,LCM);
  return make_rational(molecular/GCD,LCM/GCD);
}

struct struct_rational mul_rational(struct struct_rational a,struct struct_rational b){
  int molecular = a.molecular*b.molecular;
  int denominator = a.denominator*b.denominator;
  int GCD = getGCD(molecular,denominator);
  return make_rational(molecular/GCD,denominator/GCD);
}

struct struct_rational div_rational(struct struct_rational a,struct struct_rational b){
  int molecular = a.molecular*b.denominator;
  int denominator = b.molecular*a.denominator;
  int GCD = getGCD(molecular,denominator);
  return make_rational(molecular/GCD,denominator/GCD);
}

int main(void){
  struct struct_rational a = make_rational(1,8);
  print_rational(a);
  struct struct_rational b = make_rational(7,16);
  print_rational(b);
  struct struct_rational sum = add_rational(a,b);
  print_rational(sum);
  struct struct_rational diff = del_rational(a,b);
  print_rational(diff);
  struct struct_rational product = mul_rational(a,b);
  print_rational(product);
  struct struct_rational div = div_rational(a,b);
  print_rational(div);
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值