⑴ 編寫簡單的單片機c語言程序 1、指定數組找最大值 2、排序
#include<stdio.h>
#defineNR10//數組元素個數
/*從主函數開始*/
intmain(intargc,char**argv)
{
intar[NR];
inti;
fprintf(stdout,"請輸入%d個整數: ",NR);
/*獲取並檢查用戶輸入*/
while(1)
{
/*循環獲取NR個數據*/
for(i=0;i<NR;i++)
{
if(fscanf(stdin,"%d",&ar[i])!=1)
{
fprintf(stdout,"輸入錯誤!請重新輸入: ");
while(getchar()!=' ');//丟棄多餘非法字元
break;//打破內層for循環
}
}
/*檢查是否獲取到NR個數據*/
if(i!=NR)
{
continue;
}
else
{
break;
}
}
/*查找最大值和最小值*/
intmax,min;
max=ar[0];//假定第一個數為最大值
min=ar[0];//同時假定也第一個數為最大值
/*從第二個數開始比較查找最值*/
for(i=1;i<NR;i++)
{
if(ar[i]>max)//最大值
{
max=ar[i];
}
if(ar[i]<min)//最小值,不能使用elseif,否則會跳過比較
{
min=ar[i];
}
}
fprintf(stdout,"最大值為:%d最小值為:%d ",max,min);
/*接下來:查找第二大值*/
intsecond;
/*先獲取前兩個數的第一大和第二大值*/
ar[0]>ar[1]?(max=ar[0],second=ar[1]):
(max=ar[1],second=ar[0]);
/*從第2個數開始比較查找*/
for(i=2;i<NR;i++)
{
if(ar[i]>max)//查找最大值:目的是為了比較第二大值
{
second=max;//先把最大值保存給第二大值
max=ar[i];
}
elseif(second<ar[i])//比最大值小的數再看看是否大於第二大值
{
second=ar[i];
}
}
fprintf(stdout,"第二大值為:%d ",second);
return0;
}
(1)單片機數組函數擴展閱讀
一、c語言程序求數組內所有數的和:
1、通過索引的方式就可以訪問到數組內部的元素,索引是從0到數組長度-1。
2、數組點Lenth就是數組的長度。
二、c語言程序冒泡排序:
1、比較相鄰的兩個元素的大小,如果第一個比第二個大就互換一下。
2、然後每一對都做如上操作,如此一來最後一個元素肯定是最大的數了。
3、除了最後一個元素,重復以上步驟。然後倒數第二個就是次大的值了
4、一次按照這個邏輯直到沒有任何數字可以比較了。
⑵ 單片機中C語言中函數間的數組傳遞
sizeof是C/C++中的一個操作符(operator),簡單的說其作用就是返回模羨一個對象或者類型所佔的內存位元組數。
其返回值類型為size_t,在埋慧頭文件stddef.h中定義。這是彎碼答一個依賴於編譯系統的值,一般定義為
typedef unsigned int size_t;
Send_String(sizeof(Logo)-1,Logo); 既是把Logo字元串的長度減掉1作為第一個參數,Logo字元串本身的首地址作為第二個參數傳遞給函數Send_String()。
⑶ 鍗曠墖鏈篊璇璦涓濡備綍鍋氫竴涓鍑芥暟鍒ゆ柇涓涓鏁扮粍鐨勫ぇ灝忥紵
鍙浠ュ湪鍑芥暟涓鍊熺敤sizeof榪愮畻絎︼紝鏉ヨ幏鍙栨暟緇勫ぇ灝忋
1 鑾峰彇鏁扮粍a鏁翠綋鍗犵敤絀洪棿鍙浠ヤ嬌鐢
sizeof(a)
璇ュ間負榪欎釜鏁扮粍鍗犵敤鐨勬誨唴瀛樺礆紝鍗曚綅涓哄瓧鑺傘
2 鑾峰彇鏁扮粍鍏冪礌涓鏁板彲浠ョ敤
sizeof(a)/sizeof(a[0])
璇ュ間負鏁扮粍寮杈熺殑鍏冪礌涓鏁般
⑷ 關於單片機 數組使用
你給的信息太有限,
我需要知道你的單片機的具體型號,還有你創建工程的屬性。
我先猜一下:
你用的是stc增強型52單片機,除了自帶的256位元組內存還有256位元組的擴展內存,並且你在工程屬性裡面選擇的是大內存模式(large:
variables
in
xdata
)這樣在你定義內存的時候如果不加data,idata,pdata關鍵字的話,默認就是xdata。這用的是外部ram,是通過p0和p2口用匯流排模式擴展晶元得到的,可訪問64k的內存空間。但是stc增強型52內置了256位元組(某些版本會更大,我猜你用的是256的),默認訪問方式一樣,但是被stc集成到了片內。你定義了一個a[160]一個b[160],加起來遠遠超過256.按你的說法,有用的是160+48(這里你又有一個表達錯誤,a[0]~a[47]應該是48個。)=208個,算上你其他地方定義的變數,應該滿256個,那麼a[48]~a[159]是怎麼出現的呢,理論上是從p0口讀回來的。但是這里你還有一個不嚴謹的地方,不知道你有沒有證明到底是a[48]~a[159]全部成為了0xff還是b[48]~b[159]早早的就成為了0xff。
處理辦法一:內存模式先改成small:variables
in
data
.
這時你應該都無法通過編譯。
然後改變這句話:void
2(char
a[160])
變成
void
2(char
pdata
a[160])
方法二:直接改
char
b[160]=
變成
char
code
b[160]=
試試看。
如果猜錯了,請別笑話我。
⑸ 鍗曠墖鏈篊璇璦涓濡備綍鎶婂彉閲忕殑鍊艱祴緇欐暟緇
memset鍑芥暟錛屾妸浣犵殑鍙橀噺鏀懼埌絎浜屼釜鍙傛暟閲屽氨鍙
絎涓涓鍙傛暟鏄鏁扮粍澶達紝絎涓変釜鍙傛暟鏄鏁扮粍闀垮害
⑹ 鍗曠墖鏈虹紪紼嬩腑涓涓鏁扮粍鎬庢牱鎵嶈兘鍦ㄤ腑鏂鍜屼富鍑芥暟涓鍚屾椂浣跨敤
鍦ㄤ竴涓猚鏂囦歡閲屽畾涔塩har a[15];
鍏朵綑鐢ㄥ埌瀹冪殑c鏂囦歡extern char a[],澹版槑瀹冿紝灝卞彲浠ョ敤銆
⑺ 鎬:鍗曠墖鏈篊璇璦-鏁扮粍鏁版嵁鐨勮緭鍏ヤ笌杈撳嚭鏂規硶
C璇璦鍏佽告湁澶т簬浜岀淮鐨勬暟緇勶紝緇存暟鐨勯檺鍒訛紙濡傛灉鏈夌殑璇濓級鏄鐢卞叿浣撶紪璇戠▼搴忓喅瀹氱殑銆傚
緇存暟緇勭殑涓鑸璇存槑褰㈠紡涓猴細
Type-specifier name [a][b][c]...[z];
鐢變簬澶ч噺鍗犳湁鍐呭瓨鐨勫叧緋伙紝浜岀淮鎴栨洿澶氱淮鏁扮粍杈冨皯浣跨敤銆傚傚墠鎵榪幫紝褰撴暟緇勫畾涔変箣鍚庯紝
鎵鏈夌殑鏁扮粍鍏冪礌閮藉皢鍒嗛厤鍒板湴鍧絀洪棿銆備緥濡傦紝澶у皬涓猴紙 1 0錛6錛9錛4錛夌殑鍥涚淮瀛楃︽暟緇勯渶瑕1 0
脳6脳9脳4鍗2 1 6 0瀛楄妭銆
濡傛灉涓婇潰鐨勬暟緇勬槸涓ゅ瓧鑺傛暣鍨嬬殑錛屽垯闇瑕4 3 2 0瀛楄妭錛岃嫢璇ユ暟緇勬槸鍙屽瓧鍨嬬殑錛堝亣瀹氭瘡涓鍙
瀛椾負8瀛楄妭錛夊垯闇瑕3 4 5 6 0瀛楄妭錛屽瓨鍌ㄩ噺闅忕潃緇存暟鐨勫炲姞鍛堟寚鏁板為暱銆
鍏充簬澶氱淮鏁扮粍錛岄渶瑕佹敞鎰忎竴鐐癸細璁$畻鏈鴻佽姳澶ч噺鏃墮棿璁$畻鏁扮粍涓嬫爣錛岃繖鎰忓懗鐫瀛樺彇澶氱淮
鏁扮粍涓鐨勫厓緔犺佹瘮瀛樺彇涓緇存暟緇勭殑鍏冪礌鑺辨洿澶氱殑鏃墮棿銆傜敱浜庤繖浜涘拰鍏跺畠鍘熷洜錛屽ぇ閲忕殑澶氱淮鏁
緇勪竴鑸閲囩敤C璇璦鍔ㄦ佸垎閰嶅嚱鏁板強鎸囬拡鐨勬柟娉曪紝姣忔″規暟緇勭殑涓閮ㄥ垎鍔ㄦ佸湴鍒嗛厤瀛樺偍絀洪棿銆
澶氱淮鏁扮粍浼犻掔粰鍑芥暟鏃訛紝闄ょ涓緇村栵紝鍏跺畠鍚勭淮閮藉繀欏昏存槑銆備緥濡傦紝灝嗘暟緇刴瀹氫箟鎴愶細
int m[4][3][6][5];
閭d箞鎺ユ敹m鐨勫嚱鏁板簲鍐欐垚錛
func1 (d)
int d[][3][6][5];
褰撶劧錛屽傛灉鎰挎剰錛屼篃鍙鍔犱笂絎涓緇寸殑璇存槑銆