回调函数
文章目录
1. 下面test函数设计正确的是:
char* arr[5] = {"hello", "bit"};
test(arr);
A.void test(char* arr);
B.void test(char** arr);//选择
C.void test(char arr[5]);
D.void test(char* arr[5]);
下面代码中print_arr函数参数设计哪个是正确的
int arr[3][5] = {1,2,3,4,5,6,7,8,9,10};
print_arr(arr, 3, 5);
//可省略行,但不可省略列
A.void print_arr(int arr[][],int row, int col);
B.void print_arr(int* arr, int row, int col);
C.void print_arr(int (*arr)[5], int row, int col);//选择
D.void print_arr(int (*arr)[3], int row, int col);
下面程序的结果是:
int main()
{
int a[5] = {5, 4, 3, 2, 1};
int *ptr = (int *)(&a + 1);//&a -- int(*)[5]
printf( "%d,%d", *(a + 1), *(ptr - 1));//4,1
return 0;
}
2. 三角形判断
描述
KiKi想知道已经给出的三条边a,b,c能否构成三角形,如果能构成三角形,判断三角形的类型(等边三角形、等腰三角形或普通三角形)。
输入描述:
题目有多组输入数据,每一行输入三个a,b,c(0<a,b,c<1000),作为三角形的三个边,用空格分隔。
输出描述:
针对每组输入数据,输出占一行,如果能构成三角形,等边三角形则输出“Equilateral triangle!”,等腰三角形则输出“Isosceles triangle!”,其余的三角形则输出“Ordinary triangle!”,反之输出“Not a triangle!”。
int main()
{
int a = 0;
int b = 0;
int c = 0;
while (scanf("%d %d %d", &a, &b, &c) == 3)
{
if (a + b > c && a + c > b && b + c > a)
{
if (a == b && b == c)
printf("Equilateral triangle!\n");
else if ((a == b && b != c) || (a == c && a != b) || (b == c && b != a))
printf("Isosceles triangle!\n");
else
printf("Ordinary triangle!\n");
}
else
printf("Not a triangle!\n");
}
return 0;
}
3. 竞选社长
描述
假设你们社团要竞选社长,有两名候选人分别是A和B,社团每名同学必须并且只能投一票,最终得票多的人为社长.
输入描述:
一行,字符序列,包含A或B,输入以字符0结束。
输出描述:
一行,一个字符,A或B或E,输出A表示A得票数多,输出B表示B得票数多,输出E表示二人得票数相等。
竞选社长1
int main()
{
int ch=0;
int countA=0;
int countB=0;
while ((ch=getchar())!='0')
{
if(ch=='A')
countA++;
else if(ch=='B')
countB++;
}
if(countA>countB)
printf("A\n");
else if(countA<countB)
printf("B\n");
else
printf("E\n");
return 0;
}
竞选社长2
int main()
{
int ch = 0;
int count = 0;
//A++
//B--
while ((ch = getchar()) != '0')
{
if (ch == 'A')
count++;
else if (ch == 'B')
count--;
}
if (count>0)
printf("A\n");
else if (count<0)
printf("B\n");
else
printf("E\n");
return 0;
}
4. 公务员面试
描述
公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分制),去掉一个最高分和一个最低分,输出每组的平均成绩。
(注:本题有多组输入)
输入描述:
每一行,输入7个整数(0~100),代表7个成绩,用空格分隔。
输出描述:
每一行,输出去掉最高分和最低分的平均成绩,小数点后保留2位,每行输出后换行。
面试1
int main()
{
int arr[7] = { 0 };
while (scanf("%d %d %d %d %d %d %d", &arr[0], &arr[1], &arr[2], &arr[3], &arr[4], &arr[5], &arr[6]) == 7)
{
int i = 0;
int max = 0;
int min = 100;
int sum = 0;
for (i = 0; i < 7; i++)
{
if (arr[i] > max)
max = arr[i];
if (arr[i] < min)
min = arr[i];
sum += arr[i];
}
printf("%.2lf\n", (sum - max - min) / 5.0);
}
return 0;
}
面试2
int main()
{
int num = 0;
int i = 0;
int max = 0;
int min = 100;
int sum = 0;
int n = 0;
while (scanf("%d", &num) == 1)
{
if (num > max)
max = num;
if (num < min)
min = num;
sum += num;
n++;
if (n == 7)
{
printf("%.2lf\n", (sum - max - min) / 5.0);
max = 0;
min = 100;
sum = 0;
n = 0;
}
}
return 0;
}
5. HTTP状态码
描述
KiKi访问网站,得到HTTP状态码,但他不知道什么含义,BoBo老师告诉他常见HTTP状态码:200(OK,请求已成功),202(Accepted,服务器已接受请求,但尚未处理。)400(Bad Request,请求参数有误),403(Forbidden,被禁止),404(Not Found,请求失败),500(Internal Server Error,服务器内部错误),502(Bad Gateway,错误网关)。
输入描述:
多组输入,一行,一个整数(100~600),表示HTTP状态码。
输出描述:
针对每组输入的HTTP状态,输出该状态码对应的含义,具体对应如下:
200-OK
202-Accepted
400-Bad Request
403-Forbidden
404-Not Found
500-Internal Server Error
502-Bad Gateway
int main()
{
int Status = 0;
while (scanf("%d", &Status) == 1)
{
switch (Status)
{
case 200:
printf("OK\n");
break;
case 202:
printf("Accepted\n");
break;
case 400:
printf("Bad Request\n");
break;
case 403:
printf("Forbidden\n");
break;
case 404:
printf("Not Found\n");
break;
case 500:
printf("Internal Server Error\n");
break;
case 502:
printf("Bad Gateway\n");
break;
}
}
return 0;
}
6. scanf返回值
对scanf返回值的写法讲解。
研究printf的返回值。
//EOF - end of file
//scanf读取数据,如果读到了数据,返回的是实际读到数据的个数
//如果没有读到数据,说明读取失败,返回的是EOF(-1)
int a=0;
int b=0;
// int ret=scanf("%d",&a);
// printf("ret=%d\n",ret);
while(scanf("%d %d",&a,&b)==2)
{
//读取到2个数字,scanf返回的是2
}
while(scanf("%d %d",&a,&b)!=EOF)
{
//读取到2个数字,scanf返回的是2
//读取到1个数字,scanf返回的是1
}
while(~scanf("%d %d",&a,&b))
{
//scanf读取失败的时候返回的是EOF,也就是-1
//-1的补码是
//11111111 11111111 11111111 11111111
//当对scanf的返回值~(按位取反的时候)得到的是0