阅读下列说明,回答问题。
【说明】
逻辑覆盖法是设计白盒测试用例的主要方法之一,通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C语言编写的程序,按要求回答问题。
int XOR(char * filename,unsigned long key){
FILE * input = NULL , *output = NULL; //i
char * outfilename = NULL;
int len = strlen(filename);
unsigned char buffer;
if( (filename[len-2] == '.') && (filename[len-1] == 'c') ) { //2,3
outfilename = new char[len+1]; //4
strcpy(outfilename, filename);
outfilename[len-2] = '';
}
else{ //5
outfilename = new char[len+5];
strcpy(outfilename, filename);
strncat(outfilename,".c",2);
}
input = fopen(filename,"rb");
if( input == NULL) { //6
cout << "Error opening file " << filename << endl; //7
delete [] outfilename;
outfilename = NULL;
return 1;
}
output = fopen(outfilename,"wb");
if( output == NULL ) { //8
cout << "Error creating output file " << outfilename << endl; //9
delete [] outfilename;
outfilename = NULL;
return 1;
}
while( ! feof(input) ) { //10
if(fread(&buffer,sizeof(unsigned char),1,input) != 1 ) { //11
if( ! feof(input) ) { //12
delete [] outfilename; //13
outfilename = NULL;
fclose(input);
fclose(output);
return 1;
}
}
else{ //14
buffer ^= key;
fwrite(&buffer,sizeof(unsigned char),1,output);
}
}
fclose(input); //15
fclose(output);
delete [] outfilename;
return 0;
}请画出上述程序的控制流图,并计算其控制流图的环路复杂度VG。