您的位置:首页 > 编程语言 > C语言/C++

C语言mooc小程序(2)

2017-12-23 00:09 232 查看
这星期,由书本 网络学习所得,了解const用法.(数据类型,知识点繁杂直接计入笔记,不放在博客上)

1)首先 可以定义const常量,具有不可变性.

2)可以节省空间,避免不必要的内存分配(个人用IDE检测符合)

3)保护了被修饰的东西 比如
const double PI =3.14159
PI 无法改变,类似define的作用.

或者有如下定义

double rates[5]={88.99,100.12,59.45,183.11,340.5};

const double *pd=rates;//pd指向数组的首元素

*pd=29.89;//pd无法被修改

pd[2]=222.22;//pd无法被修改

rates[0]=99.99;//rates未被定义,可被修改


数组定义:

而且,遍历数组时,用sizeof(a)/sizeof(a[0])可确保循环正确.

数组大小可以用字母定义(C99新标准)

集成初始化 可以用[x]进行定义 比如[0]=2 代表数组第一个元素为2.

此外个人对素数的判断做出优化 可以去掉偶数,由3遍历到sqrt(n) 可以减少一半的复杂度. 代码如下

{
int n,i;
while(~scanf("%d",&n))
{
int flag=0;
if(n%2==0&&n!=2)
{
flag=1;}
for(i=3;i<sqrt(n);i+=2)
{
if(n%i==0)
flag=1;
}
if(flag==0)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}


还有根据此代码改编而成的素数表(代码相似,不放出,基础关键点)

1)开辟prime函数,并初始化元素为1,表示元素为素数

2)从2开始,如果x是素数,则(i*x)舍去

3)接着用i++ x

int main(void)
{
//  1表示x 0表示o
const int size = 3;
int board[size][size];
int i, j;
int numOfX;
int numOfO;
int numx, numo;         //定义2组变量以表示行列情况
int result = -1;        // -1:没人赢, 1:X赢, 0:O赢

//输入矩阵
for (i = 0; i < size; i++)
{
for (j = 0; j < size; j++)
{
scanf("%d", &board[i][j]);
}
}

// 检查行列胜负情况 如有胜负 直接切断 ,行的胜负情况用转置矩阵表示
for (i = 0; i < size && result == -1; i++)
{
numOfO = numOfX = numo = numx = 0;
for (j = 0; j < size; j++)
{
if (board[i][j] == 1)
numOfX++;
else
numOfO++;
if (board[j][i] == 1)
numx++;
else
numo++;
}
if (numOfO == size || numo == size)
result = 0;
else if (numOfX == size || numx == size)
result = 1;
}

// 检查正对角线
numOfO = numOfX = 0;
for (i = 0; i < size; i++) {
if (board[i][i] == 1)
numOfX++;
else
numOfO++;
if (numOfO == size)
result = 0;
else if (numOfX == size)
result = 1;
}

// 检查反对角线
numOfO = numOfX = 0;
for (i = 0; i < size; i++) {
if (board[i][size - i - 1] == 1)
numOfX++;
else
numOfO++;
if (numOfO == size)
result = 0;
else if (numOfX == size)
result = 1;
}

if (result == -1)
printf("No win!\n");
else if (result == 1)
printf("X win!\n");
else
printf("O win!\n");

return 0;
}


另外有多项式加法

这题有几个注意点

首先输入的结束条件 应设置为 输入两次0次幂

其次将输入情况分幂为正负1或普通数,系数为正负1或普通数.

如此就很好写了.

int main(int argc, const char * argv[]) {
int a,b;

int number[101]={0};
for(int i=0;i<2;i++)
{
do
{
scanf("%d %d",&a,&b);
number[a]+=b;
}while(a==0&&b==0);
}
int c=1;
for(int i=101-1;i>=2;i--)
{
if(c)
{

a178
if(number[i]==1||number[i]==-1)
{
printf("x%d",i);
c=0;
}
else if(number[i]!=0)
{
printf("%dx%d",number[i],i);
c=0;
}
}
else
{
if(number[i]==1)
{
printf("+x%d",i);

}else if(number[i]==-1)
{
printf("x%d",i);

}
else if(number[i]>0)
{
printf("+%dx%d",number[i],i);
}else if(number[i]<0)
{
printf("%dx%d",number[i],i);
}
}
}
if(c)
{
if(number[1]==1||number[1]==-1)
{
printf("x");
c=0;
}else if(number[1]!=0)
{
printf("%dx",number[1]);
c=0;
}

if(number[0]!=0)
{
printf("%d",number[0]);
c=0;
}
}
else
{
if(number[1]==1)
{

printf("+x");
}else if(number[1]==-1)
{

printf("x");
}
else if(number[1]>0)
{
printf("+%dx",number[1]);

} else if(number[1]<0)
{
printf("%dx",number[1]);
}
if(number[0]>0)
{
printf("+%d",number[0]);

}else if(number[0]<0)
{
printf("%d",number[0]);

}

}

if(c){
printf("0");
}
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: