如果要把整型x转化为浮点型,1.0x和x1.0为啥会有区别
具体见如下代码第54行
#include <stdio.h>
#include <malloc.h>
struct farlei_item {
int numerator, denominator; // 分子、分母
struct farlei_item *next; // 连接部分
};
typedef struct farlei_item *farleipointer;
int gcd(int x, int y) { /* 求最大公约数 */
int r;
while (y != 0) {
r = x % y;
x = y;
y = r;
}
if (x == 1)
return 1;
else
return 0;
}
void print(farleipointer fn) {//输出fn引导的法雷序列
while (fn->next != NULL) {
printf("%d/%d ", fn->numerator, fn->denominator);
fn = fn->next;
}
printf("%d/%d", fn->numerator, fn->denominator);
return;
}
/*构造法雷序列,并返回序列头指针*/
farleipointer farlei(int n) {
int i, j;
farleipointer fn, r, r0, p;
fn = r = r0 = p = NULL;
if (n < 1)
return NULL; //如果n<=0,则没有法雷序列
fn = (farleipointer)malloc(sizeof(struct farlei_item)); //构造0/1
fn->numerator = 0;
fn->denominator = 1;
p = (farleipointer)malloc(sizeof(struct farlei_item)); //构造1/1
p->numerator = 1;
p->denominator = 1;
fn->next = p;
p->next = NULL;
for (i = 2; i <= n; i++) {
for (j = 1; j < i; j++) {
if (gcd(j, i) != 1)
continue;
r0 = fn;
r = fn->next;
while (r->numerator * 1.0 / r->denominator < (j * 1.0 /
i)) { //为什么r->numerator / 1.0 * r->denominator < (j / 1.0 * i)不行
r = r->next;
r0 = r0->next;
}
p = (farleipointer)malloc(sizeof(struct farlei_item));//应为struct farlei_item, 而不是farlei_item
p->next = NULL;
p->numerator = j;
p->denominator = i;
r0->next = p;
p->next = r;
}
}
return fn;
}
void release(farleipointer head) {//释放单链表空间,head是单链表首结点指针
farleipointer p = head;
while (head != NULL) {
head = head->next;
free(p);
p = head;
}
return;
}
int main(void) {
int n;
farleipointer fn;
scanf("%d", &n);
fn = farlei(n); //生成n级法雷序列
if (fn != NULL)
print(fn);
else
printf("NULL");
release(fn);
return 0;
}