c primer plus 第十五章课后编程2题

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define SIZE 33
int int_values(const char *pbin); // 把接受的参数转换为int 数值返回给主函数
char *alien_character(int number); // 把int 数值转换为二进制数组返回主函数

int main(int argc, const char * argv[])
{
int number,i,j;
int num[2];
if(argc>3)
{
printf(“Usage: %s filename\n”,argv[0]);
exit(1);
}
for(i=1, j=0;i<argc;i++,j++)
{
num[j]=int_values(argv[i]);

}
number=num[0] ^ num[1];
printf("%s   ^   %s \n等于:%s\n\n",argv[1],argv[2],alien_character(number));
number=num[0] & num[1];
printf("%s   &   %s \n等于:%s\n\n",argv[1],argv[2],alien_character(number));
number=num[0] | num[1];
printf("%s   |   %s \n等于:%s\n\n",argv[1],argv[2],alien_character(number));
number=~num[0];
printf("%s   ~  等于 %s\n\n", argv[1],alien_character(number));
number=~num[1];
printf("%s   ~  等于 %s\n\n", argv[2],alien_character(number));
return 0;

}
int int_values(const char *pbin)
{
int number = 0 ;
//数组pbin[i]==’\0’ 也就是空字符 结束循环
for (int i = 0 ; pbin[i] ; i++)
{
number <<= 1 ;
number |= (pbin[i] - ‘0’);//把字符转换成二进制1或0赋值给当前number的0位

}

return number ;

}

char *alien_character(int number)
{
static char p[SIZE]={’\0’}; //如果使用动态变量的话堆栈上会出问题,所以直接声明为静态变量。
int i;
int n=number;
for(i=SIZE-2;i>=0;i–,n>>=1)
p[i]=(01 & n)+‘0’;
p[SIZE-1]=’\0’;

return p;

}

发布了85 篇原创文章 · 获赞 1 · 访问量 1889

猜你喜欢

转载自blog.csdn.net/Tekkenwxp/article/details/103129627