c语言把一个结构体中带小数点的字符串中的前两位和后面的位分隔开变成两个数,并用这两个数进行运算,帮我写一下代码
时间: 2023-04-03 08:02:41 浏览: 86
好的,以下是代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct my_struct {
char str[20];
};
int main() {
struct my_struct s;
float num1, num2;
char *token;
printf("请输入带小数点的字符串:");
scanf("%s", s.str);
token = strtok(s.str, ".");
num1 = atof(token);
token = strtok(NULL, ".");
num2 = atof(token);
printf("分隔后的两个数为:%f 和 %f\n", num1, num2);
printf("它们的和为:%f\n", num1 + num2);
return 0;
}
```
以上代码中,我们定义了一个结构体 `my_struct`,其中包含一个字符串成员 `str`。我们通过 `scanf` 函数从用户处获取一个带小数点的字符串,并将其存储到结构体成员 `str` 中。
接着,我们使用 `strtok` 函数将字符串按照小数点进行分隔,并将分隔后的两个子串转换为浮点数类型的变量 `num1` 和 `num2`。最后,我们输出这两个数以及它们的和。
希望这个代码能够帮到你!
相关问题
c语言第一行输入2个正整数n和k,分别表示计算的人数和课程数目; 第二行k个以空格分隔的实数,依次表示k门课的学分; 其后n行,依次表示n个同学的成绩,每行k个以空格分隔的实数。 输出格式: 每行输出一个同学的学分绩点,小数点后保留3位小数。
在C语言中,你可以按照以下步骤编写程序来解决这个问题:
1. 首先,使用`scanf()`函数从标准输入读取两个整数n和k,代表人数和课程数目。例如:
```c
int n, k;
scanf("%d %d", &n, &k);
```
2. 然后,读取k门课程的学分。这里也用`scanf()`,但是格式字符串需要包含浮点数:
```c
double course_scores[k];
for (int i = 0; i < k; i++) {
scanf("%lf", &course_scores[i]);
}
```
3. 接着,使用循环读取每个同学的成绩,并计算学分绩点。可以假设有一个结构体`Student`来存储学生的信息,包括姓名或其他标识符以及成绩数组。对每位同学,遍历其成绩数组,将分数除以学分,再乘以100得到绩点(四舍五入到三位小数)。例如:
```c
typedef struct {
// 假设每位同学有姓名和成绩数组
char name[50];
double grades[k];
} Student;
// 对于每位同学
for (int student_index = 0; student_index < n; student_index++) {
Student students[1]; // 为了简化,假定只有一个学生
scanf("%s", students[student_index].name); // 读取姓名
for (int i = 0; i < k; i++) {
scanf("%lf", &students[student_index].grades[i]);
double grade_point = students[student_index].grades[i] / course_scores[i] * 100.0f;
printf("%.3f\n", grade_point);
}
}
```
4. 最后,记得处理输入错误并确保正确关闭文件流,避免资源泄露。
用学语言写一个学生成绩管理系统将信息存到txt文件中
好的,以下是一个使用C语言编写的学生成绩管理系统,可以将学生的姓名和成绩信息保存到txt文件中:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STUDENT_NUM 20 // 最大学生数
#define FILENAME "students.txt" // 保存学生信息的文件名
// 学生结构体
typedef struct {
char name[20]; // 姓名
float score; // 成绩
} Student;
int main() {
Student students[MAX_STUDENT_NUM];
int num = 0; // 学生数
// 读取学生信息
printf("请输入学生信息(最多%d个),输入exit结束输入\n", MAX_STUDENT_NUM);
while (num < MAX_STUDENT_NUM) {
printf("请输入第%d个学生的姓名和成绩,用空格分隔:", num + 1);
// 从键盘读取学生姓名和成绩
if (scanf("%s%f", students[num].name, &students[num].score) != 2) {
break;
}
num++;
}
// 保存学生信息到文件
FILE *fp;
fp = fopen(FILENAME, "w");
if (fp == NULL) {
printf("无法打开文件 %s\n", FILENAME);
exit(1);
}
for (int i = 0; i < num; i++) {
fprintf(fp, "%s %.2f\n", students[i].name, students[i].score);
}
fclose(fp);
printf("学生信息已保存到文件 %s 中!\n", FILENAME);
return 0;
}
```
程序中,学生信息通过一个结构体来存储,每个结构体包含学生的姓名和成绩。程序从键盘读取学生信息,最多读取20个学生,读取完成后将学生信息保存到指定的文件中。在保存信息时,使用`fprintf()`函数将每个学生的姓名和成绩写入文件中。
需要注意的是,使用`fprintf()`函数将浮点数写入文件时,需要指定精度,否则会出现一些小数位的误差。在本程序中,使用了`%.2f`格式化字符串将浮点数输出为小数点后保留两位的形式。
阅读全文