6-7 查找数据
分数 5
作者 余贞侠
单位 成都信息工程大学
调用自定义函数Input从键盘读入数据到数组Arr中,读满20个数或者遇到-9999结束。再读入一个数num,然后调用自定义函数Search在数组arrA中查找num,输出查找的位置信息(下标从0计算),没有找到输出“not Find!”
函数接口定义:
int Input(int *p,int n);
int Search(int *p, int n, int num);
Input函数将数据读入数组中并返回实际读入的元素个数; Search函数返回查找num的位置信息,没有找到返回-1
裁判测试程序样例:
#include
int Input(int *p,int n);
int Search(int *p, int n, int num);
int main(void)
{
int Arr[20],cnt=0, num, Pos;
cnt = Input(Arr,20);
scanf("%d", &num);
Pos = Search(Arr,cnt,num) ;
if (-1 == Pos)
{
printf("not Find!\n");
}
else
{
printf("%d\n", Pos);
}
return 0;
}
/* 请在这里填写答案 */
输入样例:
18 99 45 33 66 3 11 57 70 100 48 -9999
11
输出样例:
6
输入样例:
18 99 45 -33 66 23 101 -57 70 70 28 999 -45 33 66 3 11 57 80 10
100
输出样例:
not Find!
求解,还有为什么输入一行以后会直接输出。
基于Monster 组和GPT的调写:
#include <stdio.h>
int Input(int *p, int n) {
int cnt = 0;
while (cnt < n) {
int x;
scanf("%d", &x);
if (x == -9999) break;
p[cnt++] = x;
}
return cnt;
}
int Search(int *p, int n, int num) {
for (int i = 0; i < n; i++) {
if (p[i] == num) return i;
}
return -1;
}
int main(void) {
int Arr[20], cnt = 0, num, Pos;
cnt = Input(Arr, 20);
scanf("%d", &num);
Pos = Search(Arr, cnt, num);
if (-1 == Pos) {
printf("not Find!\n");
} else {
printf("%d\n", Pos);
}
return 0;
}
输入一行以后会直接输出,可能是在终端中输入完一行后按下回车键,这时回车键也被当做一个字符读入了,导致程序继续往下执行。可以在每次调用scanf函数后加上一个额外的getchar函数来读取回车键。例如,将scanf("%d", &num);修改为scanf("%d", &num); getchar();。
有啥困难?
#include<stdio.h>
int Input(int *p,int n);
int Search(int *p, int n, int num);
int main(void)
{
int Arr[20],cnt=0, num, Pos;
cnt = Input(Arr,20);
scanf("%d", &num);
Pos = Search(Arr,cnt,num) ;
if (-1 == Pos)
{
printf("not Find!\n");
}
else
{
printf("%d\n", Pos);
}
return 0;
}
int input(int *p,int n)
{
int m;
for(int i=0;i<n;i++)
{
scanf("%d",&m);
if(m == -9999)
break;
p[i] = m;
}
return i;
}
int Search(int *p, int n, int num)
{
for(int i=0;i<n;i++)
{
if(p[i] == num)
return i;
}
return -1;
}
scanf("%d", &num);
getchar(); // 读取回车符
这样可以清空输入缓冲区,保障下一个scanf函数正常读取数据。
这道题要求你写两个函数,一个函数Input用于从键盘读入数据到数组Arr中,读满20个数或者遇到-9999结束。另一个函数Search用于在数组arrA中查找num,输出查找的位置信息(下标从0计算),没有找到输出“not Find!”
函数接口定义:
void Input(int arrA[], int n);
int Search(int arrA[], int n, int num);
Input函数将数据读入数组中并返回实际读入的元素个数; Search函数返回查找num的位置信息,没有找到返回-1
输入样例:
18 99 45 33 66 3 11 57 70 100 48 -9999
11
输出样例:
6
输入样例:
18 99 45 -33 66 23 101 -57 70 70 28 999 -45 33 66 3 11 57 80 10100
-100
输出样例:
not Find!
为什么输入一行以后会直接输出,这是因为这里的数据是裁判测试程序样例,输入已经写在程序里了,只需要直接运行即可。如果你在本地输入,需要运行程序才会输出结果。