c practice 1.0

用C语句实现 x是否为2的若干次的判断
void main()
{
	int x;
	printf("please enter x= ");
	scanf("%d",&x)
	printf("%c\n",x & (x-1) ? ‘no’:'yes');
}

如:

  1. x = 4 ( 二进制 :100 )
    x - 1 = 3 ( 二进制 :011 )
    x & ( x - 1 ) = 100 & 011 = 000 条件为假,输出 ‘ yes ’

  2. x = 5 ( 二进制 : 101 )
    x - 1 = 4 ( 二进制 : 100 )
    x & ( x - 1 ) = 101 & 100 = 100 条件为真,输出 ‘ no ’

编写一个C函数,将给定的字符串转换成整数
12 #include <stdio.h>
13 #include <string.h>
14 #include <stdlib.h>
15 #include <strings.h>
16 
17 #define N 32
18 /***编写函数,实现将给定的一个字符串转换成整数***/
19 
20 int invert(char *str);
21 
22 int main()
23 {
24         char s[N]="12653789";
25 
26         int num = invert(s);
27         printf("%d\n",num);
28         return 0;
29 }
30 
31 int invert(char *str)
32 {
33         int num = 0;
34         while (*str != '\0'){
35 
36                 int digital = *str - '0';
37                 num = num * 10 + digital;//将上一位由字符数字转换过来的数字变成十位、百位、千位...
38                 str = str + 1;
39         }
40 
41         return num;
42 }
编写一个 C 函数,该函数将给定的一个整数转换成字符串
 12 #include <stdio.h>
 13 #include <string.h>
 14 #include <stdlib.h>
 15 #include <strings.h>
 16 
 17 /***编写一个 C 函数,该函数将给定的一个整数转换成字符串***/
 18 char * LntToStr( int num ,char * pval);
 19 
 20 int main()
 21 {       
 22         int num;
 23         printf("please putin a number>");
 24         scanf("%d",&num);
 25         
 26         LntToStr(num,)
 27         return 0; 
 28 }
 29 
 30 char * LntToStr( int num ,char * pval)
 31 {
 32         
 33         char strval[100];
 34         char *p = strval;
 35         int i,j; 
 36         int val0 = num;
 37         int val1 = 0;
 38         for (i = 0;i < 100;i++){
 39 
 40                 val1 = val0 % 10;
 41                 val0 = val0 / 10;
 42                 strva[i] = val1 + '0';// '0' = 48
 43                 if (val0 < 10){
 44 
 45                         i++;
 46                         strval[i] = val0 + 48;
 47                         break;
 48                 }
 49         }
 50 
 51         for (j = 0; k <= i;j++)  //倒置
 52                 pval[j] = strval[i-j];
 53         pval[j] = '\0';
 54 
 55         return p;
 56 }

二分法查找
12 #include <stdio.h>
 13 #include <string.h>
 14 #include <stdlib.h>
 15 #include <strings.h>
 16 
 17 #define N 6
 18 
 19 /***二分法查找***/
 20 //算法:
 21 /*1. 将数据从小到大或者从大到小的顺序排列*/
 22 /*2. 将被查找的数据与中间数据左比较*/
 23 /*3. 若刚好等于中间数字,则已经找到;若比中间数大,则在后半部份;反之则在前半部份*/
 24 /*4. 重复上面2.3.的步骤,直到最后一个数据*/
 25 /*5. 直到找到该数据并返回其位置,若直到最后一个数据页每找到,则提示没有找到该数据*/
 26 
 27 int * sort(int *p,int length);
 28 int find(int *q,int length,int find_data);
 29 
 30 int main()
 31 {
 32         int a[N] = {0};
 33         int i = 0;
 34         printf("please iuput  %d numbers>",N);
 35         for (i = 0;i < N ;i++){
 36 
 37                 scanf("%d",&a[i]);
37                 scanf("%d",&a[i]);
 38         }
 39 
 40         int key;
 41         printf("please input the number you want to  search>");
 42         scanf("%d",&key);
 43 
 44 //      int lean = sizeof(a) / sizeof(a[0]);
 45         int *p = sort(a,N);
 46 
 47         printf("numbers by sort :\n");
 48         for (i = 0;i < N ;i++){
 49 
 50                 printf("%d   ",p[i]);
 51         }
 52         puts(" ");
 53 
 54         int ret = find (p,N,key);
 55         printf("%d :finded pos = %d\n",key,ret);
 56 
 57         return 0;
 58 }
 59 
 60 int * sort(int *p,int len)
 61 {
 62         int *q = p;
 63         int i,j;
 64         for (i = 0 ;i < len-1;i++){
 65 
 66                 for (j = 0;j < len -1 -i;j++){
 67 
 68                         if (p[j] > p[j+1]){
 69 
 70                                 p[j] ^= p[j+1];
 71                                 p[j+1] ^= p[j];
 72                                 p[j] ^= p[j+1];
 73                         }
 74                 }
 75         }
 76 
 77         return q;
 78 }
 79 
 80 int find(int *q,int len,int key)
 81 {
 82         int front,mid,rear;
 83         front = 0;
 84         rear = len - 1;
 85 
 86         while (front <= rear){
 87 
 88                 mid = (front +rear) / 2;
 89                 if (key == q[mid])
 90                         return mid;
 91                 if (key > q[mid])
 92                         front = mid + 1;
 93                 else
 94                         rear = mid -1;
 95         }
 96         return -1;
 97 }
 98 

在这里插入图片描述

二分法查找值适合已经排号序的队列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值