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

2017-04-18  本文已影响0人  雨打梨花闭门寒

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

#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;
 }
上一篇下一篇

猜你喜欢

热点阅读