折半查找 &&   在标准输出上打印行号

*折半查找*

#include<stdio.h>
int half_search(int arr[],int first,int last,int n)
{
    int mid = 0;
    while(first <= last)
    {
        mid = (first+last)/2;
        if(n < arr[mid])          //若要查找的数字小于中间数,则在前一半查找
        {
            last = mid - 1;          //范围缩小
        }
        else if(n > arr[mid])    //若大于中间数,在后一半查找
        {
            first = mid + 1;
        }
        else
            return 1;
    }
    return -1;
}
int main()
{
    int arr[] = {1,3,5,6,7,9,11,12,14,15};     //折半查找法适用于有序排列的数组
    int i;
    scanf("%d",&i);
    if(half_search(arr,0,sizeof(arr)/sizeof(arr[0])-1,i) == -1)
    {
        printf("not exist\n");
    }
    else
    {
        printf("%d\n",i);
    }
    return 0;
}


*编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。在编写这个程序的时候要使这个程序能够处理的输入行的长度没有限制。*

#include <stdio.h>
int main()
{
    int ch = 0;
    int line = 1;
    int flag = 1;
    while ((ch = getchar()) != EOF)
    {
        if (flag)          /*这题的思路就是设计一个开关flag,当没有输入换行符时,开
        {                     关打开,也就是输出一个行号,输完之后置成0关上,当输入换行符
            printf("%d", line); 时再打开flag,输出行号*/
            line++;
            flag = 0;
        }
        if (ch == '\n')
            flag = 1;
        putchar(ch);
    }
    system("pause");
    return 0;
}

你可能感兴趣的:(c,折半,程序,思路,逻辑性)