题目
- 从键盘上输入字符,将小写字母转换成大写字母。输入“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; }
结果