读入一串字符串,期中包含电压,电流,功率期中的两个值,然你求出另外一个值,比较简单,就是读入时候
首先要根据单位识别读入的是哪个值,然后要把数值字符串转换成相应的浮点数,最后还要进行单位换算,给出结果
是挺麻烦复杂的,一定要小心
其次就是一些字符串读入的函数的一些区别比如gets()可以读入整个串,包括空格,它以回车符结束标志,详见随笔,scanf,gets()区别
直接上代码,慢慢看吧
#include <stdio.h>
#include <string.h>
main()
{
int n;
char a[100];
float zheng,xiao,flag;
while(scanf("%d",&n)!=EOF)
{
getchar();
int i,j;
for(i=1;i<=n;i++)
{
float num[2];
char b[3];
gets(a);
// puts(a);
// putchar('\n');
int k=0;
float q;
for(j=0;j<strlen(a);j++)
{
if(a[j]=='=')
{zheng=0.0,xiao=0.0,flag=0.1,q=1.0;
b[k]=a[j-1];
// printf("%d %c ",j,a[j-1]);
j++;
while(a[j]>='0'&&a[j]<='9')
{zheng=zheng*10.0+a[j]-'0';j++;
if(a[j]=='m')q=0.001;
else if(a[j]=='k')q=1000.0;
else if(a[j]=='M')q=1000000.0;
}
if(a[j]=='.')
{
j++;
while(a[j]>='0'&&a[j]<='9')
{ xiao=xiao+(a[j]-'0')*flag;j++;flag=flag*0.1;
if(a[j]=='m')q=0.001;
else if(a[j]=='k')q=1000.0;
else if(a[j]=='M')q=1000000.0;
}
}
num[k]=(zheng+xiao)*q;
// printf("q= %f\n",num[k]);
k++;
}
}
printf("Problem #%d\n",i);
if((b[0]=='U'&&b[1]=='I')||(b[0]=='I'&&b[1]=='U'))
printf("P=%.2fW\n\n",num[0]*num[1]);
else if(b[0]=='U'&&b[1]=='P')
printf("I=%.2fA\n\n",num[1]/num[0]);
else if(b[0]=='P'&&b[1]=='U')
printf("I=%.2fA\n\n",num[0]/num[1]);
else if(b[0]=='P'&&b[1]=='I')
printf("U=%.2fV\n\n",num[0]/num[1]);
else if(b[0]=='I'&&b[1]=='P')
printf("U=%.2fV\n\n",num[1]/num[0]);
}
}
}