C言語有豐厚的數據類型,在開發中,普通用常量或許變量來表示這些數據
"量"表示數據。常量,則表示一些固定的數據,也就是不能改動的數據。
10.1;// 雙精度double
5.2f; //單精度float
'a'; // 字符型常量
'ab'; // 錯誤
'李'; // 錯誤寫法, 由於一個漢字占3個字節
'\n';//字符型常量(本義字符,表示單個字符)
定義常量的辦法:
const int a=100;
變量變量:代表了內存的一個空間,用來寄存常常變化的數據。(變量名就是空間的稱號,變量的類型決議著變量占用多大的內存空間)
變量名:是我們操作數據(寄存數據)的根據。
初始化:就是清空(賦初值,0/NULL)的意思,清算一些渣滓數據。
變量的運用:存值和取值。
int a; //定義一個變量,未初始化。
a的值的能夠性:1) 零碎的數據; 2) 上一個順序遺留的數據; 3) 渣滓數。
變量的作用域:(變量的運用范圍)
部分變量(外部變量):在函數的外部或許代碼塊的外部定義的變量。
※ 作用域:從部分變量定義的地位開端,到它所在的代碼塊或函數體的“}”為止。
※ 留意:在代碼塊的外部可以定義和塊內部同名的變量,塊外部的會暫時屏蔽(內部的不起作用)塊內部的變量的作用域。
#include <stdio.h>
int main() {
int age=20;
//代碼塊代表一個空間,與age的空間並列
{//代碼塊開端
int a=5;
printf("a=%d\n", a); //a=5
int age=25; //在代碼塊外部可以定義和代碼塊內部同名的變量
printf("age=%d\n",age); //age=25;
}//代碼塊完畢(此時代碼塊外部一切的空間會釋放)
printf("age=%d\n", age);//age=20;
return 0;
}
變量的命名:命名需求契合標識符語法要求。
變量的聲明(定義):在相反的作用域內變量不可反復定義!
語法格式:變量類型 變量名;
如: int age;
float result;
double x,y,z;
變量類型:表示我所定義的這個變量可以寄存什麼樣類型的常量
變量稱號:它一個標示符,來標識我們在內存中開拓這塊存儲區域,方便我們當前運用
變量的作用域:從定義那一行開端直到其所在大括號完畢為止
//1.定義變量(即在內存中開拓一塊空間,空間的大小跟定義的類型有關,空間的名字就是變量名)
int age;//這一行代碼就在內存中開拓一塊4個字節的存儲區域,它名字叫age;這塊存儲區域是用來寄存int類型的數據的
//2.初始化:變量第一次賦值稱為初始化。
age=22; //這行代碼是把22,放到名字為age的這塊存儲區域中
變量的存儲
一個正數的二進制方式,其實就是對它的負數的二進制方式停止取反再加1。
1. 不同的數據類型占用不同的存儲空間:
2. 不同數據類型表示的范圍:
變量在內存中怎樣貯存?(變量為什麼要有類型)
計算機中最小貯存單元是字節,每個字節都有一個地址。
// 擴展:獲取每個字節中存儲的數據
char *p = &value;
for (int i = 0; i < sizeof(value); i++) {
printf("%i\n", *(p + i));// 取出每個字節中存儲的數據(88 2 0 0)
}
留意:在這裡,地址(int型指針)+1 相當於 char型指針+4
// 當定義變量的時分,這個變量外面終究有什麼東西是不確定的
int score;//渣滓值
// printf函數打印 % 字符要用 %% 才干打印
printf("5%%2=%d\n",5%2);//後果為:5%2=1
交流整型變量a、b的值:
比方:a=10、b=11;交流後:a=11,b=10。用兩種方式完成:
int temp;
temp = a;
a = b;
b = temp;
a = b - a;
b = b - a;
a = b + a;
printf 函數:printf函數稱為格式輸入函數,其關鍵字最末一個字母f即為“格式”(format)之意
printf函數調用的普通方式為:(其中格式控制字符串用於指定輸入格式)
printf(“格式控制字符串”, 輸入表列);
格式字符串的普通方式為:(其中方括號[]中的項為可選項)
%[標志][輸入最小寬度][.精度][長度]類型。
//應用printf函數可以計算字符串的長度
int length = printf("IOS開發\n");
printf("共占%i個字節\n", length);// 10 (1+1+1+3+3+1)
1. 類型(格式控制符)
2. 標志
標志字符為 -、+、# 和空格四種,其意義下表所示:
%m.nf:在%與f之間,可以有m.n,m表示輸入數字所占的寬度,m表示小數點前面的位數,假如不夠會用空格補齊右邊
#include <stdio.h>
int main() {
float m=3.141592f;
printf("m=%8.4f\n", m);//默許空格補在右邊
// %-m.nf 輸入共占m位,其中小數占n位,假如數值寬小於m右端補空格
printf("m=%-8.4f\n", m);//-號表示空格補左邊
// %*.*特殊用法:
printf("m=%*.*f\n",6,2,m);//m= 3.14
printf("%.*s\n",4,"abcdkkkkkkk");//abcd
return 0;
}
%g:自動選f格式或e格式中較短的一種輸入,且不輸入有意義的零。
%p:輸入地址(指針)
/**
* %f默許會保存6位小數
* 指定保存多少位小數: %.nf, 其中n就是需求保存多少位小數, f用於輸入實型
*/
float value = 3.14;
printf("%f\n", value);//3.140000
printf("%.2f\n", value);//3.14
/**
* float和double的無效位數:
* float最多表示7位無效數據。double最多表示16位無效數據。
*
* float類型要點:
* 1.小數末尾要加f/F,指定為float類型
* 2.默許狀況保存6位小數
* 3.精度為7位無效數字(右邊第一個不為零的數開端,除小數點外前7位數字無效,超出7位的是渣滓數據)
*
1bit(符號位) 8bits(指數位) 23bits(尾數位)
精度是由尾數的位數來決議的
float:2^23 = 8388608,一共七位,這意味著最多能有7位無效數字,
但相對能保證的為6位,也即float的精度為6~7位無效數字;
*/
float value = 3.1415926525;
printf("%f\n", value);//3.141593 (默許狀況保存6位)
//float無效數字是7位,多余位數則會顯示渣滓數據(不精確)
printf("%.10f\n", value); //3.1415927410
// 如何想完好的輸入那麼必需將數據保管為double類型, 由於double類型的無效位是15位
double value = 3.1415926525;
printf("%.10lf\n", value);
//如何進步逼格(保存幾位小數不確定時)
//指定保存多少位小數時,可以經過*號占位,當前賦值詳細保存的小數位
float value = 3.1415926;
printf("%.*f\n", 5, value);
&是C言語中的一個地址運算符,可以用來獲取變量的地址
&可以獲取變量的地址,例如:&num
*可以依據地址數據找到變量,例如:*(&num)
scanf 函數scanf函數是一個阻塞式函數
順序會停在scanf函數呈現的中央,直到接納到數據才會執行前面的代碼
// 運用scanf接納用戶從鍵盤上輸出
scanf("%d", &a);//留意: 必需通知scanf函數變量的詳細地址, 才干存儲用戶輸出的數據
// %與d之間可以無數字n,這個n表示承受數據的寬度
scanf("%2d",&a);
scanf 函數要點:
(空格、回車、Tab可以做%c除外的分隔符,由於空格、回車、Tab是字符)
// \n代表換行
// 如何通知scanf函數我們輸出終了? 回車(\n)
// 由於回車是scanf的完畢符, 所以不能在scanf的格式化字符串末尾寫上\n。(假如加在末尾,會永遠完畢不了輸出,即scanf函數不會終止)
// 假如不小心把\n放到了scanf格式化字符串的末尾,也可以破,原樣輸出(輸 \n)或輸出一個不婚配的類型(如:輸 a)
scanf("%i%i\n", &num1, &num2);
scanf函數完成原理
scanf函數的運轉原理:
零碎會將用戶輸出的內容放入輸出緩沖區
scanf函數會從輸出緩沖區中逐一取出內容賦值給格式符,假如類型不分歧不會修正原無數據。
scanf錄入數據的時分,錄入格式必需與格式化字符串中格式分歧
留意:scanf占位符兩頭聯系符可以是恣意的,不一定要用中劃線-,可以是逗號、空格、星號*、井號#等等,甚至是英文字母
3個%d之間是用空格隔開的,我們在每輸出一個整數後必需輸出一個分隔符,分隔符可以是空格、tab、回車
scanf格式字符串最前面不要加\n,比方scanf("%d\n", &a);這將招致scanf函數無法完畢。
面試題
int a;
請問a外面有值嗎,是多少? 渣滓值
//判別一個年份能否是閏年
//能被4整除,但(並且)不能被100整除,或許能被400整除
int year;//保管年份
printf("請輸出一個年份:");
scanf("%d", &year);
if((year%4==0 && year%100!=0) || year % 400 == 0){
printf("是閏年\n");
}else{
printf("不是閏年");
}
※ 變量剖析題:(留意變量的作用域)
【iOS開發入門 ☞ C言語系列二】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!