C三道题(2)

  • 1、写一个函数找出一个整数数组中第二大的数
    PS1:66,66,66,66,则没有第二大的数。
    PS2:99,99,88,86,则第二大的数是88。
#include <stdio.h>

void second(int arr[], int len);

void main(void)
{
    int n = 0, i = 0;
    int data[1000];
    printf("输入数组元素数量:"); 
    scanf("%d", &n);
    for(i=0; i<n; i++)
    scanf("%d",data+i);
    second(data, n);
    return;

}

void second(int arr[], int len)
{
    int i = 0, j = 0, tem = 0;
    for(i=0; i<len-1; i++)
    {
        for(j=0; j<len-i-1; j++)
        {
            if(arr[j]>arr[j+1])
            {
                tem = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tem;
            }
        }
    }
    int max = arr[len-1];
    len--;
    while(len--)
    {
        if(arr[len]<max)
        {
            printf("第二大的数:%d\n", arr[len]);
            return;
        }
    }
    printf("都一样大");
    return;
}
  • 2、一辆卡车违反交通规则,撞人后逃跑。现场有三人目击时间。现场有三人目击,但都没有记住车号。只记下了车号的一些特征。
  • 甲说:牌照的前两位是相同的。

  • 乙说:牌照的后两位是相同的,但与前两位不同。

  • 丙说:四位的车号刚好是一个整数的平方。
    请根据以上线索求出车号。

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

void main(void)
{
    int h = 0,l = 0, i = 0, a = 0, b = 0;
    for(i=0; i<=9999; i++)
    {
        b = sqrt(i);
        if((b*b) == i)
        {
            h = i / 1000;
            l = i % 10;
            a = h*1100 + l*11;
            if(a==i && h!=l)
            {
                printf("车牌号为:%d.\n", a);
            }
        }
    }
    return;

}
  • 3、下面这段函数将输出什么?为什么?
void main(void)
{
    char *p1 = "name";
    char *p2;
    p2 = (char*)malloc(20);//申请20字节的空间。
//等同于p2 = (char*)malloc(sizeof(char)*20);
    memset (p2, 0, 20);   //将这20字节赋值为0;
    while(*p2++ = *p1++);//p2指向字符串"name\0"的后一个字节,即第六个字节。
    //故这20个字节,除了前四个为"name",其余16个都为0。
    printf("%s\n", p2);//第六个字节为0,表示字符为"\0",不予显示,输出结束。
}
  • 故此函数的输出结果为空。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值