美文网首页
电商专业学习嵌入式软件开发第六十三天

电商专业学习嵌入式软件开发第六十三天

作者: 雨打梨花闭门寒 | 来源:发表于2017-04-18 19:42 被阅读0次
    • C基础第二天

    昨天一天将循环讲完了,今天将数组,上午做了俩节课的循环练习,发现还是基础不牢固,今天的练习就已经做不出了,自己写的运行的结果也不对。需要背代码,最起码要能够自己写出代码。

    #if 0
    //今年已过的天数
    #include <stdio.h>
    int main(int argc,char *argv[])
    {
        int year,month,day,i,sum = 0,count = 0;
        printf("请输入年份:");
        scanf("%d",&year);
        printf("请输入月份:");
        scanf("%d",&month);
        printf("请输入日期:");
        scanf("%d",&day);
    
        int a[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
        if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
        {
            a[2] = 29;
        }
        for(i = 1;i < month;i++)
        {
            sum += a[i];
        }
        sum += day;
        printf("今年过了%d天\n",sum);//今年过了多少天
    
        return 0;
    }
    ##else
    //距离指定的日期已经过去的天数
    #include <stdio.h>
    int main(int argc,char *argv[])
    {
        int year,month,day,i,sum = 0,count = 0;
        printf("请输入年份:");
        scanf("%d",&year);
        printf("请输入月份:");
        scanf("%d",&month);
        printf("请输入日期:");
        scanf("%d",&day);
    
        int a[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
        if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
        {
            a[2] = 29;
        }
        for(i = 1;i < month;i++)
        {
            sum += a[i];
        }
        sum += day;
        for(i = 1990;i < year;i++)
        {
                if(i%4 == 0 && i % 100 != 0 || i % 400 == 0)
                count++;
        }   
        sum += 365*(year - 1990) + count;
        printf("%d\n",sum);//一共过了多少天
    
        return 0;
    }
    ##else
    //打印指定月份的日历
    #include <stdio.h>
    int main(int argc,char *argv[])
    {
        int year,month,day,i,sum = 0,count = 0;
        printf("请输入年份:");
        scanf("%d",&year);
        printf("请输入月份:");
        scanf("%d",&month);
    
        int a[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
        if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
        {
            a[2] = 29;
        }
        for(i = 1;i < month;i++)
        {
            sum += a[i];
        }
        sum += day;
        for(i = 1990;i < year;i++)
        {
                if(i%4 == 0 && i % 100 != 0 || i % 400 == 0)
                count++;
        }   
        sum += 365*(year - 1990) + count;
        int week = sum%7;
        printf("Mon Thu Wed Tus Fri Sat Sun\n");
        for(i = 0;i < week;i++)
        {
            printf("    ");
        }
        for(i = 1;i <= a[month];i++)
        {
            printf("%2d  ",i);
            if((i + week)%7 == 0)
                putchar('\n');
        }
        return 0;
    }
    
    //向数组中输入10个数求出最大值
    #include <stdio.h>
    int main(int argc,char *argv[])
    {
        int i,max;
        int a[10];
        for(i = 0;i < 10;i++)
        {
            scanf("%d",&a[i]);  
            if(max < a[i])
            {
                max = a[i];
            }
        }
        printf("%d\n",max);
        return 0;
    }
    
    //二维数组赋值
    #include <stdio.h>
    int main(int argc,char *argv[])
    {
        int a[3][4];
        int i,j;
        for(i = 0;i < 3;i++)
        {
            for(j = 0;j < 4;j++)
            {
                scanf("%d",&a[i][j]);
            }
        }
        for(i = 0;i < 3;i++)
        {
            for(j = 0;j < 4;j++)
            {
                printf("%-2d ",a[i][j]);
            }
            putchar('\n');
        }
        return 0;
    }
    
    //求平均值
    #include <stdio.h>
    int main(int argc,char *argv[])
    {
        int a[3][5] = {{70,75,80,85,90},{90,85,80,75,70},{90,91,92,93,94}};
        int i,j,x = 0;
        for(i = 0;i < 3;i++)
        {
            x = 0;
            for(j = 0;j < 5;j++)
            {
                x += a[i][j];
            }
            printf("%d\n",x/5);
        }
        return 0;
    }
    
    //取100个质数放到数组中
    #include <stdio.h>
    int main(int argc,char *argv[])
    {
        int a,c,i = 0;
        int arr[20];
        for(a = 3;;a++)
        {
            for(c = 2;c <= a;c++)
            {
                if(a%c == 0)
                    break;//跳出所有循环
            }
            if(c >= a)
            {
                if(i == 20)
                 break;
                arr[i] = a;
                i++;
            }
        }
        for(i = 0;i < 20;i++)
        {
            printf("arr[%d] = %d\n",i,arr[i]);
        }
        putchar('\n');
    
        return 0;
    }
    
    //数组赋值
    #include <stdio.h>
    int main(int argc,char *argv[])
    {
        int i;
        int a[5];
        for(i = 0;i < 5;i++)
        {
            scanf("%d",&a[i]);
            //a[i] = i; 
        }
        for(i = 0;i < 5;i++)
        {
            printf("%d ",a[i]);
        }
        putchar('\n');
        return 0;
    }
    
    //根据两个具体日期算出过了多少天
    #include <stdio.h>
    int main(int argc,char *argv[])
    {
        int year,month,day,year1,month1,day1,i;
        int sum = 0;
        int sum1 = 0;
        int count = 0;
        int yearstd = 365;
        printf("请输入出生年份:");
        scanf("%d",&year1);getchar();
        printf("请输入出生月份:");
        scanf("%d",&month1);getchar();
        printf("请输入出生日期:");
        scanf("%d",&day1);getchar();
        printf("请输入当前年份:");
        scanf("%d",&year);getchar();
        printf("请输入当前月份:");
        scanf("%d",&month);getchar();
        printf("请输入当前日期:");
        scanf("%d",&day);getchar();
    
        int a[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
        if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
        {
            a[2] = 29;
        }
        for(i = 1;i < month;i++)
        {
            sum += a[i];
        }
        sum += day;
        printf("%d\n",sum);//今年天数
    
        if(year1 % 4 == 0 && year1 % 100 != 0 || year1 % 400 == 0)
        {
            a[2] = 29;
            yearstd = 366;
        }
        sum1= 0;
        for(i = 1;i < month1;i++)
        {
            sum1 += a[i];
        }
        sum1 += day1-1;
        printf("sum1 = %d\n",sum1);
        sum1 = yearstd - sum1;
        printf("%d\n",sum1);
    
        count = 0;
        int year2;
        for(year2 = year1;year2 < year;year2++)
        {
            if(year2%4==0 && year2%100!=0 || year2%400==0)
                count++;
        }
        printf("count = %d\n",count);
        int add;
        add = 365*(year - year1)-yearstd+sum+sum1+count;
        printf("已经出生%d天\n",add);
        return 0;
    }
    
    //打印菱形
    #include <stdio.h>
    int main(int argc,char *argv[])
    {
        int n,m1,m2,i,j;
        printf("please input a number of rows:");
    //  fflush(stdin);//提示只能输入数字,可以不加
        scanf("%d",&n);
        if(n%2 == 0)
        {
            printf("Error:the number cannot be %d\n",n);
            return 0;
        }
        for(m1 = n/2,m2 = 1;m1;m1--,m2 += 2)
        {
            for(i = 0;i < m1;i++)
                printf(" ");
            for(j = 0;j < m2;j++)
                printf("*");
            printf("\n");
        }
        while(m2>0)
        {
            for(i = 0;i < m1;i++)
                printf(" ");
            for(j = 0;j < m2;j++)
                printf("*");
            printf("\n");
            m1++;
            m2 -= 2;
        }
        return 0;
    }
    
    //自幂数
    #include <stdio.h>
    int main(int argc,char *argv[])
    {//自幂数从三位数开始
        int num,i = 100,j,k,m,n,sum;
        printf("请输入一个数:");
        scanf("%d",&num);
        while(i < num)
        {
            j = i;
            k = 0;//求出位数
            while(j > 0)
            {
                j /= 10;
                k++;
            }
            j = i;
            sum = 0;
            while(j > 0)
            {
                int s = 1;
                m = j%10;
                n = k;
                for(;n > 0;n--)
                {
                    s *= m;
                }
                j = j/10;
                sum += s;
            }
            if(sum == i)
            {
                printf("%d\n",i);
            }
            i++;
        }
        return 0;
    }
    

    在程序设计中,为了方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类元素的集合称为数组。数组属于构造类型,数组也可分解为多个数组,这些数组是由基本构造类型构成的。
    数组可以分为:数值数组,字符数组,指针数组,结构体数组等。

    1:一维数组的定义和引用。
    怎样定义一维数组
    定义一维数组的一般形式:类型说明符 数组名[常量表达式];
    int a[10]; //它表示定义了一个整型数组,数组名为a,此数组有10个整型元素;
    float b[10],c[20];
    char ch[5];
    (1)数组的类型实际上指的是数组元素的类型,数组中的每一个元素都属于同一数据类型,不能把不同类型的数据放在同一数组中;
    (2)数组名不能与其他变量名相同;

     int main(int argc, char const *argv[])
     {
     int a;
     float a[10];
     ……
     return 0;
     }
    

    (3):数组名的书写规则应符合标识符书写规则。
    (4):方括号的常量表示数组元素个数
    (5):不能在方括号中使用变量来表示元素个数,但是可以使用符号常量和常量表达式;(宏定义)

    3.一维数组的引用
    数组元素的一般形式为:数组名[下标]
    其中下标只能是整型常量或整型表达式。
    a[5]
    a[i+j]
    a[i++]
    这些都是合法数组元素

     例1
     int main(int argc, char const *argv[])
     {
     int i,a[10];
     for ( i = 0; i < 10; ++i)
     {
     a[i]=i;
     }
     for ( i = 9; i >= 0; i--)
     {
     printf("%d\n",a[i]);
     }
     return 0;
     }
     例2
     int main(int argc, char const *argv[])
     {
     int i,a[10];
     for (int i = 0; i < 10; ++i)
     {
     a[i]=2*i+1;
     }
     for (int i = 0; i <=9; ++i)
     {
     printf("%d\n",a[i] );
     }
     printf("%d,%d\n",a[5],a[5.8]);
     return 0;
     }
    

    4.一维数组的初始化
    数组的赋值方法除了可以用赋值语句,还可以初始化。
    初始化赋值的一般形式:类型说明符 数组名[常量表达式] = {值,值,……,值};
    例如:int a[10]={0,1,2,3,4,5,6,7,8,9};//相当于a[0]=0,a[1]=1……a[9]=9;
    (1)可以只给部分元素赋值
    int a[10]={0,1,2,3,4};
    表示只给a[0]~a[5]赋值,其他值默认为0;
    (2)只能逐个赋值,不能给数组整体赋值
    例:需要给数组中10个元素全部赋1
    int a[10]={1,1,1,1,1,1,1,1,1,1};
    不能写成 int a[10]=1;
    (3)也可以不给出元素的个数,直接给所有元素赋值
    例:int a[5]={1,2,3,4,5};
    可写成 int a[]={1,2,3,4,5};

    注:a[5]={1,2,3,4,5,6};//这是错误的写法,元素个数不能大于下标最大值;

    一维数组程序举例:求输入的十个数中的最大值

     int main(int argc, char const *argv[])
     {
         int i,max,a[10];
         printf("请输入10个数\n");
         for (i = 0; i < 10; ++i)
         {
            scanf("%d",&a[i]);
         }
         max=a[0];
         for (i = 0; i < 10; ++i)
         {
             if (a[i]>max)
             {
                max=a[i];
             }
         }
         printf("max number is %d\n",max);
         return 0;
     }
    

    5.二维数组的定义
    前面介绍的数组只有一个下标,称为一维数组,其数组元素也称为单下标变量。
    在实际问题中很多量是二维或多维的,C语言允许构造多维数组。
    二维数组定义的一般形式:类型说明符 数组名[常量表达式1][常量表达式2]
    其中常量表达式1表示第一维下标的长度,常量表达式2表示第二维下标的度;

    例:int a[3][4];//该数组的小标变量一共3*4个
    a[0][0],a[0][1],a[0][2],a[0][3]
    a[1][0],a[1][1],a[1][2],a[1][3]
    a[2][0],a[2][1],a[2][2],a[2][3]
    

    6.二维数组元素的引用
    二维数组元素的表达形式为:
    数组名[下标][下标]
    例:a[3][4]

    7.二维数组的初始化
    二维数组的可按分段赋值,也可以连续赋值
    例如对数组a[5][3]
    (1)分段赋值
    a[5][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15}};
    (2)连续赋值
    a[5][3]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    两种赋值结果完全相同

    二维数组赋值特别说明:
    (1)可以只对部分元素赋值,未赋值元素自动取0值。
    例:int a[3][3]={{1},{2},{3}};
    是对每行的第一列元素进行赋值,未赋值取零,结果如下
    1 0 0
    2 0 0
    3 0 0

    int a[3][3]={{0,1},{0,0,2},{3}};
    0 1 0
    0 0 2
    3 0 0

    (2)如果对全部元素进行赋值,则第一维的长度可以不给出
    例:int a[3][3]={1,2,3,4,5,6,7,8,9};
    可以写为: int a[][3]={1,2,3,4,5,6,7,8,9};

    二维数组的初始化:
    王 张 李 赵 周
    Math 80 61 59 85 76
    C 75 65 63 87 77
    Chinese 92 71 70 90 85

    一个二维数组a[5][3]存放五个人三科成绩,再设一个一维数组v[3]存放所求得各学科平均成绩。

     int main(int argc, char const *argv[])
     {
     int i,j,s=0,average;
     int v[3],a[5][3];
    
     printf("请输入成绩\n");
     for (int i = 0; i < 3; ++i)
     {
     for (int j = 0; j < 5; ++j)
     {
     scanf("%d",&a[j][i]);
     s = s+a[j][i];
     }
     v[i]=s/5;
     s = 0; 
     }
     average = (v[0]+v[1]+v[2])/3;
     printf("各科平均成绩 Math:%d,C:%d,Chinese:%d.\n",v[0],v[1],v[2]);
     printf("总分的平均成绩为%d\n",average);
     return 0;
     }
    

    相关文章

      网友评论

          本文标题:电商专业学习嵌入式软件开发第六十三天

          本文链接:https://www.haomeiwen.com/subject/jkjqzttx.html