-
三目運算符
類似于if吧
查看全部 -
Hallo World查看全部
-
第23行:if括號內(!=1)的判斷是為了避免正對角線與反對角線相交的元素重復計算
查看全部 -
第3行:void say(char string[])? //整個數組做為函數參數
第5行:printf("%s\n",string);? ? ?//打印字符串
say(string);? ?//調用say函數輸出字符串
注意區別
查看全部 -
第12行使用break的原因:需要用break語句中斷后跳出for循環,否則,仍然會繼續比較下去,后面程序語句會對index賦值-1;這個代碼必須有break。在沒有break的情況下,循環的時候假如說在第三個arr[i]=value,然后index=i,這個時候i=3,index也就是3,接著下一個循環i=4的時候,arr[4]不等于value,進入else,index又變成了-1,直到i=5,循環結束,返回-1.所以說break這個作用是當arr[i]等于value時,讓index=i,接著跳出循環,返回index,得到正確結果。
考慮情況更加完整的代碼;
//教程里的解決方案不夠完整,當數組中與value的值相等的元素存在多個時,程序總是會輸出其中的第一個元素的下標,其后仍有與value相同的值則直接跳過,不會輸出。 #include?<stdio.h> int?getIndex(int?arr[5],int?value) { ????int?i; ????int?temp=0;??????//用來承載第二個for循環中arr[i]?!=?value的判斷次數。 ????for(i=0;i<5;i++) ????{ ????????if(arr[i]==value) ????????{ ????????????printf("存在,下標為"); ????????????break;??????//當arr[i]?==?value的結果時,證明value的值能在arr數組中找到,立即退出循環。 ????????} ????} ????for(i=0;i<5;i++) ????{ ????????if(arr[i]==value) ????????{ ????????????printf("?···?%d",i);??????//輸出當arr[i]?==?value時i的數字。即arr數組中的某個元素等于value時,該元素的下標。(這個循環與上面的for循環分開的原因:為了可以輸出多個符合要求的下標) ????????} ????????else ????????{ ????????????temp++;??????//累加arr[i]?!=?value的判斷次數。當temp==arr數組的總長度時,代表arr數組中沒有一個元素==value,即value在arr數組中不存在。 ????????} ????} ????if(temp==5) ????{ ????????printf("不存在。\n"); ????} ????else ????{ ????????printf("。"); ????} } int?main() { ????int?arr[5]={3,12,9,8,6};??????//可更改此數組的元素,觀察運行結果有沒有錯誤,即使相同的元素也能正確輸出結果。 ????int?value=8;??????????????????//可更改此數組的元素,觀察運行結果有沒有錯誤。 ????printf("%d在數組中",value);//沒有”\n“與”getIndex“函數中的輸出語句可以打印在同一行,形成一句話的效果。(”getIndex“函數中的輸出語句中無“\n”原因同理。 ????getIndex(arr,value);??????//傳遞arr[]以及value的參數。 ????return?0;???? }
查看全部 -
細節注意:1.相鄰前后兩數兩兩比較:若元素個數為n,則最大的下標為n-1;因為是相鄰每兩個數依次比較(兩個數為一組),所以比較涉及的循環(14到26行)中的外層循環(14行)的索引(下標j)從n-2開始;2.要設置兩層循環,原因:例如數組中最大的數是第一個數,第二大的數是第二個數,僅一次內循環只能將第一個數(最大的數)放在最后面,無法使第二個數(第二大的數)放在倒數第二個數的位置。所以要有兩層循環。
學習(7到13行)輸出如題改格式的方法。
查看全部 -
設置index(即第十二行代碼)的作用是記錄arr1中較(最)大元素的索引
記住9到14行比較(出)并記錄數組中最大元素的方法;
第23行和第2行傳入整個數組(arr1)無“[ ]”;
查看全部 -
C語言的數組長度一經聲明,長度就是固定,無法改變;
最好避免出現數組越界訪問,循環變量不要超出數組的長度;
由于C語言是沒有檢查數組長度改變或者數組越界的這個機制,可能會在編輯器中編譯并通過,但是結果就不能肯定了,因此還是不要越界或者改變數組的長度。
查看全部 -
初始化數組時,數組內元素的個數小于等于(不能大于)聲明的數組長度(否則越界);
在聲明數組后沒有進行初始化的時候,靜態(static)和外部(extern)類型的數組元素初始化元素為0,自動(auto)類型的數組的元素初始化值不確定。
查看全部 -
為什么要刪去第二行:將hello.c中的#include "test.c",這一行刪去,在函數printLine之前加上extern(事實上可省略)使其成為外部函數,使其能被test.c調用從而在test.c中完成函數say,函數say默認為外部函數,能被(刪去#include "test.c"的)hello.c調用,從而完成。(hello.c是我們現在正在完成(作業)的函數)
查看全部 -
用auto定義的變量為自動變量(動態存儲類別:是指在程序運行期間根據需要進行動態的分配存儲空間的方式。動態存儲區中存放的變量是根據程序運行的需要而建立和釋放的);
用static修飾的為靜態變量(靜態存儲類別),注:靜態局部變量只賦初值一次,如果在定義局部變量時不賦初值的話,則對靜態局部變量來說,編譯時自動賦初值0(對數值型變量)或空字符(對字符變量);
registe:將局部變量得值放在CPU中的寄存器中,叫做“寄存器變量”。局部靜態變量不能定義為寄存器變量;
用extern聲明的的變量是外部變量,外部變量的意義是某函數可以調用在該函數之后定義的變量。
查看全部 -
int x=77;? 標為x(1),它是整個程序的變量,(整個程序的)全局變量
int x=10;? 標為x(2),這是函數main() 中的全局變量,也是整個程序的局部變量
int x=100; 標為x(3),這是if語句中的全局變量,這也是整個程序的局部變量,但級別比x(2) 還低,被引用的范圍更小。若寫成 x=100;這就是給x(2)進行賦值,也就是說x(2)的值被改成100了,main()函數中使用x的位置,其值都是100
在main()函數中,運行到
fn1();
時,程序暫時跳出main()函數,去執行自定義函數fn1(),此時已經跳出了main()函數的范圍,故x為x(1)的內容。
整個完整的程序中,雖然定義的變量都名為x,但對于計算機而言,是三個不同的變量,并且使用的范圍也是不一樣的。
int? ?是告訴計算機定義新變量的標識,同時確定數據類型,類似的還有char,short,long,float,double等。
查看全部 -
這里都改變了a的值
查看全部 -
強制類型轉換是通過定義類型轉換運算來實現的。其一般形式為:
?(數據類型) (表達式)?
其作用是把表達式的運算結果強制轉換成類型說明符所表示的類型,例如:
查看全部 -
輸出語句的
查看全部
舉報