c语言第三次练习题

来源:互联网 发布:男生冬季服装搭配知乎 编辑:程序博客网 时间:2024/05/20 05:11

1找一个整型数组中的第二大的数

例如: 66 , 66 , 66, 66,就没有第二大的数
99,98, 85,86,第二大的数就是98
编写程序如下:

    #include<stdio.h>//一个找数组中第二大值的函数 int func_find_max_2th(int arr[],int lenth){    int i=0, j=0, temp=0;    //冒泡排序法排序     for (i=0; i<lenth-1; i++)    {        for (j=0; j<lenth-1-i; j++)        {            if (arr[j] > arr[j+1])            {                temp = arr[j];                arr[j] = arr[j+1];                arr[j+1] = temp;                }        }       }    //判断排序之后的首尾元素数值是否一样     if(arr[0] == arr[lenth-1])    {        printf("该数组种所有数都一样,没有第二大值");        return -1;    }    printf("该数组的第二大值是:%d \n",arr[lenth-2]);      }  int main(void) {    int arr[5]={6,6,6,6,6};    func_find_max_2th(arr,5);  } 

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;}

3 实现整数n(n<=10)的算式:n!+(n-1)!+(n-2)!…+3!+2!+1! 输入 n = 3:结果 3!+2!+1! = 9,函数原型:int jiecheng_sum(int n)

#include<stdio.h>int jiecheng(int a){    int sum=1, i=0;    //参数的判断    if(a < 0| a > 10)    {        printf("参数输入错误");         return -1;    }    //递归的回归条件    if(1 == a)    {        return 1;    }    for(i=1; i<=a; i++)    {        sum = sum * i;      }    return sum + jiecheng(a-1); } int main(void){    int a =3, ret =0;    ret = jiecheng(a);    printf("ret= %d",ret);}   

4 如输入:Z2009-AShanghaiZ,则输出:lenth = 8;

事例说明:从A到Z的子串为SHanghai,其长度为8。
(这道题我只写了思路,实际代码运行时错误的!!)

#include<stdio.h>#include<string.h>int my_strlen(char *p){    int i = 0, j = 0, cnt = 0;    //计算字符串的长度     cnt = strlen(p);    //循环来找A这个字符     for(j=0; j<cnt; j++)    {        //找到A统计A到Z之间的字符个数          //如果这个字符的asc值是65         if('A' == p[j])        {            while(p[j] != 'Z')            {   //统计字符的个数 (多统计了一个A)                i++;                //下标移动                 j++;            }             //把统计的A减掉             return i-1;         }     }        //如果找不到A 返回-1            return -1; }int main(void){    char str[] = "Z2009-AshanghaiZ";    printf("lenth=%d\n",my_strlen(str)); } ***

5 给出三个正整数a,b,c,你可以在他们之间插入加号或者乘号以及括号将其变成一个表达式,比如给出数字1,2,3,你可以构造出:

1+2*3=7
1*(2+3)=5
1 * 2 *3 =6
(1+2)*3=9

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

输入样例:123 输出:9

编写程序如下:

#include<stdio.h>#define MAX(x,y) ((x>y)?x:y)int func(int a, int b, int c){       int f1=0,f2=0,f3=0,f4=0,f5=0,f6=0,f7=0,f8=0;    int ret=0;    //把所有的组合全部排列出来     f1 = a*b*c;    f2 = a+b+c;    f3 = a*(b+c);    f4 = b*(a+c);    f5 = c*(a+b);    f6 = a+(b*c);    f7 = b+(a*c);    f8 = c+(a*b);    //比较得到最大的数     //第一轮比较    f1=MAX(f1,f2);    f2=MAX(f3,f4);    f3=MAX(f5,f6);    f4=MAX(f7,f8);    //第二轮比较    f1=MAX(f1,f2);    f2=MAX(f3,f4);    //第三轮比较    return ret=MAX(f1,f2);  }int main(void){    int a=1, b=2, c=3, ret=0;    ret = func(a,b,c);    printf("输出:%d",ret);}

6 一辆卡车违反交通规则,肇事逃逸,有三位目击者给出了相关信息,如下:

甲说:牌照的前两位数字是相同的。

乙说:车牌号后两位是相同的,但是与之前的两位是不一样的。

丙是一个数学家,他说:四位的车牌号码刚好是一个整数的平方,请你根据以上的线索推测出车牌号码。

原创粉丝点击