当前位置:首页 » 编程语言 » c语言求出感染人数
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言求出感染人数

发布时间: 2022-07-20 12:51:45

Ⅰ 求问!!!数据结构课程设计题:病毒测试程序。(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
*/