C語言基礎3
printf的返回值
printf返回的是它列印了多少個字元
例:printf("%d",printf("%d",printf("%d",43)));
括號最裡面的printf列印輸出一個值43,這個時候它給相鄰的printf函式返回了43這個值的個數2,這個printf會給最外層的printf函
返回2的個數1,這樣一層層執行,最後輸出的值就是4321。
scanf的返回值
scanf()函式有返回值且為int型。
scanf()函式返回的值為:正確按指定格式輸入變數的個數;即能正確接收到值的變數個數。
例: scanf("%d%d", &a, &b);
如果a和b都被成功讀入,那麼scanf的返回值就是2
如果只有a被成功讀入,返回值為1
如果a和b都未被成功讀入,返回值為0
如果遇到錯誤或遇到end of file,返回值為EOF
斷言assert
斷言是程式設計術語,表示為一些布林表示式,程式設計師相信在程式中的某個特定點該表示式值為真,可以在任何時候啟用和禁用斷
驗證,因此可以在測試時啟用斷言而在部署時禁用斷言。同樣,程式投入執行後,終端使用者在遇到問題時可以重新啟用斷言。
使用斷言可以建立更穩定、品質更好且 不易於出錯的程式碼。當需要在一個值為FALSE時中斷當前操作的話,可以使用斷言。
斷言不是函式,而是一個巨集。
#include<stdio.h>
#include<assert.h>
bool IsPrime(int n)//判斷一個數是否為素數
{
assert(n != 1);
for(int i = 2;i < n;i++)
{
if(n % i == 0)
{
return false;
}
}
return true;
}
int main()
{
bool flg = IsPrime(6);
printf("%d\n",flg);
return 0;
}
逗號表示式
int c; int b = (a = 20,c = 30); printf("%d\n",b);
得到的結果是b=30
求三個數的最大值
#include<stdio.h>
int Max2(int a,int b)//把兩個數字先進行比較
{
return a > b ? a : b;
}
int Max3(int a,int b,int c)
{
return Max2(Max2(a,b),c);
}
int main()
{
int max = Max3(10,20,30);
printf("%d\n",max);
return 0;
}
isdigit是計算機C(C++)語言中的一個函式,主要用於檢查其引數是否為十進位制數字字元。
判斷字元ch是否為英文字母,若為英文字母,返回非0(小寫字母為2,大寫字母為1)。若不是字母,返回0。
for迴圈
1.語句最簡形式為:
for( ; ; )
2.一般形式為:
for(單次表示式;條件表示式;末尾迴圈體)
{
中間迴圈體;
}
其中,表示式皆可以省略,但分號不可省略,因為";"可以代表一個空語句,省略了之後語句減少,即為語句格式發生變化,則
編譯器不能識別而無法進行編譯。
for迴圈小括號裡第一個";"號前為一個為不參與迴圈的單次表示式,其可作為某一變數的初始化賦值語句, 用來給迴圈控制變數
賦初值; 也可用來計算其它與for迴圈無關但先於迴圈部分處理的一個表示式。
int main()//執行這個程式可以清楚看到for迴圈的內部構造
{
int i;
for(i = 0,printf("#1%d\n",i);printf("#2:%d\n",i),i < 3;i++,
printf("#3:%d\n",i))
{
printf("語句塊\n");
}
return 0;
}
if和switch
switch與if的區別:(if 和else都為條件判斷語句)
1.switch會生成一個跳轉表來指示實際的case分支的地址,而這個跳轉表的索引號與switch變數的值是相等的。程式首先判斷switch變數是否大於最大case 常量,若大於,則跳到default分支處理;否則取得索引號為switch變數大小的跳錶項的地址,程式接著跳到此地址執行,到此完成了分支的跳轉。
2. 當分支較多時,當時用switch的效率是很高的。因為switch是隨機訪問的,就是確定了選擇值之後直接跳轉到那個特定的分支,switch只能是在常量選擇分支時比ifelse效率高,但是if能應用於更多的場合,if比較靈活。
3. switch適合處理判斷分支較多的情況下,而if適合處理判斷分支較少的情況下 。
4.switch可以同時對多個條件進行處理和選擇,而if 每次只能描述一個條件,多個需要用到if語句巢狀。
5.if :不管有多少次比較,都會一一進行比較 switch() >=4 被優化為一次比較
switch 語句,僅能夠處理整型數值,即switch()括號中的判斷的值,必須是整型的,float 和double不能被判斷,而且每個case後面跟的值,也必須是整形的。對於大規模的連續數值,比如if(a>=1 && a<=100) 這樣的語句,要用switch則需要連續寫100個case,這種情況下,switch是不適用的。但是總體來說,對於雜湊的整型資料,用switch語句更清晰明確,而對於其它情況,if語句則更好。
#include<stdio.h>
void Fun(char ch)
{
switch(ch)
{
case 'A':
printf("90-100\n");
break;
case 'B':
printf("70-80\n");
break;
case 'C':
printf("60-70\n");
break;
case 'D':
printf("60以下\n");
break;
default:
printf("不及格\n");
break;
}
}
int main()
{
Fun('A');
Fun('B');
return 0;
}
數字求和
#include<stdio.h>
void Sum(int n)//求和
{
int sum = 0;
int sumOdd = 0;//奇數
int sumEve = 0;//偶數
for(int i = 1;i <= n; i++)
{
sum += i;
}
for(int i = 1;i <= n;i += 2)
{
sumOdd += i;
}
for(int i = 2;i <= n;i += 2)
{
sumEve += i;
}
printf("sum ==>%d",sum);
printf("sumOdd ==>%d",sumOdd);
printf("sumEve ==>%d",sumEve);
}
int main()
{
Sum(1000);
return 0;
}