李勇
摘? ?要:C語言作為一種程序設(shè)計(jì)語言,在大數(shù)據(jù)組成的物聯(lián)網(wǎng)和云計(jì)算中應(yīng)用廣泛,具有強(qiáng)大的適應(yīng)性和兼容性,是大數(shù)據(jù)時(shí)代下,在IT行業(yè)中起到關(guān)鍵作用的程序設(shè)計(jì)語言。文章分析了基于大數(shù)據(jù)的C語言程序設(shè)計(jì)的必然性和應(yīng)用策略,為C語言在大數(shù)據(jù)上的應(yīng)用方向提供了參考依據(jù)。以漢字的應(yīng)用為例,提出了解決C語言應(yīng)用問題的思路。
關(guān)鍵詞:大數(shù)據(jù);C語言;程序設(shè)計(jì)
大數(shù)據(jù)是指利用新的處理模式來進(jìn)行決策和處理具有海量信息、增長速度極快的多樣化的信息資產(chǎn)。這些信息資產(chǎn)往往無法在短時(shí)間內(nèi)利用常規(guī)的軟件工具進(jìn)行捕捉,也沒有辦法管理和處理這些數(shù)據(jù)集合。
1? ? 基于大數(shù)據(jù)的C語言程序設(shè)計(jì)的必然性
1.1? C語言程序設(shè)計(jì)研究的現(xiàn)狀
基于大數(shù)據(jù)的C語言是一種計(jì)算機(jī)程序設(shè)計(jì)語言,不僅有高級(jí)計(jì)算機(jī)語言的特點(diǎn),也有匯編類語言的特點(diǎn)。所以,它可以同時(shí)應(yīng)用編匯系統(tǒng)設(shè)計(jì)和編寫應(yīng)用系統(tǒng)兩個(gè)工作層面[1]。在編寫應(yīng)用程序時(shí),能夠做到不依賴計(jì)算機(jī)硬件的效果,是一種應(yīng)用廣泛的計(jì)算機(jī)設(shè)計(jì)語言。在當(dāng)今IT行業(yè)中,C語言程序設(shè)計(jì)具有廣泛的使用人群和使用方向,是推動(dòng)計(jì)算機(jī)發(fā)展進(jìn)步的重要支柱技術(shù)。但是,因?yàn)镃語言入門較為容易,學(xué)習(xí)縱向深度難度較高,所以聘用的C語言程序設(shè)計(jì)師,往往無法達(dá)到理想的技術(shù)水平。而且,與C語言程序設(shè)計(jì)配套相關(guān)的信息系統(tǒng)建設(shè)不健全,導(dǎo)致C語言程序設(shè)計(jì)工作在很多情況下無法達(dá)到預(yù)想效果,抑制了C語言程序設(shè)計(jì)的創(chuàng)新力。因此,需要從新的環(huán)境中尋找改進(jìn)措施。
1.2? 基于大數(shù)據(jù)的C語言程序設(shè)計(jì)的應(yīng)用
大數(shù)據(jù)是指利用新的處理模式來進(jìn)行決策和處理具有海量信息、增長速度極快的多樣化的信息資產(chǎn),這些信息資產(chǎn)往往無法在短時(shí)間內(nèi)利用常規(guī)的軟件工具進(jìn)行捕捉,這些數(shù)據(jù)集合也沒有辦法進(jìn)行管理和處理。大數(shù)據(jù)技術(shù)的實(shí)現(xiàn),其根本不是要去掌握這些龐大的數(shù)據(jù)信息,而是要對這些復(fù)雜的、海量的、種類繁多的信息進(jìn)行專業(yè)化的處理,提取出有用的信息,實(shí)現(xiàn)無用信息再加工的價(jià)值性。
例如,當(dāng)人們?yōu)g覽淘寶時(shí),淘寶后臺(tái)的大數(shù)據(jù)分析軟件就會(huì)匯總分析人們?yōu)g覽時(shí)所輸入的名稱、選擇的分類、在某一個(gè)界面停留時(shí)間的長短,判斷出人們的喜好,并在接下來的瀏覽中,向用戶推薦符合數(shù)據(jù)分析喜好的商品,促進(jìn)交易的達(dá)成,這就是大數(shù)據(jù)的功用。
C語言目前在大數(shù)據(jù)應(yīng)用領(lǐng)域的開發(fā)主要體現(xiàn)在數(shù)據(jù)采集端。大數(shù)據(jù)的來源依賴于物聯(lián)網(wǎng)技術(shù),大量的非結(jié)構(gòu)化數(shù)據(jù)出自物聯(lián)網(wǎng)系統(tǒng),而C語言在物聯(lián)網(wǎng)開發(fā)領(lǐng)域有廣泛地應(yīng)用。C語言是嵌入式設(shè)備的關(guān)鍵編程語言。由于在嵌入式開發(fā)設(shè)備中安裝大型操作系統(tǒng)和語言不方便,C語言已成為物聯(lián)網(wǎng)上物聯(lián)網(wǎng)棧中最受歡迎的語言之一。
在云計(jì)算的應(yīng)用上面,C語言程序設(shè)計(jì)也是主要構(gòu)成要素。眾所周知,云計(jì)算是大數(shù)據(jù)最常用的信息處理方法,云計(jì)算得出的資源是大數(shù)據(jù)進(jìn)行挖掘的重要服務(wù)支持。上文提到大數(shù)據(jù)需要對海量數(shù)據(jù)進(jìn)行查詢、歸類、分析、處理,所以對計(jì)算能力的要求極高,這就需要云計(jì)算作為平臺(tái)來支持大數(shù)據(jù)的運(yùn)作。而云計(jì)算也依托瀏覽器的應(yīng)用而存在。沒有瀏覽器,云計(jì)算就難以普及。瀏覽器是云計(jì)算收集數(shù)據(jù)信息的一個(gè)重要渠道,而瀏覽器的內(nèi)核就是C語言程序設(shè)計(jì)實(shí)現(xiàn)的。絕大多數(shù)瀏覽器界面采用的都是C++程序語言,以Web服務(wù)器為基礎(chǔ)。
常用的Java虛擬機(jī)也是通過C語言程序設(shè)計(jì)實(shí)現(xiàn)的,C語言的發(fā)展促進(jìn)了Java語言的進(jìn)步。Java同樣也是物聯(lián)網(wǎng)的常用語言,是大數(shù)據(jù)的重要組成部分之一。再加上大數(shù)據(jù)所應(yīng)用到的所有通信協(xié)議都是通過C語言來實(shí)現(xiàn)的,可以看出,基于大數(shù)據(jù)進(jìn)行C語言程序設(shè)計(jì)是大數(shù)據(jù)時(shí)代下不可缺少的重要組成內(nèi)容。
1.3? 基于大數(shù)據(jù)的C語言程序設(shè)計(jì)優(yōu)勢
1.3.1? 適用范圍廣
C語言程序設(shè)計(jì)使用范圍廣,主要體現(xiàn)在以下兩個(gè)方面:第一,C語言可以適用于大多數(shù)操作系統(tǒng),具有極強(qiáng)的兼容性。無論是微軟的Windows還是Dos,又或者是UNIX,Linux等系統(tǒng),都可以很好地兼容C語言程序設(shè)計(jì)應(yīng)用,對機(jī)型的要求很低[2]。第二,C語言所適用的場合也遠(yuǎn)遠(yuǎn)多于其他程序設(shè)計(jì)語言。因?yàn)镃語言既有高級(jí)程序設(shè)計(jì)語言的編程特性,又有匯編語言的編程特性,所以可以很好地兼容兩種不同情況的語言編程需求。C語言在程序設(shè)計(jì)語言中起到最底層、最基礎(chǔ)的編輯作用,卻又可以依靠這種基礎(chǔ)的全面性,滿足各種創(chuàng)新性的高階編程需求,是一種適用方向極為廣泛的編程語言。
1.3.2? 基于大數(shù)據(jù)的C語言程序設(shè)計(jì)的功能繁多
傳統(tǒng)C語言程序設(shè)計(jì)功能在大數(shù)據(jù)時(shí)代來臨之前,較之新興編程語言較少。但是,基于大數(shù)據(jù)的C語言,在程序設(shè)計(jì)時(shí)已經(jīng)可以展現(xiàn)出各種各樣的數(shù)據(jù)類型。并且在引入指針的概念后,能夠大幅提升程序的運(yùn)行效率,讓C語言程序設(shè)計(jì)展示出更強(qiáng)的生命力。再加上自身所具備的強(qiáng)大的計(jì)算功能和縝密的邏輯判斷功能,C語言在功能設(shè)計(jì)上已經(jīng)走向了語言程序設(shè)計(jì)的前端,不落后于任何一種程序設(shè)計(jì)語言。
2? ? 基于大數(shù)據(jù)的C語言程序設(shè)計(jì)的應(yīng)用策略分析
2.1? 熟練掌握C語言特有函數(shù)
在計(jì)算機(jī)程序設(shè)計(jì)語言中,針對每一個(gè)功能都有相應(yīng)的函數(shù)進(jìn)行編輯。同樣的,在C語言的程序設(shè)計(jì)中,也需要運(yùn)用到一些特定的函數(shù),通過函數(shù)的名字輕松了解函數(shù)的功能。所以,在進(jìn)行C語言編程時(shí),程序員應(yīng)該對函數(shù)的名字、參數(shù)的名字以及返回值的類型進(jìn)行定義。因?yàn)镃語言提供的編譯系統(tǒng)自帶庫函數(shù),所以程序員要想調(diào)用這些函數(shù)的名字,就要利用include指令,運(yùn)用頭文件的方式,將相關(guān)內(nèi)容插入到這些文件當(dāng)中,從而實(shí)現(xiàn)對函數(shù)程序的調(diào)用。比如,當(dāng)需要用到sqrt函數(shù)時(shí),可以設(shè)置includ"string.h",就可以讓這個(gè)函數(shù)程序正常運(yùn)行。
2.2? 熟練掌握指針的運(yùn)用
指針的應(yīng)用是C語言發(fā)展過程中最重要的一環(huán),極大地提升了C語言程序的運(yùn)行效率。因此,在C語言程序設(shè)計(jì)中,必須要熟練掌握指針的用法。指針在C語言程序設(shè)計(jì)中起控制實(shí)現(xiàn)賦值的作用,為變量關(guān)系的建立提供基礎(chǔ)[3]。指針是一種特殊的類型變量,對解決程序設(shè)計(jì)中出現(xiàn)的各種問題可以起到很大作用。指針的組成包括指針的名、值和所對應(yīng)的類型。在使用指針的過程中,需要利用科學(xué)的方法定義指針的名字和類型,為指針賦予正確的數(shù)值,以便能夠區(qū)分指針和變量的功能。
指針的大小還決定了編程的難度。指針的大小由當(dāng)前CPU運(yùn)行模式的尋址位數(shù)決定。在調(diào)用指針時(shí)要熟練利用C語言的函數(shù)特性,通過流程圖來表現(xiàn)算法里面的內(nèi)容。這不僅需要對函數(shù)有極為精準(zhǔn)的定義,還要熟練掌握C語言的函數(shù)科學(xué),才能進(jìn)行算法編程。在C語言程序設(shè)計(jì)的過程中,要對函數(shù)所擁有的名字、參數(shù)所擁有的名字以及返回值的類型設(shè)置具體類型和指令,確定具體的位運(yùn)算和文件知識(shí),以便能夠保證滿足程序在最初設(shè)定時(shí)的具體要求,確定二進(jìn)制的行為對象。同時(shí),還要設(shè)定好文件中有關(guān)程序文件和數(shù)據(jù)文件的步驟,為數(shù)據(jù)的查找工作提供便利。
2.3? 位運(yùn)算及算法技巧
C語言程序設(shè)計(jì)具有高級(jí)程序設(shè)計(jì)語言的特性,而在運(yùn)算方法當(dāng)中,C語言主要采用位運(yùn)算。位運(yùn)算是通過二進(jìn)制來實(shí)現(xiàn)的,是一種具有獨(dú)特性和唯一性的計(jì)算方式。因此,C語言程序設(shè)計(jì)也是計(jì)算機(jī)軟件編程和程序運(yùn)行最基礎(chǔ)的組成部分。在進(jìn)行C語言程序編程時(shí),一定要按照相關(guān)的程序要求進(jìn)行符合規(guī)定的運(yùn)算。程序文件也是C語言程序設(shè)計(jì)當(dāng)中必不可少的一部分,在編程的過程中需要不斷地在文件中儲(chǔ)存相關(guān)的程序,以便能夠簡化數(shù)據(jù)的查找流程,進(jìn)而起到提高運(yùn)行效率的作用。
在所有的C語言程序設(shè)計(jì)中,最核心的部分就是算法,算法的技巧掌握是程序設(shè)計(jì)的靈魂所在。算法的表現(xiàn)形式多種多樣,既可以用自然語言來表現(xiàn),也可以通過流程圖來表達(dá)。如果是利用流程圖來表示算法,就需要程序員熟練掌握流程圖當(dāng)中需要運(yùn)用到的符號(hào)。C語言的應(yīng)用還少不了數(shù)學(xué)知識(shí)的參與,所以要掌握牢固的數(shù)據(jù)知識(shí)體系,才能提升C語言程序設(shè)計(jì)的編程效率。
3? ? 基于大數(shù)據(jù)的C語言程序設(shè)計(jì)中的文字問題
在C語言程序設(shè)計(jì)的應(yīng)用中,經(jīng)常會(huì)出現(xiàn)漢字運(yùn)用的問題。比如,如何用變量存儲(chǔ)漢字以及對其進(jìn)行操作。目前,許多C語言參考書都沒涉及這個(gè)問題,程序中多為處理英文變量和英文字符串,涉及漢字的情況也大都是在printf語句中輸出提示信息或結(jié)果[4]。如:
1.printf(“請輸入a,b的值:\n”);
2.printf(“輸出功率為%s千瓦。\n”,power);
可以在計(jì)算機(jī)上用strlen( )函數(shù)測試一下,如:
1.printf(“%d”,strlen(“計(jì)算機(jī)”));
若輸出為6,則每個(gè)漢字占兩個(gè)字節(jié);若輸出12,則每個(gè)漢字占4個(gè)字節(jié)。大多數(shù)系統(tǒng)是每個(gè)漢字占兩個(gè)字節(jié)的,即上述語句輸出值為6。應(yīng)當(dāng)注意的是,一個(gè)全角字符(包括標(biāo)點(diǎn)符號(hào))同漢字占據(jù)相同的字節(jié)。本研究假定每個(gè)漢字占兩個(gè)字節(jié)。這樣就可以成功地用字符數(shù)組存儲(chǔ)漢字。因?yàn)樵贑語言中,字符串通過'\0'作為結(jié)束標(biāo)記,系統(tǒng)會(huì)自動(dòng)加上這個(gè)標(biāo)記符,利用strlen( )函數(shù)進(jìn)行測試的返回值不包括'\0',在定義和初始化字符數(shù)組時(shí)應(yīng)當(dāng)使數(shù)組長度最小為實(shí)際字符串長再加1,如:
1.static char name[7]="孫悟空"; /*數(shù)組長度為7說明最多可存放3個(gè)漢字*/
如果把數(shù)組長度定義為6,如:
2.static char array[]={“中國計(jì)算機(jī)軟件專業(yè)技術(shù)水平考試”};
同樣可以定義二維數(shù)組,下面這個(gè)二維數(shù)組可以存放10個(gè)人名:
1.char member[10][8]; /*10個(gè)元素,每個(gè)元素中最多能放3個(gè)漢字*/
因?yàn)槎S數(shù)組member[10][8]可以看成特殊的一維數(shù)組member[0],member[1],…,member[9]。這一維數(shù)組分別表示各行,而一行就表示了一個(gè)人名。因此,如果想操作每個(gè)人名,只需寫成member[0]、member[1],下面給出一個(gè)實(shí)例程序,它的功能是計(jì)算出輸入年份的天干地支。
2.#include “string.h”
3.#define HANZI_ZIJIE
4.3 //所選漢字編碼每個(gè)占3字節(jié).
5.int main()
6.{
7.int a,b,year;
8.char gz[ HANZI_ZIJIE*2+1]; /*用來表示干支的字符變量*/
9./*注意:下面兩個(gè)語句中{}內(nèi)的引號(hào)和逗號(hào)不能為全角字符*/
10.static char tg[10][ HANZI_ZIJIE+1]={“甲”,”乙”,”丙”,”丁”,”戊”,”己”,”庚”,”辛”,”壬”,”癸”};
11.static char dz[12][ HANZI_ZIJIE+1]={“子”,”丑”,”寅”,”卯”,”辰”,”巳”,”午”,”未”,”申”,”酉”,”戍”,”亥”};
12.printf(“請輸入一個(gè)年份:”);
13.scanf(“%d”,&year);
14.a=(year-1804)%10; /*以1804年為參考年份,1804年是甲子年*/
15.b=(year-1804)%12;
16.strcpy(gz,tg[a]);
17.strcat(gz,dz[b]);
18.printf(“%d年的干支為:%s\n”,year,gz);
19.}
正確的運(yùn)行結(jié)果:
請輸入一個(gè)年份:1999
1999年的干支為:己卯
若數(shù)組大小小于漢字所占字節(jié)數(shù)可能會(huì)出現(xiàn)如下結(jié)果:
己庚辛壬癸卯辰巳午未申酉戍亥 //
這是存儲(chǔ)該漢字時(shí)空間不夠?qū)е挛擦銇G失所致。
4? ? 結(jié)語
C語言程序設(shè)計(jì)自身所具備的優(yōu)越性可以完全適應(yīng)大數(shù)據(jù)時(shí)代所帶來的新需求。但是,對程序員的技能水平提出了更高的要求。程序員要更加熟練地掌握C語言函數(shù)的運(yùn)用、指針的運(yùn)用以及算法的運(yùn)用,才能不被時(shí)代所淘汰,為不斷提升C語言程序設(shè)計(jì)水平、推進(jìn)大數(shù)據(jù)時(shí)代快速發(fā)展進(jìn)步做出貢獻(xiàn)。