前言
本文主要包含捅伤,c語言基本結(jié)構(gòu)與語法、make及makefile的使用难衰、main函數(shù)參數(shù)與返回值的說明钦无、標(biāo)準(zhǔn)輸入、輸出盖袭、錯誤流的介紹以及l(fā)inux管道的應(yīng)用失暂。
聯(lián)合體也有翻譯為共用體的,結(jié)構(gòu)類型鳄虱,也有翻譯為結(jié)構(gòu)體的弟塞,僅僅是翻譯問題,類型是一樣的
每個變量都會占用一定的存儲單元拙已。
符號常量
100 // 直接常量
"Hello"
#define PI 3.14 //符號常量
自動類型轉(zhuǎn)換
強(qiáng)制類型轉(zhuǎn)換
在使用強(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+ab-b
小的數(shù)字mod 大的數(shù)字,余數(shù)還是其本身错洁。
運(yùn)算符優(yōu)先級
爆破彗星是個什么樣的游戲秉宿?
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>
多維數(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
只需要編譯 帶有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;
}
遞歸函數(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.排序算法和查找算法。