几道C语言编程题求正解!

1.在文本文件Comp.txt里有需要计算结果的整数算式,每个算式占一行且文件中有多个算式,运算类型只有“加法(+)”或者“减法(-)”且运算符前后至少有一个空格。计算这... 1.在文本文件Comp.txt里有需要计算结果的整数算式,每个算式占一行且文件中有多个算式,运算类型只有“加法(+)”或者“减法(-)”且运算符前后至少有一个空格。计算这些算式的结果并在屏幕上显示。
  单击此处下载程序运行时测试用的算式文件Comp.txt并保存到程序P321.C所在的文件夹且文件名保持不变。编程可用素材:printf("Line %03d: %5d + %-5d = %-6d\n"...、printf("Line %03d: %5d - %-5d = %-6d\n"...。
  程序的运行效果应类似地如图1所示。
Line 001: 123 + 556 = 679
Line 002: 300 - 215 = 85
Line 003: 1001 - 18976 = -17975
Line 004: 9123 + 5156 = 14279
图1 程序运行效果示例(使用系统提供的测试用算式文件Comp.txt)
2.在文本文件Comp.txt里有需要计算结果的整数算式,每个算式占一行且文件中有多个算式,运算类型只有“加法(+)”或者“减法(-)”且运算符前后至少有一个空格——但其中可能有空行和不符合要求的算式(但其行长肯定不超过200字节)。计算这些算式的结果并在屏幕上显示,空行不作任何处理,不符合要求的算式则显示Error!。
  单击此处下载程序运行时测试用的算式文件Comp.txt并保存到程序P322.C所在的文件夹且文件名保持不变。编程可用素材:printf("Line %03d: Error!\n"...、printf("Line %03d: %5d + %-5d = %-6d\n"...、printf("Line %03d: %5d - %-5d = %-6d\n"...。
  ▲ 提示:建议使用fgets读入一行到字符串、再使用sscanf从字符串中读,如此逐行处理!
  程序的运行效果应类似地如图1所示。
Line 001: 123 + 556 = 679
Line 002: 300 - 215 = 85
Line 004: 1001 - 18976 = -17975
Line 005: Error!
Line 007: 9123 + 5156 = 14279
Line 008: Error!
Line 009: Error!
Line 010: Error!
Line 011: 9901 + 355 = 10256
图1 程序运行效果示例(使用系统提供的测试用算式文件Comp.txt)
3.  方阵的主对角线之上称为“上三角”,设计一个用于填充n(n从键盘读入,约定其取值范围为3~20)阶方阵的上三角区域的程序。填充的规则是:使用1,2,3……的自然数列,从左上角开始,按照顺时针方向螺旋填充。输出时要求每个数据宽度为4、右对齐。编程可用素材:printf("Please input n: ")、printf("\nResult is:\n")、printf("%4d"...、printf("\n")。
  程序的运行效果应类似地如图1所示,图1中的第1个6是从键盘输入的内容。
Please input n: 6Result is:
1 2 3 4 5 6
15 16 17 18 7
14 21 19 8
13 20 9
12 10
11

图1 程序运行效果示例
展开
 我来答
一起沉默H
2013-12-19
知道答主
回答量:9
采纳率:0%
帮助的人:5.1万
展开全部
只做了第二道题,刚好我也在百度这道题。虽然我的代码不是最好的,思维也有点乱,但仅提供给众网友一个思路参考吧

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int a, b; /*算式中的两个操作数*/
int b1;
int i;
int flag1 = 0, flag2 = 0;//flag1表示含有非题目要求字符出现时的情况,flag2是指不含有+-符号的情况再针对其进行时空格行还是错误行的讨论
char buf[200]; /*输入缓冲,用于临时存放读入的文本*/
char op; /*运算符*/
int index = 0;//行数
FILE *fp = NULL;
fp = fopen("Comp.txt", "r");
if (fp == NULL)
{
printf("Error: Cannot open Comp.txt!\n");
//exit(1);
}

while(fgets(buf, 200, fp))//读一行数据,读到文件尾的时候,返回NULL,0,结束循环
//for(; !feof(fp);index++)
{
++index;
if (buf[0] == 10)//如果什么都没有的空行,直接跳到下一行的循环
{
continue;
}
for(i = 0; buf[i] != 10; i++)//判断字符是否符合要求
{
flag1 = 0;
if ((buf[i] <= '9' && buf[i] >= '0') || buf[i] == '+' || buf[i] == '-' || buf[i] == ' ' )//|| buf[i] == 10 || buf[i] == 0)
{
if (buf[i] == '+' || buf[i] == '-')
{
flag2 = 1;
}
}
else
{
printf("Line %03d: Error!\n", index);//不合要求
flag1 = 1;
break;
}
}
if (flag1 == 1)//不和要求的字符,跳到下一行
{
flag1 = 0;
continue;
}
if (flag2 == 0)//字符符合要求但是没有+-符号。判断其为空格行还是无运算行并作出相应反应
{
for(i = 0; buf[i] != 10; i++)
{
if (buf[i] != ' ')
{
printf("Line %03d: Error!\n", index);
break;
}
}
flag2 = 0;
continue;
}
sscanf(buf, "%d%s%d", &a, &op, &b);//把一行字符转化为a op b形式
if(op == '+')
{
b1 = b;
}
else
{
b1 = -b;
}
printf("Line %03d: %5d %c %-5d = %-6d\n", index, a, op, b, a+b1);//输出
flag2 = 0;
}

fclose(fp);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yupeng0321
2012-06-05
知道答主
回答量:6
采纳率:0%
帮助的人:3.5万
展开全部
飘过看一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式