算法分析如下:
把整个电路分为4级,从左至右逐级递推处理。
首先注重把电路中的电阻数据按顺序写入数组,最右端电阻在前,以后每级横向电阻在前,竖向电阻在后。第三级没有横向电阻,相应位置置数据0。最后,置两个-1作为数据的终止标志。
操作时r读入最右端电阻。进入i循环(预置20级),读入data[i],data[i+1]两个电阻,data[i]与右边等效电阻串联,然后与data[i+1]并联,根据电阻计算公式操作:
r=r+data[i]; r=(r*data[i+1])/(r+data[i+1]);
当读入的data[i]为负时,即已计算完毕,退出循环等效电阻r
程序代码如下:
#include<stdio.h>
void main()
{
int i;
double r;
double data[]={25,4,13,50,3,0,15,17,31,-1,-1};
r=data[0];
for(i=1;i<=20;i+=2)
{
if(data[i]<0)
break;
r=r+data[i];
r=(r*data[i+1])/(r+data[i+1]);
}
printf("A,B间的等效电阻为:%.3f\n",(r*1000+0.5)/1000);
}
程序运行结果如下:
A,B间的等效电阻为:11.932
注重:本程序只适用于II形式的电路电阻计算。假如对应位置没有电阻,必须相应补0。同时在程序中循环体内判定data[i]<0 语句应安排在具体计算语句之前。否则将导致计算结果出错。
--------------------------------------------------------
1.3 求加减代数和 求一组有规律数据作加减符号有规律变化的代数和,要具体根据符号应变化规律,通过设置符号变量,或对每一项通过条件判定选择加减操作,以达到所求代数和的目的。这里给出三个有代表性的加减代数和求解实例。
1.3.1 设置符号变量实现加减相间变化 试求:s=1-1/2+1/3-1/4+...1/n (n从键盘输入)
设置符号变量f,通过语句f=-1*f实现正负交替变化,以达到加减相间求和。
程序代码如下:
#include<stdio.h>
void main()
{
double s=0;
int f=-1,i,n;
char x$;
printf("s=1-1/2+1/3-1/4+...1/n\n Enter n:\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
f=-1*f;
s=s+(float)f/i;
}
if(n%2==0)
x$='-';
else x$='+';
printf("s=1-1/2+1/3-1/4+...%c 1/ %d = %.7f\n",x$,n,s);
}
程序运行结果如下:
注重:符号变量f的初值由第一项的符号决定。本例中代数和的第一项为正,因而赋初值f=-1。根据项数n的奇偶性决定输出时该项的"+"、“-”符号x$是必要的。
------------------------------------------------------------------
1.3.2 通过条件判定选择加减操作 试求:s=1-1/2-1/3+1/4-...1/n (n从键盘输入)
注重到每3项中有一项为加,两项为减,即每作一次加后作两次减,通过对循环变量i除3的余数( i%3==1时为加操作)作为条件,选择指定的加减操作。
程序代码如下:
#include<stdio.h>
void main()
{
int i,n;
char x$;
float s=0;
printf("s=1-1/2-1/3+1/4-...1/n\n请输入n:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
if(i%3==1)
s=s+(float)1/i;
else
s=s-(float)1/i;
}
if(n%3==1) x$='+';
else x$='-';
printf("s=1-1/2-1/3+1/4+...%c1/%d = %f\n",x$,n,s);
}
程序运行结果如下:
-------------------------------------------------------------------
1.3.3 设置多个符号变量 试求:s=1-1/2-1/3+1/4+1/5-...1/n (n从键盘输入)
对于一些符号变化较为复杂的代数和,可以根据具体情况设置多个符号变量,以达到选择加减操作的要求。上述代数和开始一项为正,以后二负二正类推。这时设置 两个符号变量可达到相应操作的选择。
程序代码如下:
#include<stdio.h>
void main()
{
int i,n,f=-1,t=1;
char x$;
printf("s=1-1/2-1/3+1/4+1/5-...1/n\n请输入n:");
float s=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
f=-1*f;
t=f*t;
s=s+(float)t/i;
}
if(t<0) x$='-';
else x$='+';
printf("s=1-1/2-1/3+1/4+1/5-...%c1/%d = %f\n",x$,n,s);
}
程序运行结果如下:
注重:程序中设置符号一f,t协同实现二正二负的变化要求。
视频教程列表
文章教程搜索
C语言程序设计推荐教程
C语言程序设计热门教程