電商專業(yè)學(xué)習(xí)嵌入式軟件開發(fā)第六十三天

  • C基礎(chǔ)第二天

昨天一天將循環(huán)講完了,今天將數(shù)組,上午做了倆節(jié)課的循環(huán)練習(xí),發(fā)現(xiàn)還是基礎(chǔ)不牢固,今天的練習(xí)就已經(jīng)做不出了,自己寫的運(yùn)行的結(jié)果也不對(duì)。需要背代碼,最起碼要能夠自己寫出代碼。

#if 0
//今年已過(guò)的天數(shù)
#include <stdio.h>
int main(int argc,char *argv[])
{
    int year,month,day,i,sum = 0,count = 0;
    printf("請(qǐng)輸入年份:");
    scanf("%d",&year);
    printf("請(qǐng)輸入月份:");
    scanf("%d",&month);
    printf("請(qǐng)輸入日期:");
    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("今年過(guò)了%d天\n",sum);//今年過(guò)了多少天

    return 0;
}
##else
//距離指定的日期已經(jīng)過(guò)去的天數(shù)
#include <stdio.h>
int main(int argc,char *argv[])
{
    int year,month,day,i,sum = 0,count = 0;
    printf("請(qǐng)輸入年份:");
    scanf("%d",&year);
    printf("請(qǐng)輸入月份:");
    scanf("%d",&month);
    printf("請(qǐng)輸入日期:");
    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);//一共過(guò)了多少天

    return 0;
}
##else
//打印指定月份的日歷
#include <stdio.h>
int main(int argc,char *argv[])
{
    int year,month,day,i,sum = 0,count = 0;
    printf("請(qǐng)輸入年份:");
    scanf("%d",&year);
    printf("請(qǐng)輸入月份:");
    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;
}
//向數(shù)組中輸入10個(gè)數(shù)求出最大值
#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;
}
//二維數(shù)組賦值
#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個(gè)質(zhì)數(shù)放到數(shù)組中
#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;//跳出所有循環(huán)
        }
        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;
}
//數(shù)組賦值
#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;
}
//根據(jù)兩個(gè)具體日期算出過(guò)了多少天
#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("請(qǐng)輸入出生年份:");
    scanf("%d",&year1);getchar();
    printf("請(qǐng)輸入出生月份:");
    scanf("%d",&month1);getchar();
    printf("請(qǐng)輸入出生日期:");
    scanf("%d",&day1);getchar();
    printf("請(qǐng)輸入當(dāng)前年份:");
    scanf("%d",&year);getchar();
    printf("請(qǐng)輸入當(dāng)前月份:");
    scanf("%d",&month);getchar();
    printf("請(qǐng)輸入當(dāng)前日期:");
    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);//今年天數(shù)

    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("已經(jīng)出生%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);//提示只能輸入數(shù)字,可以不加
    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;
}
//自冪數(shù)
#include <stdio.h>
int main(int argc,char *argv[])
{//自冪數(shù)從三位數(shù)開始
    int num,i = 100,j,k,m,n,sum;
    printf("請(qǐng)輸入一個(gè)數(shù):");
    scanf("%d",&num);
    while(i < num)
    {
        j = i;
        k = 0;//求出位數(shù)
        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;
}

在程序設(shè)計(jì)中,為了方便,把具有相同類型的若干變量按有序的形式組織起來(lái)。這些按序排列的同類元素的集合稱為數(shù)組。數(shù)組屬于構(gòu)造類型,數(shù)組也可分解為多個(gè)數(shù)組,這些數(shù)組是由基本構(gòu)造類型構(gòu)成的。
數(shù)組可以分為:數(shù)值數(shù)組,字符數(shù)組,指針數(shù)組,結(jié)構(gòu)體數(shù)組等。

1:一維數(shù)組的定義和引用。
怎樣定義一維數(shù)組
定義一維數(shù)組的一般形式:類型說(shuō)明符 數(shù)組名[常量表達(dá)式];
int a[10]; //它表示定義了一個(gè)整型數(shù)組,數(shù)組名為a,此數(shù)組有10個(gè)整型元素;
float b[10],c[20];
char ch[5];
(1)數(shù)組的類型實(shí)際上指的是數(shù)組元素的類型,數(shù)組中的每一個(gè)元素都屬于同一數(shù)據(jù)類型,不能把不同類型的數(shù)據(jù)放在同一數(shù)組中;
(2)數(shù)組名不能與其他變量名相同;

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

(3):數(shù)組名的書寫規(guī)則應(yīng)符合標(biāo)識(shí)符書寫規(guī)則。
(4):方括號(hào)的常量表示數(shù)組元素個(gè)數(shù)
(5):不能在方括號(hào)中使用變量來(lái)表示元素個(gè)數(shù),但是可以使用符號(hào)常量和常量表達(dá)式;(宏定義)

3.一維數(shù)組的引用
數(shù)組元素的一般形式為:數(shù)組名[下標(biāo)]
其中下標(biāo)只能是整型常量或整型表達(dá)式。
a[5]
a[i+j]
a[i++]
這些都是合法數(shù)組元素

 例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.一維數(shù)組的初始化
數(shù)組的賦值方法除了可以用賦值語(yǔ)句,還可以初始化。
初始化賦值的一般形式:類型說(shuō)明符 數(shù)組名[常量表達(dá)式] = {值,值,……,值};
例如:int a[10]={0,1,2,3,4,5,6,7,8,9};//相當(dāng)于a[0]=0,a[1]=1……a[9]=9;
(1)可以只給部分元素賦值
int a[10]={0,1,2,3,4};
表示只給a[0]~a[5]賦值,其他值默認(rèn)為0;
(2)只能逐個(gè)賦值,不能給數(shù)組整體賦值
例:需要給數(shù)組中10個(gè)元素全部賦1
int a[10]={1,1,1,1,1,1,1,1,1,1};
不能寫成 int a[10]=1;
(3)也可以不給出元素的個(gè)數(shù),直接給所有元素賦值
例:int a[5]={1,2,3,4,5};
可寫成 int a[]={1,2,3,4,5};

注:a[5]={1,2,3,4,5,6};//這是錯(cuò)誤的寫法,元素個(gè)數(shù)不能大于下標(biāo)最大值;

一維數(shù)組程序舉例:求輸入的十個(gè)數(shù)中的最大值

 int main(int argc, char const *argv[])
 {
     int i,max,a[10];
     printf("請(qǐng)輸入10個(gè)數(shù)\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.二維數(shù)組的定義
前面介紹的數(shù)組只有一個(gè)下標(biāo),稱為一維數(shù)組,其數(shù)組元素也稱為單下標(biāo)變量。
在實(shí)際問(wèn)題中很多量是二維或多維的,C語(yǔ)言允許構(gòu)造多維數(shù)組。
二維數(shù)組定義的一般形式:類型說(shuō)明符 數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]
其中常量表達(dá)式1表示第一維下標(biāo)的長(zhǎng)度,常量表達(dá)式2表示第二維下標(biāo)的度;

例:int a[3][4];//該數(shù)組的小標(biāo)變量一共3*4個(gè)
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.二維數(shù)組元素的引用
二維數(shù)組元素的表達(dá)形式為:
數(shù)組名[下標(biāo)][下標(biāo)]
例:a[3][4]

7.二維數(shù)組的初始化
二維數(shù)組的可按分段賦值,也可以連續(xù)賦值
例如對(duì)數(shù)組a[5][3]
(1)分段賦值
a[5][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15}};
(2)連續(xù)賦值
a[5][3]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
兩種賦值結(jié)果完全相同

二維數(shù)組賦值特別說(shuō)明:
(1)可以只對(duì)部分元素賦值,未賦值元素自動(dòng)取0值。
例:int a[3][3]={{1},{2},{3}};
是對(duì)每行的第一列元素進(jìn)行賦值,未賦值取零,結(jié)果如下
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)如果對(duì)全部元素進(jìn)行賦值,則第一維的長(zhǎng)度可以不給出
例: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};

二維數(shù)組的初始化:
王 張 李 趙 周
Math 80 61 59 85 76
C 75 65 63 87 77
Chinese 92 71 70 90 85

一個(gè)二維數(shù)組a[5][3]存放五個(gè)人三科成績(jī),再設(shè)一個(gè)一維數(shù)組v[3]存放所求得各學(xué)科平均成績(jī)。

 int main(int argc, char const *argv[])
 {
 int i,j,s=0,average;
 int v[3],a[5][3];

 printf("請(qǐng)輸入成績(jī)\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("各科平均成績(jī) Math:%d,C:%d,Chinese:%d.\n",v[0],v[1],v[2]);
 printf("總分的平均成績(jī)?yōu)?d\n",average);
 return 0;
 }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容