Ⅰ 求問!!!數據結構課程設計題:病毒測試程序。(c語言)
#include <stdio.h>
#include <stdlib.h>
int iGlobal;
typedef struct tagNode
{
int iData;
int iCount;
struct tagNode *pLeft;
struct tagNode *pRight;
}Node;
Node *Add(Node *a, Node *pNow, int iVal)
{
if (iGlobal == 0)
{
a[0].pLeft = a[0].pRight = NULL;
a[0].iCount = 1;
a[0].iData = iVal;
++iGlobal;
}
else
{
if (pNow == NULL)
{
pNow = a + (iGlobal++);
pNow->pLeft = pNow->pRight = NULL;
pNow->iCount = 1;
pNow->iData = iVal;
}
else
{
if (iVal < pNow->iData)
{
pNow->pLeft = Add(a, pNow->pLeft, iVal);
}
else if (iVal == pNow->iData)
{
++pNow->iCount;
}
else
{
pNow->pRight = Add(a, pNow->pRight, iVal);
}
}
}
return pNow;
}
Node *Find(Node *a, int iVal)
{
if (a == NULL)
{
return NULL;
}
else
{
if (iVal < a->iData)
{
return Find(a->pLeft, iVal);
}
else if (iVal == a->iData)
{
return a;
}
else
{
return Find(a->pRight, iVal);
}
}
}
int main(void)
{
int m, n, i, q, temp;
Node *a = NULL;
Node *p = NULL;
FILE *fp;
if ((fp = fopen("data.txt", "r")) == NULL)
{
printf("File not found!\n");
return -1;
}
fscanf(fp, "%d %d", &m, &n);
do
{
iGlobal = 0;
if ((a = (Node *)malloc(m * n * sizeof(Node))) == NULL)
{
return -1;
}
for (i=0; i<m*n; ++i)
{
fscanf(fp, "%d", &temp);
Add(a, a, temp);
}
fscanf(fp, "%d", &q);
for (i=0; i<q; ++i)
{
fscanf(fp, "%d", &temp);
p = Find(a, temp);
if (p == NULL)
{
putchar('0');
}
else
{
printf("%d", p->iCount);
}
if (i != q-1)
{
putchar(' ');
}
else
{
putchar('\n');
}
}
if (a != NULL)
{
free(a);
a = NULL;
}
fscanf(fp, "%d %d", &m, &n);
}while (m != 0 && n != 0);
return 0;
}
根據我的理解文件中的數據應該是這樣的:
3 4
1 1 1 4
2 2 2 4
3 3 3 4
4
1
2
3
4
0 0
每一個整數或負數表示每種病毒變種,這個解答的思路是建立二叉排序樹,存放數據的文件名為data.txt,你可以自己在源代碼中修改。如果理解錯了,那就給出測試用例,我再修改
Ⅱ 怎樣用C語言編寫病毒 / 藍訊
要編制一個病毒,首先要知道病毒的運行機理。
不論是何種病毒,它一般在結構上分為三個功能模塊:感染機制,觸發機制和有效載荷。
在病毒結構中,首要的而且唯一必需的部分是感染機制。病毒首先必須是能夠繁殖自身的代碼,這是病毒之所以成為病毒的根本
原因。我們可以用一段類C偽碼來表示這個過程。
InfectSection()
{
if (infectable_object_found
&&object_not_already_infect)
infect_object;
}
病毒的第二個主要構成部分是有效載荷觸發事件.一個病毒來到你的電腦後,不大可能立即發作,否則它不會被傳播得很遠.潛伏的敵人永遠要比能見到的敵人危險得多.病毒一般是在找到一定數量的感染體,某一日期或時間,某一段文本後觸發.
一個簡單的觸發機制可能是這樣工作的:
TriggerSection()
{
if (date_is_Friday_13th_and_time_is_03:13:13)
set_trigger_status_to_yes;
}
有效載荷就是病毒用來騷擾你的電腦的方法,有觸發機制的病毒一般也有有效載荷。它可以是任意的給你發一條一次性簡單的愚弄信息,重新格式化你的磁碟,把它自己郵給你的E_mail通信者都可以成為有效的負荷。簡單的有效負荷可以如下進行:
Executesection()
{
if (trigger_statue_is_yes)
execute_payload;
}
Ⅲ 有一批易感人群住在網格狀的宿舍區內,宿舍區為n*n的矩陣,每個格點為一個房間,房間里可能住人 c語言
#include<stdio.h>
#include<iostream>
intmain()
{
inti,j,n,m,e,sl,o,h;
printf("請輸入n ");
scanf("%d",&n);
charsz[100][100];
inthzb[100]={0},zzb[100]={0};
for(i=0;i<n;i++)
{
printf("請輸入第%d數組狀態 ",i);
scanf("%s",sz[i]);
}
printf("請輸入m ");
scanf("%d",&m);
while(m>1)
{
e=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
//尋找第一天得流感的人
if(sz[i][j]=='@')
{
hzb[e]=i;
zzb[e]=j;
e++;
}
}
}
for(i=0;i<e;i++)
{
o=hzb[i];
h=zzb[i];
//判斷病人,鄰居,上一行,是否有人,有人,另感染
if(o>=1&&sz[o-1][h]=='.')
{
sz[o-1][h]='@';
}
//判斷病人,鄰居,左列,是否有人,有人,另感染
if(h>=1&&sz[o][h-1]=='.')
{
sz[o][h-1]='@';
}
//判斷病人,鄰居,右列,是否有人,有人,另感染
//h+1<=n-1,不能讓列數超過給定范圍
if(h+1<=n-1&&sz[o][h+1]=='.')
{
sz[o][h+1]='@';
}
//判斷病人,鄰居,下一行,是否有人,有人,另感染
if(o+1<=n-1&&sz[o+1][h]=='.')
{
sz[o+1][h]='@';
}
}
m--;
}
sl=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(sz[i][j]=='@')
{
sl++;
}
}
}
printf("第m天得流感總共%d人 ",sl);
system("pause");
return0;
}
C語言面向過程,應該是無法完成控制台輸入部分,需要C++完成輸入部分。C++編譯環境能編譯C語言,以上供大家參考
Ⅳ c語言 人數統計
sum沒有初始化,在聲明的時候應該:
int sum=0;
Ⅳ c語言如何用折半查找法查找並統計人數啊急呀!
折半法查找只是用於一種情況,就是數據是按順序排列的
也就是說數據時排好序的,要不然沒法用這個辦法查找
演算法分三步,一步是判斷要查找的數是否在這些數據當中,因為是順序的,所以判斷兩端
如果不在,直接break就可以,沒有必要查找了
第二步是判斷是否是兩個端點,要是兩個端點的一個,那也不用查找了
第三步就是循環查找,兩個指針也可以,用數組下標也可以
這樣判斷如ab兩個指針式只想頭尾,那麼判斷第三個指針,也就是(a+b)/2是否是要找的數據,是的話跳出循環,不是判斷(a+b)/2和a b的大小,吧中間指針賦值給a或者b,循環吧
如果a-b==1了還沒有查找到,那麼這個數就不在這些數據當中,如果中間指針是要查找的數據,那麼就跳出吧
Ⅵ C語言問題求存活人數
埃博拉(Ebola virus)又譯作伊波拉病毒。是一種十分罕見的病毒,1976年在蘇丹南部和剛果(金)(舊稱扎伊爾)的埃博拉河地區發現它的存在後,引起醫學界的廣泛關注和重視,「埃博拉」由此而得名。是一個用來稱呼一群屬於纖維病毒科埃博拉病毒屬下數種病毒的通用術語。是一種能引起人類和靈長類動物產生埃博拉出血熱的烈性傳染病病毒,有很高的死亡率,在50%至90%之間,致死原因主要為中風、心肌梗塞、低血容量休克或多發性器官衰竭。
病學主詞條:埃博拉出血熱
埃博拉病毒是引起人類和靈長類動物發生埃博拉出血熱的烈性病毒,其引起的埃博拉出血熱(EBHF)是當今世界上最致命的病毒性出血熱,感染者症狀與同為纖維病毒科的馬爾堡病毒極為相似,包括惡心、嘔吐、腹瀉、膚色改變、全身酸痛、體內出血、體外出血、發燒等。[1]
埃博拉病毒,生物安全等級為4級(艾滋病為3級,SARS為3級,級數越大防護越嚴格)。病毒潛伏期可達2至21天,但通常只有5天至10天。[2][3]
熱點主詞條:2014年西非埃博拉病毒疫情
世界衛生組織2016年12月23日宣布,由加拿大公共衛生局研發的疫苗可實現高效防護埃博拉病毒。[4]
Ⅶ 關於下面一個C語言編程的問題
/*
*網路知道
*/
#include<STDIO.H>
#include<WINDOWS.H>
voidcheck(intrelation[][100],intstu[],intinfecter);
intmain(void)
{
intrelation[4][100];//4個社團,100個學生
inti;
intj;
intstu[100];//最多所有的學生都是疑似病例
inttt;//學生團體
intss;//大學生
intinfecter;//疑似病例的編號
for(j=0;j<100;j++)
{
for(i=0;i<4;i++)
relation[i][j]=-1;//初始化為-1說明社團裡面沒有學生
stu[j]=-1;//學生初始都不是疑似病例
}
printf("哪個學生團有疑似病例:(初始學生團為0))(輸入-1退出):");
scanf("%d",&tt);
while(tt!=-1)
{
printf("%d學生團誰是疑似病例:(輸入-1退出):",tt);
scanf("%d",&ss);
while(ss!=-1)
{
relation[tt][ss]=1;
printf("%d學生團誰是疑似病例:(輸入-1退出):",tt);
scanf("%d",&ss);
}
printf("哪個學生團有疑似病例:(初始學生團為0))(輸入-1退出):");
scanf("%d",&tt);
}
printf("疑似病例的學生編號:");
scanf("%d",&infecter);
check(relation,stu,infecter);
printf("以下為疑似病例: ");
for(i=0;i<100;i++)
if(stu[i]!=-1)
printf("%d",i);
printf(" ");
return0;
}
voidcheck(intrelation[][100],intstu[],intinfecter)
{
inti;
intj;
for(i=0;i<4;i++)
if(relation[i][infecter]==1)
{
printf("%d學生團的%d學生 ",i,infecter);
Sleep(500);
stu[infecter]=1;
for(j=0;j<100;j++)
{
if(j!=infecter&&stu[j]!=1&&relation[i][j]==1)//防止陷入無限循環而且不能重復判斷已經判斷過得了以及j為疑似病例
check(relation,stu,j);
}
}
}
給你兩張測試截圖:
還有學生團從0開始學生編號也是從0開始我從1開始反而不習慣這不重要
Ⅷ 用C語言寫一段自我復制感染的代碼,
《中華人民共和國計算機信息系統安全保護條例》中被明確定義,病毒指「編制或者在計算機程序中插入的破壞計算機功能或者破壞數據,影響計算機使用並且能夠自我復制的一組計算機指令或者程序代碼」。而在一般教科書及通用資料中被定義為:利用計算機軟體與硬體的缺陷,由被感染機內部發出的破壞計算機數據並影響計算機正常工作的一組指令集或程序代碼 。計算機病毒最早出現在70年代 David Gerrold 科幻小說 When H.A.R.L.I.E. was One.最早科學定義出現在 1983:在Fred Cohen (南加大) 的博士論文 「計算機病毒實驗」「一種能把自己(或經演變)注入其它程序的計算機程序」啟動區病毒,宏(macro)病毒,腳本(script)病毒也是相同概念傳播機制同生物病毒類似.生物病毒是把自己注入細胞之中。
電腦病毒二、計算機病毒的長期性:病毒往往會利用計算機操作系統的弱點進行傳播,提高系統的安全性是防病毒的一個重要方面,但完美的系統是不存在的,過於強調提高系統的安全性將使系統多數時間用於病毒檢查,系統失去了可用性、實用性和易用性,另一方面,信息保密的要求讓人們在泄密和抓住病毒之間無法選擇。病毒與反病毒將作為一種技術對抗長期存在,兩種技術都將隨計算機技術的發展而得到長期的發展。
三、計算機病毒的產生:病毒不是來源於突發或偶然的原因。一次突發的停電和偶然的錯誤,會在計算機的磁碟和內存中產生一些亂碼和隨機指令,但這些代碼是無序和混亂的,病毒則是一種比較完美的,精巧嚴謹的代碼,按照嚴格的秩序組織起來,與所在的系統網路環境相適應和配合起來,病毒不會通過偶然形成,並且需要有一定的長度,這個基本的長度從概率上來講是不可能通過隨機代碼產生的。現在流行的病毒是由人為故意編寫的,多數病毒可以找到作者和產地信息,從大量的統計分析來看,病毒作者主要情況和目的是:一些天才的程序員為了表現自己和證明自己的能力,出於對上司的不滿,為了好奇,為了報復,為了祝賀和求愛,為了得到控制口令,為了軟體拿不到報酬預留的陷阱等.當然也有因政治,軍事,宗教,民族.專利等方面的需求而專門編寫的,其中也包括一些病毒研究機構和黑客的測試病毒.
四、計算機病毒的特點,計算機病毒具有以下幾個特點:
(1) 寄生性:計算機病毒寄生在其他程序之中,當執行這個程序時,病毒就起破壞作用,而在未啟動這個程序之前,它是不易被人發覺的。
(2) 傳染性:計算機病毒不但本身具有破壞性,更有害的是具有傳染性,一旦病毒被復制或產生變種,其速度之快令人難以預防。傳染性是病毒的基本特徵。在生物界,病毒通過傳染從一個生物體擴散到另一個生物體。在適當的條件下,它可得到大量繁殖,並使被感染的生物體表現出病症甚至死亡。同樣,計算機病毒也會通過各種渠道從已被感染的計算機擴散到未被感染的計算機,在某些情況下造成被感染的計算機工作失常甚至癱瘓。與生物病毒不同的是,計算機病毒是一段人為編制的計算機程序代碼,這段程序代碼一旦進入計算機並得以執行,它就會搜尋其他符合其傳染條件的程序或存儲介質,確定目標後再將自身代碼插入其中,達到自我繁殖的目的。只要一台計算機染毒,如不及時處理,那麼病毒會在這台機子上迅速擴散,其中的大量文件(一般是可執行文件)會被感染。而被感染的文件又成了新的傳染源,再與其他機器進行數據交換或通過網路接觸,病毒會繼續進行傳染。 正常的計算機程序一般是不會將自身的代碼強行連接到其他程序之上的。而病毒卻能使自身的代碼強行傳染到一切符合其傳染條件的未受到傳染的程序之上。計算機病毒可通過各種可能的渠道,如軟盤、計算機網路去傳染其他的計算機。當您在一台機器上發現了病毒時,往往曾在這台計算機上用過的軟盤已感染上了病毒,而與這台機器相聯網的其他計算機也許也被該病毒染上了。是否具有傳染性是判別一個程序是否為計算機病毒的最重要條件。 病毒程序通過修改磁碟扇區信息或文件內容並把自身嵌入到其中的方法達到病毒的傳染和擴散。被嵌入的程序叫做宿主程序;
(3) 潛伏性:有些病毒像定時炸彈一樣,讓它什麼時間發作是預先設計好的。比如黑色星期五病毒,不到預定時間一點都覺察不出來,等到條件具備的時候一下子就爆炸開來,對系統進行破壞。一個編制精巧的計算機病毒程序,進入系統之後一般不會馬上發作,可以在幾周或者幾個月內甚至幾年內隱藏在合法文件中,對其他系統進行傳染,而不被人發現,潛伏性愈好,其在系統中的存在時間就會愈長,病毒的傳染范圍就會愈大。 潛伏性的第一種表現是指,病毒程序不用專用檢測程序是檢查不出來的,因此病毒可以靜靜地躲在磁碟或磁帶里呆上幾天,甚至幾年,一旦時機成熟,得到運行機會,就又要四處繁殖、擴散,繼續為害。潛伏性的第二種表現是指,計算機病毒的內部往往有一種觸發機制,不滿足觸發條件時,計算機病毒除了傳染外不做什麼破壞。觸發條件一旦得到滿足,有的在屏幕上顯示信息、圖形或特殊標識,有的則執行破壞系統的操作,如格式化磁碟、刪除磁碟文件、對數據文件做加密、封鎖鍵盤以及使系統死鎖等;
(4) 隱蔽性:計算機病毒具有很強的隱蔽性,有的可以通過病毒軟體檢查出來,有的根本就查不出來,有的時隱時現、變化無常,這類病毒處理起來通常很困難。
(5)破壞性:計算機中毒後,可能會導致正常的程序無法運行,把計算機內的文件刪除或受到不同程度的損壞 。通常表現為:增、刪、改、移。
(6)計算機病毒的可觸發性:病毒因某個事件或數值的出現,誘使病毒實施感染或進行攻擊的特性稱為可觸發性。為了隱蔽自己,病毒必須潛伏,少做動作。如果完全不動,一直潛伏的話,病毒既不能感染也不能進行破壞,便失去了殺傷力。病毒既要隱蔽又要維持殺傷力,它必須具有可觸發性。病毒的觸發機制就是用來控制感染和破壞動作的頻率的。病毒具有預定的觸發條件,這些條件可能是時間、日期、文件類型或某些特定數據等。病毒運行時,觸發機制檢查預定條件是否滿足,如果滿足,啟動感染或破壞動作,使病毒進行感染或攻擊;如果不滿足,使病毒繼續潛伏。
五、計算機病毒分類,根據多年對計算機病毒的研究,按照科學的、系統的、嚴密的方法,計算機病毒可分類如下:按照計算機病毒屬性的方法進行分類,計算機病毒可以根據下面的屬性進行分類:
按照計算機病毒存在的媒體進行分類:
(1)根據病毒存在的媒體,病毒可以劃分為網路病毒,文件病毒,引導型病毒。網路病毒通過計算機網路傳播感染網路中的可執行文件,文件病毒感染計算機中的文件(如:COM,EXE,DOC等),引導型病毒感染啟動扇區(Boot)和硬碟的系統引導扇區(MBR),還有這三種情況的混合型,例如:多型病毒(文件和引導型)感染文件和引導扇區兩種目標,這樣的病毒通常都具有復雜的演算法,它們使用非常規的辦法侵入系統,同時使用了加密和變形演算法。
按照計算機病毒傳染的方法進行分類:
(2)根據病毒傳染的方法可分為駐留型病毒和非駐留型病毒,駐留型病毒感染計算機後,把自身的內存駐留部分放在內存(RAM)中,這一部分程序掛接系統調用並合並到操作系統中去,他處於激活狀態,一直到關機或重新啟動.非駐留型病毒在得到機會激活時並不感染計算機內存,一些病毒在內存中留有小部分,但是並不通過這一部分進行傳染,這類病毒也被劃分為非駐留型病毒。
(3) 根據病毒破壞的能力可劃分為以下幾種:
無害型
除了傳染時減少磁碟的可用空間外,對系統沒有其它影響。
無危險型
這類病毒僅僅是減少內存、顯示圖像、發出聲音及同類音響。
危險型
這類病毒在計算機系統操作中造成嚴重的錯誤。
非常危險型
這類病毒刪除程序、破壞數據、清除系統內存區和操作系統中重要的信息。這些病毒對系統造成的危害,並不是本身的演算法中存在危險的調用,而是當它們傳染時會引起無法預料的和災難性的破壞。由病毒引起其它的程序產生的錯誤也會破壞文件和扇區,這些病毒也按照他們引起的破壞能力劃分。一些現在的無害型病毒也可能會對新版的DOS、Windows和其它操作系統造成破壞。例如:在早期的病毒中,有一個「Denzuk」病毒在360K磁碟上很好的工作,不會造成任何破壞,但是在後來的高密度軟盤上卻能引起大量的數據丟失。
(4)根據病毒特有的演算法,病毒可以劃分為:
1. 伴隨型病毒,這一類病毒並不改變文件本身,它們根據演算法產生EXE文件的伴隨體,具有同樣的名字和不同的擴展名(COM),例如:XCOPY.EXE的伴隨體是XCOPY.COM。病毒把自身寫入COM文件並不改變EXE文件,當DOS載入文件時,伴隨體優先被執行到,再由伴隨體載入執行原來的EXE文件。
2. 「蠕蟲」型病毒,通過計算機網路傳播,不改變文件和資料信息,利用網路從一台機器的內存傳播到其它機器的內存,計算網路地址,將自身的病毒通過網路發送。有時它們在系統存在,一般除了內存不佔用其它資源。
3. 寄生型病毒 除了伴隨和「蠕蟲」型,其它病毒均可稱為寄生型病毒,它們依附在系統的引導扇區或文件中,通過系統的功能進行傳播,按其演算法不同可分為:練習型病毒,病毒自身包含錯誤,不能進行很好的傳播,例如一些病毒在調試階段。
4. 詭秘型病毒 它們一般不直接修改DOS中斷和扇區數據,而是通過設備技術和文件緩沖區等DOS內部修改,不易看到資源,使用比較高級的技術。利用DOS空閑的數據區進行工作。
5. 變型病毒(又稱幽靈病毒) 這一類病毒使用一個復雜的演算法,使自己每傳播一份都具有不同的內容和長度。它們一般的作法是一段混有無關指令的解碼演算法和被變化過的病毒體組成。
六、計算機病毒的發展,在病毒的發展史上,病毒的出現是有規律的,一般情況下一種新的病毒技術出現後,病毒迅速發展,接著反病毒技術的發展會抑制其流傳。操作系統升級後,病毒也會調整為新的方式,產生新的病毒技術。它可劃分為:
DOS引導階段
1987年,計算機病毒主要是引導型病毒,具有代表性的是「小球」和「石頭」病毒。當時的計算機硬體較少,功能簡單,一般需要通過軟盤啟動後使用.引導型病毒利用軟盤的啟動原理工作,它們修改系統啟動扇區,在計算機啟動時首先取得控制權,減少系統內存,修改磁碟讀寫中斷,影響系統工作效率,在系統存取磁碟時進行傳播;
1989年,引導型病毒發展為可以感染硬碟,典型的代表有「石頭2」;
DOS可執行階段
1989年,可執行文件型病毒出現,它們利用DOS系統載入執行文件的機制工作,代表為「耶路撒冷」,「星期天」病毒,病毒代碼在系統執行文件時取得控制權,修改DOS中斷,在系統調用時進行傳染,並將自己附加在可執行文件中,使文件長度增加。
1990年,發展為復合型病毒,可感染COM和EXE文件。
伴隨、批次型階段
1992年,伴隨型病毒出現,它們利用DOS載入文件的優先順序進行工作,具有代表性的是「金蟬」病毒,它感染EXE文件時生成一個和EXE同名但擴展名為COM的伴隨體;它感染文件時,改原來的COM文件為同名的EXE文件,再產生一個原名的伴隨體,文件擴展名為COM,這樣,在DOS載入文件時,病毒就取得控制權.這類病毒的特點是不改變原來的文件內容,日期及屬性,解除病毒時只要將其伴隨體刪除即可。在非DOS操作系統中,一些伴隨型病毒利用操作系統的描述語言進行工作,具有典型代表的是「海盜旗」病毒,它在得到執行時,詢問用戶名稱和口令,然後返回一個出錯信息,將自身刪除。批次型病毒是工作在DOS下的和「海盜旗」病毒類似的一類病毒。
幽靈、多形階段
1994年,隨著匯編語言的發展,實現同一功能可以用不同的方式進行完成,這些方式的組合使一段看似隨機的代碼產生相同的運算結果。幽靈病毒就是利用這個特點,每感染一次就產生不同的代碼。例如「一半」病毒就是產生一段有上億種可能的解碼運算程序,病毒體被隱藏在解碼前的數據中,查解這類病毒就必須能對這段數據進行解碼,加大了查毒的難度。多形型病毒是一種綜合性病毒,它既能感染引導區又能感染程序區,多數具有解碼演算法,一種病毒往往要兩段以上的子程序方能解除。
生成器,變體機階段
1995年,在匯編語言中,一些數據的運算放在不同的通用寄存器中,可運算出同樣的結果,隨機的插入一些空操作和無關指令,也不影響運算的結果,這樣,一段解碼演算法就可以由生成器生成,當生成器的生成結果為病毒時,就產生了這種復雜的「病毒生成器」 ,而變體機就是增加解碼復雜程度的指令生成機制。這一階段的典型代表是「病毒製造機」 VCL,它可以在瞬間製造出成千上萬種不同的病毒,查解時就不能使用傳統的特徵識別法,需要在宏觀上分析指令,解碼後查解病毒。
網路,蠕蟲階段
1995年,隨著網路的普及,病毒開始利用網路進行傳播,它們只是以上幾代病毒的改進.在非DOS操作系統中,「蠕蟲」是典型的代表,它不佔用除內存以外的任何資源,不修改磁碟文件,利用網路功能搜索網路地址,將自身向下一地址進行傳播,有時也在網路伺服器和啟動文件中存在。
視窗階段
1996年,隨著Windows和Windows95的日益普及,利用Windows進行工作的病毒開始發展,它們修改(NE,PE)文件,典型的代表是DS.3873,這類病毒的機制更為復雜,它們利用保護模式和API調用介面工作,解除方法也比較復雜。 宏病毒階段1996年,隨著Windows Word功能的增強,使用Word宏語言也可以編制病毒,這種病毒使用類Basic語言、編寫容易、感染Word文檔等文件,在Excel和AmiPro出現的相同工作機制的病毒也歸為此類,由於Word文檔格式沒有公開,這類病毒查解比較困難;
互連網階段
1997年,隨著網際網路的發展,各種病毒也開始利用網際網路進行傳播,一些攜帶病毒的數據包和郵件越來越多,如果不小心打開了這些郵件,機器就有可能中毒;
爪哇(Java),郵件炸彈階段
1997年,隨著萬維網(Wold Wide Web)上Java的普及,利用Java語言進行傳播和資料獲取的病毒開始出現,典型的代表是JavaSnake病毒,還有一些利用郵件伺服器進行傳播和破壞的病毒,例如Mail-Bomb病毒,它會嚴重影響網際網路的效率。
七、其他的破壞行為,計算機病毒的破壞行為體現了病毒的殺傷能力。病毒破壞行為的激烈程度取決於病毒作者的主觀願望和他所具有的技術能量。數以萬計不斷發展擴張的病毒,其破壞行為千奇百怪,不可能窮舉其破壞行為,而且難以做全面的描述,根據現有的病毒資料可以把病毒的破壞目標和攻擊部位歸納如下: 攻擊系統數據區,攻擊部位包括:硬碟主引尋扇區、Boot扇區、FAT表、文件目錄等。一般來說,攻擊系統數據區的病毒是惡性病毒,受損的數據不易恢復。 攻擊文件,病毒對文件的攻擊方式很多,可列舉如下:刪除、改名、替換內容、丟失部分程序代碼、內容顛倒、寫入時間空白、變碎片、假冒文件、丟失文件簇、丟失數據文件等。攻擊內存,內存是計算機的重要資源,也是病毒攻擊的主要目標之一,病毒額外地佔用和消耗系統的內存資源,可以導致一些較大的程序難以運行。病毒攻擊內存的方式如下:佔用大量內存、改變內存總量、禁止分配內存、蠶食內存等。干擾系統運行,此類型病毒會干擾系統的正常運行,以此作為自己的破壞行為,此類行為也是花樣繁多,可以列舉下述諸方式:不執行命令、干擾內部命令的執行、虛假報警、使文件打不開、使內部棧溢出、佔用特殊數據區、時鍾倒轉、重啟動、死機、強制游戲、擾亂串列口、並行口等。 速度下降,病毒激活時,其內部的時間延遲程序啟動,在時鍾中納入了時間的循環計數,迫使計算機空轉,計算機速度明顯下降。攻擊磁碟,攻擊磁碟數據、不寫盤、寫操作變讀操作、寫盤時丟位元組等。 擾亂屏幕顯示,病毒擾亂屏幕顯示的方式很多,可列舉如下:字元跌落、環繞、倒置、顯示前一屏、游標下跌、滾屏、抖動、亂寫、吃字元等。 鍵盤病毒,干擾鍵盤操作,已發現有下述方式:響鈴、封鎖鍵盤、換字、抹掉緩存區字元、重復、輸入紊亂等。 喇叭病毒,許多病毒運行時,會使計算機的喇叭發出響聲。有的病毒作者通過喇叭發出種種聲音,有的病毒作者讓病毒演奏旋律優美的世界名曲,在高雅的曲調中去殺戮人們的信息財富,已發現的喇叭發聲有以下方式:演奏曲子、警笛聲、炸彈雜訊、鳴叫、咔咔聲、嘀嗒聲等。 攻擊CMOS , 在機器的CMOS區中,保存著系統的重要數據,例如系統時鍾、磁碟類型、內存容量等,並具有校驗和。有的病毒激活時,能夠對CMOS區進行寫入動作,破壞系統CMOS中的數據。 干擾列印機,典型現象為:假報警、間斷性列印、更換字元等。
八、計算機病毒的危害性,計算機資源的損失和破壞,不但會造成資源和財富的巨大浪費,而且有可能造成社會性的災難,隨著信息化社會的發展,計算機病毒的威脅日益嚴重,反病毒的任務也更加艱巨了。1988年11月2日下午5時1分59秒,美國康奈爾大學的計算機科學系研究生,23歲的莫里斯(Morris)將其編寫的蠕蟲程序輸入計算機網路,致使這個擁有數萬台計算機的網路被堵塞。這件事就像是計算機界的一次大地震,引起了巨大反響,震驚全世界,引起了人們對計算機病毒的恐慌,也使更多的計算機專家重視和致力於計算機病毒研究。1988年下半年,我國在統計局系統首次發現了「小球」病毒,它對統計系統影響極大,此後由計算機病毒發作而引起的「病毒事件」接連不斷,前一段時間發現的CIH、美麗莎等病毒更是給社會造成了很大損失。
九、用戶計算機中毒的24種症狀
1.計算機系統運行速度減慢。
2.計算機系統經常無故發生死機。
3.計算機系統中的文件長度發生變化。
4.計算機存儲的容量異常減少。
5.系統引導速度減慢。
6.丟失文件或文件損壞。
7.計算機屏幕上出現異常顯示。
8.計算機系統的蜂鳴器出現異常聲響。
9.磁碟卷標發生變化。
10.系統不識別硬碟。
11.對存儲系統異常訪問。
12.鍵盤輸入異常。
13.文件的日期、時間、屬性等發生變化。
14.文件無法正確讀取、復制或打開。
15.命令執行出現錯誤。
16.虛假報警。
17.換當前盤。有些病毒會將當前盤切換到C盤。
18.時鍾倒轉。有些病毒會命名系統時間倒轉,逆向計時。
19.WINDOWS操作系統無故頻繁出現錯誤。
20.系統異常重新啟動。
21.一些外部設備工作異常。
22.異常要求用戶輸入密碼。
23.WORD或EXCEL提示執行「宏」。
24.是不應駐留內存的程序駐留內存。
計算機病毒是在什麼情況下出現的?
計算機病毒的產生是計算機技術和以計算機為核心的社會信息化進程發展到一定階段的必然產物。它產生的背景是:
(1)計算機病毒是計算機犯罪的一種新的衍化形式
計算機病毒是高技術犯罪, 具有瞬時性、動態性和隨機性。不易取證, 風險小破壞大, 從而刺激了犯罪意識和犯罪活動。是某些人惡作劇和報復心態在計算機應用領域的表現;
(2)計算機軟硬體產品的脆弱性是根本的技術原因
計算機是電子產品。數據從輸入、存儲、處理、輸出等環節, 易誤入、篡改、丟失、作假和破壞;程序易被刪除、改寫;計算機軟體設計的手工方式, 效率低下且生產周期長;人們至今沒有辦法事先了解一個程序有沒有錯誤, 只能在運行中發現、修改錯誤, 並不知道還有多少錯誤和缺陷隱藏在其中。這些脆弱性就為病毒的侵入提供了方便;
Ⅸ c語言題目演算法解析
自己的一點看法,可能有不對的,歡迎探討。
#include <stdio.h>
#include <malloc.h>
int **stu_g;//這個二維數組存儲學生團體里邊的學生編號
int *ret;//存儲結果
int ret_num;//感覺這個變數沒用到。。。。。
int n, k;//n學生總數,k學生團體總數
void add(int *pArr, int num){ // @num : a number > -//將與被感染者有關的人加入到ret數組中
int *t = pArr;
while(*t != -1 && *t != num) t++;//這個不知道// 這里是排除重復,當前num是需要加入到ret數組中的,如果ret數組中num之前不存在,則將num加進去。
if(*t == -1) *t = num;//這個不知道
}
int find(int index){ //@index : index of ret[]//這個不知道//len變數用來表明最後輸出的時候總共有多少個疑似病例
int i, j;
if(ret[index] == -1) return index;//這個不知道//在調用過程中index的值為0,如果ret[index]=0的話那麼表明不存在疑似病例,直接返回,len=0;
for(i = 0; i < k; i++){
for(j = 0; j < stu_g[i][0] - 1; j++)//這個不知道
{
if(stu_g[i][j+1] == ret[index]){ // the student in this group//這兩個嵌套的for循環是用來判斷學生團體成員中是否存在某個學生的編號與ret數組中的值相同,如果有相同的話就把真個當前的學生團體的所有成員添加到ret數組中。
j = 1;
while(j < stu_g[i][0])add(ret, stu_g[i][j++]);
break;
}
}
}
return find(index + 1);//遞歸調用find,依次判斷ret數組中的各個成員和stu_g中的成員,擴充ret數組。
}
int func(){
int i, j, sum, num, len;
// malloc
ret = (int *)malloc(sizeof(int) * n);//這個不知道//malloc函數給變數分配地址空間,這個具體用法你自行網路
stu_g = (int **)malloc(sizeof(int) *k);//根據K值給stu_g數組分配第一維空間
i = 0;
while(i < n) ret[i++] = -1;//初始化ret數組
ret_num = 0;
for(i = 0; i < k; i++)
{
scanf("%d", &sum);//sum在這里是學生團體中學生的人數
stu_g[i] = (int *)malloc(sizeof(int) * (sum + 1));//分配第二維空間
stu_g[i][0] = sum + 1; // sum as arry len//這個不知道//這里不是很確定哈,stu_g[i][0]這個值表示stu_g[i]這個一維數組的長度,因為sum的值是暫時的,用[0]這個值來記錄每個學生團體中的具體人數的值
for(j = 0; j < sum; j++) scanf("%d", &stu_g[i][j+1]);//錄入每個團體的學生編號
}
scanf("%d", &ret[0]);//這個不知道//這里就是將首次給出的感染的學生的編號放入ret數組的起始單元中
//以上都是初始化數組和讀取數據
//@ret : 結果
//@str_g : 一個二維數組 存放每組成員
len = find(0);//這個不知道
printf("%d", len);
i = 0;
while(i < len)printf(", %d", ret[i++]);//輸出ret數組內容
printf("\n");
//free
free(ret);//釋放空間
for(i = 0; i < k; i++) free(stu_g[i]);
}
int main(){
while(scanf("%d %d", &n, &k) == 2){
func();
}
return 0;
}
Ⅹ c語言利用遞歸 解決流感傳染問題
#include<stdlib.h>
#include<malloc.h>
#include<memory.h>
//感染函數輸入參數:
//room:房間現狀
//n:房間行列數
//p:感染者所在房間序號
voidinfect(char*room,intn,intp)
{
if(p<0)return;
if(p>=n*n)return;
inta[4];
a[0]=p-1;
a[1]=p+1;
a[2]=p+n;
a[3]=p-n;
p%=n;
if(p==0)a[0]=-1;
if(p==n-1)a[1]=-1;
if(a[2]>=n*n)a[2]=-1;
if(a[3]<0)a[3]=-1;
for(p=0;p<4;++p)
{
n=a[p];
if(n==-1)continue;
//如果該房間住著健康的人,則感染
if(room[n]=='.')room[n]='@';
}
}
//用來顯示第m天的宿舍狀態
voidprint(constchar*room,intn,intm)
{
inti,j;
printf("第%d天宿舍狀態: ",m);
for(j=0;j<n;++j)
{
for(i=0;i<n;++i)printf("%c",*room++);
printf(" ");
}
}
intprocess(constchar*filename)
{
intn;//房間行列數
char*room;//房間
intm;//m天
FILE*f;
if(NULL==(f=fopen(filename,"r")))return-1;//文件打開失敗
//讀取房間行列數
charbuf[1000];
if(NULL==fgets(buf,sizeof(buf),f))return-2;//讀取行列數失敗
if(1!=sscanf(buf,"%d",&n))return-2;
if(n<=0)return-3;//房間行列數n不合法
//讀取房間現狀
room=(char*)malloc(n*n);//為房間分配內存
inti;
char*temp;
for(i=0,temp=room;i<n;++i,temp+=n)
{
if(NULL==fgets(buf,sizeof(buf),f))
{
free(room);
return-4;//讀取讀取房間現狀有誤
}
memcpy(temp,buf,n);
}
//對房間現狀進行合法性分析
for(i=n*n,temp=room;i;--i,++temp)
{
if(*temp=='.')continue;
if(*temp=='@')continue;
if(*temp=='#')continue;
return-5;//房間現狀不合法
}
//讀取m值
if(NULL==fgets(buf,sizeof(buf),f))return-6;//讀取m失敗
if(1!=sscanf(buf,"%d",&m))return-6;//讀取m失敗
if(m<0)return-7;//m不合法
fclose(f);
intj;
char*ROOM;//用來備份房間現狀
ROOM=(char*)malloc(n*n);
print(room,n,0);
for(j=0;j<m;++j)
{
memcpy(ROOM,room,n*n);//備份房間現狀
for(i=n*n,temp=ROOM;i;--i,++temp)
{
if(*temp!='@')continue;
//開始感染前後左右的房間
infect(room,n,temp-ROOM);
}
print(room,n,j+1);
}
for(i=n*n,j=0,temp=room;i;--i,++temp)
if(*temp=='@')++j;
printf("%d ",j);
free(room);
free(ROOM);
return0;
}
intmain(intargc,char*argv[])
{
intret;
if(argc<=1)
{
printf("用法:infectfilename ");
return0;
}
ret=process(argv[1]);
switch(ret)
{
case-1:printf("文件%s打開失敗。 ",argv[1]); break;
case-2:printf("讀取房間行列數失敗。 "); break;
case-3:printf("房間行列數不合法。 "); break;
case-4:printf("讀取讀取房間現狀有誤。 "); break;
case-5:printf("房間現狀不合法。 "); break;
case-6:printf("讀取m失敗。 "); break;
case-7:printf("m不合法。 "); break;
}
return0;
}
/*
以下是測試文件內容:假定為test.txt
5
....#
.#.@.
.#@..
#....
.....
4
以下是執行程序後的顯示:
第0天宿舍狀態:
....#
.#.@.
.#@..
#....
.....
第1天宿舍狀態:
...@#
.#@@@
.#@@.
#.@..
.....
第2天宿舍狀態:
..@@#
.#@@@
.#@@@
#@@@.
..@..
第3天宿舍狀態:
.@@@#
.#@@@
.#@@@
#@@@@
.@@@.
第4天宿舍狀態:
@@@@#
.#@@@
.#@@@
#@@@@
@@@@@
19
*/