章下方附學習資源,自助領取
C語言入門程序hello world
#include<stdio.h>
int main()
{
/*在雙引號中間輸入Hello World*/
printf("Hello World"); //在屏幕打印輸出Hello World
return 0;
}
注:在最新的C標準中,main函數前的類型為int而不是void
C語言的具體結構
簡單來說,一個C程序就是由若干頭文件和函數組成。
#include <stdio.h>就是一條預處理命令, 它的作用是通知C語言編譯系統在對C程序進行正式編譯之前需做一些預處理工作。
函數就是實現代碼邏輯的一個小的單元。
必不可少之主函數
一個C程序有且只有一個主函數,即main函數。
寫代碼的良好習慣
程序解釋——注釋
注釋是寫給程序員看的,不是寫給電腦看的。
C語言注釋方法有兩種:
多行注釋:/* 注釋內容 */
單行注釋://注釋一行
C標識符
C語言規定,標識符可以是字母(A~Z,a~z)、數字(0~9)、下劃線_組成的字符串,并且第一個字符必須是字母或下劃線。在使用標識符時還有注意以下幾點:
變量定義與賦值
變量就是可以變化的量,而每個變量都會有一個名字(標識符)。變量占據內存中一定的存儲單元。使用變量之前必須先定義變量,要區分變量名和變量值是兩個不同的概念。
變量定義與賦值的一般形式如下。
注意:在定義中不允許連續賦值,如下操作是不合法的。
int a=b=c=5; //不合法的賦值操作
變量的賦值分為兩種方式:
基本數據類型
C語言中的數據類型如下圖所示。
最常用的整型、實型與字符型(char,int,float,double):
整型數據是指不帶小數的數字(int,short int,long int, unsigned int, unsigned short int,unsigned long int):
注意:
浮點數據是指帶小數的數字。
生活中有很多信息適合使用浮點型數據來表示,比如:人的體重(單位:公斤)、商品價格、圓周率等等。
因為精度的不同又分為3種(float,double,long double):
格式化輸出語句
格式化輸出語句,也可以說是占位輸出,是將各種類型的數據按照格式化后的類型及指定的位置從計算機上顯示。其格式為:
printf("輸出格式符",輸出項);
當輸出語句中包含普通字符時,可以采用一下格式:
printf("普通字符輸出格式符", 輸出項);
注意:格式符的個數要與變量、常量或者表達式的個數相對應。
不可改變的常量
在程序執行過程中,值不發生改變的量稱為常量,比如:
在C語言中,可以用一個標識符來表示一個常量,常量在使用之前必須先定義,其一般形式為:
#include <stdio.h>
#define POCKETMONEY 10 //定義常量及常量值
int main()
{
// POCKETMONEY=12; //小明私自增加零花錢對嗎?
printf("小明今天又得到%d元零花錢\n", POCKETMONEY);
return 0;
}
符號常量不可以被改變。
自動類型轉換
數據類型存在自動轉換的情況。
自動轉換發生在不同數據類型運算時,在編譯的時候自動完成。
char類型數據轉換為int類型數據遵循ASCII碼中的對應值。
注意:
強制類型轉換
強制類型轉換是通過定義類型轉換運算來實現的。其一般形式為:
(數據類型) (表達式)
其作用是把表達式的運算結果強制轉換成類型說明符所表示的類型。在使用強制轉換時應注意以下問題:
C語言基本運算符
除法運算中注意:
取余運算中注意:
自增與自減運算符
自增運算符為++,其功能是使變量的值自增1。
自減運算符為--,其功能是使變量值自減1。
它們經常使用在循環中,自增自減運算符有以下幾種形式:
點擊獲取1V1嵌入式學習規劃,現在還送100G精選學習資料。宓屽叆寮忕墿鑱旂綉寮鍙戝涔犲挩璇?
賦值運算符
C語言中賦值運算符分為簡單賦值運算符和復合賦值運算符。
例如:
a=3; //變量a并賦值為3
a +=5; //這個算式就等價于a=a+5,將變量a和5相加之后再賦值給a
注意:復合運算符中運算符和等號之間是不存在空格的。
關系運算符
C語言中的關系運算符:
關系表達式的值是真和假,在C程序中用整數1和0表示。
注意:>=, <=,==, !=這種符號之間不能存在空格。
邏輯運算符
C語言中的邏輯運算符:
邏輯運算的值也是有兩種分別為真和假,C語言中用整型的1和0來表示。其求值規則如下:
參與運算的兩個變量都為真時,結果才為真,否則為假。例如:5>=5 && 7>5 ,運算結果為真。
參與運算的兩個變量只要有一個為真,結果就為真。兩個量都為假時,結果為假。例如:5>=5||5>8,運算結果為真
參與運算的變量為真時,結果為假;參與運算量為假時,結果為真。例如:!(5>8),運算結果為真
三目運算符
C語言中的三目運算符,其格式為:
表達式1 ? 表達式2 : 表達式3;
程序執行過程是:
判斷表達式1的值是否為真,如果是真的話執行表達式2,如果是假的話執行表達式3。
運算符大比拼之優先級比較
各種運算符號的順序:
優先級別為1的優先級最高,優先級別為10的優先級別最低。
分支結構之簡單if語句
C語言中的分支結構語句中的if條件語句。
簡單if語句的基本結構如下:
if(表達式)
{
執行代碼塊;
}
其語義是:如果表達式的值為真,則執行其后的語句,否則不執行該語句。
注意:if()后面沒有分號,直接寫{}。
分支結構之簡單if-else語句
簡單的if-else語句的基本結構:
語義是: 如果表達式的值為真,則執行代碼塊1,否則執行代碼塊2。
注意:if()后面沒有分號,直接寫{},else后面也沒有分號,直接寫{}。
分支結構之多重if-else語句
C語言中多重if-else語句,其結構如下:
語義是:依次判斷表達式的值,當出現某個值為真時,則執行對應代碼塊,否則執行代碼塊n。
注意:當某一條件為真的時候,則不會向下執行該分支結構的其他語句。
分支結構之嵌套if-else語句
C語言中嵌套if-else語句。嵌套if-else語句的意思,就是在if-else語句中,再寫if-else語句。其一般形式為:
循環結構之while循環
反復不停的執行某個動作就是江湖人稱的循環 。
C語言中有三種循環結構,先看一下C語言while循環的結構:
其中表達式表示循環條件,執行代碼塊為循環體。
while語句的語義是:計算表達式的值,當值為真(非0)時, 執行循環體代碼塊。
循環結構之do-while循環
C語言中的do-while循環,一般形式如下:
do-while循環語句的語義是:
它先執行循環中的執行代碼塊,然后再判斷while中表達式是否為真,如果為真則繼續循環;如果為假,則終止循環。因此,do-while循環至少要執行一次循環語句。
注意:使用do-while結構語句時,while括號后必須有分號。
循環結構之for循環
C語言中for循環一般形式:
它的執行過程如下:
注意:for循環中的兩個分號一定要寫
在for循環中:
結束語句之break語句
需要中斷循環,在C語言中可以使用break語句進行該操作,使用break語句時注意以下幾點:
結束語句之continue語句
continue語句的作用是結束本次循環開始執行下一次循環。
break語句與continue語句的區別是:
break是跳出當前整個循環,continue是結束本次循環開始下一次循環。
分支結構之switch語句
switch語句結構如下:
switch語句時還應注意以下幾點:
自定義函數
自定義函數的一般形式:
注意:
函數調用
需要用到自定義函數的時候,就得調用它,在C語言中,函數調用的一般形式為:
函數名([參數]);
注意:對無參函數調用的時候可以將[]包含的省略。
有參與無參
在函數中不需要函數參數的稱之為無參函數,在函數中需要函數參數的稱之為有參函數。
有參和無參函數的一般形式如下:
有參函數和無參函數的唯一區別在于:函數 () 中多了一個參數列表。
形參與實參
函數的參數分為形參和實參兩種。
形參是在定義函數名和函數體的時候使用的參數,目的是用來接收調用該函數時傳入的參數。
實參是在調用時傳遞該函數的參數。
函數的形參和實參具有以下特點:
函數的返回值
函數的返回值是指函數被調用之后,執行函數體中的程序段所取得的并返回給主調函數的值。
函數的返回值要注意以下幾點:
return語句的一般形式為:
return 表達式
或者為:
return (表達式);
如果兩者不一致,則以函數返回類型為準,自動進行類型轉換。
遞歸函數
遞歸就是一個函數在它的函數體內調用它自身,遞歸函數必須有結束條件。
執行遞歸函數將反復調用其自身,每調用一次就進入新的一層。
一句話總結遞歸:自我調用且有完成狀態。
例題:
有5個人坐在一起,問第5個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問第3個人,又說比第2人大兩歲。問第2個人,說比第1個人大兩歲。最后 問第1個人,他說是10歲。請問第5個人多大?
程序分析:
利用遞歸的方法,遞歸分為回推和遞推兩個階段。要想知道第5個人歲數,需知道第4人的歲數,依次類推,推到第1人(10歲),再往回推。
#include <stdio.h>
int dfs(int n) {
return n==1 ? 10 : dfs(n - 1) + 2;
}
int main()
{
printf("第5個人的年齡是%d歲", dfs(5));
return 0;
}
局部與全局
C語言中的變量,按作用域范圍可分為兩種,即局部變量和全局變量。
變量存儲類別
C語言根據變量的生存周期來劃分,可以分為靜態存儲方式和動態存儲方式。
靜態存儲方式:是指在程序運行期間分配固定的存儲空間的方式。靜態存儲區中存放了在整個程序執行過程中都存在的變量,如全局變量。
動態存儲方式:是指在程序運行期間根據需要進行動態的分配存儲空間的方式。動態存儲區中存放的變量是根據程序運行的需要而建立和釋放的,通常包括:函數形式參數;自動變量;函數調用時的現場保護和返回地址等。
C語言中存儲類別又分為四類:
用關鍵字auto定義的變量為自動變量,auto可以省略,auto不寫則隱含定為“自動存儲類別”,屬于動態存儲方式。如:
用static修飾的為靜態變量,如果定義在函數內部的,稱之為靜態局部變量;如果定義在函數外部,稱之為靜態外部變量。如下為靜態局部變量:
注意:靜態局部變量屬于靜態存儲類別,在靜態存儲區內分配存儲單元,在程序整個運行期間都不釋放;靜態局部變量在編譯時賦初值,即只賦初值一次;如果在定義局部變量時不賦初值的話,則對靜態局部變量來說,編譯時自動賦初值0(對數值型變量)或空字符(對字符變量)。
為了提高效率,C語言允許將局部變量得值放在CPU中的寄存器中,這種變量叫“寄存器變量”,用關鍵字register作聲明。例如:
注意:只有局部自動變量和形式參數可以作為寄存器變量;一個計算機系統中的寄存器數目有限,不能定義任意多個寄存器變量;局部靜態變量不能定義為寄存器變量。
用extern聲明的的變量是外部變量,外部變量的意義是某函數可以調用在該函數之后定義的變量。如:
內部函數與外部函數
在C語言中不能被其他源文件調用的函數稱謂內部函數 ,內部函數由static關鍵字來定義,因此又被稱謂靜態函數,形式為:
static [數據類型] 函數名([參數])
這里的static是對函數的作用范圍的一個限定,限定該函數只能在其所處的源文件中使用,因此在不同文件中出現相同的函數名稱的內部函數是沒有問題的。
在C語言中能被其他源文件調用的函數稱謂外部函數 ,外部函數由extern關鍵字來定義,形式為:
extern [數據類型] 函數名([參數])
C語言規定,在沒有指定函數的作用范圍時,系統會默認認為是外部函數,因此當需要定義外部函數時extern也可以省略。
數組
程序中也需要容器,只不過該容器有點特殊,它在程序中是一塊連續的,大小固定并且里面的數據類型一致的內存空間,它還有個好聽的名字叫數組。可以將數組理解為大小固定,所放物品為同類的一個購物袋,在該購物袋中的物品是按一定順序放置的。
我們來看一下如何聲明一個數組:
數據類型 數組名稱[長度];
數組只聲明也不行啊,看一下數組是如何初始化的。說到初始化,C語言中的數組初始化是有三種形式的,分別是:
數據類型 數組名稱[長度n]={元素1,元素2…元素n};
數據類型 數組名稱[]={元素1,元素2…元素n};
數據類型 數組名稱[長度n]; 數組名稱[0]=元素1; 數組名稱[1]=元素2; 數組名稱[n-1]=元素n;
我們將數據放到數組中之后又如何獲取數組中的元素呢?
獲取數組元素時:
數組名稱[元素所對應下標];
如:初始化一個數組 int arr[3]={1,2,3}; 那么arr[0]就是元素1。
注意:
數組的遍歷
數組就可以采用循環的方式將每個元素遍歷出來,而不用人為的每次獲取指定某個位置上的元素,例如我們用for循環遍歷一個數組:
注意以下幾點:
由于C語言是沒有檢查數組長度改變或者數組越界的這個機制,可能會在編輯器中編譯并通過,但是結果就不能肯定了,因此還是不要越界或者改變數組的長度。
C語言獲取數組長度:
int length=sizeof(arr)/sizeof(arr[0]);
數組作為函數參數
數組可以由整個數組當作函數的參數,也可以由數組中的某個元素當作函數的參數。
整個數組當作函數參數,即把數組名稱傳入函數中,例如:
數組中的元素當作函數參數,即把數組中的參數傳入函數中,例如:
數組作為函數參數時注意以下事項:
數組的應用-冒泡排序
以升序排序為例冒泡排序的思想:相鄰元素兩兩比較,將較大的數字放在后面,直到將所有數字全部排序。就像小學排隊時按大小個排一樣,將一個同學拉出來和后面的比比,如果高就放后面,一直把隊伍排好。
#include <stdio.h>
int main()
{
double arr[]={1.78, 1.77, 1.82, 1.79, 1.85, 1.75, 1.86, 1.77, 1.81, 1.80};
int i,j;
printf("\n************排隊前*************\n");
for(i=0;i<10;i++)
{
if(i !=9)
printf("%1.2f, ", arr[i]); //%1.2f表示小數點前一位,小數點后精確到兩位
else
printf("%1.2f", arr[i]); //%1.2f表示小數點前一位,小數點后精確到兩位
}
for(i=8; i>=0; i--)
{
for(j=0;j<=i;j++)
{
if( arr[j]>arr[j+1]) //當前面的數比后面的數大時
{
double temp; //定義臨時變量temp
temp=arr[j];//將前面的數賦值給temp
arr[j]=arr[j+1]; //前后之數顛倒位置
arr[j+1]=temp;//將較大的數放在后面
}
}
}
printf("\n************排隊后*************\n");
for(i=0;i<10;i++)
{
if(i !=9)
printf("%1.2f, ", arr[i]); //%1.2f表示小數點前一位,小數點后精確到兩位
else
printf("%1.2f", arr[i]); //%1.2f表示小數點前一位,小數點后精確到兩位
}
return 0;
}
數組的應用-數組查找功能
當我們購物之后,拎著購物袋回到家,會一一檢查購物袋中的物品看是否缺少或者都是想購之物。那么應用到程序中,可以使用數組查找功能,看看是否存在該數據,如果存在并返回該元素的下標。
#include <stdio.h>
int getIndex(int arr[5],int value)
{
int i;
int index;
for(i=0;i<5;i++)
{
/* 請完善數組查詢功能 */
if(arr[i]==value)
{
index=i;
break;
}
index=-1;
}
return index;
}
int main()
{
int arr[5]={3,12,9,8,6};
int value=8;
int index=getIndex(arr,value); //這里應該傳什么參數呢?
if(index!=-1)
{
printf("%d在數組中存在,下標為:%d\n",value,index);
}
else
{
printf("%d在數組中不存在。\n",value);
}
return 0;
}
字符串與數組
C語言中,是沒有辦法直接定義字符串數據類型的,但是我們可以使用數組來定義我們所要的字符串。一般有以下兩種格式:
char 字符串名稱[長度]=“字符串值”; //[]中的長度是可以省略不寫的
char 字符串名稱[長度]={‘字符1’,‘字符2’,…,‘字符n’,’\0’}; //最后一個元素必須是’\0’,’\0’表示字符串的結束標志
注意:在輸出字符串的時候可使用如下語句。
printf(“%s”,字符數組名字);
puts(字符數組名字);
字符串函數
常用的字符串函數如下(strlen,strcmp,strcpy,strcat,atoi):
使用字符串函數注意以下事項:
strlen()獲取字符串的長度,在字符串長度中是不包括‘>strlen()獲取字符串的長度,在字符串長度中是不包括‘\0’而且漢字和字母的長度是不一樣的。比如:<’而且漢字和字母的長度是不一樣的。比如:
strcmp()在比較的時候會把字符串先轉換成ASCII碼再進行比較,返回的結果為0表示s1和s2的ASCII碼相等,返回結果為1表示s1比s2的ASCII碼大,返回結果為-1表示s1比s2的ASCII碼小,例如:
strcpy()拷貝之后會覆蓋原來字符串且不能對字符串常量進行拷貝,比如:
strcat在使用時s1與s2指的內存空間不能重疊,且s1要有足夠的空間來容納要復制的字符串,如:
多維數組
多維數組的定義格式是:
數據類型 數組名稱[常量表達式1][常量表達式2]…[常量表達式n];
定義了一個名稱為num,數據類型為int的二維數組。其中第一個[3]表示第一維下標的長度,就像購物時分類存放的購物;第二個[3]表示第二維下標的長度,就像每個購物袋中的元素。
多維數組的初始化與一維數組的初始化類似也是分兩種:
數據類型 數組名稱[常量表達式1][常量表達式2]…[常量表達式n]={{值1,…,值n},{值1,…,值n},…,{值1,…,值n}};
數據類型 數組名稱[常量表達式1][常量表達式2]…[常量表達式n]; 數組名稱[下標1][下標2]…[下標n]=值;
多維數組初始化要注意以下事項:
二維數組定義的時候,可以不指定行的數量,但是必須指定列的數量。
多維數組的遍歷
多維數組也是存在遍歷的,和一維數組遍歷一樣,也是需要用到循環。不一樣的就是多維數組需要采用嵌套循環。
注意:多維數組的每一維下標均不能越界
實例代碼:
#include <stdio.h>
#define N 10
//打印分數
void printScore(int score[])
{
int i;
printf("\n");
for(i=0;i<N;i++)
{
printf("%d ",score[i]);
}
printf("\n");
}
//計算考試總分
int getTotalScore(int score[])
{
int sum=0;
int i;
for(i=0;i<N;i++)
{
sum+=score[i];
}
return sum;
}
//計算平均分
int getAvgScore(int score[])
{
return getTotalScore(score)/N;
}
//計算最高分
int getMax(int score[])
{
int max=-1;
int i;
for(i=0;i<N;i++)
{
if(score[i]>max)
{
max=score[i];
}
}
return max;
}
//計算最低分
int getMin(int score[])
{
int min=100;
int i;
for(i=0;i<N;i++)
{
if(score[i]< min)
{
min=score[i];
}
}
return min;
}
//分數降序排序
void sort(int score[])
{
int i,j;
for(i=N-2;i>=0;i--)
{
for(j=0;j<=i;j++)
{
if(score[j]<score[j+1])
{
int temp;
temp=score[j];
score[j]=score[j+1];
score[j+1]=temp;
}
}
}
printScore(score);
}
int main()
{
int score[N]={67,98,75,63,82,79,81,91,66,84};
int sum,avg,max,min;
sum=getTotalScore(score);
avg=getAvgScore(score);
max=getMax(score);
min=getMin(score);
printf("總分是:%d\n",sum);
printf("平均分是:%d\n",avg);
printf("最高分是:%d\n",max);
printf("最低分是:%d\n",min);
printf("----------成績排名---------\n");
sort(score);
return 0;
}
來源:STM32嵌入式開發
本文轉載自“STM32嵌入式開發”,如有侵權,請聯系刪除
原文鏈接:C語言基礎知識點匯總
版權聲明:本文來源網絡,免費傳達知識,版權歸原作者所有。如涉及作品版權問題,請聯系我進行刪除。
人云:“賜子千金,不如教子一藝;教子一藝,不如賜子好名。”
可見一個人的姓名有多重要,一個人出生下來,直到被父母賦予名字,才有意義上的存在。在江西省有一名叫“趙C”的學生,因為無法辦理2代身份證,公安局命其改名,趙C的父親認為公安局不能因為名字拒絕辦理,將公安局告上法庭,事情經過是怎樣的?最后法院判了誰勝利?
趙C的父親趙志榮,是一名律師,他怎么也沒想到,自己會因為兒子的名字問題,同公安局打了一場官司。
2005年,18歲的趙C年滿18歲,馬上要去上大學的他,來到江西省鷹潭市公安局月湖分局,申請辦理第一代居民身份證。
來之前,趙C已經在路上開始擔心,自己的這個名字,到底能不能用來申請身份證。到了公安局,負責辦理的戶籍警官詢問趙C的名字,趙C如實告訴了他。
“哪個西?”
“不是西,是C,A、B、C、D的C。”
面對戶籍警官疑惑的表情,趙C這樣解釋道。
戶籍警官半信半疑的接過趙C的戶口本,只見上面清清楚楚的寫著“趙C”2個字。
既然戶口本上都可以,那身份證應該也可以吧。趙C心想。
果然,戶籍警官雖然很驚訝,但還是為趙C辦理了第一代身份證。1個月后,趙C順利地拿到了屬于自己的身份證。
2006年,第二代身份證更換時,趙C又來到鷹潭市公安局月湖分局,可是這一次,戶籍警官卻拒絕為其更換,認為“趙C”這個名字不符合規范,并令其更改名字。
這令趙C十分困惑,為什么自己第一次辦理身份證時可以,這次又不可以呢?
他將問題告訴了父親趙志榮,趙志榮多次攜兒子趙C前往鷹潭市公安局月湖分局理論,均被鷹潭市公安局月湖分局工作人員拒絕更換,趙志榮無奈之下,只好將鷹潭市公安局月湖分局告上法院。
“為什么不能更換?我是律師,公民享有姓名權我是知道的。”面對這個問題,趙志榮十分不解,打了一輩子官司,他還是第一次遇到這種情況。
2008年6月6日,鷹潭市月湖區人民法院作出一審判決:趙C的姓名符合法律規定,責令鷹潭市公安局月湖分局限期內為趙C更換第二代居民身份證。
月湖區人民法院的判決書認為,公民享有姓名權,即公民有權決定和使用自己的姓名。第二代居民身份證中姓名可以由漢字、數字、符號三種元素組成。
原告趙C的C既是英文字母,也是漢語拼音字母,是符合國家標準的數字符號。因此,趙C 的姓名符合法律規定。
結果一出,一片嘩然。原來C也可以作為名字。那豈不是李A,張B,王D都可以作為名字嗎?
對于審判結果,月湖分局表示不服,向鷹潭市中級人民法院上訴。
同時,又向省公安廳報告情況,請求事件該如何處理,可省公安廳也不知道怎么辦,就上報到國家公安部請求批復。
公安部只批復了一句話:居民身份證的姓名登記應當使用規范漢字來填寫。
可《中華人民共和國居民身份證法》第四條也規定,居民身份證使用規范漢字和符合國家標準的數字符號填寫。
那么,C到底是屬于英文字母還是數字符號呢?這是鷹潭市中級人民法院二審中雙方爭論的重點。
月湖分局認為,趙C使用英文字母作為其名,既違反法律必須使用規范漢字的規定,也損害了社會公序良俗,因此拒絕為其辦理身份證合情合理。
而趙C一方則認為,C是左半月形符號,為國際上通用的標志符號,自己用趙C這個名字這么多年,從來沒有造成社會問題。
一番唇槍舌戰之后,法院也無法判決到底誰對誰錯,好像各有各的道理,于是最終結果,雙方各占一半。
庭審現場
趙C改名,使用規范漢字;月湖分局免費為其辦理身份證和相應的身份證明文件。
事件到此就結束了,可是這件事卻在全國范圍內引起了一陣討論,就是起名字可以隨便起的嗎?C對于趙志榮有何意義?為何執意要取這個名字。
趙C的爸爸趙志榮,一個平平無奇的中國人的名字,為何給兒子取名C字,在趙志榮眼里,也是有說法的。
在中國人的眼里,長輩給小輩起名,都是有寓意的,寄托著來自父母長輩的希望,在趙志榮心中,就希望自己的兒子可以與眾不同。
從小深感學習重要性的趙志榮,恰好趕上英語流行的年代,他認為英語和中文一樣重要,便想到要在兒子的名字里加點英文。
趙志榮展示身份證上的X字母
而“C”既然中國(China)的英文第一個字母,也有“西方”的諧音,趙志榮覺得這樣不錯,中西結合,他希望孩子以后也可以多喝點“洋墨水”。
也許是出于對西方的好奇,也許為了彰顯自己懂點英文,又或者是為了與眾不同,趙志榮給兒子取名趙C,到派出所進行了戶籍登記。
90年代,戶籍制度并沒有十分嚴格,工作人員便將趙C的名字寫入了戶籍,印在了戶口本上。
中國的居民身份證制度從1984年才開始實行的,在此之前,身份證使用價值不高,有名無實。
身份證明,作為近代社會管理的產物之一,最早是由西方傳過來的。
20世紀前期,我國曾有過身份證的嘗試,比如抗日戰爭時期,日偽政權頒發所謂的“良民證”本質上也是一種身份證明。
再比如,國民黨政權曾發放“國民身份證”,這種嘗試由于國家政權尚不穩定,戰爭不斷,基本上實行一段時間就消失了。
新中國成立后,曾學習蘇聯實行過一段身份證制度,但不久就被廢除了。因為身份證的使用場合太少了。
取而代之的是介紹信的使用,想要出門,一封介紹信就夠了。1985年之前,基本上是“一戶一個戶口本”的模式。
直到現代社會,居民身份證才普及開來,1986年,才頒布了第一套居民身份證使用制度《中華人民共和國居民身份證條例》
1999年,身份證號碼才確認為18位,所以身份證的實行,也不過短短20余年。
因此,制度不夠完善的90年代,才有了“趙C”這樣的名字出現在戶口本上。
隨著時代的發展和科技的進步,第一代身份證漸漸不能滿足如今多樣的需求,于是,第二代身份證應運而生。
由于二代身份證采用非接觸式芯片,且帶有數字防偽技術,因此,居民姓名都要從電腦輸入,而趙C的C,輸入電腦系統無法識別。
這應該是月湖分局拒絕為趙C辦理第二代居民身份證的主要理由。
那么趙C的姓名,在普通人看來究竟合理嗎?
第一、中國居民身份證是一種身份證明,目的是為了方便居民自身活動和交往,也就是說,是作為社會特征而存在的。
試想趙C報名考試,參加面試,外出游玩,與朋友交往時用著“趙C”這個名字,本來為了方便別人現在卻會給別人帶來一定的困擾。
第二、C固然是滿足了個性特征,個性化的取名是時代和社會的進步,但作為一名中國人,首先有的是對自己文化的認同,一個人的名字里帶有英文,從對一個人的主觀印象上來看,是崇洋媚外的。
第三、取名字雖然是自由的,但不能超脫于社會規范,你的名字要在社會公共生活里使用,那就不得不符合文明規范,應該嚴肅一點。
否則的話,今天你叫李shit,明天我叫王bitch,后天他叫孫duck,豈不亂套了?
我們從“趙C”案件可以得到一個啟示,在標新立異,觀念開放的今天,張揚個性,無可厚非。
一些人贊同趙C取名的自由權,而且并未給任何人和社會產生不良影響,還特別好記。
但站在法律的角度來看,如果姓名不規范,將來有人使用法文,拉丁文,甚至各種文字來作為自己的名字,將會給社會管理帶來不小的挑戰。
在孟德斯鳩看來:
“自由是在法律之內的自由”如果超出法律,那么自由也將不再存在。
自由是主體只聽從與自己的意志,不受外界力量束縛的一種狀態。但會受到一些客觀因素的影響,這就是說自由是相對的,并不是想怎樣就怎樣。
假如超脫法律的自由,也就不復存在,你違反了法律,他也違反法律,人人都違反法律,你的自由都沒人保護,那還有何自由可言?
盡管,我國《民法通則》里規定,“公民依法享有姓名權,有權決定、使用和修改自己的名字。”
但這也不代表趙志榮可以隨意給兒子起名。他最想要自己的兒子有文化,可是名字卻彰顯著自己的沒文化。
姓名是中國傳統文化,對姓名的尊重,也是對人的尊重。
縱觀中華文明發展史,每一個偉大名字的誕生,都伴隨著一個絞盡腦汁的過程。也許你聽過“狗蛋”,“鐵蛋”這種詼諧的名字。
但這些名字包含著勞動人民對下一代平安,健康,長壽的祈禱,所謂“賤名好命”,其中有著殷切的希望。
現代人心里,可能對于名字沒有那么多要求,想改隨時都能改,但是一個名字會伴隨著人的一生,也會反映人的外在和性格特征。
雖然最后法院并沒有判“趙C”違反法律,也保證了趙C的自由權,這一方面是法制建設的進步,另一方面,也是對人的權利的尊重。
語言深入淺出:數據類型01。
上次給大家寫了這么一個簡單的實例,接下來再給大家建一個新建的工程,右鍵單擊,這里有一個新建項目,在這里有一個新建項目,在這里點擊下一步,這里建一個數據類型,建一個編號001,數據類型變量、產量,這個位置不變,這里m等,點擊創建。
由于之前先建也給大家編一個編號001,用f2按一下鍵盤上的xy就可以重新命名了,點擊可以,這樣順序是不是就上去了?在解決方案里面可以建很多新的工程,這里是原文件,右鍵單擊,這里新建項目,這里有一個c加加文件,在這里是c文件,把名稱改為也可以是中文名稱,這里寫一個也是中文名稱數據類型。