第九章 指针个人复盘

例9.6从键盘中任意输入两个整数,编程实现将其交换后再重新输出

#include <stdio.h>
void Swap(int *x,int *y);
int main() 
{ 
    int a,b;
	printf("Please enter a,b:");
	scanf("%d,%d",&a,&b);
	printf("Before swap:a=%d,b=%d\n",a,b);
	Swap(&a,&b);
	printf("After swap:a=%d,b=%d\n",a,b);
	return 0;
}
void Swap(int *x,int *y)
{
    int temp;
    temp=*x;
    *x=*y;
    *y=temp;
}

例9.7从键盘输入某班同学某门课的成绩(每班人数最多不超过40人,具体人数有键盘输入),编程实现计算并输出最高分及相应学生的学号。

#include <stdio.h>
#define N 40
void FindMax(int score[],long num[],int *pmaxScore,long *pmaxNum,int n);
int main()
{ 
    int score[N],maxScore,n,i;
    long num[N],maxNum;
	printf("How many sudents?");
	scanf("%d",&n);
	printf("Input student'ID and score:\n");
	for(i=0;i<n;i++)
	{
	    scanf("%ld%d",&num[i],&score[i]);
	}
	FindMax(score,num,&maxScore,&maxNum,n);
	printf("maxScore=%d,maxNum=%ld\n",maxScore,maxNum);
    return 0;
}
void FindMax(int score[],long num[],int *pmaxScore,long *pmaxNum,int n)
{
    int i;
    *pmaxScore=score[0];
    *pmaxNum=num[0];
    for(i=0;i<n-1;i++)
    {
        if(score[i]>*pmaxScore)
        {
            *pmaxScore=score[i];
            *pmaxNum=num[i];
        }
    }
}

从键盘中输入某班学生某门课的成绩(每班人数最多不超过40人),当输入为负值时表示输入结束,试编程将分数进行排序输出。排序函数要实现升序与降序排序功能。

#include <stdio.h>
#define N 40
int ReadScore(int score[]);
void PrintScore(int score[],int n);
void Swap(int *x,int *y);
int Ascending(int a,int b);
int Descending(int a,int b);
void SelectionSort(int a[],int n,int (*compare)(int a,int b));
int main()
{
    int score[N],n;
    int order;/*1升序,2降序*/
    n=ReadScore(score);
    printf("Total studentd is %d\n",n);
    printf("Enter 1 to sort in ascending order,\n");
    printf("Enter 2 to sort in descending order:");
    scanf("%d",&order);
    printf("Data items in original order\n");
    PrintScore(score,n);
    if(order==1)
    {
        SelectionSort(score,n,Ascending);
        printf("Data items in ascending order\n");
    }
    else
    {
        SelectionSort(score,n,Descending);
        printf("Data items in Descending order\n");
    }
    PrintScore(score,n);
    return 0;
}
int ReadScore(int score[])
{
    int i=-1;
    do{
        i++;
        printf("Input score:");
        scanf("%d",&score[i]);
    }while(score[i]>=0);
    return i;
}
void PrintScore(int score[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%4d\n",score[i]);
    }
}
void SelectionSort(int a[],int n,int (*compare)(int a,int b))
{
    int i,j,k;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
        {
            if((*compare)(a[j],a[k])) k=j;
        }
        if(k!=i) Swap(&a[k],&a[i]);
    }
}
int Ascending(int a,int b)
{
    return a<b;
}
int Descending(int a,int b)
{
    return a>b;
}
void Swap(int *x,int *y)
{
    int temp;
    temp=*x;
    *x=*y;
    *y=temp;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值