用C语言编写代码,输入一个实数,求整数部分位数
时间: 2023-03-16 22:43:53 浏览: 262
我可以提供一个简单的示例代码:int count = 0; double number; printf("请输入一个实数:"); scanf("%lf", &number); int int_part = (int)number; while(int_part > 0) { count++; int_part /= 10; } printf("该实数的整数部分位数为%d位。", count);
相关问题
c语言 从键盘输入两个正实数,位数不超过200,试判断这两个实数是否完全相等。注意输入的实数整数部分可能有前导0,小数部分可能有末尾0。
在C语言中,判断两个实数是否完全相等,我们需要先读取用户的输入,并将其转换为浮点数。由于涉及到字符串处理和浮点数比较,可以按照以下步骤操作:
1. 使用`scanf`函数从键盘读入两个字符串,分别表示两个实数,格式化字符串可以指定最多读取200个字符,例如:`char str1[201], str2[201];`
2. 确保输入的是有效的数字,需要检查每个字符串是否只包含数字(包括'.'作为小数点)以及可能的前导和尾随的零。可以遍历字符串,如果遇到非数字字符则跳出循环。
3. 将字符串转换为浮点数。C语言本身没有直接将字符串转为浮点的函数,但可以借助`strtol`函数获取整数部分,然后加上小数点后的部分。需要注意处理小数点的位置和精度。
4. 比较两个浮点数是否相等。由于浮点数可能会有微小的精度误差,通常我们使用`fabs(a - b) < ε`这样的条件来判断,其中`a`和`b`是待比较的浮点数,`ε`是一个非常小的正数。
下面是一个简单的示例代码片段:
```c
#include <stdio.h>
#include <string.h>
#include <math.h>
int is_number(char *s) {
while (*s && *s >= '0' && *s <= '9') s++;
return (*s == '.') || !*s;
}
double atof_custom(char *str) {
int pos = 0, neg = 0;
if (*str == '-') {
neg = 1;
str++;
}
while (is_number(str)) {
pos *= 10;
pos += (str[0] - '0');
str++;
}
if (*str == '.') {
str++;
double frac = 0.1;
while (is_number(str)) {
frac *= 10;
frac += (str[0] - '0');
str++;
}
return neg ? -frac + pos : pos + frac;
} else {
return neg ? -pos : pos;
}
}
int main() {
char str1[201], str2[201];
printf("请输入第一个实数(最多200位):");
fgets(str1, sizeof(str1), stdin);
str1[strcspn(str1, "\n")] = '\0'; // 移除换行符
printf("请输入第二个实数(最多200位):");
fgets(str2, sizeof(str2), stdin);
str2[strcspn(str2, "\n")] = '\0';
double a = atof_custom(str1);
double b = atof_custom(str2);
if (fabs(a - b) < DBL_EPSILON) {
printf("两个实数完全相等。\n");
} else {
printf("两个实数不完全相等。\n");
}
return 0;
}
```
用c语言编写(4)编写程序,输入-个十进制整数,输出其对应的八进制整数、十六进制整数。 (5)编写程序,输入两个实数,计算并输出它们的和、差、积、商(输出的数据保留2位小数)。 (6)编写程序,输入-一个小写字母,输出其对应的大写字母。 (7)编写程序,输入-一个3位数,计算并输出该数每位数的立方和。 (8)编写程序,输入-一个实数,计算并输出其平方根。 (9)编写程序,输入-一个学生的语文、数学、英语、物理成绩,计算并输出该学生的总成绩和平均成绩。
(4) 代码如下:
```c
#include <stdio.h>
int main() {
int decimal;
printf("请输入一个十进制整数:");
scanf("%d", &decimal);
printf("对应的八进制整数为:%o\n", decimal);
printf("对应的十六进制整数为:%x\n", decimal);
return 0;
}
```
(5) 代码如下:
```c
#include <stdio.h>
int main() {
double num1, num2;
printf("请输入两个实数,用空格隔开:");
scanf("%lf %lf", &num1, &num2);
printf("它们的和为:%.2lf\n", num1 + num2);
printf("它们的差为:%.2lf\n", num1 - num2);
printf("它们的积为:%.2lf\n", num1 * num2);
printf("它们的商为:%.2lf\n", num1 / num2);
return 0;
}
```
(6) 代码如下:
```c
#include <stdio.h>
int main() {
char lowercase, uppercase;
printf("请输入一个小写字母:");
scanf("%c", &lowercase);
uppercase = lowercase - 32; // ASCII码中,小写字母转成大写字母,需要减去32
printf("对应的大写字母为:%c\n", uppercase);
return 0;
}
```
(7) 代码如下:
```c
#include <stdio.h>
int main() {
int num, digit, sum = 0;
printf("请输入一个3位数:");
scanf("%d", &num);
digit = num % 10; // 取个位数
sum += digit * digit * digit;
num = num / 10; // 去掉个位数
digit = num % 10; // 取十位数
sum += digit * digit * digit;
num = num / 10; // 去掉十位数
digit = num % 10; // 取百位数
sum += digit * digit * digit;
printf("该数每位数的立方和为:%d\n", sum);
return 0;
}
```
(8) 代码如下:
```c
#include <stdio.h>
#include <math.h>
int main() {
double num;
printf("请输入一个实数:");
scanf("%lf", &num);
printf("它的平方根为:%.2lf\n", sqrt(num));
return 0;
}
```
(9) 代码如下:
```c
#include <stdio.h>
int main() {
double chinese, math, english, physics, total, average;
printf("请输入该学生的语文、数学、英语、物理成绩,用空格隔开:");
scanf("%lf %lf %lf %lf", &chinese, &math, &english, &physics);
total = chinese + math + english + physics;
average = total / 4;
printf("该学生的总成绩为:%.2lf\n", total);
printf("该学生的平均成绩为:%.2lf\n", average);
return 0;
}
```
阅读全文