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);
}