CS计算机代考程序代写 Microsoft Word – 2211bFinalApr20xxSolutions.doc

Microsoft Word – 2211bFinalApr20xxSolutions.doc

Computer Science 2211b Final Examination

xx April 20xx
3 hours

Instructions/Notes: The examination has 40 questions on 15 pages, and a total of 150
marks. Put all answers on the question paper. (Circle your multiple choice and true/false
answers.)

This is a closed book exam. NO ELECTRONIC DEVICES OF ANY KIND ARE
ALLOWED. Students are allowed to bring one 8.5×11 sheet of notes.

Student Number:

Surname: Given name:

2

1. [2 marks] consider a C program that contains the declarations:

int k, *p;

Either of the following statements could be used as the next line of the program to
successfully read in an int value:

scanf(“%d”, &k);
scanf(“%d”, p);

a. True
b. False

2. [2 marks] The following is a portion of a C program:

int x=4, y=6, *p;
p = &x;
(*p) = y;
p = &y;
(*p) = x;

What are the values of x and y after the last statement?

a. x=4, y=4
b. x=4, y=6
c. x=6, y=4
d. x=6, y=6
e. None of the above

3. [1 mark] When printf( ) is used to print out the contents of a string, it uses the

function strlen( ) from to determine how many characters to print.

a. True
b. False

4. [1 mark] Suppose that a C program is reading from an input file. End of file is

detected only when the program makes an attempt to read beyond the end.

a. True
b. False

3

For questions 5 through 15, suppose that a C program contains the following type
definitions, function prototypes, and variable declarations. Also suppose that variables t
and p have been initialized to (nonempty) Things.

typedef struct thing {
char *who;
int marks[10];
char code;
} Thing;

void fnOne( int k, int *iptr);
void fnTwo( char c, char *cptr);

Thing t, *p;

5. [2 marks] The function call fnOne(t.marks[2], p->marks[2]); is syntactically
correct.

a. True
b. False

6. [2 marks] The function call fnOne((*p).marks[2], &(t.marks[2])); is

syntactically correct.

a. True
b. False

7. [2 marks] The function call fnOne(617, (*p).marks); is syntactically correct.

a. True
b. False

8. [2 marks] The function call fnOne(int(p->code), &((*p).marks[2])); is

syntactically correct.

a. True
b. False

9. [2 marks] The function call fnOne( t->marks, p->marks); is syntactically

correct.

a. True
b. False

4

10. [2 marks] The function call fnTwo( t.code, p->who); is syntactically correct.

a. True
b. False

11. [2 marks] The function call fnTwo( t.who, p->who); is syntactically correct.

a. True
b. False

12. [2 marks] The function call fnTwo( t.who[0], p->who[0]); is syntactically

correct.

a. True
b. False

13. [2 marks] The function call fnTwo( *((*p).who), &(p->who)); is syntactically

correct.

a. True
b. False

14. [2 marks] The function call fnTwo( *(t.who), &(t.code)); is syntactically

correct.

a. True
b. False

15. [2 marks] The function call fnTwo( p->who->, &(p->code)); is syntactically

correct.

a. True
b. False

16. [1 mark] The declaration

int arr[ ] = {2, 4, 6, 8, 10};

creates and initializes a statically allocated array that holds 5 elements.

a. True
b. False

5

17. [1 mark] The declaration

int b[5][4];

creates a two-dimensional array that can store 5 rows of integers, with 4 integers
in each row.

a. True
b. False

18. [2 marks] The C code segment

int j, k, a[3][3];
for (k=0, j=0; k<3, j<3; k++, j++) a[k][j] = 5; initializes all elements of array a to the value 5. a. True b. False 19. [2 marks] Suppose that a C program is attempting to execute the statement scanf(“%d”, &k); where k is a variable of type int, and the input entered by the user is abcde A run-time error occurs at this point, and the program crashes. a. True b. False 20. [1 mark] The only items in a C program that can be deallocated using the standard library function free( ) are ones that were created dynamically. a. True b. False 21. [1 mark] In C, the null character is another name for the null pointer. a. True b. False 6 22. [1 mark] All parameters to C functions are passed by reference. a. True b. False 23. [1 mark] To convert an int value to a string value, a C program can use the function sprintf( ). a. True b. False 24. [1 mark] The C function fclose( ) is used to delete files. a. True b. False 25. [2 marks] Consider a C program containing the declarations double arr[ ] = {3.2, 6.1, 9.5}; double *p = arr; Executing the statement ++p; will increment the value stored in p by sizeof(double). a. True b. False 26. [1 mark] All variables inside a shell script program are stored as strings. a. True b. False 27. [3 marks] Complete the following statement: A C function cannot have a pointer to a local variable in the function as its return value because Local variables (variables with block scope) are only accessible within the block of code in which they are declared. Therefore such pointer will point to a memory location that is not available after the function call completed. 7 28. [15 marks] Consider a program in which all the .c and .h files are in the same directory as the following makefile: main: main.o api1.o api2.o api3.o api4.o gcc –o main main.o api1.o api2.o api3.o api4.o main.o: main.c *.h gcc –c main.c api4.o: api4.c gcc –c api4.c api3.o: api3.c a.h e.h f.h gcc –c api3.c api2.o: api2.c c.h d.h e.h f.h gcc –c api2.c api1.o: api1.c a.h b.h c.h d.h gcc –c api1.c clean: rm –f *.o main a. List, in order, the compilation commands that will be carried out when the user enters the command sequence make clean; make main rm –f *.o main gcc –c main.c gcc –c api1.c gcc –c api2.c gcc –c api3.c gcc –c api4.c gcc –o main main.o api1.o api2.o api3.o api4.o 8 For this program, the commands make and make main will always do the same thing. i. True ii. False b. Suppose that, since the last time that the executable was built, files api4.c and b.h have been edited. List, in order, the compilation commands that will be carried out when the user enters the command make main gcc –c main.c gcc –c api1.c gcc –c api4.c gcc –o main main.o api1.o api2.o api3.o api4.o c. State what the –I command line option for gcc is used for, and explain why it is not needed in this makefile. The -I option is for cc and gcc to specify a path (or paths) on which to look for .h files that are mentioned in statements of the form #include "StackTypes.h" in .c files. 9 29. [6 marks] A correctly-working C program contains a declaration for the structured type record, and includes the following statements (not on consecutive lines) somewhere in the main program: record recA, *recB; *(recA.mem1) = 19.45; printf(“%s”, recA.mem2); free(recA.mem2); recA.mem3[6] = 8; recB->mem4 = &recA;
recB->mem5 = recA.mem3[0];

Provide a type definition for record that is consistent with these statements.

struct Rec {
float mem1[2];
char *mem2;
int mem3[10];
struct Rec *mem4;
int mem5;

};
typedef struct Rec recond;

30. [8 marks] A C main program for an unspecified application begins by accepting a
single command line argument, and attempting to open an output file named by
the argument. If the user has supplied the incorrect number of parameters, or if the
file cannot be opened, the program issues an error message and terminates. Write
the portion of the program that carries out this task. Be sure to include the header
for the main program, any necessary #include statements, etc, in your answer.

#include
#include
int main(int argc, char *argv[]) {
FILE *fp;
if (argc!=2) {
printf(“Error: incorrect number of argument\n”);
exit(1);
} else if ( (fp=fopen(argv[1], “r”))==NULL ) {
printf(“Error: cannot open file: %s\n”, argv[1]);
exit(2);
}
else {
;
}
}

10

Questions 31 through 34 use the type definitions for structured types card, cardNode,
cardList, cardQueue and cardStack found in the reference notes that accompany this
exam. (These are the same ones that were used on Assignment 6.)

31. [8 marks] Complete the following code segment so that the card c holds the queen
of clubs, and is added to the front of each linked list.

card c;
cardList list1;
cardList * list2;

32. [9 marks] Complete the following function so that it reverses the order of the
elements in the linked list referenced by list. (Assume that you have access to all
the structure modules from Assignment 6.)

void reverse( cardList * list )

11

33. [6 marks] Write a function deallocateCardList, for inclusion in cardListApi.c,
that deallocates the entire contents of the linked list referenced by list.

void deallocateCardList( cardList * list )

34. [4 marks] Write a function deallocateCardQueue, for inclusion in

cardQueueApi.c, that deallocates the entire contents of the queue referenced by
cq. You may make use of the function defined in the previous question.

void deallocateCardQueue( cardQueue * cq )

12

35. [6 marks] Write a C function called myStrchr that performs the same operation
as the function strchr from . That is, myStrchr returns a pointer to
the first occurrence of character ch in the string referenced by s; if ch is not
found in the string, the function returns the null pointer instead. You are not
allowed to use any functions from in your solution.

char * myStrchr( const char *s, char ch )

char *myStrchr(const char *s, char ch) {
char *cp=s;

while (*cp!=’\0′) {
if (*cp == ch) break;
cp++;
}
if (*cp == ‘\0’) cp = NULL;
return cp;
}

36. [11 marks] Write a C function called findLast that finds the final occurrence of
the string referenced by searchStr in the string referenced by s, and returns a
pointer to this occurrence; if searchStr is not found, the function returns the null
pointer instead. You may use functions from in your solution.

char * findLast( const char *s, const char * searchStr )

char *findLast(const char *s, const char *searchStr) {

char *sp=NULL;
int ls= strlen(s), lss=strlen(searchStr);

for (int i=ls-lss; i>=0; i–) {
if (strncmp(s+i, searchStr, lss)==0) {
sp = s+i;
break;
}
}
return sp;
}

13

37. [5 marks] Describe in your own words the action that is performed by the
following Bourne shell script.

#!/bin/sh
for k in *
do
if [ -f $k ]; then
str=”`grep $1 $k`”
if [ -n $str ]; then
rm –f $k
fi
fi
done

The shell script checks regular files (not a directory) in the current directory.
These that contain string specified by the first argument will be deleted.

38. [5 marks] Describe in your own words the action that is performed by the
following Bourne shell script.

#!/bin/sh
if test $# –gt 0
then
if test –f $1
then
echo $1
fi
shift
$0 $*
fi

The shell script checks the script arguments in order. If it is a regular file in
the current directory, then print it to the standard output.

14

39. [12 marks] Write a Bourne shell script that counts and reports the number of
regular files and the number of subdirectories found in the current working
directory.

#!/bin/sh
countf=0
countd=0
for i in *; do
if test –f $i; then
countf=`expr $countf + 1`
fi
if test –d $i; then
countd=`expr $countd + 1`
fi
done
echo Total of $countf regular files.
echo Total of $countd directories.

15

40. [10 marks] Write a Bourne shell script that prints out all of its command line
parameters that begin with the letter A.