C语言 基础 1
//vim 編輯器快捷鍵?
dd //剪切光標當前的所在行
ndd //剪切光標當前的所在行的開始的n行代碼?
p ?//粘貼 光標所在行的下一行?
u //撤銷
ctrl + r //反撤銷?
開發環境?
?? ?
?? ?vmware虛擬機提供一個虛擬的環境,可以讓操作系統運行在虛擬機中
?? ?
1.1 ?C語言簡介
?? ?C語言是世界上最流行、使用最廣泛的高級程序設計語言之一,廣泛用于系統與應用軟件的開發。
?? ?
?? ?具備很強的數據處理能力、高效、靈活、功能豐富、表達力強和較高的移植性等特點
?? ?
----------------------------------------------------------------------------------------------------------------------------------------------------
1.2 ?編程語言(*)
?? ?c、java、c++、C#、objective-c
?? ?
?? ?C: ? ?嵌入式(設備開發)、系統及開發(速度快)
?? ?
?? ?java: android應用開發(微信、支付寶、美團)、web開發(電信收費系統、企業管理系統)
?? ?
?? ?C++: ?導航系統、CAD、3DMAX(軟件速度快)
?? ?
?? ?C#: ? windows平臺應用軟件(容易學,但需求越來越少)objective-c 蘋果電腦、蘋果手機上的開發語言(從2015年開始,需求越來越少)
----------------------------------------------------------------------------------------------------------------------------------------------------
1.3 ?C語言開發環境(*)
?? ?vmware: 虛擬機,能用軟件虛擬出硬件(cpu、內存、網卡、聲卡、usb....)
?? ?
? ? ? ? ?? ?在此硬件基礎上再安裝一個新操作系統
?? ??? ??? ?
?? ?vmware:上可以安裝windows, linux, unix(等操作系統)
?? ?
?? ?Linux是一個操作系統
----------------------------------------------------------------------------------------------------------------------------------------------------
//保護視力 問題?
?? ?放大字體 ?ctrl shift ?+
?? ?縮小字體 ?ctrl -
?? ?
?? ?ubuntu ?redhat 紅旗 suse debian ?-----> Linux系統
?? ?
?? ?命令 ls ?----> list 列表 ?查看目錄文件(文件夾子)里面的文件列表
?? ?
?? ?//ls ?命令,就是看看某個文件夾子里面有啥玩仍
?? ?
?? ?藍色: 目錄文件 (文件夾子)
?? ?白色: ?普通的文本文件
?? ?
?? ?清屏:?
?? ??? ??? ?ctrl + l ??
?? ??? ??? ?clear 命令?
?? ?
寫代碼的原則, 縫縫補補又三年?
//框架
#include <stdio.h>
int main()
{
?? ?return 0;
}
初中數學題:?
?? ?解:
?? ?
1.4 打印輸出 hello world
?? ?vi ?/ vim 都可以?
?? ?
?? ?vim是vi的升級版本的編輯器
?? ?vim ?命令 ?
?? ?vim 是一個文本編輯器 (類似于office 2007)
?? ?
?? ?1. vim hello.c //用vim編輯器打印一個文件,名字叫做hello.c?
?? ?
?? ??? ??? ??? ?//如果文件不存在,創建并打開,如果文件存在,直接打開?
?? ??? ??? ??? ?
?? ??? ?進入的是一般模式 ,此時是不能往里面輸入代碼的
?? ?
?? ?2. 按i,屏幕的左下角出現INSERT,此時的vim編輯器處于 插入模式
?? ?
?? ?3. 保存并退出
?? ?
?? ??? ?按esc鍵,vim編輯器由 插入模式 切換到 一般模式?
?? ??? ?
?? ??? ?按Space(shift+;), 左下角出現: ? 編輯器由 一般模式 切換到 尾行模式(命令行模式)
?? ??? ?
?? ??? ?:wq //w保存 q退出?
?? ??? ?:q //退出,沒有保存
?? ??? ?:wq! //強制保存退出
?? ??? ?
?? ?4. gcc 是一個編譯器?
?? ?
?? ??? ?gcc hello.c ?//gcc編譯器,編譯hello.c文件,生成的可執行文件是 綠色的a.out?
?? ??? ?
?? ??? ?生成的產物是 a.out?
?? ??? ?
?? ?5. 運行程序 ./a.out ? ? ?// ?./ 當前目錄下的 a.out 程序
?? ?
?? ?##代碼演示
#####重點:
?? ?一個程序有且只能有一個main函數
?? ?main函數是一個程序的入口函數
講解hello.c
#include <stdio.h>
//#預處理的 include 包含的意思?
//.c 結尾的是C語言的源程序
//.h head 頭文件
// stdio.h ?standard input output ?標準輸入輸出頭文件
// < > Linux系統自帶的頭文件
// "my.h" 自己的寫的頭文件用 " "
//int 整型 main函數的返回值類型 是int
//() 里面放的main函數的參數列表
int main()
{//main函數函數體開始
?? ?printf("hello world!!\n"); // ;代表一句話的結束
?? ?//功能:在屏幕上打印輸出字符串
?? ?//printf 是一個函數 格式化輸出函數?
?? ?// \n是換行符
?? ?//" "表達的是字符串, " "之間寫什么,屏幕上就原封不動打印輸出什么
?? ?
?? ?return 0; //返回值的意思,返回值是0
} //main函數體的結束
//解題的 解 字
#include <stdio.h>
int main()
{
?? ?return 0;
}
?? ??? ??? ??
?? ?####### ?練習 1 新建一個文件 vim student.c 打印輸出 ?I am a student!!
?? ?gcc student.c?
?? ?
#include <stdio.h>
int main()
{
?? ?printf("I am a Student!!\n");
?? ?return 0;
}
?? ?
?? ?####### ?練習 2 新建一個文件 vim star.c 打印輸出下面的圖案
?? ??? ? ?*
?? ??? ? ***
?? ??? ?*****
#include <stdio.h>
int main()
{
?? ?//方法一
?? ?printf(" ?*\n ***\n*****\n");
?? ?//方法二
?? ?// 只能注釋一行
?? ?printf(" ?*\n");
?? ?printf(" ***\n");
?? ?printf("*****\n");
?? ?
?? ?return 0;
}
?? ?
1.5 注釋(通常用于兩種情況)(**)
?? ?(1)代碼的解釋部分
#include <stdio.h>
int main()
{
?? ?//方法一
?? ?printf(" ?*\n ***\n*****\n");
?? ?//方法二
?? ?// 只能注釋一行
?? ?printf(" ?*\n");
?? ?printf(" ***\n");
?? ?printf("*****\n");
?? ?
?? ?return 0;
}
?? ?(2)代碼現在不需要的部分?? ?
#include <stdio.h>
int main()
{
?? ?//方法一
?? ?printf(" ?*\n ***\n*****\n");
?? ?//方法二
?? ?// 只能注釋一行
?? ?
?? ?// /* */注釋多行代碼,可以將 /* 和 */之間的代碼都注釋掉
?? ?/*
?? ?printf(" ?*\n");
?? ?printf(" ***\n");
?? ?printf("*****\n");
?? ?*/
?? ?return 0;
}
----------------------------------------------------------------------------------------------------------------------------------------------------
1.6 數據的存儲與運算
?? ?
?? ?1.6.1 變量定義及輸出
?? ?
?? ??? ?學習C語言三步走?
?? ??? ?
?? ??? ?1. 創建一個杯子?
?? ??? ?2. 往杯子里面裝東西?
?? ??? ?3. 將杯子里面的東西打印輸出
?? ?
#include <stdio.h>
int main()
{
?? ?//定義一個整型變量a,int 整型 a 變量的名字
?? ?int a;
?? ?//給整型變量a賦值
?? ?a = 10; // = 代表的是賦值,把10裝到變量a中
?? ?//將變量a中的值打印輸出
?? ?printf("a is \n");
?? ?printf("a is %d\n",a);//%d是占位符,%d位置顯示的內容會由變量a的值替換,其他原樣輸出
?? ?// " "之間的內容,原封不動的打印輸出,只不過%d的位置有a的值替換
?? ?printf("a -------> %d\n",a);
?? ?return 0;
}
?? ?那么如果我們要保存小數呢???
?? ?
#include <stdio.h>
int main()
{
?? ?int a;
?? ?float b;//float類型是用來保存小數的
?? ?//給整型變量a賦值
?? ?a = 10; // = 代表的是賦值,把10裝到變量a中
?? ?//將變量a中的值打印輸出
?? ?printf("a is \n");
?? ?printf("a is %d\n",a);//%d是占位符,%d位置顯示的內容會由變量a的值替換
?? ?// " "之間的內容,原封不動的打印輸出,只不過%d的位置有a的值替換
?? ?printf("a -------> %d\n",a);
?? ?
?? ?b = 2.2;
?? ?printf("b的值是%f\n",b);// 打印單精度浮點類型用%f
?? ?printf("b的值是%.2f\n",b);// 打印單精度浮點類型用%f ?.2保存小數點后兩位
?? ?return 0;
}
?? ?####### ?練習 3?
?? ?定義一個整型變量x, 定義一個浮點型變量y,
??? ?將-1賦值給變量x,將3.14賦值給變量y,打印
??? ?再將1 賦值給變量x,將-3.14賦值給變量y,再打印?? ?
?? ?
#include <stdio.h>
int main()
{
?? ?int x;
?? ?float y;
?? ?x = -1;
?? ?y = 3.14;
//?? ?printf("x is %d\n",x);
//?? ?printf("y is %f\n",y);
?? ?printf("x is %d\ny is %f\n",x,y);
?? ?x = 1;
?? ?y = -3.14;
?? ?printf("x is %d\ny is %f\n",x,y);
//?? ?printf("x is %d\n",x);
//?? ?printf("y is %f\n",y);
?? ?return 0;
}
///未初始化的局部變量,默認的初始值是隨機數(垃圾值)
#include <stdio.h>
int main()
{
?? ?int a; //定義一個變量,沒有初始值,默認是隨機數(垃圾值)
?? ?printf("a is %d\n",a);
?? ?a = 101;
?? ?printf("a is %d\n",a);
?? ?return 0;
}
//整容手法
int a; //定義一個整型變量a?
a = 10;//賦值10
//天生麗質
int a = 10;//將整型變量a初始化為10
?? ?
?? ?1.6.2 如何手動輸入一個數保存到變量中 scanf
#include <stdio.h>
int main()
{
?? ?int a; //定義一個變量,沒有初始值,默認是隨機數(垃圾值)
?? ?//思考:讓變量a里面的值來自于鍵盤輸入
?? ?printf("請您輸入一個整數:\n");
?? ?scanf("%d", &a);//&取地址 &a得到的是變量a在內存當中存儲的首地址
?? ?//輸入的數保存到整型變量a中
?? ?printf("a is %d\n",a);
?? ?return 0;
}
##注:定義變量時需先考慮變量用來存儲什么類型的數據,即存儲什么類型的數據,就定義什么類型的變量。
?? ?
?? ?1G ?--- 1024M
?? ?1M ?--- 1024kb
?? ?1kb --- 1024byte 字節
?? ?
?? ?數據類型?? ??? ??? ?格式化輸入輸出類型和格式 ? ? ? ? ? ? ? ?占內存空間的大小
?? ?
?? ?//存整數
?? ?char?? ?字符型?? ??? ??? ?%c?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?1字節
?? ?short?? ?短整型數據?? ??? ?%hd?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?2字節
?? ?int?? ? ? ?整型數據?? ??? ?%d?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?4字節
?? ?long?? ?長整型數據?? ??? ?%ld?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?4字節
?? ?
?? ?
?? ?//存小數
?? ?float?? ?單精度浮點型(保存小數)%f?? ??? ??? ??? ??? ??? ??? ??? ?4字節
?? ?double?? ?雙精度浮點型?? ?%lf?? ??? ??? ??? ??? ??? ??? ??? ??? ? ? ?8字節
---------------------------------------------------------------------------------------------------------------------------------------------------?? ??? ?
1.8 ?數制
??? ?十進制: ? ?? ??? ??? ?逢十進一 ? ? ? ? ? ? ? ?0 ? ?1 ? ?2 ? ?3 ? ? 4 ? ? ?
??? ?二進制: ? ?? ??? ??? ?逢二進一 ? ? ? ? ? ? ? ?000 ?001 ?010 ?011 ? ?100
??? ?八進制(以0開頭): ? 逢八進一 ? ? ? ? ? ? ? ?016 ? ?007 ?010 ?... ? ?017 ? ?020
??? ?十六進制(以0x開頭):逢十六進一 ? ? ? ? ? ? ?0x7a ? ?09 ?0a ?0b ?0c ?0d ?0e 0f ?10
?? ??
?? ?0 1 2 3 4 5 6 7 8 9 A ?B ?C ?D ?E ?F
?? ?
??? ?(***)二轉八: ? ? ?從右至左, 二進制的每三位算八進制的一位
??? ?(***)二轉十六: ? ?從右至左, ?二進制的每四位算十六進制的一位。
十進制 ---> 二進制?
十進制 ---> 八進制?
十進制 ---> 十六進制?
#方法: 先%再/,/到0結束
19 ?二進制 10011?
?? ?八進制 023 ?010 011
?? ?十六進制 0x13 0001 0011?
?? ?
29 //十進制?
?? ?二進制 11101?
?? ?八進制 035
?? ?十六進制 0x1D
二進制 ---> 十進制
八進制 ---> 十進制?
十六進制 ---> 十進制 ?? ?
#方法: 先標號,再求和?? ?
43210
11101
標的號對應的是2的幾次冪
1*2^0 + 0*2^1 + 1*2^2 + 1*2^3 + 1*2^4
1 ? ? +?? ? ?0 ? + ? 4 ?+ ? 8 ? + ? 16 ?= ?29
?10
035?
5*8^0 + 3*8^1 = 5 + 24 == 29?
? 10
0x1D?
13*16^0 + 1*16^1 = 13 + 16 = 29?
3210 ? 8 ? ? ? 4 ? ? ? 2 ? ? ? 1
8421
1111 1*2^3 + 1*2^2 + 1*2^1 + 1*2^0
8421?
1011 --->B
1100 --->C
0111 --->7
1010 --->A
0011 --->3
29
二進制 ----> 十六進制?
11101?
四個分一堆,最后不夠的由0填充
8421 8421
0001 1101
1?? ? D
二進制 ----> 八進制?
11101?
三個分一堆,最后不夠的由0填充
421 421
011 101
03 ? 5
8421
1010
A ---> 1010
9 ---> 1001
D ---> 1101
E ---> 1110
6 ---> 0110
3 ---> 0011
十六 --> 二進制 ? 一個十六進制位 對應 四個二進制位?
0xA3
A ? ? 3
1010 0011
八 ---> 二進制 ?一個八進制位 對應 ?三個二進制位
056
5 ? 6
101 110
0xB3C ? ? ? ? ? 二進制 ?八進制 ?十進制?
49(十進制) ? ? ?二進制 ?八進制 ?十六進制 ? ? ??
快速 二進制 ---> 十六進制?
?? ? 二進制 ---> 八進制?
?? ??
?? ? 十六進制 ---> 二進制
?? ??
?? ? 八進制 ---> 二進制?
?
######// ?練習4:求0xff 的10進制值,2進制值, ? 8 進制值
?? ??? ??? ? ??? ??? ??? ??? ? ?
######// ?練習5 : 求128 ?的2進制, ? 8 進制, ? 16 進制
?? ?
----------------------------------------------------------------------------------------------------------------------------------------------------
1.9 運算符
?? ?1.9.1 算數運算符
?? ?(1) + ?加法運算符?? ?int a = 3 + 5; ?//a = 8;
?? ?(2) - ?減法運算符?? ?int b = 3 - 5; ?//b = -2;
?? ?(3) * ?乘法運算符?? ?int c = 3 * 5; ?//c = 15;
?? ?(4) / ?除法運算符?? ?int d = 5 / 3; ?//d = 1; ?
?? ?(5) % ?模運算符(求余運算)?? ?int e = 5 % 3; ?//e = 2; ?
?? ??? ??? ?
?? ?####除法的考點:?
?? ?
?? ??? ?5 / 2 === 2 ? 5里面有幾個2 整數 / 整數 == 整數?
?? ??? ?9 / 5 ==== 1?
?? ??? ?5.0 / 2 ?=== 2.5
?? ??? ?
?? ?####模除運算的考點?? ?
?? ?
?? ??? ?(1) ?4 % 5 == 4 ? ?較小的數 % 較大的數 == 較小的數本身 ? 1 % 9 == 1
?? ??? ?(2) ?%運算要求 % 運算符左右兩邊 必須是整數
?? ??? ??? ?2.2 % 2 ?錯誤的語法
?? ?
?? ?int a = 3 + 5 * 2;?? ?// a = 13
?? ?int a = (3 + 5) * 2;// a = 16
?? ?
?? ?int a = 3;
?? ?int b = 5;
?? ?int c = a + b;
?? ?
?? ?###### ?練習6:輸入三個小數,求和,求平均值分別打印
?? ?float ?a;
?? ?scanf("%f",&a);
?? ?
#include <stdio.h>
int main()
{
?? ?//定義三個浮點類型變量,存儲小數
?? ?float a,b,c;
?? ?float sum,avg;//sum定義為float,是因為a b c 的類型是float,和是float類型
?? ?printf("Please input three number:\n");
?? ?scanf("%f%f%f",&a,&b,&c);//輸入三個數
?? ?sum = a + b + c;
?? ?avg = sum / 3;
?? ?printf("sum is %.2f\navg is %.2f\n",sum,avg);
?? ?return 0;
}
?? ?
?? ?1.9.2 關系運算符
?? ?(1) <?? ?小于
?? ?(2) <=?? ?小于等于
?? ?(3) >?? ?大于
?? ?(4) >=?? ?大于等于?? ?//(1)(2)(3)(4)優先級相同(高)
?? ?(5) ==?? ?等于
?? ?(6) !=?? ?不等于?? ?//(5)(6)優先級相同(低)
?? ?1.9.3 邏輯運算符
?? ??? ?(1) ? && 邏輯與 ? ? ?// (a>b)&&(x>y)
?? ??? ?(2) ? || ? 邏輯或 ? ?// (a>b)||(x>y)
?? ??? ?(3) ? ! ? ?邏輯非 ? ?// ?! (a > b) ###舉例:if(!a)
?? ?
?? ?
----------------------------------------------------------------------------------------------------------------------------------------------------?? ?
1.6 ?選擇結構程序設計
?? ?1.6.1 ?if 條件判斷(進一步理解上面關系運算符和邏輯運算符)
?? ?
#include <stdio.h>
int main()
{
?? ?int age;
?? ?printf("Please input age:\n");
?? ?scanf("%d",&age);
?? ?if(age >= 18)//注意if()后面,不要加;號 if條件為真,執行if下面{}里面的語句
?? ?{
?? ??? ?printf("孩子,可以上網吧了!!\n");
?? ?}
?? ?else//否則 當if條件為假的時候,執行else 下面{}里面的語句
?? ?{
?? ??? ?printf("孩子,回家寫作業去吧!!\n");
?? ?}
?? ?printf("11111111\n");
?? ?return 0;
}?? ?
(1)if-else
?? ?
if(條件)//注意if()后面,不要加;號 if條件為真,執行if下面{}里面的語句
{
?? ??? ?
}
else//否則 當if條件為假的時候,執行else 下面{}里面的語句
{
?? ??? ?
}
####### 練習6:
?? ?完成如下功能:
?? ?1 顯示: "please input a number:"
?? ?2 用戶輸入
?? ?3 判斷用戶輸入的數是不是 大于90,是打印Yes,否打印No
?? ?
#include <stdio.h>
int main()
{
?? ?int num;
?? ?printf("Please input num:\n");
?? ?scanf("%d",&num);
?? ?if(num > 90)
?? ?{
?? ??? ?printf("Yes!!\n");
?? ?}
?? ?else
?? ?{
?? ??? ?printf("No!!\n");
?? ?}
?? ?return 0;
}
?? ?
/講解當if條件句{ }里只有一行語句時{ }可以省略不寫
##練習7:輸入一個數,判斷是否等于0,是打印Yes,不是打印No
方法一 用 == 做?
#include <stdio.h>
int main()
{
?? ?int num;
?? ?printf("Please input num:\n");
?? ?scanf("%d",&num);
?? ?if(num == 0)
?? ?{
?? ??? ?printf("Yes!!\n");
?? ?}
?? ?else
?? ?{
?? ??? ?printf("No!!\n");
?? ?}
?? ?return 0;
}
方法二 用 != 做?
#include <stdio.h>
int main()
{
?? ?int num;
?? ?printf("Please input num:\n");
?? ?scanf("%d",&num);
?? ?if(num != 0)
?? ?{
?? ??? ?printf("No!!\n");
?? ?}
?? ?else// num == 0
?? ?{
?? ??? ?printf("Yes!!\n");
?? ?}
?? ?return 0;
}
####### 練習8:
//新的知識點?
if嵌套?
if()
{
?? ?if()
?? ?{
?? ??? ?
?? ?}
}
1 從鍵盤輸入一個數, 判斷這個數是不是偶數,如果是偶數,打印此數
? 提示:a % 2
??
2 繼續,如果是偶數,再判斷這個數的一半是不是偶數
#include <stdio.h>
int main()
{
?? ?int num;
?? ?printf("Please input num:\n");
?? ?scanf("%d",&num);
?? ?if(num % 2 == 0)
?? ?{
?? ??? ?printf("%d是偶數!!\n",num);
?? ??? ?if(num/2%2 == 0)//進行判斷一半是不是偶數的前提條件是,num已經是偶數了
?? ??? ?{
?? ??? ??? ?printf("一半%d是偶數!!\n",num/2);
?? ??? ?}
?? ?}
?? ?return 0;
}
###### 練習9:
?? ?判斷一個數是否滿足條件:
?? ?
?? ??? ?a) 是7的倍數
?? ??? ?b) 不是3的倍數
?? ??? ?如果滿足,輸出該數
#include <stdio.h>
int main()
{
?? ?int num;
?? ?printf("Please input num:\n");
?? ?scanf("%d",&num);
?? ?if(num % 7 == 0)
?? ?{
?? ??? ?if(num % 3 != 0)
?? ??? ?{
?? ??? ??? ?printf("%d OK!!\n",num);
?? ??? ?}
?? ?}
?? ?return 0;
}
?? ??? ?邏輯與?
?? ??? ?
?? ??? ?&& ? 邏輯與, 用在多個條件之間,用來判斷多個條件是不是都滿足 ----> if嵌套?
?? ??? ?
?? ??? ?同真為真,一假即假
?? ??? ?
?? ??? ?if(條件1 && 條件2 && 條件3)
?? ??? ?{
?? ??? ??? ?//執行語句
?? ??? ?}
#include <stdio.h>
int main()
{
?? ?int height, eye, money;
?? ?printf("Please input height eye money:\n");
?? ?scanf("%d%d%d",&height,&eye,&money);
?? ?//今年23,要求高
?? ?// && 同真為真,一假即假
?? ?if(height > 180 && eye == 2 && money > 20000)//所有的條件都為真,才執行if{}里面的語句
?? ?{
?? ??? ?printf("趕緊安排,見面!!\n");
?? ?}
?? ?else
?? ?{
?? ??? ?printf("下一位!!\n");
?? ?}
?? ?return 0;
}
?? ??? ?
?? ??? ?邏輯或
?? ??? ?|| ? (用來判斷多個條件是不是有一個滿足)
?? ??? ?輸入兩個數,判斷是不是有一個是0 ?//一真即真,同假為假
#include <stdio.h>
int main()
{
?? ?int height, eye, money;
?? ?printf("Please input height eye money:\n");
?? ?scanf("%d%d%d",&height,&eye,&money);
?? ?//今年37,要求....
?? ?// || 一真即真 同假為假
?? ?if(height > 180 || eye == 2 || money > 20000)//有任意一個條件為真,都可以執行if{}里面的語句
?? ?{
?? ??? ?printf("趕緊安排,見面!!\n");
?? ?}
?? ?else
?? ?{
?? ??? ?printf("下一位!!\n");
?? ?}
?? ?return 0;
}
?? ?
?? ??? ?! 邏輯非 ?如果原來為真,取非后變為假,如果原來為假,取非后變為真
?? ??? ?
#include <stdio.h>
int main()
{
?? ?int a = 10;
?? ?printf("a is %d\n",a);// a is 10
?? ?a = !a;//10 ---> 0 ?真 ---> 假
?? ?printf("a is %d\n",a);// a is 0
?? ?a = !a;//0 ----> 1 ?假 ---> 真
?? ?printf("a is %d\n",a);//a is 1
?? ?a = !a;//1 ----> 0 ?真 ---> 假
?? ?printf("a is %d\n",a);//a is 0
?? ?a = !a;//0 ----> 1 ?假 ---> 真
?? ?printf("a is %d\n",a);//a is 1
?? ?return 0;
}?? ??? ?
?? ??? ?
?? ?##筆試問題?
?? ?if(!a) == if(a == 0)
?? ?if(a) == if(a != 0)?? ?
?? ?
?? ?(1)非零即為真
?? ?(2) 真的值是1,假的值是0
?? ?(3) 邏輯非 真變為假,假變為真
?? ?
?? ?if(!a) == if(a == 0)
?? ??? ?
?? ?//假設輸入的是100,100代表真?
?? ?if(!100) == if(100 == 0)
?? ?if(0) ?== if(0)
?? ?//假設輸入的是0,0代表假?
?? ?if(!0) == if(0 == 0)
?? ?if(1) == if(1)
?? ?
?? ?if(a) == if(a != 0)?? ?
?? ??? ?
?? ?//假設輸入的是100,100代表真?
?? ?if(100) == if(100 != 0)
?? ?if(1) ?== if(1)
?? ?//假設輸入的是0,0代表假?
?? ?if(0) == if(0 != 0)
?? ?if(0) == if(0)
?? ?
?? ?if(!a) 等價于 什么 ? B ?
?? ?{
?? ??? ?printf("Yes!!\n");
?? ?}
?? ?A if(a != 0)
?? ??? ?
?? ?B if(a == 0)
?? ??? ?
?? ?C if(a == 10)
?? ??? ?
?? ??? ?
?? ??? ?
?? ??? ?
?? ??? ? ####考點?
?? ??? ??? ??? ?
?? ??? ??? ??? ?(1) 在C語言中非零即為真(只要不是0的數,都是真)
?? ??? ??? ??? ?(2) 在C語言中真的值,通常用1來表達,假的值用0來表達
?? ??? ??
#include <stdio.h>
int main()
{
?? ?printf("3 > 2 is %d\n",3>2);
?? ?printf("2 > 3 is %d\n",2>3);
?? ?return 0;
}
?? ??? ??
?? ??? ? if(1.22)//條件為真?
?? ??? ? if(-10)//條件為真?
?? ??? ? if(0) //條件為假 ?0假
?? ?
###### 練習10:輸入一個數,判斷是否在10-100之間, 如果是打印Yes,不是打印No?? ?
#include <stdio.h>
int main()
{
?? ?int num;
?? ?printf("3 > 2 is %d\n",3>2); // 真 是 ?1
?? ?printf("2 > 3 is %d\n",2>3); // 假 是 ?0
?? ?scanf("%d",&num);
?? ?if(num >= 10 && num <= 100) //不能寫成 10 <= num <= 100,因為輸入任何數,10 <= num結果只有兩種可能1或0,都會<=100
?? ?{
?? ??? ?printf("Yes!!\n");
?? ?}
?? ?else
?? ?{
?? ??? ?printf("No!!\n");
?? ?}
?? ?return 0;
}?? ??? ?
///
關于if();加分號的問題
#include <stdio.h>
int main()
{
?? ?int a = 0;
?? ?if(a);//加;相當于執行空語句
?? ?{
?? ??? ?printf("hello world!!\n");
?? ?}
?? ?
?? ?//加上if();加上;號后,代碼相當于
?? ?//if(a)
?? ?//{
?? ?// ? ;?? ?
?? ?//}
?? ?//{
?? ?//?? ?printf("hello world!!\n");?? ?
?? ?//}
?? ?
?? ?//編譯會不會報錯?? 不會報錯?
?? ?//編譯不報錯,hello world會打印嗎?? 會, 加完;號,printf不屬于if條件句里面
?? ?return 0;
}
#include <stdio.h>
int main()
{
?? ?int a = 0;
?? ?if(a);//加;相當于執行空語句
?? ?{
?? ??? ?printf("hello world!!\n");
?? ?}
?? ?else
?? ?{
?? ??? ?printf("I miss you!!\n");
?? ?}
?? ?//編譯會不會報錯?? ?編譯會報錯,因為有else ,if和else會被 printf("hello world!!\n");分開
?? ?return 0;
}
///關于if()條件句{} 是否可以省略不寫的問題
//當if條件句成立,執行一行執行語句是,可以省略不寫
#include <stdio.h>
int main()
{
?? ?int a = 3, b = 4, c = 5;
?? ?//考點:if條件句的{}省略不寫
?? ?//如果{}省略不寫,相當于只有第一行代碼a = b,屬于if條件判斷
?? ?if(a > b)
?? ??? ?a = b;
?? ??? ?b = c;
?? ??? ?c = a;
?? ??? ?
?? ?//相當于?
?? ?//if(a > b)
?? ?//{
?? ?//?? ?a = b;
?? ?//}
?? ?//b = c;
?? ?//c = a;
?? ?
?? ?printf("%d %d %d\n",a,b,c);// 3 5 3
?? ?return 0;
}
###作業
?? ??? ?
1. 某一時間的下一秒(筆試編程題) ? 20 ? ? ?輸入三個數,代表小時 分鐘 秒
?? ??? ??? ??? ??? ??? ??? ??? ? ?59
?? ??? ??? ??? ??? ??? ??? ??? ? ?59
?? ??? ??? ??? ??? ??? ??? ??? ? ?
?? ??? ??? ??? ??? ??? ?下一秒 ? ?21:00:00
?? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ??? ?
?? ?23 23 45
?? ?23 23 46
?? ?
?? ?23 59 59
?? ?00 00 00
?? ?要求,如果用戶輸入了錯誤的時間,退出 ?24點退出, ?61秒退出
?? ?
#include <stdio.h>
int main()
{
?? ?int hour,min,sec;
?? ?scanf("%d:%d:%d",&hour,&min,&sec);
?? ?//scanf格式化輸入函數
?? ?//printf格式化輸出函數
?? ?//中間做一個下一秒的的處理
?? ?if(hour >= 24 || min >= 60 || sec >= 60 || hour < 0 || min < 0 || sec < 0)//數據有誤的時候
?? ?{
?? ??? ?printf("您輸入的數據不正確!!!!\n");
?? ?}
?? ?else//輸入的數據正確
?? ?{
?? ??? ?sec = sec + 1;//秒數必然+1
?? ??? ?if(sec == 60)
?? ??? ?{
?? ??? ??? ?sec = 0;//將自身歸0
?? ??? ??? ?min = min + 1;//min進位
?? ??? ??? ?if(min == 60)
?? ??? ??? ?{
?? ??? ??? ??? ?min = 0;//自身歸0
?? ??? ??? ??? ?hour = hour + 1;//小時進位
?? ??? ??? ??? ?if(hour == 24)
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?hour = 0;//自身歸0
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ??? ?printf("%02d:%02d:%02d\n",hour,min,sec);//2寬度為2,不足寬度的地方由0填充
?? ?}
?? ?
?? ?return 0;
}
#include <stdio.h>
int main()
{
?? ?int hour,min,sec;
?? ?scanf("%d:%d:%d",&hour,&min,&sec);
?? ?//scanf格式化輸入函數
?? ?//printf格式化輸出函數
?? ?//中間做一個下一秒的的處理
?? ?if(hour >= 24 || min >= 60 || sec >= 60 || hour < 0 || min < 0 || sec < 0)//數據有誤的時候
?? ?{
?? ??? ?printf("您輸入的數據不正確!!!!\n");
?? ?}
?? ?else//輸入的數據正確
?? ?{
?? ??? ?sec = sec + 1;//秒數必然+1
?? ??? ?min = min + sec / 60;//進位
?? ??? ?hour = hour + min / 60;//進位
?? ??? ?sec = sec % 60;//如果sec是60,歸0
?? ??? ?min = min % 60;//如果min是60,歸0
?? ??? ?hour = hour % 24;//如果hour是24,歸0
?? ??? ?printf("%02d:%02d:%02d\n",hour,min,sec);//2寬度為2,不足寬度的地方由0填充
?? ?}
?? ?
?? ?return 0;
}
2. 判斷用戶輸入的年是否為閏年?
?? ?四年一潤
?? ?百年不潤
?? ?四百年又潤 2000 yes 1900 no
?? ?
?? ?//閏年的條件 條件1: 整除4但不整除100 就是閏年 2004 ?
?? ?//?? ??? ??? ? 條件2: 整除400 世紀閏年?
?? ?//滿足條件1和條件2任意一個條件,都證明是閏年
?? ?//程序驗證
?? ?// 2004 閏年
?? ?// 2000 閏年
?? ?// 1900 平年
?? ?// 1991 平年
?? ?
?? ?
#include <stdio.h>
int main()
{
?? ?int year;
?? ?printf("Please input year:\n");
?? ?scanf("%d",&year);
?? ?if((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
?? ?{
?? ??? ?printf("Yes!!\n");
?? ?}
?? ?else
?? ?{
?? ??? ?printf("No!!\n");
?? ?}
?? ?return 0;
}?? ?
總結
- 上一篇: 单纯形法只有两个约束条件_线性规划之单纯
- 下一篇: 光影魔术手