题目
- 从键盘上输入字符,将小写字母转换成大写字母。输入“ctl + z” 结束 。
本题思路是小写字符和大写字母的ASCII相减值是32 - 进制转换(本题不用考虑负数)。(计组的必考内容,难度较大,尽力而为)
(1) 将十进制数转换成二进制数。输入十进制数输出对应的二进制数,输入“ctl + z”结束。
本题思路是10进制不断的除2
(2) 将二进制转换成十进制数。输入二进制数输出对应的十进制数,输入“ctl + z”结束。
本题的思路是最低位乘以2的零次幂,依次每一位乘以2的1次幂,2次幂,一直到最高
(3) 将十进制数转换成十六进制数。输入十进制数输出对应的十六进制数。输入“ctl + z” 结束。
本题思路是10进制不断的除16
(4) 将十六进制数转换成十进制数。输入十六进制数输出对应的十进制数。输入“ctl + z” 结束。
本题思路是最低位乘以16的零次幂,依次每一位乘以16的1次幂,2次幂,一直到最高
代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define N 2
#define M 16
//小写转大写
void lower_to_upper()
{
char ch;
while(scanf("%c",&ch)!=EOF)
{
if(ch!='\n')
{
printf("%c\n",ch-32);
}
}
}
//十转二
void ten_to_two()
{
int decimal,i;
int binary[50]={0};
while(scanf("%d",&decimal)!=EOF)
{
i=0;
while(decimal>0)
{
binary[i]=decimal%N;
decimal=decimal/N;//得到商
i++;
}
for(i=i-1;i>=0;i--)
{
printf("%d",binary[i]);
}
printf("\n");
}
}
//二转十
int two_to_ten()//当返回值不是void时,要注意返回(return)一个值
{
char ch;
int i=0,decimal,j,bw;
int binary[50];
while(scanf("%c",&ch)!=EOF)
{
if(ch=='\n')
{
break;
}
binary[i]=ch-'0';//变为数值类型
i++;
}
decimal=0;
bw=1;
for (j = i-1; j >=0; j--) {
decimal += binary[j] * bw;
bw = bw*N;
}
printf("%d\n",decimal);
return 0;
}
//十转十六
void ten_to_hex()
{
int decimal,i;
int binary[50]={0};
while(scanf("%d",&decimal)!=EOF)
{
i=0;
while(decimal>0)
{
binary[i]=decimal%M;
decimal=decimal/16;//得到商
i++;
}
for(i=i-1;i>=0;i--)
{
if(binary[i]>=10)
{
printf("%c",binary[i]-10+'A');
}else{
printf("%c",binary[i]+'0');
}
}
printf("\n");
}
}
//十六转十
int hex_to_ten()//当返回值不是void时,要注意返回(return)一个值
{
char ch;
int i=0,decimal,j,bw;
int binary[50];
while(scanf("%c",&ch)!=EOF)
{
if(ch=='\n')
{
break;
}
if(ch >= 65 && ch <=70)
{
binary[i]=ch-'A'+ 10 ;
}else{
binary[i]=ch-'0';//变为数值类型
}
i++;
}
decimal=0;
bw=1;
for (j = i-1; j >=0; j--) {
decimal += binary[j] * bw;
bw = bw*M;
}
printf("%d\n",decimal);
return 0;
}
int main()
{
//lower_to_upper();
//ten_to_two();
//two_to_ten();
//ten_to_hex();
hex_to_ten();
system("pause");
return 0;
}
结果

京公网安备 11010502036488号