C语言常见编程题(4)

1.原地逆置链表

void fun(LNode * head)
{
	LNode *p,*q;
	p=head->next;
	head->next=null;
	while(p!=null)
	{
		q=p;
		p=p->next;
		q->next=head->next;  //这里的head->next就是null,这一步是吧节点从原来的地方断下来
		head->next=q;
	}
}

2.设计在单链表中删除值相等的多余节点算法

void fun(LNode *head)
{
	LNode *p,*q,*s;
	for(p=head;p!=null;p=p->next)
	{
		for(q=p->next,s=q;q!=null;)
		{
			if(q->data==p->data)
			{
				s->next=q->next;
				free(q);
				q=s->next;
			}
			else
			{
				s=q;
				q=q->next;
			}
		}
	}
}

3.快速排序

void quickSort(int data[],int low,int high)
{
	int i.j,key;
	i=low,j=high,key=data[low];
	if(low>high)
		return;

	while(low<high)
	{
		while(low<high&&key<=data[high])
		{
			--high;
		}
		if(key>data[high])
		{
			swap(&data[low],&data[high]);
			++low;
		}
		 while (low < high && key >= data[low])
        {
            ++low;  //向后寻找
        }
        if (key < data[low])
        {
            Swap(&data[low], &data[high]);
            --high;
        }
	}
	quickSort(data,i,low-1);
	quickSort(data,low+1,j);
}

4.已知一名学生有多门课程的成绩,要求输入该学生的课程数以及多门课程的成绩,输出该学生的最高分

struct Student
{
	int score[3];
}

void mian()
{
	int i,max;
	struct Student stu;
	printf("请输入学生三门成绩");
	scanf("%d,%d,%d",stu.score[0],stu.score[1],stu.score[2]);
	max=stu.score[0];
	for(i=0;i<3;i++)
	{
		if(max<stu.score[i])
			max=stu.score[i];
	}
	printf("该学生最高分数max=%d",max);
}

5.最小公倍数和最大公约数问题

//求任意两个正整数的最小公倍数。
int fun()
{
    int m, n, temp, i;
    printf("Input m & n:");
    scanf("%d%d", &m, &n);
    if(m<n)  /*比较大小,使得m中存储大数,n中存储小数*/
    {
        temp = m;
        m = n;
        n = temp;
    }
    for(i=m; i>0; i++)  /*从大数开始寻找满足条件的自然数*/
        if(i%m==0 && i%n==0)
        {/*输出满足条件的自然数并结束循环*/
            printf("The LCW of %d and %d is: %d\n", m, n, i);
            break;
        }


    return 0;
}



//求任意两个正整数的最大公约数。
int fun()
{
    int m, n, temp, i;
    printf("Input m & n:");
    scanf("%d%d", &m, &n);
    if(m<n)  /*比较大小,使得m中存储大数,n中存储小数*/
    { /*交换m和n的值*/
        temp=m;
        m=n;
        n=temp;
    }
    for(i=n; i>0; i--)  /*按照从大到小的顺序寻找满足条件的自然数*/
        if(m%i==0 && n%i==0)
        {/*输出满足条件的自然数并结束循环*/
            printf("The GCD of %d and %d is: %d\n", m, n, i);
            break;
        }


    return 0;
}

你可能感兴趣的:(C语言编程题)