浙大版C语言题目集-函数题8-1

8-1-1

本题要求实现一个找出整型数组中最大值的函数。其中a是用户传入的数组,n是数组a中元素的个数。函数返回数组a中的最大值。

#include <stdio.h>
#define MAXN 10

int FindArrayMax( int a[], int n );

int main()
{
    int i, n;
    int a[MAXN];
    
    scanf("%d", &n);
    for( i=0; i<n; i++ ){
        scanf("%d", &a[i]);
    }

    printf("%d\n", FindArrayMax(a, n));
   
    return 0;
}

int FindArrayMax( int a[], int n ){
	int max=0,i;
	for(i=1;i<n;i++){
		if(a[i]>a[max]) max=i;	
	}
	return a[max];
}

8-1-2

本题要求实现一个简单函数,找出两个数中的最大值。

其中pxpy是用户传入的两个整数的指针。函数findmax应找出两个指针所指向的整数中的最大值,存放在pmax指向的位置。

#include <stdio.h>

void findmax( int *px, int *py, int *pmax );

int main()
{    
    int max, x, y; 
    scanf("%d %d", &x, &y);
    findmax( &x, &y, &max );
    printf("%d\n", max);
    return 0;
} 

void findmax( int *px, int *py, int *pmax ){
	*pmax=*px;
	if(*py>*px) *pmax=*py;	
}

8-1-3

本题要求实现一个计算输入的两数的和与差的简单函数。

其中op1op2是输入的两个实数,*psum*pdiff是计算得出的和与差。

#include <stdio.h>

void sum_diff( float op1, float op2, float *psum, float *pdiff );

int main()
{
    float a, b, sum, diff;
    scanf("%f %f", &a, &b);
    sum_diff(a, b, &sum, &diff);
    printf("The sum is %.2f\nThe diff is %.2f\n", sum, diff);
    return 0; 
}

void sum_diff( float op1, float op2, float *psum, float *pdiff ){
	*psum=op1+op2;
	*pdiff=op1-op2;
}

8-1-4

本题要求实现一个拆分实数的整数与小数部分的简单函数。

其中x是被拆分的实数(0≤x<10000),*intpart*fracpart分别是将实数x拆分出来的整数部分与小数部分。

#include <stdio.h>

void splitfloat( float x, int *intpart, float *fracpart );

int main()
{
    float x, fracpart;
    int intpart;
    
    scanf("%f", &x);
    splitfloat(x, &intpart, &fracpart);
    printf("The integer part is %d\n", intpart);
    printf("The fractional part is %g\n", fracpart);
    
    return 0;
}

void splitfloat( float x, int *intpart, float *fracpart ){
	*intpart=(int)x%10;
	*fracpart=x-(int)x%10;
}

8-1-5

本题要求实现一个用选择法对整数数组进行简单排序的函数。

其中a是待排序的数组,n是数组a中元素的个数。该函数用选择法将数组a中的元素按升序排列,结果仍然在数组a中。

#include <stdio.h>
#define MAXN 10

void sort( int a[], int n );

int main()
{
    int i, n;
    int a[MAXN];
    scanf("%d", &n);
    for( i=0; i<n; i++ )
        scanf("%d", &a[i]);
    sort(a, n);
    printf("After sorted the array is:");
    for( i = 0; i < n; i++ )
        printf(" %d", a[i]);
    printf("\n");
    return 0;
}

void sort( int a[], int n ){
	int i,j,t;
	for(i=0;i<n;i++){
	 	for(j=i+1;j<n;j++){
	 		if(a[j]<a[i]){
	 			t=a[i];
	 			a[i]=a[j];
	 			a[j]=t;
			}
		}
	} 
}

8-1-6

本题要求实现一个在数组中查找指定元素的简单函数。

其中list[]是用户传入的数组;n(≥0)是list[]中元素的个数;x是待查找的元素。如果找到

则函数search返回相应元素的最小下标(下标从0开始),否则返回−1。

#include <stdio.h>
#define MAXN 10

int search( int list[], int n, int x );
    
int main()
{
    int i, index, n, x;
    int a[MAXN];
    scanf("%d", &n);
    for( i = 0; i < n; i++ )
        scanf("%d", &a[i]);
    scanf("%d", &x);
    index = search( a, n, x );
    if( index != -1 )
        printf("index = %d\n", index);
    else
        printf("Not found\n");
    return 0;
}

int search( int list[], int n, int x ){
	int i,j=-1;
	for(i=0;i<n;i++){
		if(list[i]==x){
			j=i;
			break;
		}
	}
	return j;
}

8-1-7

本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0​a1​⋯an−1​)变换为(an−m​⋯an−1​a0​a1​⋯an−m−1​)(最后m个数循环移至最前面的m个位置)。

其中a[]是用户传入的数组;n是数组的大小;m是右移的位数。函数ArrayShift须将循环右移后的数组仍然存在a[]中。

#include <stdio.h>
#define MAXN 10

void ArrayShift( int a[], int n, int m );

int main()
{
    int a[MAXN], n, m;
    int i;
    scanf("%d %d", &n, &m);
    for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
    ArrayShift(a, n, m);
    for ( i = 0; i < n; i++ ) {
        if (i != 0) printf(" ");
        printf("%d", a[i]);
    }
    printf("\n");
    return 0;
}

void ArrayShift( int a[], int n, int m ){
	int i,b[n];
	for(i=0;i<n;i++){
		b[i]=a[i];
	}
	for(i=0;i<n;i++){
		if(i+m<n){
			a[i+m]=b[i];
		}else {
			a[i+m-n]=b[i];
		}
	}
}

8-1-8

报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。

本题要求编写函数,给出每个人的退出顺序编号。

其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)。函数CountOff将每个人的退出顺序编号存在数组out[]中。

#include <stdio.h>
#define MAXN 20

void CountOff( int n, int m, int out[] );

int main()
{
    int out[MAXN], n, m;
    int i;
    scanf("%d %d", &n, &m);
    CountOff( n, m, out );   
    for ( i = 0; i < n; i++ )
        printf("%d ", out[i]);
    printf("\n");
    return 0;
}

void CountOff( int n, int m, int out[] ){
	//a数数,b记次
	int a=0,b=1,i;
	for(i=0;i<n;i++){
		out[i]=0;
	}
	while (b!=n+1){
		for(i=0;i<n;i++){
			if(out[i]==0) {
				a++;
			}
			if(a==m) {
				out[i]=b;
				b++;
				a=0;
			}
		}
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值