- 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",不予显示,输出结束。
}
- 故此函数的输出结果为空。