谁能帮我解决这个C语言程序问题?
发布网友
发布时间:2023-11-01 13:53
我来回答
共6个回答
热心网友
时间:2023-11-26 05:53
#include<stdio.h>
#include <Windows.h>
int main()
{
int n1,n2;
char tag;
printf("C语言四则运算器\n");
printf("请输入两个数字格式如1,2\n");
scanf("%d,%d",&n1,&n2);
printf("请输入运算符:\n");
getchar();//接受你输入数字后的回车,因为回车也是字符
scanf("%c",&tag);
if(tag=='+') printf("%d+%d=%d",n1,n2,n1+n2);
if(tag=='-') printf("%d-%d=%d",n1,n2,n1-n2);
if(tag=='*') printf("%d*%d=%d",n1,n2,n1*n2);
if(tag=='/')
if (n2!=0)//判断除数是否为零
{
printf("%d*%d=%d",n1,n2,n1/n2);
}
else
{
printf("error!\n");
}
system("pause");
return 0;
}
热心网友
时间:2023-11-26 05:54
#include<stdio.h>
main()
{
int n1,n2;
char tag;
printf("C语言四则运算器\n");
printf("请输入两个数字格式如1,2\n");
scanf("%d,%d",&n1,&n2);
printf("请输入运算符:\n");
scanf("%c",&tag);
if(tag=='+') printf("n1+n2=%d",n1+n2);
if(tag=='-') printf("n1-n2=%d",n1-n2);
if(tag=='*') printf("n1*n2=%d",n1*n2);
if(tag=='/') printf("n1/n2=%d",n1/n2);
}
热心网友
时间:2023-11-26 05:54
应该是无法输出结果:最后的四个printf();语句有问题:
应该是:
if(tag=='+') printf("n1+n2=%d",n1+n2);
if(tag=='-') printf("n1-n2=%d",n1-n2);
if(tag=='*') printf("n1*n2=%d",n1*n2);
if(tag=='/') printf("n1/n2=%lf",(double)n1/n2);
最后的那个除法注意,如果你用printf("n1/n2=%d",n1/n2);的话,这样得不到正确结果,因为一个int和一个int相除,会得到一个整型int,所以除要强制转换成double才行!
热心网友
时间:2023-11-26 05:55
原因是你在第一个scanf里输入数据后,会按下Enter,这个仍然保存的缓冲区中
下一个scan时,你觉得你输入了运算符,但是在运算符前,还有一个Enter(ASCII好像是0DH),所以,结果是没有输出!!!
你应该在第一个scanf里消去那个Enter,代码:scanf("%d,%d%*c",&n1, &n2);
%*c会消支这个Enter了!!!
热心网友
时间:2023-11-26 05:55
问题补充:还有个
8用指针方法编写程序,输入三个字符串,按由小到大的顺序输出。要求用函数实现,并用指向一维数组的指针作为函数的参数。
======================
这一个在最后,多加些分吧,累死我了:(
给,都已经编译运行确认了:
1.任意输入一个数,判断它是否为素数
#include "stdio.h"
#include "conio.h"
#include "math.h"
int ss(int inputshu)
{
int i,m,t;
m=inputshu;
for(i=2;i<=sqrt(m);i++)
if(m%i==0)
if(i>sqrt(m)+1) t=1;
return(t);
}
int main(void)
{
int j;
printf("请输入一个数: \n");
scanf("%d",&j);
if(ss(j)==0) printf("%d不是素数",j);
else printf("%d是素数",j);
getch();
return 1;
}
2.打印1~1000内所有完数
#include<stdio.h> /*头文件*/
#include<conio.h>
#define N 1000 /*搜索范围在1000以内*/
int wanshu(int x) /*判断x是否完数*/
{
int i,sum=0;
for(i=1;i<=x;i++) /*对所有x的因子求和*/
{
if(x%i==0) sum=sum+i;
continue;
}
if(sum==x*2) return(1); /*如果求和结果等于2x则x是完数*/
else return(0); /*否则不是完数*/
} /*完数判断函数结束*/
int print_factor(int x) /*打印结果*/
{
int i,j,res[1000]=; /*i,j为循环变量.res数组记录每个因子.*/
for(i=1;i<x;i++) /*将每个非零因子存在数组res[]中*/
{
if(x%i==0) res[i]=i;
continue;
}
printf("%d its factors are: ",x); /*打印提示*/
for(j=0;j<x;j++) /*打印每个因子,以逗号相隔.*/
{
if(res[j]!=0)
{
printf("%d",res[j]);
printf("\,");
}
}
printf("\n");
return(0);
} /*打印函数结束*/
int main(int argc, char *argv[]) /*主函数*/
{
int i; /*循环变量*/
for(i=1;i<=N;i++) /*循环找出小于N的所有完数并输出其因子.*/
{
if(wanshu(i)) print_factor(i);
continue;
}
getch();
return 0;
} /*主函数结束*/
3.打印100~999之间的水仙花数
#include "stdio.h"
#include "conio.h"
int main()
{
int i,j,k,n;
printf("水仙花数是:\n");
for(n=100;n<1000;n++)
{
i=n/100;
j=(n-i*100)/10;
k=n%10;
if(i*i*i+j*j*j+k*k*k==n)
printf("%d\n",n);
}
getch();
return 1;
}
4.输入若干字符(以输入!为结束条件)分别统计其中字母、空格、数字和其它字符个数
#include "stdio.h"
#include "conio.h"
int main(void)
{
int word=0,digit=0,space=0,other=0,i=0;
char *p,s[80];
printf("\nInput a string:");
while ((s[i]=getchar())!='\n') i++;
p=s;
while(*p!='!')
{
if(((*p>='A')&&(*p<='Z'))||((*p>='a')&&(*p<='z')))
word++;
else if(*p==' '||*p==9)
space++;
else if((*p>='0')&&(*p<='9'))
digit++;
else
other++;
p++;
}
printf("字母:%d个,空格:%d个,数字:%d个,其它字符:%d个",word,space,digit,other);
getch();
return 1;
}
5.编写九九乘法表
#include <stdio.h>
#include <conio.h>
int main(){
int t[10][10]=;
int i,j;
for(i=1;i<10;i++)
for(j=1;j<10;j++)
t[i][j]=i*j;
for(i=1;i<10;i++){
for(j=1;j<10;j++)
if(i>=j)
printf("%d*%d=%2d ",i,j,t[i][j]);
printf("\n");
}
getch();
return 0;
}
6.求极数e的x次方=1+x+2的阶乘分之x平方+3的阶乘分之x立方+......n的阶乘分之xn次方
#include <stdio.h>
#include <conio.h>
int x;
float sum;
long f1(int n)
{
if(n==0) return 1;
else return x*f1(n-1);
}
long f2(int n)
{
if(n==0) return 1;
else return n*f2(n-1);
}
int main()
{
int i,n;
printf("请输入x: ");
scanf("%d",&x);
printf("请输入n: ");
scanf("%d",&n);
for(i=0;i<=n;i++)
sum+=(float)f1(i)/(float)f2(i);
printf("e的%d次方为: %f",x,sum);
getch();
return 1;
}
7.输入4个学生三门课题成绩(二维整型数组)要求:每个学生的平均分、每门课平均分、输出每个学生三门课成绩
#include <stdio.h>
#include <conio.h>
int main()
{
int a[4][3]=;
int i,j;
int total=0;
float ave;
printf("请输入4个学生三门课题成绩: \n");
for(i=0;i<4;i++)
for(j=0;j<3;j++)
{
printf("第%d个学生第%d门课成绩: ",i+1,j+1);
fflush(stdin);
scanf("%d",&a[i][j]);
}
for(i=0;i<4;i++)
{
printf("第%d个学生三门课成绩为: \n",i+1);
for(j=0;j<3;j++)
{
printf("第%d门课: ",j+1);
printf("%d\n",a[i][j]);
}
printf("\n");
}
printf("\n");
for(i=0;i<4;i++)
{
total=0;
printf("第%d个学生平均分为: ",i+1);
for(j=0;j<3;j++) total+=a[i][j];
ave=total/3.0;
printf("%.1f \n",ave);
}
for(i=0;i<3;i++)
{
total=0;
printf("第%d门课平均分为: ",i+1);
for(j=0;j<4;j++) total+=a[j][i];
ave=total/4.0;
printf("%.1f \n",ave);
}
getch();
return 1;
}
8.用指针方法编写程序,输入三个字符串,按由小到大的顺序输出。要求用函数实现,并用指向一维数组的指针作为函数的参数。
#include<conio.h>
#include<stdio.h>
#include<string.h>
void convert(char *p[3])
{
char *t;
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(strcmp(p[i],p[j])<0)
{
t=p[i];
p[i]=p[j];
p[j]=t;
}
}
int main()
{
static char *a[3],b[20],c[20],d[20];
int i;
a[0]=b;
a[1]=c;
a[2]=d;
printf("Please input 3 strings: \n");
for(i=0;i <3;i++)
gets(a[i]);
convert(a);
printf("After Sort: \n",a[i]);
for(i=0;i <3;i++)
printf("%s\n",a[i]);
getch();
return 0;
}
热心网友
时间:2023-11-26 05:56
你第一条if语句,输出打印n1+n2,少打个n啊