PAT : 基础编程题目集_函数题答案(6-1 ~ 6-13)(C语言)

PAT入门题,新手上路提升自信心
题目地址

6-1 简单输出整数(10分)

本题要求实现一个函数,对给定的正整数N,打印从1到N的全部正整数。

void PrintN(int n)
{
    for (int i = 1; i <= n; i++)
    {   
        printf("%d\n", i);
    }
}

总结
c语言标准输入输出为scanf()和printf()
所需头文件为#include <stdio.h>

6-2 多项式求值(15分)

本题要求实现一个函数,计算阶数为n,系数为a[0] … a[n]的多项式在这里插入图片描述
在x点的值。

double f( int n, double a[], double x )
{
    double sum = 0;
    double temp = 0;
    for (int i = 0; i <= n; i++)
    {
        sum += a[i] * pow(x,i);
    }
    return sum;
}

pow(x,y) 为x的y次方,x,y皆为double型

6-3 简单求和(10分)

本题要求实现一个函数,求给定的N个整数的和。

int Sum ( int List[], int N )
{
    int sum = 0;
    for (int i = 0; i < N; i++)
    {
        sum += List[i];
    }
    return sum;
}

6-4 求自定类型元素的平均(10分)

本题要求实现一个函数,求N个集合元素S[]的平均值,其中集合元素的类型为自定义的ElementType。

ElementType Average( ElementType S[], int N )
{
    ElementType sum;
    for (int i = 0; i < N; i++)
    {
        sum += S[i];
    }
    ElementType average = sum/N;
    return average;
}

6-5 求自定类型元素的最大值 (10分)

本题要求实现一个函数,求N个集合元素S[]中的最大值,其中集合元素的类型为自定义的ElementType。

ElementType Max( ElementType S[], int N )
{
    ElementType max = S[0];
    for (int i = 1; i < N; i++)
    {
        if (max < S[i])
            max = S[i];
    }
    return max;
}

6-6 求单链表结点的阶乘和 (15分)

本题要求实现一个函数,求单链表L结点的阶乘和。这里默认所有结点的值非负,且题目保证结果在int范围内。

int FactorialSum( List L )
{
    int factorialSum = 0;
    while (L != NULL)
    {
        int factoria;
        if (L->Data == 0)
        {
            factoria = 1;
        }
        else
        {
            factoria = L->Data;
            for (int i = 1; i <= (L->Data - 1); i++)
            {
                factoria *= i;
            }
        }
        factorialSum += factoria;
        L = L->Next;
    }
    return factorialSum;
}

易错点
o的阶乘为1.。。。。被这玩意卡了半天就离谱

6-7 统计某类完全平方数 (20分)

本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。

#include <string.h>
int IsTheNumber ( const int N )
{
	int n = N;
	double a = sqrt(n);		//目标数的平方根
	double mod = fmod(a,1);		//目标数的小数部分
	//bool isPerSqu = ( 0 == mod);      //c语言中无bool类型
	if (mod)		//如果不是完全平方数就可以直接返回0
	{
		return 0;
	}
	int arr[10];
	memset(arr, 0, sizeof(arr));		//作用:用于标记数中出现过的数字
	while (n >= 1)
	{
		int portion = n % 10;		//通过模10,一步步的将数字取出
		if (arr[portion] == 1)		//该数字已经出现过
		{
			return 1;		//printf("该数至少有两个相同的数\n");
		}else
		{
			arr[portion] = 1;
		}
		n /= 10;
	}
	return 0;
}

总结
使用arr[10];memset(arr, 0, sizeof(arr)); 用来记录数字出现的次数
memset(数组地址,所赋的值,数组大小)需要#include<string.h>头文件,而且仅建议赋值0和-1 (与memset函数赋值原理有关 ,其他数字建议使用fill函数)
c语言中没有bool类型。。。
0为假,非0为真
易出问题的地方:对于判断数字出现的次数,循环的判断条件为n>=1时,需要额外添加当传入数字为0时,将下标为0的数字改为1

6-8 简单阶乘计算 (10分)

本题要求实现一个计算非负整数阶乘的简单函数。

int Factorial(int N)
{
	int n = N;
	//第一步判断是否为小数或者为负数
	double mod = fmod(n,1);		//提取目标数的小数部分
	if (mod || n < 0)		//存在小数部分或者为负数直接返回0
	{
		return 0;
	}
	else if (n == 0)
	{
		return 1;
	}
	 int factoria = 1;
	 for (int i = 1; i <= n; i++)
	 {
		 factoria *= i;
	 }
	 return factoria;
}

总结
double型数字不能进行%运算,故欲对double型变量进行取模操作时,可以使用fmod()函数,(在有stdio头文件的情况下不需要额外添加头文件)

6-9 统计个位数字 (15分)

本题要求实现一个函数,可统计任一整数中某个位数出现的次数。例如-21252中,2出现了3次,则该函数应该返回3。

int Count_Digit(int n,int d)
{
	//创建记录数字出现次数的数组
	int arr[10];
	memset(arr,0,sizeof(arr));

	//统计数字
	if (n == 0)
	{
		arr[0] = 1;
	}else if(n < 0)
    {
        n = 0-n;
    }
    int protion = 0;
	while (n >= 1)
	{
		protion = n % 10;
		arr[protion] += 1;
		n /= 10;
	}
	return arr[d];
}

错误点总结
当采用取模法判断数中出现的数字(因为循环的判断条件为n>=1)
1.当n为0时,需单独操作:将arr[0] = 1;
2.当n小于0时,将n=0-n; 再接上后续常规操作

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
REGISTER ADDRESS REGISTER DATA(1) HEX 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 0 LVDS_ RATE_2X 0 0 0 0 0 0 0 0 0 0 0 0 0 GLOBAL_ PDN 2 PAT_MODES_FCLK[2:0] LOW_ LATENCY_E N AVG_EN SEL_PRBS_ PAT_ FCLK PAT_MODES SEL_PRBS_ PAT_GBL OFFSET_CORR_DELAY_FROM_TX_TRIG[5:0] 3 SER_DATA_RATE DIG_GAIN_ EN 0 OFFSET_CORR_DELAY _FROM_TX_TRIG[7:6] DIG_ OFFSET_ EN 0 0 0 1 0 0 0 0 4 OFFSET_ REMOVA L_SELF OFFSET_ REMOVAL_ START_ SEL OFFEST_ REMOVAL_ START_ MANUAL AUTO_OFFSET_REMOVAL_ACC_CYCLES[3:0] PAT_ SELECT_ IND PRBS_ SYNC PRBS_ MODE PRBS_EN MSB_ FIRST DATA_ FORMAT 0 ADC_RES 5 CUSTOM_PATTERN 7 AUTO_OFFSET_REMOVAL_VAL_RD_CH_SEL 0 0 0 0 0 0 0 0 0 0 CHOPPER_EN 8 0 0 AUTO_OFFSET_REMOVAL_VAL_RD B 0 0 0 0 EN_ DITHER 0 0 0 0 0 0 0 0 0 0 0 D GAIN_ADC1o 0 OFFSET_ADC1o E GAIN_ADC1e 0 OFFSET_ADC1e F GAIN_ADC2o 0 OFFSET_ADC2o 10 GAIN_ADC2e 0 OFFSET_ADC2e 11 GAIN_ADC3o 0 OFFSET_ADC3o 12 GAIN_ADC3e 0 OFFSET_ADC3e 13 GAIN_ADC4o 0 OFFSET_ADC4o 14 GAIN_ADC4e 0 OFFSET_ADC4e 15 PAT_PRB S_LVDS1 PAT_PRBS_ LVDS2 PAT_PRBS_ LVDS3 PAT_PRBS_ LVDS4 PAT_LVDS1 PAT_LVDS2 HPF_ ROUND_ EN_ADC1-8 HPF_CORNER_ADC1-4 DIG_HPF_ EN_ADC1-4 17 0 0 0 0 0 0 0 0 PAT_LVDS3 PAT_LVDS4 0 0 18 0 0 0 0 PDN_ LVDS4 PDN_ LVDS3 PDN_ LVDS2 PDN_ LVDS1 0 0 0 0 INVERT_ LVDS4 INVERT_ LVDS3 INVERT_ LVDS2 INVERT_ LVDS1 19 GAIN_ADC5o 0 OFFSET_ADC5o 1A GAIN_ADC5e 0 OFFSET_ADC5e 1B GAIN_ADC6o 0 OFFSET_ADC6o 1C GAIN_ADC6e 0 OFFSET_ADC6e 1D GAIN_ADC7o 0 OFFSET_ADC7o 1E GAIN_ADC7e 0 OFFSET_ADC7e 1F GAIN_ADC8o 0 OFFSET_ADC8o 20 GAIN_ADC8e 0 OFFSET_ADC8e 21 PAT_PRB S_LVDS5 PAT_PRBS_ LVDS6 PAT_PRBS_ LVDS7 PAT_PRBS_ LVDS8 PAT_LVDS5 PAT_LVDS6 0 HPF_CORNER_ADC5-8 DIG_HPF_ EN_ADC5-8 23 0 0 0 0 0 0 0 0 PAT_LVDS7 PAT_LVDS8 0 0
06-09
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值