C语言的小疑点
C语言的小问题
下面是我朋友的一段程序,要求我帮忙修改下实现在循环中提示是否继续,是就继续,否就退出。
由//添加夹在一起的就是我添加的代码。
可是编译时出来两个错误
Expression snytax in functon main
Undefined symbol 'temp ' in functon main
由于我好久没用使用C了,所以也找不出问题在哪儿。只有请大家帮忙找找了
#include <math.h>
#include <stdio.h>
main()
{
float x1,x2,a1,a2,a3,td[2][1],m,h[2][2],h1[2][2],h2[2][2],b,s[2][1],c;
/* 设F(x)=a1*(x1+1)^2+a2*(x2-1)^2+x1+x2+a3;
td[2][1]=梯度,m=模,s[2][1]=步长,h[2][2]=海森矩阵,h1[2][2]=海森矩阵伴随矩阵,
h2[2][2]=海森矩阵逆矩阵,b=海森矩阵行列式值,s[2][1]=搜索方向,c=步长 */
int k=1;
printf ( "F(x)=a1*(x1+1)^2+a2*(x2-1)^2+x1+x2+a3\n\n ");
printf ( "please enter coefficient\n ");
printf ( "enter a1= ",&a1);
scanf ( "%f ",&a1);
printf ( "enter a2= ",&a2);
scanf ( "%f ",&a2);
printf ( "enter a3= ",&a3);
scanf ( "%f ",&a3);
printf ( "please enter start point\n ");
printf ( "enter x1= ",&x1);
scanf ( "%f ",&x1);
printf ( "enter x2= ",&x2);
scanf ( "%f ",&x2);
td[0][0]=2*a1*x1+2*a1+1;
td[1][0]=2*a2*x2-2*a2+1;
m=sqrt(td[0][0]*td[0][0]+td[1][0]*td[1][0]);
printf ( "%d, ,x1=%f,x2=%f,m=%f\n ",k,x1,x2,m);
while (m> 0.001)
{ k++;
h[0][0]=2*a1;h[0][1]=0;
h[1][0]=0;h[1][1]=2*a2;
h1[0][0]=2*a2;h1[0][1]=0;
h1[1][0]=0;h1[1][1]=2*a1;
b=h[0][0]*h[1][1]-h[0][1]*h[1][0];
h2[0][0]=h1[0][0]/b;h2[0][1]=h1[0][1]/b;
h2[1][0]=h1[1][0]/b;h2[1][1]=h1[1][1]/b;
s[0][0]=-(h2[0][0]*td[0][0]+h2[0][1]*td[1][0]);
s[1][0]=-(h2[1][0]*td[0][0]+h2[1][1]*td[1][0]);
c=-(2*a1*s[0][0]-2*a2*s[1][0]+s[1][0]+s[0][0])/(2*a1*s[0][0]*s[0][0]+2*a2*s[1][0]*s[1][0]);
x1=x1+c*s[0][0];x2=x2+c*s[1][0];
td[0][0]=2*a1*x1+2*a1+1;
td[1][0]=2*a2*x2-2*a2+1;
m=sqrt(td[0][0]*td[0][0]+td[1][0]*td[1][0]);
printf ( "%d, ,x1=%f,x2=%f,m=%f,c=%f\n ",k,x1,x2,m,c);
char temp;//添加
while(temp!= 'Y '||temp!= 'N ');
{
printf ( "GO ON? : Y/N ");
scanf ( "%c ",&temp);
}
if(temp== 'Y ')continue;
else break;//添加
}
}
------解决方案--------------------
C语言编译器吧?
把char temp;这句提前到main函数开始那些变量声明处去.
------解决方案--------------------
#include <math.h>
#include <stdio.h>
main()
{
float x1,x2,a1,a2,a3,td[2][1],m,h[2][2],h1[2][2],h2[2][2],b,s[2][1],c;
/* 设F(x)=a1*(x1+1)^2+a2*(x2-1)^2+x1+x2+a3;
td[2][1]=梯度,m=模,s[2][1]=步长,h[2][2]=海森矩阵,h1[2][2]=海森矩阵伴随矩阵,
h2[2][2]=海森矩阵逆矩阵,b=海森矩阵行列式值,s[2][1]=搜索方向,c=步长 */
int k=1;
char temp= ' ';
printf ( "F(x)=a1*(x1+1)^2+a2*(x2-1)^2+x1+x2+a3\n\n ");
do
{
printf ( "please enter coefficient\n ");
printf ( "enter a1= ",&a1);
scanf ( "%f ",&a1);
printf ( "enter a2= ",&a2);
scanf ( "%f ",&a2);
printf ( "enter a3= ",&a3);
scanf ( "%f ",&a3);
printf ( "please enter start point\n ");
下面是我朋友的一段程序,要求我帮忙修改下实现在循环中提示是否继续,是就继续,否就退出。
由//添加夹在一起的就是我添加的代码。
可是编译时出来两个错误
Expression snytax in functon main
Undefined symbol 'temp ' in functon main
由于我好久没用使用C了,所以也找不出问题在哪儿。只有请大家帮忙找找了
#include <math.h>
#include <stdio.h>
main()
{
float x1,x2,a1,a2,a3,td[2][1],m,h[2][2],h1[2][2],h2[2][2],b,s[2][1],c;
/* 设F(x)=a1*(x1+1)^2+a2*(x2-1)^2+x1+x2+a3;
td[2][1]=梯度,m=模,s[2][1]=步长,h[2][2]=海森矩阵,h1[2][2]=海森矩阵伴随矩阵,
h2[2][2]=海森矩阵逆矩阵,b=海森矩阵行列式值,s[2][1]=搜索方向,c=步长 */
int k=1;
printf ( "F(x)=a1*(x1+1)^2+a2*(x2-1)^2+x1+x2+a3\n\n ");
printf ( "please enter coefficient\n ");
printf ( "enter a1= ",&a1);
scanf ( "%f ",&a1);
printf ( "enter a2= ",&a2);
scanf ( "%f ",&a2);
printf ( "enter a3= ",&a3);
scanf ( "%f ",&a3);
printf ( "please enter start point\n ");
printf ( "enter x1= ",&x1);
scanf ( "%f ",&x1);
printf ( "enter x2= ",&x2);
scanf ( "%f ",&x2);
td[0][0]=2*a1*x1+2*a1+1;
td[1][0]=2*a2*x2-2*a2+1;
m=sqrt(td[0][0]*td[0][0]+td[1][0]*td[1][0]);
printf ( "%d, ,x1=%f,x2=%f,m=%f\n ",k,x1,x2,m);
while (m> 0.001)
{ k++;
h[0][0]=2*a1;h[0][1]=0;
h[1][0]=0;h[1][1]=2*a2;
h1[0][0]=2*a2;h1[0][1]=0;
h1[1][0]=0;h1[1][1]=2*a1;
b=h[0][0]*h[1][1]-h[0][1]*h[1][0];
h2[0][0]=h1[0][0]/b;h2[0][1]=h1[0][1]/b;
h2[1][0]=h1[1][0]/b;h2[1][1]=h1[1][1]/b;
s[0][0]=-(h2[0][0]*td[0][0]+h2[0][1]*td[1][0]);
s[1][0]=-(h2[1][0]*td[0][0]+h2[1][1]*td[1][0]);
c=-(2*a1*s[0][0]-2*a2*s[1][0]+s[1][0]+s[0][0])/(2*a1*s[0][0]*s[0][0]+2*a2*s[1][0]*s[1][0]);
x1=x1+c*s[0][0];x2=x2+c*s[1][0];
td[0][0]=2*a1*x1+2*a1+1;
td[1][0]=2*a2*x2-2*a2+1;
m=sqrt(td[0][0]*td[0][0]+td[1][0]*td[1][0]);
printf ( "%d, ,x1=%f,x2=%f,m=%f,c=%f\n ",k,x1,x2,m,c);
char temp;//添加
while(temp!= 'Y '||temp!= 'N ');
{
printf ( "GO ON? : Y/N ");
scanf ( "%c ",&temp);
}
if(temp== 'Y ')continue;
else break;//添加
}
}
------解决方案--------------------
C语言编译器吧?
把char temp;这句提前到main函数开始那些变量声明处去.
------解决方案--------------------
#include <math.h>
#include <stdio.h>
main()
{
float x1,x2,a1,a2,a3,td[2][1],m,h[2][2],h1[2][2],h2[2][2],b,s[2][1],c;
/* 设F(x)=a1*(x1+1)^2+a2*(x2-1)^2+x1+x2+a3;
td[2][1]=梯度,m=模,s[2][1]=步长,h[2][2]=海森矩阵,h1[2][2]=海森矩阵伴随矩阵,
h2[2][2]=海森矩阵逆矩阵,b=海森矩阵行列式值,s[2][1]=搜索方向,c=步长 */
int k=1;
char temp= ' ';
printf ( "F(x)=a1*(x1+1)^2+a2*(x2-1)^2+x1+x2+a3\n\n ");
do
{
printf ( "please enter coefficient\n ");
printf ( "enter a1= ",&a1);
scanf ( "%f ",&a1);
printf ( "enter a2= ",&a2);
scanf ( "%f ",&a2);
printf ( "enter a3= ",&a3);
scanf ( "%f ",&a3);
printf ( "please enter start point\n ");