C语言作业题(2)

来源:互联网 发布:电脑保密软件 编辑:程序博客网 时间:2024/06/04 18:43

1、如输入:Z2009-AShanghaiZ
则输出:lenth = 8;
事例说明:从A到Z的子串为SHanghai,其长度是8.

//如输入:Z2009 - AShanghaiZ//则输出:lenth = 8;//事例说明:从A到Z的子串为SHanghai,其长度是8.#include <stdio.h>int func1(char arr[]){    char *find_A = arr;//存储头指针,用于指向A    char *find_Z = arr;//存储头指针,用于指向B    while (*find_A++ != 'A');//指向A字符后一位    while (*find_Z++ != 'Z');//指向Z字符后一位    return (find_Z - 1 - find_A);}int main(void){    char arr[] = "abzd1-Axi'anZdef";    printf("%d", func1(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;//97
hash ^= (uintptr_t)*s++; //0110 0001
printf(“1—%ld.\n”, hash) //97

if (*s == ‘\0’)break; //98
hash ^= (uintptr_t)*s++<<8; //0110 0010 0110 0001
printf(“2—%ld.\n”, hash); //25185

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);//25185
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)

//3、实现整数n(n <= 10)的算式:n!+ (n - 1)!+ (n - 2)!... + 3!+ 2!+ 1!//输入 n = 3:结果 3!+ 2!+ 1!= 11//函数原型:int jiecheng_sum(int n)#include <stdio.h>int jiecheng_sum(int n){    int ret = 1, sum = 0, p = 0;    while (n > 0)    {        for (p = n,ret = 1; p > 0; p--)//计算n的阶乘        {            ret *= p;        }        sum += ret;//计算总和        n--;    }    return sum;}int main(void){    printf("%d\n",jiecheng_sum(3));    return 0;}

4、一个数组有N个元素,使用冒泡排序对其进行排序输出

void func(int arr[], int N){    int i = 0, j = 0, buf = 0;    for (i = 0; i < N - 1; i++)    {        for (j = 0; j < N - 1 - i; j++)        {            if (arr[j] > arr[j + 1])//升序            {                buf = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = buf;            }        }    }    for (i = 0; i < N; i++)    {        printf("%d%c", arr[i],((i==(N-1))?'\n':' '));    }}int main(void){    //输入N个数    int N = 0;    printf("Input N:");    scanf("%d", &N);    //申请空间    int *arr = (int *)malloc(N * sizeof(int));    //输入元素    printf("Input every number:");    int i = 0;    for (i = 0; i < N; i++)    {        scanf("%d", &arr[i]);    }    func(arr, N);    free(arr);    return 0;}

5、给出三个正整数a,b,c,你可以在它们之间插入加号或者乘号以及括号将其变成一个表达式。现在需要构造一个值最大的表达式,输出这个值。

//思路:将三个数中较小的两个求出最大值,与第三个相乘#include <stdio.h>int func(int a, int b, int c){    int max = 0;    max = (a >= b ? (a >= c ? a : c) : (b >= c ? b : c));    if (1 == max)//输入的三个数字都是1        return a + b + c;    else if (a == max)        return (a*((b*c) >= (b + c) ? (b*c) : (b + c)));    else if (b == max)        return (b*((a*c) >= (a + c) ? (a*c) : (a + c)));    else if (c == max)        return (c*((a*b) >= (a + b) ? (a*b) : (a + b)));    else        printf("error");}int main(void){    int a = 0, b = 0, c = 0;    printf("Input 3 numbers:");    scanf("%d %d %d", &a, &b, &c);    printf("%d\n", func(a, b, c));}
原创粉丝点击