用C语句实现 x是否为2的若干次的判断
void main()
{
int x;
printf("please enter x= ");
scanf("%d",&x)
printf("%c\n",x & (x-1) ? ‘no’:'yes');
}
如:
-
x = 4 ( 二进制 :100 )
x - 1 = 3 ( 二进制 :011 )
x & ( x - 1 ) = 100 & 011 = 000 条件为假,输出 ‘ yes ’ -
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
二分法查找值适合已经排号序的队列