7.8:输入一个4位数,输出这4个数字字符
7.10:输入一行字符,输出最长的单词
7.16:十六进制转十进制
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string>
/*输出数字字符,主要考察整型转字符型
方法为用0的ASCII码48加上对应的数字即可。
也可以使用itoa函数,用法是这样的:
itoa(数字,目标字符串,进制),
*/
void q7_8() {
int n, i = 3;
char str[4];
printf("请输如一个4位数:");
scanf_s("%d", &n);
printf("\n");
while (n) {
str[i] = (char)(n % 10 + 48);
n = n / 10;
i--;
}
for (i = 0; i < 4; i++) {
printf("%c ", str[i]);
}
}
//输出最长单词
void q7_10() {
int i, j, max = 0, count = 0; //i和j分别为单词首和尾标记
char str[256];
printf("输入字符串:\n");
fgets(str, 256, stdin);
for (i = j = 0; ; j++) {
if (str[j] != ' ' && str[j] != '\n') {
count++;
continue;
}
if (max < count)
max = count;//更新最大长度
count = 0;//还原计数
i = j + 1;//i更新为新的单词首
if (str[j] == '\n') { //检查是否该行文字结束
break;
}
}
printf("%d", max);
}
/*十六进制转十进制
因为十六进制包含ABCDEFF所以输出为字符类型
将每一位乘以6对应的指数阶相加即可。
*/
void q7_16() {
char str[20];
int i, n, sum = 0, temp;
printf("输入:\n");
fgets(str, 20, stdin);
n = strlen(str);
for (i = n - 2; i >= 0; i--) {//从最低位开始计算
if (str[i] >= 'A' && str[i] <= 'F') {
temp = int(str[i] - 'A') + 10;
}
else if (str[i] >= 'a' && str[i] <= 'f') {
temp = int(str[i] - 'a') + 10;
}
else if (str[i] >= '0' && str[i] <= '9'){
temp = int(str[i] - '0');
}else {
printf("输入错误\n");
exit(0);
}
sum += temp * (pow(16, n-2-i));
}
printf("%d", sum);
}
int main() {
//q7_8();
//q7_10();
q7_16();
system("pause");
return 0;
}
运行:
7.8
7.10
7.16