C语言mooc小程序(2)

来源:互联网 发布:mac flash第三步不显示 编辑:程序博客网 时间:2024/05/17 06:43

这星期,由书本 网络学习所得,了解const用法.(数据类型,知识点繁杂直接计入笔记,不放在博客上)
1)首先 可以定义const常量,具有不可变性.
2)可以节省空间,避免不必要的内存分配(个人用IDE检测符合)
3)保护了被修饰的东西 比如const double PI =3.14159PI 无法改变,类似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)        {            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;}
原创粉丝点击