第一题
#define _CRT_SECURE_NO_WARNINGS
//第十五章,编程练习题,第一题
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int printStrInt(char* str);
char* fget_s(char* st, int n);
int main(void)
{
int ch;
char str[100];
printf("请输入一个二进制字符串:");
fget_s(str, 100);
ch=printStrInt(str);
printf("输入的字符串%s\n值为:%d\n", str, ch);
return 0;
}
//求值函数
int printStrInt(char* str)
{
int i;
int len;
int wei = 1; //值
int sum=0; //总值
if (!(len = strlen(str)))
{
fprintf(stderr, "长度为0");
return 0;
}
for (i = len-1; i >= 0; i--, wei <<= 1)
{
if (str[i] == '1')
sum += wei;
else if (str[i] == '0')
;
else
{
fprintf(stderr, "输入的是二进制字符串,不符合规则");
exit(EXIT_FAILURE);
}
}
//sum^=80;
return sum;
}
char* fget_s(char* st,int n)
{
char* find;
char* str_val;
str_val = fgets(st, n, stdin);
if (str_val)
{
find = strchr(st, '\n');
if (find)
*find = '\0';
else
while (getchar() != '\n')
continue;
}
return str_val;
}
这题按照例子中的传递"01001001"(73)应该在函数中可以用一个按位取反的运算与"01010000"(80)运算可的返回值25,
第二题
#define _CRT_SECURE_NO_WARNINGS
//第十五章,编程练习题,第二题
//命令行参数读取两个二进制字符串,使用运算符,并以二进制打印结果
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ZERO '0'
#define ONE '1'
int main(int argc, char* argv[])
{
int count, i;
unsigned int wei = 1;
unsigned int num;
unsigned int sum = 0;
unsigned int zongSum[2];
if (argc != 3)
{
fprintf(stderr, "命令行参数不正确,请从新输入:");
exit(EXIT_FAILURE);
}
for (count = 1; count < argc; count++)
{
num = strlen(argv[count]);
for (i = num - 1, sum = 0, wei = 1; i >= 0; i--)
{
if (argv[count][i] == ZERO)
;
else if (argv[count][i] == ONE)
sum += wei;
else
continue;
wei <<= 1;
}
zongSum[count - 1] = sum;
}
printf("输入的字符串为\"%s\",\"%s\",转换为数值为%u,%u,\n使用~运算符为%u,%u\n",
argv[1], argv[2], zongSum[0], zongSum[1], ~zongSum[0], ~zongSum[1]);
printf("使用&运算符为%u\n", zongSum[0] & zongSum[1]);
printf("使用|运算符为%u\n", zongSum[0] | zongSum[1]);
printf("使用^运算符为%u\n", zongSum[0] ^ zongSum[1]);
return 0;
}
第三题
#define _CRT_SECURE_NO_WARNINGS
//第十五章,编程练习题,第三题
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int puts_wei(int num);
int main(void)
{
int a = 15;
int num;
num=puts_wei(a);
printf("%d", num);
return 0;
}
int puts_wei(int num)
{
int wei = 1;
int i;
for (i = 0; num >= 1; num >>= 1)
{
(wei& num) == 1 ? i++ : i;
}
return i;
}
第四题
#define _CRT_SECURE_NO_WARNINGS
//第十五章,编程练习题,第四题
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int puts_wei(int num, int wei);
int main(void)
{
int a, b;
int i;
printf("请输入值:");
scanf("%d", &a);
printf("请输入位数(0-31)之间:");
scanf