编写程序exp7_3.c,从键盘读入一个字符串,去掉其中所有的空格得到一个新串后再输出(只能定义一个字符数组,不可以定义两个字符数组,可以根据编程需要定义字符指针以及其他变量)。
时间: 2023-04-26 22:02:49 浏览: 174
以下是exp7_3.c程序的代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
int main()
{
char str[MAX_LEN];
char *p = str;
int i;
printf("请输入一个字符串:");
fgets(str, MAX_LEN, stdin);
for (i = ; i < strlen(str); i++)
{
if (str[i] != ' ')
{
*p = str[i];
p++;
}
}
*p = '\';
printf("去掉空格后的字符串为:%s\n", str);
return ;
}
```
程序的思路是:先定义一个字符数组str和一个字符指针p,用fgets函数从键盘读入一个字符串存入str中,然后遍历str中的每个字符,如果不是空格就将其存入p所指向的位置,最后在p的末尾加上'\',得到一个新的字符串。最后输出新的字符串即可。
相关问题
c语言【问题描述】该科学记数法表示的数字一般由以下几部分构成: 1.底数部分是一个整数或小数,可能带有前缀的“+”、“-”号。如果底数带有小数点,则小数点前后必有数字。 2.字母“e” 3.指数部分是一个整数,也可能带有前缀的“+”、“-”号。 编写一个程序,将用科学记数法输入的一个数(字符串)转换成实数。 【输入形式】控制台输入用科学记数法表示的一个数,是不含空格的一行字符串。 【输出形式】输出该字符串代表的浮点数值,以默认的“%f”格式输出,保留默认的小数位数。 【样例输入】234.85e-2 【样例输出】2.348500
以下是一个简单的C语言程序实现该功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
char str[100];
double base, result;
int exp, i, j, len, sign;
printf("请输入一个科学记数法表示的数:");
scanf("%s", str);
len = strlen(str);
sign = 1;
if (str[0] == '-')
{
sign = -1;
i = 1;
}
else if (str[0] == '+')
{
i = 1;
}
else
{
i = 0;
}
// 处理底数部分
base = 0;
while (i < len && str[i] != 'e' && str[i] != 'E')
{
if (str[i] == '.')
{
j = i + 1;
while (j < len && str[j] >= '0' && str[j] <= '9')
{
base = base * 10 + (str[j] - '0');
j++;
}
exp = i - j;
}
else
{
base = base * 10 + (str[i] - '0');
}
i++;
}
// 处理指数部分
exp = 0;
if (i < len && (str[i] == 'e' || str[i] == 'E'))
{
i++;
if (str[i] == '-')
{
sign *= -1;
i++;
}
else if (str[i] == '+')
{
i++;
}
while (i < len && str[i] >= '0' && str[i] <= '9')
{
exp = exp * 10 + (str[i] - '0');
i++;
}
}
result = sign * base * pow(10, exp);
printf("%.6f\n", result);
return 0;
}
```
程序的思路是先读入字符串,然后按照科学记数法的格式解析出底数和指数部分,最后计算得到实数。需要注意的是,底数部分可以包含小数点,指数部分前面可以有正负号。程序中使用了一些C标准库中的函数,比如`strlen`、`pow`等。
从标准输入中读入一个整数算术运算表达式,如24 / ( 1 + 2 + 36 / 6 / 2 - 2) * ( 12 / 2 / 2 )= ,计算表达式结果,并输出。 要求: 1、表达式运算符只有+、-、*、/,表达式末尾的=字符表示表达式输入结束,表达式中可能会出现空格; 2、表达式中会出现圆括号,括号可能嵌套,不会出现错误的表达式; 3、出现除号/时,以整数相除进行运算,结果仍为整数,例如:5/3结果应为1。 4、要求采用表达式树来实现表达式计算。5.要求使用C语言,不可以使用C++语言
以下是使用C语言实现表达式树计算的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
/* 表达式树节点结构体 */
typedef struct node {
char op; // 运算符或操作数
struct node *left; // 左子节点
struct node *right; // 右子节点
} Node;
/* 创建节点 */
Node *createNode(char op) {
Node *node = (Node *)malloc(sizeof(Node));
node->op = op;
node->left = NULL;
node->right = NULL;
return node;
}
/* 销毁节点及其子节点 */
void destroyNode(Node *node) {
if (node == NULL) {
return;
}
destroyNode(node->left);
destroyNode(node->right);
free(node);
}
/* 构建表达式树 */
Node *buildExpressionTree(char *exp, int start, int end) {
Node *root = NULL;
Node *curNode = NULL;
Node *lastNode = NULL;
int i, j, k, level, minLevel;
/* 如何是一个数,则直接创建节点返回 */
if (exp[start] >= '0' && exp[start] <= '9') {
root = createNode(exp[start]);
return root;
}
/* 寻找运算符 */
level = 0;
minLevel = 10000;
for (i = start; i <= end; i++) {
if (exp[i] == '(') {
level++;
} else if (exp[i] == ')') {
level--;
} else if (level == 0 && (exp[i] == '+' || exp[i] == '-' || exp[i] == '*' || exp[i] == '/')) {
if (level <= minLevel) {
minLevel = level;
j = i; // 记录运算符位置
}
}
}
/* 如果没有找到运算符,则表达式应该被括号包含 */
if (j == 0) {
return buildExpressionTree(exp, start + 1, end - 1);
}
/* 创建根节点 */
root = createNode(exp[j]);
/* 递归构建左右子树 */
root->left = buildExpressionTree(exp, start, j - 1);
root->right = buildExpressionTree(exp, j + 1, end);
return root;
}
/* 计算表达式树 */
int evaluateExpressionTree(Node *root) {
int left, right;
if (root == NULL) {
return 0;
}
/* 如果是操作数,则直接返回该数值 */
if (root->op >= '0' && root->op <= '9') {
return root->op - '0';
}
/* 递归计算左右子树的值 */
left = evaluateExpressionTree(root->left);
right = evaluateExpressionTree(root->right);
/* 根据运算符计算表达式的值 */
switch (root->op) {
case '+':
return left + right;
case '-':
return left - right;
case '*':
return left * right;
case '/':
return left / right;
}
return 0;
}
int main() {
char exp[100];
Node *root = NULL;
int result;
/* 从标准输入中读入表达式 */
scanf("%[^\n]", exp);
/* 构建表达式树 */
root = buildExpressionTree(exp, 0, strlen(exp) - 1);
/* 计算表达式的值 */
result = evaluateExpressionTree(root);
/* 输出结果 */
printf("%d\n", result);
/* 销毁表达式树 */
destroyNode(root);
return 0;
}
```
注意,为了方便读入整个表达式,代码中使用了 `scanf()` 函数的 `%[^\n]` 格式化字符串,表示读入除换行符以外的所有字符。此外,代码中没有进行输入错误处理,实际应用中应该对输入进行检查。
阅读全文