C语言二进制转十进制
第一题是程序设计
设计一个函数fun,该函数的功能为将用户输入的二进制转换为十进制,比如111111则输出255,该程序最多只能接受32位长的字符。并且显示字符串s
解:2进制转换10进制在C语言中没有提供相应的方法,需要根据自己的实际情况写出相应的计算方法。二进制转换十进制有个通用公式,(1或0)*2^0(次方)+ (1或0)*2^1(次方)+……(1或0)*2^N(次方)比如:二进制1010转换十进制 == (1*2^0)+(0*2^1)+(1*2^2)+(0*2^3) = 1+0+4+0 = 5。通过这个通用公式,将二进制转换成为十进制。下列程序中results += (temp[i] - '0') * pow(2,i);则是使用到上面相应的公式。temp[i]-‘0’需要特别注意,因为在C语言中没有将字符char类型转换为int类型的方法,相应的转换需要自行运算,而在该程序中temp[i]-‘0’则是将char转换为int 的方法。因为在c语言中0的ASCII编码为48,而该程序中temp[i]中的值是以char类型存在的将char类型直接转换为int类型在C语言中则是进行ASCII编码的运算所以,当temp[i]中的值等于‘1’的时候直接转换为int类型后的值变为49,当减去48时才能得到我们需要的正确int类型的数字1,相同道理程序中我们必须将temp[i]的值减去‘0’则是减去48。以下给出相应的程序,该程序使用win-TC编写测试通过。 #include "stdio.h"
//需要导入math.h文件 math.h文件是用作数学运算的系统提供的类库文件
#include "math.h"
main()
{
//声明相应变量,isTrue用作记录是否退出程序“y”退出“n“继续
//temp[32]用作记录用户输入字符串
char isTrue,temp[32];
//运用do-while 循环控制是否继续,当运算正确后程序自动退出
do
{
printf("Please input a string.\n");
//gets() 函数由系统给出,用作输入字符数组,对应字符串
(temp); gets
("You input a string is %s. \n", temp); printf
//判断是否有内容输入
//strlen()系统给出函数,用作返回数组元素个数,返回元素不回空的个数
if (strlen(temp) <= 0)
{
printf("Error! input length less than 0.\n");
}
else
{
//判断输入字符是否过长,超过32位,是则重新输入
if (strlen(temp) > 32)
{
printf("Error! input length than 32.\n");
//当字符串长度超过32时 isTrue等于‘y’则,重新输入
isTrue = 'y';
}
else
{
// 以下算法通过 二进制转换十进制公式得来
int i = 0,results = 0;
//循环得出输入字符个数,根据个数计算相应的值
for (i; i < strlen(temp); i ++)
{
//将计算的值累加得到最终结果
// 注意pow(2,i)函数,该函数用作计算某个数的N次方这里计算2的i次方
(2,i); results += (temp[i] - '0') * pow
}
printf("OK! System exit. %d\n",results);
isTrue = 'n';
}
}
//当isTrue 等于 ‘y’的时候说明输入类容,或者计算有错,返回重新输入
}while (isTrue == 'y');
getch();
}
第二题是选择
Int {black=1,red,green,blue};
int c1 ,c2;
C1=red;
C2=green;
Printf(“%d,%d”,c1,c2);
A.2,3 b。1,2 c。1,1 d。-1,0
解:选择A。Int 是定义的一个枚举(去查看相关枚举的API文档),当枚举中的值给出的元素未赋初值时,枚举中的值由0开始,也就是枚举中第一个元素的值是0.(black的值为0),当枚举中的元素 赋有初值后,枚举中的元素值有赋有值的开始,比如Int中的元素black的值等于1时,red等于2,green等于3,blue等于4。如果未赋初值也就是说这里的Int中的black没有等于1,那么black的值就等于0 ,red等于1,green等于2,blue等于3。 Int {black=1,red,green,blue};中分别个元素的值依次为:1,2,3,4。
Int {black,red,green,blue};中分别个元素的值依次为:0,1,2,3