1. (a) (i) Helps in code reusability. (ii) Improves code readability. (b)Yes. Primarily efficiency. 2. a=1, b=2 3. (a) int is_Palindrome(char s[]) { int i; for(i=0; i<(strlen(s)/2); i++) { if(s[i]!=s[strlen(s)-i-1]) return 0; } return 1; } (b) int is_Palindrome_rec(char s[], int start) { if(start>=strlen(s)/2) return 1; if(s[start]!=s[strlen(s)-i-1]) return 0; else return is_Palindrome_rec(s,start+1); } int is_Palindrome(char s[]) { return is_Palindrome_rec(s,0); } 4 (a) int max_position(float a[],int start,int end) { int i,pos; float max; if(start>end) { return -1; } max = a[start]; pos = start; for(i = start ; i <= end ; i++) { if(max < a[i]) { max = a[i]; pos = i; } } return pos; } (b) void selection_sort(float a[],int size) { int i,pos; float temp; for(i = size - 1 ; i >= 0 ; i--) { pos = max_position(a,0,i); temp = a[pos]; a[pos] = a[i]; a[i] = temp; } } 5. int subsequence(char s1[],char s2[],char s3[]) { int i,j,size; size = strlen(s1); for(i = 0 ; i < size ; i++) { s3[i]='0'; } s3[size] = '\0'; i = 0; j = 0; while(s2[i] != '\0') { if(s1[j] == '\0') { return 0; } if(s1[j] == s2[i]) { i++; s3[j] = '1'; } j++; } return 1; }