C语言习题之数组

1、如输入:Z2009-AShanghaiZ

则输出:lenth = 8;

事例说明:从A到Z的子串为SHanghai,其长度是8.

#include 
int stat(char arr[])
{
    int i = 0, j = 0,z;
    while (arr[i] != 'A')
    i=i+1;
    j=i;
    while (arr[j] != 'Z')
    j=j+1;
    z = j -i -1;
    return z;
}
int main ()
{
    char arr[30];
    printf("请输入字符串: \n");
    gets(arr);
    printf("lenth = %d",stat(arr)); 
    return 0;
}

2、下面是某语言的计算字符串Hash值的算法如下,如果字符‘a’、‘b’对应的ascII的值对应十进制是97、98,

请回答控制台打印出的数值是多少_


typedef unsigned long uintptr_t;

uintptr_t NXStrHash (const void *data)

{

    uintptr_t hash = 0;

    unsigned char *s = (unsigned char *)data;

    if (s)for (; ; )

    {

        if (*s == '\0')break;

        hash ^= (uintptr_t)*s++;

        printf("1---%ld.\n", hash);



        if (*s == '\0')break;

        hash ^= (uintptr_t)*s++<<8;

        printf("2---%ld.\n", hash);



        if (*s == '\0')break;

        hash ^= (uintptr_t)*s++<<16;

        printf("3---%ld.\n", hash);



        if (*s == '\0')break;

        hash ^= (uintptr_t)*s++<<24;

        printf("4---%ld.\n", hash);

    }

    return hash;

};

int main(void)

{

    uintptr_t hash_value = NXStrHash("ab");

    printf("%ld.\n", hash_value);

    return 0;

}

打印的数值为:
1—97.
2—25185.
25185.

3、实现整数n(n<=10)的算式:n!+(n-1)!+(n-2)!…+3!+2!+1!

输入 n = 3:结果 3!+2!+1! = 11

函数原型:int jiecheng_sum(int n)

#include 
int jiecheng_sum(int n)
{
    int i=0, j=0, k=1, sum=0;
    for (i=n; i>1; i--)
    {
        printf("%d!+",i);
    }
    printf("1!=");
    for (i=1; i<=n; i++)
    {
        for (j=1; j<=i; j++)
        {
            k = j * k;
        }
        sum = k + sum;
        k = 1;
    }
    printf("%d",sum);
}
int main ()
{
    int n;
    printf("请输入阶乘个数: \n");
    scanf("%d",&n);
    jiecheng_sum(n);
}

4,写一个函数找出一个整数数组中,第二大的数

PS1:66,66,66,66,则没有第二大数

PS2:99,99,88,86,则第二大数是88

#include 
void max(int arr[])
{
    int i,max=arr[0],j,temp,k=4,temp1;
    for (i=0; i<4; i++)
    printf("arr[%d] = %d  \n",i,arr[i]);
    if (arr[0] == arr[1] && arr[1] == arr[2] && arr[2] == arr[3])
    {
        printf("没有第二大数\n"); 
        return 0;
    }
    for (i=0; i<4; i++)
    {
        if (arr[i]=arr[i+1])
        {
            k = i + 1;
        }
        if (arr[i]1])
        {
            j = i+1;
        }       
    }   
    temp = arr[j];
    arr[j] = 0;
    temp1 = arr[k];
    arr[k] = 0;
    for (i=0; i<3; i++)
    {   
        if (arr[i]1])
        {
            max = arr[i+1];
        }
    }
    printf("第二大的数字为 = %d",max);
    arr[j]=temp;
    arr[k]=temp1;
}
int main ()
{
    int arr[4],j;
    printf("请输入要比较的4个数: \n");
    for (j=0; j<4; j++)
    {
        scanf("%d",&arr[j]);
    }   
    max(arr);
}

5,一辆卡车违反交通规则,撞人后逃跑。现场有三个目击证人,但都没记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字相同但与前两位不同;丙说:四位车号正好是一个正整数的平方。请根据以上线索求出车号。

//要求:
#include 
int main (void)
{
    int i=0, j=0, k=0, n=0;
    //i必须从1开始,四位车号组成的数字最高位不能是0
}

程序:

#include 
int main (void)
{
    int i=0,j=0,k=0,n=0,a,b;
    for (i=1; i<10; i++)
    {
        for (j=0; j<10; j++)
        {
            for (k=0; k<10; k++)
            {
                for (n=0; n<10; n++)
                {
                    a=1000*i+100*j+10*k+n;
                    for (b=30; b<100; b++)
                    {
                        if (a == b*b && i == j && k == n)
                        printf("车牌号是:%d\n",a);
                    }
                }
            }
        }       
    }
}

6,给出3个正整数a,b和c,你可以在它们之间插入加号或者乘号以及括号将其变成一个表达式。

比如给出数字1,2和3,你可以构造出:

1+2*3=7

1*(2+3)=5

1*2*3=6

(1+2)*3=9

等表达式。现在你需要构造一个值最大的表达式,输出这个值。

#include 
int max(int a, int b, int c)
{
    int arr[6],p,i,max;
    arr[0] = a+b+c;
    arr[1] = a*b+c;
    arr[2] = a+b*c;
    arr[3] = a*(b+c);
    arr[4] = (a+b)*c;
    arr[5] = a*b*c;
    max = arr[0];
    for (i=0; i<5; i++)
    {
        if (arr[i]1])
        {
            max = arr[i+1];
            p = i +1;
        }       
    }   
    switch (p)
        {
            case 0:
                printf("%d+%d+%d = ",a,b,c);
                break;
            case 1:
                printf("%d*%d+%d = ",a,b,c);
                break;
            case 2:
                printf("%d+%d*%d = ",a,b,c);
                break;
            case 3:
                printf("%d*(%d+%d) = ",a,b,c);
                break;
            case 4:
                printf("(%d+%d)*%d = ",a,b,c);
                break;
            case 5:
                printf("%d*%d*%d = ",a,b,c);
                break;
            default : printf("Invalid !");
        }
    return max; 
}
int main ()
{
    int a,b,c;
    printf("请输入要计算的3个数: \n");
    scanf("%d,",&a);
    scanf("%d,",&b);
    scanf("%d,",&c);
    printf("%d",max(a,b,c));
    return 0;
}

7,一个数组有N个元素,使用冒泡排序对其进行排序输出;要求:输入为两行,第一行一个整数n,表示有n个元素;第二行为n个int数

#include 
int maopao(int length, int arr[])
{
    int i,j,temp;
    for (i=0; i<length-1; i++)
    {
        for (j=0; j<length-i-1; j++)
        {
            if (arr[j]>arr[j+1])
            {
                temp = arr [j];
                arr[j] = arr [j+1];
                arr[j+1] = temp;
            }
        }
    }
    for (i=0; i<length; i++)
    {
        printf("%d ",arr[i]);
    }
}
int main ()
{
    int arr[8] = {23,43,12,65,87,3,12,98};
    int length = 8;
    maopao(8,arr);
    return 0;
}

你可能感兴趣的:(技术博客)