基于c語言的linux嵌入式開發(fā)入門

前言

本文主要包含捅伤,c語言基本結(jié)構(gòu)與語法、make及makefile的使用难衰、main函數(shù)參數(shù)與返回值的說明钦无、標(biāo)準(zhǔn)輸入、輸出盖袭、錯誤流的介紹以及l(fā)inux管道的應(yīng)用失暂。

語言數(shù)據(jù)類型

聯(lián)合體也有翻譯為共用體的,結(jié)構(gòu)類型鳄虱,也有翻譯為結(jié)構(gòu)體的弟塞,僅僅是翻譯問題,類型是一樣的

每個變量都會占用一定的存儲單元拙已。

image

符號常量

100 // 直接常量
"Hello"

#define PI 3.14 //符號常量

自動類型轉(zhuǎn)換

image

強(qiáng)制類型轉(zhuǎn)換

image

在使用強(qiáng)制轉(zhuǎn)換時(shí)應(yīng)注意以下問題:

1决记、數(shù)據(jù)類型和表達(dá)式都必須加括號,如把(int)(x/2+y)寫成(int)x/2+y則成了把x轉(zhuǎn)換成int型之后再除2再與y相加了倍踪。

2系宫、轉(zhuǎn)換后不會改變原數(shù)據(jù)的類型及變量值,只在本次運(yùn)算中臨時(shí)性轉(zhuǎn)換建车。

3扩借、強(qiáng)制轉(zhuǎn)換后的運(yùn)算結(jié)果不遵循四舍五入原則。

計(jì)算順序

int a = 3; b = 4;計(jì)算a+b%(a+b)/a+a*b-b該算式的運(yùn)算結(jié)果

計(jì)算順序
1缤至、a+b
2往枷、b%(a+b)/a和ab
3、a+b%(a+b)/a+a
b-b

小的數(shù)字mod 大的數(shù)字,余數(shù)還是其本身错洁。

運(yùn)算符優(yōu)先級

圖片.png

爆破彗星是個什么樣的游戲秉宿?

C語言變量存儲類別

C語言根據(jù)變量的生存周期來劃分,可以分為靜態(tài)存儲方式和動態(tài)存儲方式屯碴。

靜態(tài)存儲方式:是指在程序運(yùn)行期間分配固定的存儲空間的方式描睦。靜態(tài)存儲區(qū)中存放了在整個程序執(zhí)行過程中都存在的變量,如全局變量导而。

動態(tài)存儲方式:是指在程序運(yùn)行期間根據(jù)需要進(jìn)行動態(tài)的分配存儲空間的方式忱叭。動態(tài)存儲區(qū)中存放的變量是根據(jù)程序運(yùn)行的需要而建立和釋放的,通常包括:函數(shù)形式參數(shù)今艺;自動變量韵丑;函數(shù)調(diào)用時(shí)的現(xiàn)場保護(hù)和返回地址等。

C語言中存儲類別又分為四類:自動(auto)虚缎、靜態(tài)(static)撵彻、寄存器的(register)和外部的(extern)。

1实牡、用關(guān)鍵字auto定義的變量為自動變量陌僵,auto可以省略,auto不寫則隱含定為“自動存儲類別”创坞,屬于動態(tài)存儲方式碗短。
2、用static修飾的為靜態(tài)變量题涨,如果定義在函數(shù)內(nèi)部的偎谁,稱之為靜態(tài)局部變量;如果定義在函數(shù)外部纲堵,稱之為靜態(tài)外部變量巡雨。函數(shù)的形式參數(shù)不可以說明為satic類型。

注意:靜態(tài)局部變量屬于靜態(tài)存儲類別婉支,在靜態(tài)存儲區(qū)內(nèi)分配存儲單元,在程序整個運(yùn)行期間都不釋放澜建;靜態(tài)局部變量在編譯時(shí)賦初值向挖,即只賦初值一次;如果在定義局部變量時(shí)不賦初值的話炕舵,則對靜態(tài)局部變量來說何之,編譯時(shí)自動賦初值0(對數(shù)值型變量)或空字符(對字符變量)。

3咽筋、為了提高效率溶推,C語言允許將局部變量得值放在CPU中的寄存器中,這種變量叫“寄存器變量”,用關(guān)鍵字register作聲明蒜危。

注意:只有局部自動變量和形式參數(shù)可以作為寄存器變量虱痕;一個計(jì)算機(jī)系統(tǒng)中的寄存器數(shù)目有限,不能定義任意多個寄存器變量辐赞;局部靜態(tài)變量不能定義為寄存器變量部翘。

4、用extern聲明的的變量是外部變量响委,外部變量的意義是某函數(shù)可以調(diào)用在該函數(shù)之后定義的變量新思。

#include <stdio.h>
void fn()
{
    static int x = 1;   //定義靜態(tài)局部變量
    x*=2;
    printf("x=%d\n",x);     
}

int main()
{
    int i;
    for(i=0;i<5;i++)
    {
        fn();
    }
    extern int x;      //調(diào)用外部變量
    printf("x=%d\n",x);
    return 0;
}
int x=100;

內(nèi)部函數(shù)與外部函數(shù)

人本身是有自己的特定方法的,比如當(dāng)你說話的時(shí)候赘风,不希望是別人讓你怎么說你就怎么說吧夹囚,那么這種不能被外人調(diào)用的方法稱為人的內(nèi)部方法。人本身還有一些可以調(diào)配的方法邀窃,比如當(dāng)你家人跟你說荸哟,家里沒有鹽了,你去買袋鹽蛔翅,去買鹽就是他人調(diào)用你的方法敲茄,那么能被外人調(diào)用的方法稱謂外部方法。

在C語言中不能被其他源文件調(diào)用的函數(shù)稱謂內(nèi)部函數(shù) 山析,內(nèi)部函數(shù)由static關(guān)鍵字來定義堰燎,因此又被稱謂靜態(tài)函數(shù),形式為:

static [數(shù)據(jù)類型] 函數(shù)名([參數(shù)])

這里的static是對函數(shù)的作用范圍的一個限定笋轨,限定該函數(shù)只能在其所處的源文件中使用秆剪,因此在不同文件中出現(xiàn)相同的函數(shù)名稱的內(nèi)部函數(shù)是沒有問題的。

在C語言中能被其他源文件調(diào)用的函數(shù)稱謂外部函數(shù) 爵政,外部函數(shù)由extern關(guān)鍵字來定義仅讽,形式為:

extern [數(shù)據(jù)類型] 函數(shù)名([參數(shù)])

C語言規(guī)定,在沒有指定函數(shù)的作用范圍時(shí)钾挟,系統(tǒng)會默認(rèn)認(rèn)為是外部函數(shù)洁灵,因此當(dāng)需要定義外部函數(shù)時(shí)extern也可以省略。

字符串函數(shù)

注:C語言中不存在字符串變量掺出,字符串只能存在字符數(shù)組中徽千。使用這個工具類#include <string.h>

image

多維數(shù)組的定義

數(shù)組:是一塊連續(xù)的,大小固定并且里面的數(shù)據(jù)類型一致的內(nèi)存空間汤锨,在聲明數(shù)組后沒有進(jìn)行初始化的時(shí)候双抽,靜態(tài)(static)和外部(extern)類型的數(shù)組元素初始化元素為0,自動(auto)類型的數(shù)組的元素初始化值不確定闲礼。另外牍汹,二維數(shù)組一定要指定列數(shù)铐维。

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

int x[4][3] = {{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
int x[][3] = {1,2,3,4};

linux嵌入式開發(fā)

linux嵌入式開發(fā),其實(shí)就是用C語言開發(fā)的小工具慎菲。(例如cd嫁蛇、ls啥的都是linux嵌入式程序),另外钧嘶,還可以用C語言開發(fā)與硬件打交道的程序(例如os(win棠众、linux、ios有决、android)闸拿、arm嵌入式、單片機(jī)书幕、arduino)新荤,這是因?yàn)椋珻語言有指針台汇,可以直接操縱內(nèi)存苛骨,因此,可以做硬件編程苟呐。另外痒芝,C語言開發(fā)的程序很搞效,nginx就是c寫的牵素,apache是c++寫的严衬,nginx更加高效。

開發(fā)環(huán)境

mac笆呆、linux(ubuntu请琳、centos),ubuntu之所以有amd64赠幕,是因?yàn)槎砭琣md是最早推出64版本的cpu的,因此榕堰,沿用了這個說法竖慧,現(xiàn)在intel的cpu也是支持ubuntu的。

1.檢查編譯器:cc -v = gcc -v逆屡,gcc name1.c name2.c -o xxx.out
2.編譯 gcc -c 文件名 -o 文件名.o
3.gcc max.o hello.c
2.創(chuàng)建文件:touch 文件名

-rwxrwxr-x

其中第一組表示圾旨,當(dāng)前用戶,第二組表示當(dāng)前組康二,第三組表示不是當(dāng)前用戶碳胳,也不是當(dāng)前組

vim

1.shift + i 行首
2.shift + a 行尾
3.o換行
4.shift + o上一行插入
4.dd整行刪除
5.x刪除
6.space * 4 = tab
7.sp打開多個vim界面
8.ctrl + w+下箭頭勇蝙,就跳轉(zhuǎn)到了下邊的窗口
9.set nu打開行號

全部格式化 : gg=G
對當(dāng)前行格式化(縮進(jìn)): ==
對以下多行格式化(倍數(shù)操作): [count] ==
選擇多行后, 執(zhí)行 等號命令 =

開發(fā)

helloworld.c

gcc max.o min.o helloworld.c -o helloworld.o

#include <stdio.h> // 標(biāo)準(zhǔn)的輸入輸出流
#include "max.h"
#include "min.h"

// 或者把頭文件里的定義放到一個文件中 

int main(int argv,char* argc[]) // 不要寫 void了沫勿,返回int有意義
{
        int leftnum = 14;
        int rightnum = 57;
        int maxnum = max(leftnum ,rightnum );
        int minnum = min(leftnum ,rightnum );
        printf("Hello World\n");
        printf("max num is %d\n",maxnum);
        printf("max num is %d\n",minnum );
        return 0;
}

main函數(shù)的返回值

在linux下挨约,可以通過echo $?,來查看之前執(zhí)行的程序的返回值产雹,只有返回值為0诫惭,才表示執(zhí)行成功,否則蔓挖,就是執(zhí)行失敗共缕。

echo $?
0

因此惕橙,return 0 ,部署隨便寫的,是有意義的利耍。

main函數(shù)的參數(shù)

通過參數(shù),可以賦值給不同的參數(shù)選項(xiàng)

#include <stdio.h> // 標(biāo)準(zhǔn)的輸入輸出流
  
int main(int argv,char* argc[]) // 不要寫 void了待榔,返回int有意義
{
        printf("argv is %d\n",argv);
        int i;
        for(i=0;i<argv;i++){

                printf("argc[%d] is %s\n",i,argc[i] );

        }
        return 0;
}


gcc arytes.c -o arykill.o
 ./arykill.o -8 // 操作系統(tǒng)向程序傳遞參數(shù)
argv is 2
argc[0] is ./arykill.o
argc[1] is -8

max.c

gcc -c max.c -o max.o

int max(int a,int b){
        if(a>b){
                return a;
        }else{
                return b;
        }
}

min.c

gcc -c min.c -o min.o

int min(int a,int b){
        if(a<b){
                return a;
        }else{
                return b;
        }
}

max.h

int max(int a,int b);

min.h

int min(int a,int b);

結(jié)果

Hello World
max num is 57
max num is 14
C語言編譯屁使、組合多文件,自建頭文件

只需要編譯 帶有main函數(shù)的那個文件匆瓜,把不會再修改的函數(shù)赢笨,放到公共框架內(nèi),公共類內(nèi)驮吱,并生成靜態(tài)庫茧妒,打包放在一起。

makeFile

用make進(jìn)行編譯左冬,make內(nèi)部其實(shí)使用的也是gcc桐筏。通過make把大型開發(fā)項(xiàng)目分成若干個模塊。但是又碌,一般情況下九昧,都是使用makefile文件,來進(jìn)行結(jié)構(gòu)化構(gòu)建毕匀。

對于上方的c語言代碼铸鹰,我們來進(jìn)行makefile的構(gòu)建

# this is make file
testmake.o:max.o min.o helloworld.c
                     gcc max.o min.o helloworld.c -o testall.o
max.o:max.c
                    gcc -c max.c
min.o:min.c
                    gcc -c min.c

結(jié)果

make && ls
gcc -c max.c
gcc -c min.c
gcc max.o min.o helloworld.c -o testall.out
Makefile  all.h  helloworld.c  ji.c  max.c  max.h  max.o  min.c  min.h  min.o  testall.c  testall.out
./testall.out 
Hello World
max num is 57
max num is 14

linux嵌入式標(biāo)準(zhǔn)流

linux介文件

啟動每一個c語言程序,只要include <stdio.h>皂岔,就會自動開啟三個處理程序的文件工具stdin(標(biāo)準(zhǔn)輸入流蹋笼,讀)、stdout(標(biāo)準(zhǔn)輸出流躁垛,寫剖毯,默認(rèn)指向顯示器)、stderr(標(biāo)準(zhǔn)錯誤流教馆,報(bào)錯)幾個文件逊谋。

stdin、stdout土铺、stderr都是文件胶滋,其實(shí)輸入板鬓、輸出、報(bào)錯究恤,就是看操作的文件是啥就可以了俭令,都有默認(rèn)的指向。

#include <stdio.h>
  
int main(){

        printf("hello world!\n");
        fprintf(stdout,"please input the value a:\n");
        int a;
        scanf("%d",&a);//&a表示取a的地址部宿。
        fscanf(stdin,"%d",&a);
        printf("input value is : %d\n",a);
        if(a<0){
                fprintf(stderr,"the value must > 0\n");
                return 500;
        }
        return 0;
}

流的重定向

重定向到文件抄腔,可以多次寫入到該文件中
./a.out 1>> a.txt
ls /etc >> etc.txt
重定向到文件,覆蓋寫入到該文件中
ls /etc > etc.txt
重定向到文件理张,1輸出流赫蛇,2代表錯誤輸出流
./a.out 1>t.txt 2>f.txt
重定向文件,輸入流<input.txt
./a.out 1>t.txt 2>f.txt <input.txt

管道

|表示一個管道
grep 從輸入(流)的文本文檔中雾叭,查詢包含指定字符的行棍掐,并顯示到輸出流中

ls /etc/ | grep aa
ps -e | grep ssh

通過管道,將前一個結(jié)果的輸出流拷况,作為后一個程序的輸入流作煌。

編寫應(yīng)用程序并使用管道

自己可以編寫兩個程序,讓其中一個的輸入作為下一個的輸出

#include <stdio.h>
  

int main(){

        int count =0;
        int s;
        int w = 0;
        int flag = 1;

        while(flag){

                scanf("%d",&s);

                if(0==s)break;

                count++;
                w+=s;
//              printf("%d,%d\n",s,count); 切記赚瘦,只能有一個輸出粟誓,否則記錄的是一次的輸出,并將其傳到管道中


        }

        printf("%d,%d",w,count);


        return 0;

}

#include <stdio.h>
  
int main(){

        int s,n;
        scanf("%d,%d",&s,&n);
        float result = s/n;
        printf("%d個人的平均值是%f\n",n,result);
        return 0;

}

結(jié)果

./f.o | ./a.out 
3000
5000
9000
1234
5678
9999
0
6個人的平均值是5651.000000

附錄

閏年

#include <stdio.h>
int main() 
{
    int year = 2014; //今年是2014年
    //補(bǔ)全一下代碼
    
    if(year%4==0&&(year%100!=0||year%400==0)){
        
        printf("今年是閏年");
        
    }else{
        printf("今年是平年");
    }
    
    return 0;
}

4年一閏起意,百年不閏鹰服,400年再閏(對于數(shù)值很大的年份,如果這年能整除3200并且能整除172800則是閏年)

水仙花數(shù)

一個三位數(shù)揽咕,其各位數(shù)字立方和等于該數(shù)

#include <stdio.h>
int main()
{
    //定義三位數(shù)num,個位數(shù)sd,十位數(shù)td,百位數(shù)hd
    int num, sd, td, hd;
    //循環(huán)所有三位數(shù)
    for(   num =100 ;  num<1000  ; num++  )
    {
        //獲取三位數(shù)字num百位上的數(shù)字
        hd =    num /100             ;
        //獲取三位數(shù)字num十位上的數(shù)字
        td =            (num - hd*100)/10     ;
        //獲取三位數(shù)字num個位上的數(shù)字
        sd =    num -hd*100 -td*10              ;
        //水仙花數(shù)的條件是什么悲酷?
        if(     hd*hd*hd + td*td*td + sd*sd*sd==num             ) 
        {
            printf("水仙花數(shù)字:%d\n", num);    
        }
    }
    return 0;    
}

輸出個三角

#include <stdio.h>
int main()
{
    int i, j, k;
    for(i=1; i<5; i++)
    {
        /* 觀察每行的空格數(shù)量,補(bǔ)全循環(huán)條件 */
        
        for(j=i;j<5;j++)  
        {
            printf(" ");    //輸出空格
        }
        /* 觀察每行*號的數(shù)量亲善,補(bǔ)全循環(huán)條件 */
        for( k=0 ;  k<i*2-1 ;  k++   ) 
        {
            printf("*");   //每行輸出的*號
        }
        printf("\n");     //每次循環(huán)換行
    }
    return 0;
}

    *
   ***
  *****
 *******

乘法梯形

#include <stdio.h>
int main() 
{ 

    int i, j, result;

    
   
        for(j=9;j>0;j--){
             for(i=1;i<=j;i++)
         {
            printf("%d*%d=%d",j,i,j*i);
            printf(" ");
            
        }
        printf("\n");        
        
    }
    
    return 0;
}

9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 
4*1=4 4*2=8 4*3=12 4*4=16 
3*1=3 3*2=6 3*3=9 
2*1=2 2*2=4 
1*1=1 

找出素?cái)?shù)(質(zhì)數(shù))

#include <stdio.h>
int main()
{
    int m, n;
    for(m=2; m<=50; m++)
    {
        for(n=2; n<m; n++)
        {
            if(  m%n==0  )       //什么條件下跳出當(dāng)前循環(huán)
              break;               //這里應(yīng)該退出當(dāng)前循環(huán)了
        }   
        if(m == n)   //n循環(huán)結(jié)束后设易,如果m=n的話就輸出m
            printf("%d  ", m);
    }
    return 0;    
}

遞歸

遞歸就是一個函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身。

計(jì)算n的階乘

#include <stdio.h>
int factorial(int n){
      int result;
if(n<0)
{

printf("輸入錯誤蛹头!\n");
return 0;
}else if(0==n||1==n){
return 1;
}else{

result =factorial(n-1)*n;
}

return result;
}

int main(){
int n=6;
printf("%d的階乘=%d\n",n,factorial(n));
return 0;

}
image

遞歸函數(shù)特點(diǎn)

每一級函數(shù)調(diào)用時(shí)都有自己的變量顿肺,但是函數(shù)代碼并不會得到復(fù)制,如計(jì)算5的階乘時(shí)每遞推一次變量都不同渣蜗;
每次調(diào)用都會有一次返回屠尊,如計(jì)算5的階乘時(shí)每遞推一次都返回進(jìn)行下一次;
遞歸函數(shù)中耕拷,位于遞歸調(diào)用前的語句和各級被調(diào)用函數(shù)具有相同的執(zhí)行順序讼昆;
遞歸函數(shù)中,位于遞歸調(diào)用后的語句的執(zhí)行順序和各個被調(diào)用函數(shù)的順序相反骚烧;
遞歸函數(shù)中必須有終止語句浸赫。
一句話總結(jié)遞歸:自我調(diào)用且有完成狀態(tài)嫌吠。

例如:

猴子第一天摘下N個桃子,當(dāng)時(shí)就吃了一半掺炭,還不過癮,就又多吃了一個凭戴。第二天又將剩下的桃子吃掉一半涧狮,又多吃了一個。以后每天都吃前一天剩下的一半零一個么夫。到第10天在想吃的時(shí)候就剩一個桃子了,問第一天共摘下來多少個桃子者冤?并反向打印每天所剩桃子數(shù)。

#include <stdio.h>

int getPeachNumber(int n)
{
    int num;    //定義所剩桃子數(shù)
    if(n==10)
    {
       return 1;      //遞歸結(jié)束條件
    } 
    else
    {
        num = (getPeachNumber(n+1)+1)*2;   //這里是不應(yīng)該用遞歸呢档痪?
        printf("第%d天所剩桃子%d個\n", n, num); //天數(shù)涉枫,所剩桃子個數(shù)
    }
    
    return num;
}

int main()
{
    int num = getPeachNumber(1);
    printf("猴子第一天摘了:%d個桃子。\n", num);
    return 0;
}

第9天所剩桃子4個
第8天所剩桃子10個
第7天所剩桃子22個
第6天所剩桃子46個
第5天所剩桃子94個
第4天所剩桃子190個
第3天所剩桃子382個
第2天所剩桃子766個
第1天所剩桃子1534個
猴子第一天摘了:1534個桃子腐螟。

做遞歸的問題愿汰,關(guān)鍵是找到突破口。再比如:

有5個人坐在一起乐纸,問第5個人多少歲衬廷?他說比第4個人大2歲。問第4個人歲數(shù)汽绢,他說比第3個人大2歲吗跋。問第3個人,又說比第2人大兩歲宁昭。問第2個人跌宛,說比第1個人大兩歲。最后 問第1個人积仗,他說是10歲疆拘。請問第5個人多大?

#include <stdio.h> 

int guessAge(int n){
    
    
    int _age;
    
    
    if(n==1){
        return 10;
    }else{
        
        _age = guessAge(n-1) + 2;
        
    }
    
    return _age;
    
}

int main() 
{
    
    int _age = guessAge(5);
    printf("第5個人的年齡是%d歲", _age); 
    return 0;
}

每日學(xué)習(xí)單詞

#include <stdio.h>
/* 定義獲取單詞數(shù)量的函數(shù) */
int getWordNumber(int n)
{   
    if(n == 1)
    {
        return 1;    //第一天只會1個單詞
    }
    else{
        return getWordNumber(n-1)+n ;       //到第天會的單詞數(shù)量
    }
}
int main()
{
    int num = getWordNumber(10);     //獲取會了的單詞數(shù)量
    printf("小明第10天記了:%d個單詞寂曹。\n", num);
    return 0;
}

獲取數(shù)組長度

#include <stdio.h>
int main()
{
    int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

   int i = 0;
   int length = sizeof(arr)/sizeof(arr[0]);
   for(i = 0;i<length;i++)
   {
       
       printf("%d\n",arr[i]);
   }
   
    return 0;
}

字符串?dāng)?shù)組

使用%c和%s的技巧不一樣入问,需要注意。

#include <stdio.h>
/* 定義say函數(shù) */
void say(char string[])       //數(shù)組參數(shù)應(yīng)該怎么寫呢稀颁?
{
    printf("%s\n",string);
}

int main()
{
    //定義字符串?dāng)?shù)組
    char string[] = "我在慕課網(wǎng)上學(xué)習(xí)IT技能芬失!";
    int i = 0;
    //for(;i<sizeof(string)/sizeof(string[0]);i++)
    //{
         say(string);              //調(diào)用say函數(shù)輸出字符串
    //}
   
    return 0;
}

做個排序的題

在一個長度為10的整型數(shù)組里面,保存了班級10個學(xué)生的考試成績匾灶。要求編寫5個函數(shù)棱烂,分別實(shí)現(xiàn)計(jì)算考試的總分,最高分阶女,最低分颊糜,平均分和考試成績降序排序哩治。

排序請用多種排序方式,此處衬鱼,沒有實(shí)現(xiàn)c語言的數(shù)組返回业筏,需要繼續(xù)深入學(xué)習(xí),后續(xù)補(bǔ)充這個文章鸟赫。

#include <stdio.h>

double _Avg(int score[],int _length){
    
    int i = 0;
    double sum = 0;
    for(;i<_length;i++){
        sum+=score[i];
    }
    
    if(_length!=0){
         return sum/_length;
    }else{
         return 0.0;
    }
}

int* _Desc(int score[],int _length){
    
    //  int i = 0;
    //   int _desc_score[];
   
    // for(;i<_length;i++){
    //     _desc_score[i]=score[i];
    // }
    

    
    return score;
}

int main()
{
    int score[]={67,98,75,63,82,79,81,91,66,84};
    int _length = sizeof(score)/sizeof(score[0]);
    
    
    printf("總分是:%d\n",_Total(score,_length));
    printf("最高分是:%d\n",_Max(score,_length));
    printf("最低分是:%d\n",_Min(score,_length));
    printf("平均分是:%f\n",_Avg(score,_length));
    printf("NULL-Avg是:%d\n",_Avg(score,NULL));
    
    
    int _desc_score[] =_Desc(score,_length);
    printf("考試成績降序排序是:");
    int j = 0;
    
    for(;j<_length;j++){
        printf("%d,",_desc_score[j]);
    }
    
    printf("\n");
    
    
    
    return 0;
}


int _Total(int score[],int _length){
    
    int i = 0;
    int sum = 0;
    for(;i<_length;i++){
        sum+=score[i];
    }
    
    return sum;
}

int _Max(int score[],int _length){
    int i = 0;
    int _max = 0;
    for(;i<_length;i++){
        if(_max<=score[i]){
        _max = score[i];
        }
        
        
    }
    
    return _max;
}

int _Min(int score[],int _length){
        int i = 0;
    int _min = score[0];
    for(;i<_length;i++){
        if(_min>=score[i]){
        _min = score[i];
        }
        
    }
    
    return _min;
}




計(jì)算一年中的第幾天

#include <stdio.h>
int main() 
{ 
    /* 定義需要計(jì)算的日期 */
    int year = 2008;
    int month = 8;
    int day = 8;
    /*
     * 請使用switch語句蒜胖,if...else語句完成本題
     * 如有想看小編思路的,可以點(diǎn)擊左側(cè)任務(wù)中的“不會了怎么辦”
     * 小編還是希望大家獨(dú)立完成哦~
     */
    
    int sum = 0;
    int i=0;
    for(i = 0;i<month;i++){
        
 
    switch(i){
        case 1:sum+=31;break;
        case 2:sum+=28;break;
        case 3:sum+=31;break;
        case 4:sum+=30;break;
        case 5:sum+=31;break;
        case 6:sum+=30;break;
        case 7:sum+=31;break;
        case 8:sum+=31;break;
        case 9:sum+=30;break;
        case 10:sum+=31;break;
        case 11:sum+=30;break;
        case 12:sum+=31;break;
    }
    
    
    }  
    
    
    if(year%4==0&&(year%100!=0||year%400==0)){
        
        sum+=1;
        
    }
    

printf("2008年8月8日是該年的第%d天抛蚤。",sum+day);



    return 0;
}

2008年8月8日是該年的第221天台谢。

遺留問題

1.函數(shù)如何返回?cái)?shù)組或者對象。
2.static靜態(tài)的岁经,在C語言中如何深入理解朋沮。
3.排序算法和查找算法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缀壤,一起剝皮案震驚了整個濱河市樊拓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌塘慕,老刑警劉巖骑脱,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苍糠,居然都是意外死亡叁丧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門岳瞭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拥娄,“玉大人,你說我怎么就攤上這事瞳筏≈神” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵姚炕,是天一觀的道長摊欠。 經(jīng)常有香客問我,道長柱宦,這世上最難降的妖魔是什么些椒? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮掸刊,結(jié)果婚禮上免糕,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好石窑,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布牌芋。 她就那樣靜靜地躺著,像睡著了一般松逊。 火紅的嫁衣襯著肌膚如雪躺屁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天经宏,我揣著相機(jī)與錄音犀暑,去河邊找鬼。 笑死烛恤,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的余耽。 我是一名探鬼主播缚柏,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碟贾!你這毒婦竟也來了币喧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤袱耽,失蹤者是張志新(化名)和其女友劉穎杀餐,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朱巨,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡史翘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冀续。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琼讽。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖洪唐,靈堂內(nèi)的尸體忽然破棺而出钻蹬,到底是詐尸還是另有隱情,我是刑警寧澤凭需,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布问欠,位于F島的核電站,受9級特大地震影響粒蜈,放射性物質(zhì)發(fā)生泄漏顺献。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一枯怖、第九天 我趴在偏房一處隱蔽的房頂上張望滚澜。 院中可真熱鬧,春花似錦、人聲如沸设捐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萝招。三九已至蚂斤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間槐沼,已是汗流浹背曙蒸。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岗钩,地道東北人纽窟。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像兼吓,于是被迫代替她去往敵國和親臂港。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 專業(yè)考題類型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D選項(xiàng)E選項(xiàng)F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 8,975評論 0 13
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,325評論 0 2
  • Linux嵌入式视搏,硬件編程审孽,有高性能要求的應(yīng)用程序sudo apt-get update -> sudo apt-...
    KevinCool閱讀 753評論 0 2
  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,815評論 0 5
  • GCC(GNU Compiler Collection)是Linux下最常用的C語言編譯器浑娜,是GNU項(xiàng)目中符合AN...
    小辰帶你看世界閱讀 1,474評論 0 3