1. 程式人生 > >C語言基礎3

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;
}