编译器上运行结果正确,但CG上却不通过
#include
using namespace std;
#define InitSize 100
typedef struct {
int length;
int Maxsize;
int* data;
}SqList;
void InitList(SqList& L)//初始化顺序表
{
L.data = (int*)malloc(sizeof(int) * InitSize);
L.length = 0;
L.Maxsize = InitSize;
}
void Insertpush(SqList& L, int n)//输入数据
{
int i;
L.length = n;
for (i = 0; i < n; i++)
{
cin >> L.data[i];
}
}
int CompareData(SqList L, int e, int n)//比较大小,返回位序
{
int i;
for (i = 0; i < n; i++)
{
if (L.data[i - 1] < e && L.data[i] > e)
return (i + 1);
}
return 0;
}
void InsertList(SqList& L, int i, int e)//相应位置插入e
{
int j;
for (j = L.length; j >= i; j--)
{
L.data[j] = L.data[j - 1];
}
L.data[i - 1] = e;
L.length++;
}
void PrintList(SqList &L)//输出顺序表
{
int i;
for (i = 0; i < L.length; i++)
{
cout << L.data[i];
if (i + 1 < L.length)
cout << ',';
}
}
int main()
{
SqList L;
InitList(L);
int n, e;
cin >> n;
Insertpush(L, n);
cin >> e;
int ret=CompareData(L, e, n);
InsertList(L, ret, e);
PrintList(L);
system("pause");
return 0;
}
for (i = 0; i < n; i++)
{
if (L.data[i - 1] < e && L.data[i] > e)
return (i + 1);
}
L.data[i-1]当i为0时崩溃了啊
CompareData函数中,原来的判断条件是if (L.data[i - 1] < e && L.data[i] > e)
,但是这样会导致在e比所有元素都大的情况下,返回值为0,而实际上应该返回n+1,表示插入到最后。因此修改为if (L.data[i] > e)
。
在CG上,不需要使用system("pause")
,因此去掉这一行即可。
以下是修改后的代码:
#include <iostream>
using namespace std;
#define InitSize 100
typedef struct {
int length;
int Maxsize;
int* data;
}SqList;
void InitList(SqList& L)//初始化顺序表
{
L.data = (int*)malloc(sizeof(int) * InitSize);
L.length = 0;
L.Maxsize = InitSize;
}
void Insertpush(SqList& L, int n)//输入数据
{
int i;
L.length = n;
for (i = 0; i < n; i++)
{
cin >> L.data[i];
}
}
int CompareData(SqList L, int e, int n)//比较大小,返回位序
{
int i;
for (i = 0; i < n; i++)
{
if (L.data[i] > e)
return (i + 1);
}
return n + 1;
}
void InsertList(SqList& L, int i, int e)//相应位置插入e
{
int j;
for (j = L.length; j >= i; j--)
{
L.data[j] = L.data[j - 1];
}
L.data[i - 1] = e;
L.length++;
}
void PrintList(SqList &L)//输出顺序表
{
int i;
for (i = 0; i < L.length; i++)
{
cout << L.data[i];
if (i + 1 < L.length)
cout << ',';
}
}
int main()
{
SqList L;
InitList(L);
int n, e;
cin >> n;
Insertpush(L, n);
cin >> e;
int ret=CompareData(L, e, n);
InsertList(L, ret, e);
PrintList(L);
return 0;
}
有两个问题:
(1)CompareData()函数中,for循环 i 从0开始,i-1会导致越界。
(2)题目的样例输入中,n个数据之间是用逗号分隔,Insertpush()函数中读取数据时需要用cin.get()吸收中间的逗号。
Insertpush()和CompareData()函数修改如下:
void Insertpush(SqList& L, int n)//输入数据
{
int i;
char ch;
L.length = n;
for (i = 0; i < n; i++)
{
cin >> L.data[i];
ch = cin.get(); //吸收逗号
}
}
int CompareData(SqList L, int e, int n)//比较大小,返回位序
{
int i;
for (i = 0; i < n; i++)
{
if ( L.data[i] > e) //修改
return (i + 1);
}
return (n+1);
}
int CompareData(SqList L, int e, int n)//比较大小,返回位序
{
int i;
for (i = 0; i < n; i++)
{
if (L.data[i] < e && L.data[i + 1] > e)
return (i + 2);
}
return 0;
}
修改后再CG上运行依旧错误
共轭:A共轭的定义
引申:非零向量如果共轭,则一定线性无关。
此图:只要a_i彼此正交,则xi很容易计算。
问题再次转化:要求x,可以用aplha表示,而alpha只和p有关
因此,只要给出一组A共轭的向量组,就可以把x写出来。