恳请C语言高手帮我看几个C程序设计的题目,谢谢

题目1:表达式的计算
编程对输入文件中一个仅包含“+、-、*、/”和整数的表达式,计算其结果。

输入:
一行,为整数的四则运算表达式(只有加减乘除运算,没有括号;除运算的结果若为小数则精确到小数点后两位。)。
输出:
表达式的运算结果。

输入示例:
3+51/2
输出示例:
28.50

题目2:进制转换
编程将任意b1进制的正整数转换成b2进制表示形式。 其中(2≤b1≤16,2≤b2≤16) 当进制大于10时,在每一位上的A、B、C、D、E、F分别代表数值10、11、12、13、14、15。

输入:
共有两行,第一行为用空格分开的两个数,分别表示进制b1和进制b2;第二行有一个数,为数X的b1进制表示形式。
输出:
数X的b2进制表示形式。

输入示例:
2 16
101111
输出示例:
2F

题目3:分式的加减法
分式的加减法:已知2个分式,求出这2个分式加减值。

输入:
共有三行:第1行为用空格分开的X1,Y1和Z1,表示第1个分式,其中X1为“+”或“-”表示该分式的符号,Y1为分子,Z1为分母;第2行为一个“+”或“-”,表示第1行分式“+”或“-”第3行的分式;第3行为用空格分开的X2,Y2和Z2,表示第2个分式,其中X2为“+”或“-”表示该分式的符号,Y2为分子,Z2为分母。

输出:
为用空格分开的X,Y和Z,表示表示2个分式加减后的最简分式,其中X为“+”或“-”表示该分式的符号,Y为分子,Z为分母。(当结果为整数时,分母Z为1)
输入示例:
+ 2 3
-
+ 1 6
输出示例:
+ 1 2

题目4:大整数相加
编程求出输入的两个正整数之和。这两个正整数的可能达到200位。

输入:
共有两行,第一行为第1个正整数;第二行为第2个正整数。
输出:
2个正整数之和。

输入示例:
1234567893456767
111111
输出示例:
1234567893567878

题目5:约瑟夫问题
n个人围成一个圆圈,按顺时针方向依次编号为1、2、……、n,给定一个正整数m,从编号为1的人开始按顺时针方向报数(依次报数1、2、……),报数为m的人出圆圈,其下一个人继续从1、2、…开始报数,报数为m的人出圆圈,…….,如此继续直到圆圈中只剩下2个人,这2个人称为幸运儿。现请你编程对输入文件的n 和m,求出这2个幸运儿的编号。
输入:
有1行:为用空格分开的n和m。
输出:
共2行
第1行:依次离开圆圈人的编号,编号之间用空格分开。
第2行:幸运儿的编号(按升序排列,编号之间用空格分开)

输入示例:
7 3
输出示例:
3 6 2 7 5
1 4

题目6:幻方矩阵
幻方是一种很有意思的数字矩阵,在很早著名的九宫八卦阵就与幻方有关。幻方的定义为: 1 到 N*N 的整数填入N*N的方格中,每行和每列以及对角线的数字之和必须是相等的。现在需要你编写程序,将任意奇数阶的幻方找出来。
输入:
一个正奇数N(1 <= N < 1000)
输出:
对于输入的N,输出一个它所对应的N阶幻方,如果存在多个,任意一个即可。每个幻方为N*N的矩阵,每行输出幻方的一行,每行中的数字之间用一个或多个空格分开。

输入示例:
3
输出示例:
4 9 2
3 5 7
8 1 6
这是我们老师布置的题目,要求任选一题写出程序,有没有C高手可以帮帮我啊 谢谢了

第1个回答  2006-12-06
这么多问题,你还不如去买些书吧
第2个回答  2006-12-06
其实这些都是字符串 和 循环的处理

仔细想想你运算时候判别过程 然后实现整个过程 也不是很难 就是思考的要多一点~~

我没空帮你写了~~ 自己还有好多事情要做~~
第3个回答  2006-12-06
第四题的,我以前做的
#include<iostream.h>
void main()
{
int m=0,n=0,i=0,j=0,flag=0;//flag为进位
char a[1000],b[1000];//如果要计算的值长度来定此数组大小
int c[100];
cout<<"请输入两个整数\n";
cin>>a>>b;
while(a[m]!='\0')
m++;
while(b[n]!='\0')
n++;
if(m<n)
{
for(i=m-1,j=n-1;i>=0;i--,j--)
{
c[j+1]=(a[i]-48)+(b[j]-48)+flag;
if(c[j+1]>9)
{
c[j+1]=c[j+1]-10;
flag=1;
}
else
flag=0;
}
for(;j>=0;j--)
{
c[j+1]=(b[j]-48)+flag;
if(c[j+1]>9)
{
c[j+1]=c[j+1]-10;
flag=1;
}
else
flag=0;
}
c[j+1]=flag;
cout<<"结果如下\n";
for(i=0;i<=n;i++)
cout<<c[i];
cout<<endl;
}
else
{
for(i=m-1,j=n-1;j>=0;i--,j--)
{
c[i+1]=(a[i]-48)+(b[j]-48)+flag;
if(c[i+1]>9)
{
c[i+1]=c[i+1]-10;
flag=1;
}
else
flag=0;
}
for(;i>=0;i--)
{
c[i+1]=(a[i]-48)+flag;
if(c[i+1]>9)
{
c[i+1]=c[i+1]-10;
flag=1;
}
else
flag=0;
}
c[i+1]=flag;
cout<<"结果如下\t";
for(i=0;i<=m;i++)
cout<<c[i];
cout<<endl;
}
}
第4个回答  2006-12-17
第四题的,我以前做的
#include<iostream.h>
void main()
{
int m=0,n=0,i=0,j=0,flag=0;//flag为进位
char a[1000],b[1000];//如果要计算的值长度来定此数组大小
int c[100];
cout<<"请输入两个整数\n";
cin>>a>>b;
while(a[m]!='\0')
m++;
while(b[n]!='\0')
n++;
if(m<n)
{
for(i=m-1,j=n-1;i>=0;i--,j--)
{
c[j+1]=(a[i]-48)+(b[j]-48)+flag;
if(c[j+1]>9)
{
c[j+1]=c[j+1]-10;
flag=1;
}
else
flag=0;
}
for(;j>=0;j--)
{
c[j+1]=(b[j]-48)+flag;
if(c[j+1]>9)
{
c[j+1]=c[j+1]-10;
flag=1;
}
else
flag=0;
}
c[j+1]=flag;
cout<<"结果如下\n";
for(i=0;i<=n;i++)
cout<<c[i];
cout<<endl;
}
else
{
for(i=m-1,j=n-1;j>=0;i--,j--)
{
c[i+1]=(a[i]-48)+(b[j]-48)+flag;
if(c[i+1]>9)
{
c[i+1]=c[i+1]-10;
flag=1;
}
else
flag=0;
}
for(;i>=0;i--)
{
c[i+1]=(a[i]-48)+flag;
if(c[i+1]>9)
{
c[i+1]=c[i+1]-10;
flag=1;
}
else
flag=0;
}
c[i+1]=flag;
cout<<"结果如下\t";
for(i=0;i<=m;i++)
cout<<c[i];
cout<<endl;
}