C语言中数组是一个固定长度的存储相同数据类型的数据结构,数组中的元素被存储在一段连续的内存空间中。本文主要介绍C语言中数组使用的编程实例练习题,以及相关示例代码。

1、遍历数组及数据转换

输入一个十进制正整数,并将其转转换成十六进制数输出。不能使用%x输出,代码如下,

#include <stdio.h>
int main()
{
    int num = 0;
    int a[100];
    int i = 0;
    int m = 0;
    int yushu;
    char hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
    printf( "请输入一个十进制整数:" );
    scanf( "%d", &num );
    while ( num > 0 )
    {
        yushu    = num % 16;
        a[i++]    = yushu;
        num    = num / 16;
    }
    printf( "转化为十六进制的数为:0x" );
    for ( i = i - 1; i >= 0; i-- ) /* 倒序输出 */
    {
        m = a[i];
        printf( "%c", hex[m] );
    }
    printf( "\n" );
}

2、数组计算回文数

一个正数如果顺着和反过来都是一样的(比如12321,反过来也是12321),那么就称为回文数。回文数不能以0开头,回文数从1开始。使用数组计算回文数,代码如下,

#include <stdio.h>

int main()
{
    int m[16], n, i, t, count = 0; long unsigned a, k;

    printf( "输出回文数\n" ); 
    for ( n = 1; n < 512; n++ )   /*穷举n的取值范围*/
    {
        k = 0; t = 1; a = n * n; /*计算n的平方*/
        for ( i = 0; a != 0; i++ ) /*从低到高分解数a的每一位存于数组m[1]~m[16]*/
        {
            m[i] = a % 10;
            a /= 10;
        }
        for (; i > 0; i-- )
        {
            k += m[i - 1] * t; /*t记录某一位置对应的权值*/ t *= 10;
        }
        if ( k == n * n )
            printf( "%2d%10d%10d\n", ++count, n, n * n );
    }
    return(0);
}

3、求数列的第n项以及前n项之和

求数列:f(1)=f(2)=1;f(n)=3*fn−1+2*fn−2 (n>2)的第n项以及前n项之和,代码如下,

#include <stdio.h>

int main()
{
    int n;
    int sum = 2;//前两项之和为2
    printf("请输入n:\n");
    scanf("%d", &n);
    int array[100];
    array[0] = 1;
    array[1] = 1;

    int i;

    for (i = 2; i < n; i++)
    {
        array[i] = 3 * array[i - 1] + 2 * array[i - 2];
        sum = sum + array[i];
    }
    printf("%d %d", array[n - 1], sum);
    return 0;
}

4、求数中的第k位数字

输入一个数n和位数k,它把数n从右边起的第k(k>0)位数字的值给出来,其中n为正整数,若n的位数不足k,则返回值0。代码如下,

#include <stdio.h>
#include <math.h>

int digit(int n, int k)
{
    int x, a;
    int arr[64];
    int i = 0;
    if (n < pow(10, k - 1))//判断k是否超位数
    {
        x = 0;
    }
    else
    {
        for (i = 0; i <= k - 1; i++)//判断到k位时即可结束
        {
            a = n % 10;
            n = n / 10;
            arr[i] = a;
        }
        x = arr[k - 1];
    }
    return x;
}

int main()
{
    int n, k;
    printf("请输入n和k:\n");
    scanf("%d %d", &n, &k);
    printf("%d", digit(n, k));
    return 0;
}

推荐文档