基礎
- 變量
變量是用來儲存資料的地方
類型名 變量名稱
int price;
int a,b,c;
- 指派和初始化
int a=0; 表示把右邊的值給左邊的變量;
指派符号表示的是一種動作
C語言不要求做初始化 但是在使用的時候需要被賦一次值
int a=0;
- 常量
會變的是變量 不會變的是常量
const 是用來定義常量的 要賦初值 但是不能被修改
const int A=100;
- 浮點類型
帶小數點的數叫做浮點數
與浮點數對應的是定點數 小數點的位置是固定的是定點數
double foot=12.22;
double bbb=12.333;
double c;
scanf("%lf",&c);
printf("%lf");
- 運算符和算子
運算符就是+ - * /
算子就是參與運算的
- 複合指派
+= -+ 這種就是複合運算
- 遞增和遞減運算符
a++ 字尾
++a 字首
注意字首和字尾的不同 字首是++後使用 字尾是使用後在++
- C語言資料類型
- 函數的定義和調用
函數是我們自己定義的方法 會接受參數 傳回或者不傳回值
void sum(int a,int b){ int i; int num=0; }
- 數組
int num[100];
- 指針
指針也是一個變量 與普通變量的是 指針存放的是位址值
如果要弄清楚指針就需要知道三個值
假設p是一個指針變量那麼
p所存放的是一個位址值(具體是誰的位址值看指派)
&p 是指針p自己的位址值
【*p 是指針p存放的位址所指向的值】
#include <stdio.h> int main(){ int *p1=NULL;//p1 現在存的是一個空值 int p=123;//普通變量p 存放的是一個正常的變量 p1=&p;//取p的位址值 把位址值指派給p1 printf("p1=%d \n",p1);// 輸出p1的值 是p的位址值 printf("&p1=%d \n",&p1);//p1自己的位址值 printf("&p=%d \n",&p); //輸出 p的位址值 printf("*p1=%d \n",*p1);//p1存放的位址所指向的值 printf("p=%d",p);//p的值 return 0; }
- 多級指針
多級指針同 一級指針一樣 存放的也是位址 存放的具體是誰的位址也還是要看指派
一級指針指向的是普通變量的位址
二級指針指向的是一級指針的位址 三級指二級依次類推
建立了一個二級指針p
&p 就是p自己的位址值
p 存放的是一個位址值 比他小一級的指針的位址值
*p 就是比他小一級的指針所存放的位址值
**p 就是比他小一級的指針所存放的位址值所指向的值
#include <stdio.h> int main(){ int p=123;//普通變量p 值為123 int *p1=NULL;//一級指針p1 暫時存放的位空位址 int **p2=NULL;//二級指針p2 暫時存的為空位址 p1=&p;//一級指針存放的是變量p的位址值 p2=&p1;//二級指針存放的是p1的位址值 printf("&p1=%d \n",&p1);//p1的位址值 printf(" p2=%d \n",p2);//p2存放的位址值(為p1的位址值) printf("&p2=%d \n\n",&p2);//p2自身的位址值 printf(" p1=%d \n",p1);//p1存放的位址值 為p的位址 printf("*p2=%d \n\n",*p2);//p2指向的位址值 所存放的位址值 printf(" *p1=%d\n",*p1);//p1存放的位址所指向的值 printf("**p2=%d",**p2);//p2存放的位址值所指向的值的位址值所指向的值 return 0; }
- 枚舉
枚舉是C語言中使用者自定義的一種資料類型
- 結構類型
聲明一個結構 定義一些變量
struct point{
int x;
int y;
};
單純聲明一個結構
struct{
int x;
}
- 靜态本地變量
static int c;
隻做一次初始化 後面如果這個值改變 那麼它也會儲存住改變後的值不會再做其他的初始化了
靜态本地變量類似于全局變量 全局生存期 本地作用域
static int all=1;
被調用後 all+2;等于三 後面再被main函數調用也是會從3開始不會再做初始化了
- 宏
“#”開頭的就是編譯預處理指令
#define PI 3.1415 編譯預處理
- 帶參宏定義
用5 來替換x
- 聲明
如果想在項目裡面的其他檔案裡面使用全局變量就需要使用一下語句來申明
- 連結清單
- 求平均數
#include <stdio.h>
int main(){
int a,b;
scanf("%d" "%d",&a,&b);
float c=(a+b)/2;
printf("%f",c);
return 0;
}
- 交換a b 的值
#include <stdio.h>
int main(){
int a=1;
int b=2;
int c;
c=a; a=b; b=c;
printf("%d %d",a,b);
return 0;
}
- 猜數遊戲
#include <stdio.h>
#include <stdlib.h>
int main(){
int a=rand()%100+1;
int b;
int count=0;
do{
printf("輸入數字");
scanf("%d",&b);
if(b>a){
printf("大了");
}else if(b<a){
printf("小了");
}
}while(a!=b);
printf("duil");
}
- 階乘
#include <stdio.h>
int main(){
int a;
scanf("輸入需要參加階乘的數字",&a);
int i;
for(i=1;i<=a;i++){
i*=i;
}
printf("%d",i);
}
- 素數
#include <stdio.h>
int main(){
int a;
scanf("%d",&a);
int isprime;
int i;
for(i=2;i<x;i++){
if(x%i==0){
isprime=0;
break;
}
}
if(isprime==1){
printf("是");
}else{
printf("不是");
}
return 0;
}
- 函數求和
#include <stdio.h>
void add(int a,int b){
int num=0;
int i;
for(i=a;i<=b;i++){
num+=i;
}
printf("%d",num);
}
int main(){
add(1,10);
return 0;
}
- 輸出數組中元素中的平均值 和大于平均值的數
#include <stdio.h>
int main(){
int num[100];
int cot=0;
double sum=0;
int x;
scanf("%d",&x);
while(x!=-1){
num[cot]=x;
sum+=x;
cot++;
scanf("%d",&x);
}
if(cot>0){
int i;
double avg=sum/cot;
for(i=0;i<cot;i++){
if(num[i]>avg){
printf("%d",num[i]);
}
}
}
return 0;
}
- 指針交換兩個變量的值
#include <stdio.h>
void swap(int *a,int *b);
int main(){
int a=123;
int b=321;
printf("&a=%d,&b=%d \n\n",&a,&b);
swap(&a,&b);
printf("&a=%d,&b=%d \n",&a,&b);
printf("a=%d,b=%d \n",a,b);
return 0;
}
void swap(int *a,int *b){
int t=*a;
*a=*b;
*b=t;
}
- 動态配置設定記憶體
#include <stdio.h>
#include <stdlib.h>
int main(){
int number;
int *a;
int i;
scanf("%d"&number);
a=(int *)malloc(number*sizeof(int)); //請求malloc(number*sizeof(int))個記憶體
for(i=0;i<number;i++){
scanf("%d",&a[i]);
}
free(a); //歸還記憶體
}
- 字元串常用函數
//stycpy 拷貝
//strcat 字元串連接配接 結果傳回第一個
//strchr 字元串中找字元
#include <stdio.h>
#include <string.h>
int main() {
char a[]="hello";
char b[]="hello";
printf("%d",strcmp(a,b)); //比較兩個字元串
printf("%d",strlen(a));//strlen 檢視數組的長度
return 0;
}