分类 编程练习 下的文章

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。

程序源代码:

#include "stdio.h"

int main() 
{
    int i, j, k;

    printf("\n");

    for (i = 1; i < 5; i ++)
        /*以下为三重循环*/ 
        for (j = 1; j < 5; j ++)
            for (k = 1; k < 5; k ++)
            {
                if (i != k && i != j && j != k)
                    /*确保i、j、k三位互不相同*/ 
                    printf("%d,%d,%d\n", i, j, k);
            }
}

题目:学习使用按位取反~。   

程序分析:~0=1; ~1=0;

取反的值和原值和为 1 / -1,为 1 的情况是末位为 1,首位为 0;或末位为 0,首位为 -1;-1 的情况是末位为 1,首位为 -1;或,末位为 0,首位为 1;如下表:

去反后的值与原值的和首位(符号位:1为负,0为正)末尾
-111
-100
110
101

程序源代码:

#include "stdio.h" 

int main() 
{ 

    int a, b;

    a = 233;

    b = ~ a;

    printf("\40: The a's 1 complement(decimal) is %d \n", b);

    a = ~ a;

    printf("\40: The a's 1 complement(hexidecimal) is %x \n", a);
} 

题目:取一个整数a从右端开始的4~7位。

程序分析:可以这样考虑:

  1. 先使a右移4位。
  2. 设置一个低4位全为1,其余全为0的数。可用~(~0<<4)
  3. 将上面二者进行&运算。
  4. 注:printf 和 scanf 中的 %o 为输入输出八进制的数字。

程序源代码:

#include "stdio.h" 

int main()
{
    unsigned a, b, c, d;

    scanf("%o", &a);

    b = a >> 4;

    c =~(~0 <<4);

    d = b & c;
    
    printf("b = %o\n", b);
    
    printf("c = %o\n", c);

    printf("%o\n%o\n", a, d);
}

题目:学习使用按位异或 ^ 。   

程序分析:0^0=0; 0^1=1; 1^0=1; 1^1=0

程序源代码:

#include "stdio.h"

int main()
{

    int a, b;

    a = 077;

    b = a ^ 3;

    printf("\40: The a & b(decimal) is %d \n", b);

    b ^= 7;

    printf("\40: The a & b(decimal) is %d \n", b);
}

题目:学习使用按位或 | 。

程序分析:0|0=0; 0|1=1; 1|0=1; 1|1=1            

程序源代码:

#include "stdio.h"

int main() 
{ 

    int a, b;

    a = 077;

    b = a | 3;

    printf("\40: The a & b(decimal) is %d \n", b);

    b |= 7;

    printf("\40: The a & b(decimal) is %d \n", b);
}