学习记录第八天

二分法


int main(void)
{
    int a[] = {1,-2,3,-4,5,-6,7,8,-9,0};
    int n;
    scanf("%d",&n);
    int len = sizeof(a) / sizeof(a[0]);
#先进行排序
    int i, j;
    for(j = len - 1;j > 0;--j)
    {
        for(i = 0;i < j;++i)
        {
            if(a[i] > a[i + 1])
            {
                int t;
                t = a[i];
                a[i] = a[i + 1];
                a[i + 1] = t;
        
            }
        }
    }  

    for(i = 0;i < len;++i)
    {
        printf("%d,",a[i]);
    }
    printf("\b \n");
#取中指和所找的数进行比较
    int begin,end,mid;
    begin = 0;
    end = len - 1;
    while(begin <= end)
    {
        mid = (begin + end)/2;
        if(a[mid] > n)
        {
            end = mid - 1;
        }
        else if(a[mid] < n)
        {
            begin = mid + 1;

        }
        else
        {
            break;
        }
    }
    if(begin <= end)
    {
        printf("found index%d = %d\n", mid,a[mid]);
    }
    else
    {
        printf("not found\n");
    }


    return 0;
}

字符数组

用来存放字符数据的数组是字符数组。

C语言用字符数组存放字符串,字符数组中的各元素依次存放字符串的各字符

存放一个字符串(每个数组元素存放一个字符)

定义格式: char 数组名[常量表达式];

                例如:char s[6];     //s数组具有6个元素,可以存放长度小于或等于5的字符串。

字符数组的初始化

如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的
如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现越界访问
如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度
如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')

用字符串常量对字符数组初始化

例如:(1)char str[6]={"CHINA"};

           (2)char str[6]="CHINA";            //省略{}

           (3)char str[ ]="CHINA";            // 省略长度值

           (4)char c[12]={"HOW ARE YOU"};  

             (5)   char c[ ]={'H','O','W',' ','A','R','E',' ','Y','O','U','\0'};  

输入与输出

输入:

scans",s);输入不能带空格,回车,TAB;

gets(s);char *gets(char *s);有越界访问的问题;

fgets(s)  char *fgets(char *s, int size, FILE *stream);

例:fgets(s,sizeof(s) / sizeof(s[0]),stdin);

输出:

puts(字符数组)

向显示器输出一个字符串(输出完,换行)

字符数组的基本操作:

1.有效字符:

int main(void)
{
    char s[100] = "Hello World!";
    int i = 0;
    while(s[i] != '\0')
    {
        ++i;
    }
    printf("%d\n",i);
    return 0;
}

可使用strlen(s),使用时调用#include<string.h>

2.拷贝:

int main(void)
{
    char s1[100] = "Hello World!";
    char s2[100];

    int i = 0;
    while(s1[i] !='\0')
    {
        s2[i] = s1[i];
        ++i;
    }
    s2[i] = '\0';
   
    puts(s2);
    return 0;
}

可使用strcpy(s2,s1);     s2为目标,s1为源;字符串的拷贝不能用 赋值运算符

3.连接

int main(void)
{
    char s1[100] = "Hello";
    char s2[100] = "World";
 
    int i = 0;
    while(s1[i] !='\0')
    {
        ++i;
    }
    int j = 0;
    while(s2[j] != '\0')
    {
        s1[i] = s2[j];
        ++i;
        ++j;
    }
    s1[i] = '\0';
    puts(s1);

    return 0;
}

可使用strcat(s1,s2);   把s2 加到s1里面

  • 符数组1必须足够大
  • 连接前,两串均以'\0'结束;连接后,串1的'\0'取消,新串最后加'\0'。

4.比较

int main(void)
{
    char s1[100] = "Hello!";
    char s2[100] = "Hello";
    int i = 0;
    while(s1[i] == s2[i] && s1[i] !='\0'&& s2[i] !='\0')
    {
        ++i;
    }
    printf("%d\n",s1[i] - s2[i]);

    return 0;
}

可使用strcmp(s1,s2);

s1>s2  返回结果大于0

s1=s2  返回结果等于0

s1<s2  返回结果小于0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值