NPTEL Programming in C++ Assignment Solutions
What is NPTEL?
National Programme on Technology Enhanced Learning or NPTEL was established in 2003 as a collaborative effort between the IITs and IISc and funded by the Ministry of Education (MoE) Government of India. In its early stage, it was an initiative to bring quality education to every corner of the country. Now, NPTEL provides around 600+ courses for certification each semester in about 22 subjects.
In this tutorial, you’ll get the Assignment solutions of the NPTEL course of Programming in C++.
There are various weeks containing different assignments each week.
Week 1:
Assignment
1. Consider the following program
#include<iostream>
#include<string>
using namespace std;
int main(){
string greet = "Hello Student";
____________; //LINE-1
cout << greet;
return 0;
}
Fill in the blank at LINE-1 such that the output is Hello.
a) greet.resize(5)
b) greet.shrink_to_fit()
c) greet.copy ("Hello,” 5, 0)
d) strcpy(greet, "Hello")
Option 1: a
Option 2: b
Option 3: c
Option 4: d
Answer: Correct answer is Option 1, greet.resize(5)
Explanation: Resize is a function used to resize the length of the string. Here, we have applied resize to 5th characters that will print “Hello.”
![NPTEL Programming in C++ Assignment Solutions](https://static.tutorialandexample.com/cpp/nptel-programming-in-cpp-assignment-solutions1.png)
2. Consider the following code segment.
#include<iostream>
#include<algorithm>
using namespace std;
bool compare (int i, int j)
{
return (i < j);
}
int main() {
int arr[] = {4, 2, 6, 1, 7, 5};
sort (__________) //LINE-1
for (int i=0; i<6; i++)
cout << arr[i] << " ";
return 0;
}
Identify the appropriate option(s) to fill in the blank at LINE-1 such that the output is: 1 2 4 6 7 5:
- &arr[0], &arr[0] +4, compare
- &arr[0], &arr[0] +3, compare
- arr, arr+4, compare
- &arr, &arr+4, compare
Option 1: a
Option 2: b
Option 3: c
Option 4: d
Answer: Options 1 and 3 are correct.
Explanation: sort(&arr[0], &arr[0]+4, compare) and sort (arr[0], arr[0]+4, compare) will print the same output. It will compare the values according to the function compare and sort the numbers.
![NPTEL Programming in C++ Assignment Solutions](https://static.tutorialandexample.com/cpp/nptel-programming-in-cpp-assignment-solutions2.png)
3. Consider the following code segment.
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
int i;
vector<int> arr;
for (i=1;i<=9;i++)
arr.push_back(i);
rotate(arr.begin(), arr.begin() +3, arr.begin()+5);
for (int i=0; i<arr.size(); i++)
cout << arr[i] << " ";
return 0;
}
What will be the output?
a) 3 2 1 4 5 6 7 8 9
b) 4 5 1 2 3 6 7 8 9
c) 5 6 7 1 2 3 4 89
d) 9 8 7 1 2 3 4 5 6
Option 1: a
Option 2: b
Option 3: c
Option 4: d
Answer: Option 2 (4 5 1 2 3 6 7 8 9) is correct.
Explanation: In this, the push_back function will insert the elements from the last position, and the rotate function will rotate the order of the elements according to the range provided.
![NPTEL Programming in C++ Assignment Solutions](https://static.tutorialandexample.com/cpp/nptel-programming-in-cpp-assignment-solutions3.png)
4. Consider the following Program
#include<iostream>
#include<stack>
using namespace std;
int main(){
int i;
int arr [5] = {5, 7, 3, 6, 4};
stack<int> s;
for(i=0; i<5; i++)
{
while (!s.empty())
{ if (s.top() < arr[i])
{ cout << s.top() << " ";
break;
}
else
s.pop();
}
if (s.empty())
cout << -1 << " ";
s.push(arr[i]);
}
return 0;
}
What will be the output?
- -1 5 7 3 6
- -1 5 5 3 3
- -1 5 -1 3 3
- Compilation error
Option 1: a
Option 2: b
Option 3: c
Option 4: d
Answer: Option 3 (-1 5 -1 3 3) is correct.
Explanation: A stack object s is called by which the elements will be inserted and deleted. The top element is compared with the array elements and will print accordingly.
![NPTEL Programming in C++ Assignment Solutions](https://static.tutorialandexample.com/cpp/nptel-programming-in-cpp-assignment-solutions4.png)
5. Consider the following code segment.
#include <iostream>
using namespace std;
int reverse (_______, int r, int c){ // LINE-1
// code to reverse all the strings present in the matrix and return it
}
int main() {
int str[10] [20]; // array of 10 strings reverse (str, 10, 20);
return 0;
}
Choose the correct parameter list for the function header at LINE-1.
a) int str[0]
b) int str[] [20]
c) int str[10] []
d) int str[10] [20]
Option 1: a
Option 2: b
Option 3: c
Option 4: d
Answer: Options 2 and 4 are correct.
Explanation: int str [] [20] and int str [10] [20] will fit in the function parameters and will reverse the string.
6. Consider the following code segment.
#include<iostream>
using namespace std;
int main(){
bool i = true;
bool j = false;
bool k = false;
cout << (i || j && k);
return 0;
}
What will be the output?
Option 1: 0
Option 2: 1
Option 3: False
Option 4: True
Answer: Option 2 is correct
Explanation: It is executing OR and AND operations. Firstly, the AND of j and k (false, false) will give false (0), and OR of the result and i (false, true) will give true, and it will print 1.
7. Consider the following code segment.
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int idata[] = {1, 2, 2, 3, 4, 4, 5}; replace (idata, idata+7, 2, 4);
remove (idata, idata+7, 4); for (int i = 0; i < 3; ++i)
cout << idata[i] << " ";
return 0;
}
What will be the output?
Option 1: 1 3 5
Option 2: 1 2 2
Option 3: 1 3 4
Option 4: 1 2 4
Answer: Option 1 is the correct answer.
8. Consider the following code segment.
#include <iostream>
#include <string>
using namespace std;
int main() {
string word1 = "Star ";
string word2 = "Wars";
____________ //LINE-1
cout << str;
return 0;
}
Choose the appropriate option(s) such that the output of the code segment would be Star Wars:
Option 1: string str = strcat (word, word2);
Option 2: string str = word1+ word2;
Option 3: string str = word1.insert(word2);
Option 4: string str = word1.append(word2);
Answer: Options 2 and 4 are correct.
Explanation: word1 + word2 will join both the words, and the append function will append the word2 after word1.
9. Consider the following code segment.
#include <iostream>
#include <algorithm>
int main() {
int idata[] (10, 20, 30, 40, 50), k = 50;
if (________) //LINE-1
std::cout << "key found";
else
std::cout << "key not found";
return 0;
}
Choose the appropriate option to fill in the blank at LINE-1, such that the code output would be: key found.
Option 1: binary_search(idata, idata+4, k)
Option 2: std::binary_search (idata, idata+4, k)
Option 3: binary_search(idata, idata+5, k)
Option 4: std::binary_search (idata, idata+5, k)
Answer: Option 4 is the correct answer.
Week 2:
Assignment
1. Consider the following program.
#include<iostream>
using namespace std;
int main(){
const int n; //line 1
n=10;
cout<<n;
return 0;}
What will be the output?
Option 1: 0
Option 2: 10
Option 3: Compilation Error at line 1
Option 4: Compilation at line 2
Answer: Options 3 and 4 are the correct answer.
Explanation: We have initiated n as a constant int, so we cannot assign value to n after initialization.
2. What will be the output of this code?
#include <iostream>
using namespace std;
int main(){
int n=5;
const int *p = &n;
*p=10; //line 1
Cout<<n;
return 0;
}
Option 1: 5
Option 2: 10
Option 3: 0
Option 4: Compilation error at line 1
Answer: Option 4 is correct.
Explanation: The pointer *p is assigned for only reading the address. Value cannot be assigned to the pointer.
3. What will be the output of the given code?
#include <iostream>
using namespace std;
#define CUBE(x) x*x*x
int main() {
int a=3;
int b=CUBE(a+1);
cout<<b;
return 0;
}
Option 1: 10
Option 2: 64
Option 3: 9
Option 4: Compilation error
Answer: Option 1 is the correct answer.
Explanation: The macro function of CUBE(x) will give a cube of x (x* x* x). Here we have initialized a= 3
b= CUBE(a+1) will become a+1 * a+1 * a+1 which will give result as (3+1) * (3+1) * (3+1) which after solving will give result 10.
4. Complete the code to print the output 10
#include <iostream> using namespace std;
int main() {
int a 3, b = 5;
_____ int &c = ++a + ++b; // line 1
cout << c;
return 0;
}
Option 1: Static
Option 2: volatile
Option 3: const
Option 4: inline
Answer: Option 3 is the correct answer.
Explanation: const keyword will not change the values
5. Consider the following code segment.
#include <iostream> using namespace std;
void increment (int x1, _______, ________ ) //line1
{ x2 = ++x1;
*x3 = x1++;
}
int main() {
int a=3, b, c;
increment (a, b, &c);
cout << a << " " << b << " " << c;
return 0;
}
Choose the correct option for the parameter list at LINE-1 such that the output is 3 4 4
Option 1: int &x2, int *x3
Option 2: int *x2, int &x3
Option 3: int *x2, int *x3
Option 4: int &x2, int &x3
Answer: Option 1 is correct.
Explanation: &x2 is called by reference, and *x3 is called by value.
6. Consider the given code.
#include <iostream>
#include <stdlib.h>
using namespace std;
int main() {
int *p = _________; //line 1
cout << *p;
delete p;
return 0;
}
Complete the missing code such that the output is 10.
Option 1: (int*)malloc (10*sizeof(int))
Option 2: new int
Option 3: new int (10)
Option 4: new int [10]
Answer: Option 3 is correct
Week 3:
Assignment
1. Consider the following code.
class employee {
// statements
};
const employee e_obj;
From the given options, which are the appropriate types for the this pointer correspond to the object e_obj?
Option 1: employee * const this
Option 2: employee const * this
Option 3: employee const * const this
Option 4: const employee * const this
Answer: Options 3 and 4 are correct.
2. Consider the code given below.
class point {
private:
int x, y;
public:
void setX (int x_) { x = x_; }
void setY (int y_) {y = y_; }
void print () { cout << x << “ , ” <<y;}
void incr () {x++, y++; }
int incrX() { return x + 1;}
int incrY() { return ++y; }
};
Identify the set of all the methods that change the state of the class point objects.
Option 1: setX(), setY(), print()
Option 2: setX(), setY(), incr(), incrY()
Option 3: setX(), setY, incr(), incrX(), incrY()
Option 4: setX(), setY(), incrX(), incrY()
Answer: Option 2 is the correct answer
3. What will be the output of the given code?
#include<iostream>
using namespace std;
class sample {
int i;
public:
sample (int i_ = 0): i(i_) { cout << "ctor:" << i << " "; }
~sample() { cout << "dtor:" << i << " "; }
};
sample obj1 (20); //line 1
int main() {
sample *pObj = new sample (10); //line 2
sample obj2 (30); // line 3
{
sample obj3 (40); // line 4
delete pObj; //line 5
}
return 0;
}
Option 1: ctor: 20 ctor: 10 ctor:30 ctor: 40 dtor: 40 dtor: 30 dtor: 10 dtor:20
Option 2: ctor: 10 ctor: 20 ctor:30 ctor: 40 dtor: 40 dtor: 30 dtor: 20 dtor:10
Option 3: ctor:20 ctor: 10 ctor: 40 ctor: 30 dtor: 30 dtor:40 dtor: 10 dtor:20
Option 4: ctor: 20 ctor: 10 ctor: 30 ctor:40 dtor: 10 dtor: 40 dtor:30 dtor:20
Answer: Option 4 is the correct answer
![NPTEL Programming in C++ Assignment Solutions](https://static.tutorialandexample.com/cpp/nptel-programming-in-cpp-assignment-solutions5.png)
4. What will be the output of this code?
#include <iostream>
#include <vector>
using namespace std;
class List {
vector <char> items;
int i, j, n;
public:
List (int n_) : i(-1), j(0), n(n_) { items.resize (n); }
void add (char d) {
if (i < n - 1)
items [++i] = d;
}
void remove () {
if ( j < i)
j++;
}
void print () {
for (int k = j; k <= i; k++)
cout << items [k] <<” ”;
}
};
int main() {
List listObj (5);
for (int i = 1; i <=10; i++)
listObj.add(65 + i);
listObj.remove();
listObj.remove();
listObj.print();
return 0;
}
Option 1: D E F
Option 2: B C D
Option 3: B C D E F
Option 4: D E F G H I J K
Answer: Option 1 is the correct answer.
5. What will be the output of the given code?
#include <iostream>
using namespace std;
class mClass {
int a, b, c;
public:
mClass ( int v_ = 0) : c(++v_), b(v_++), a(++v_) { }
void print ()
{ cout << “a = ” << a << “, b = ”<< b << “ , c = ” << c << endl; }
};
int main() {
mClass obj(10);
obj.print();
return 0;
}
Option 1: a = 13, b = 11, c =11
Option 2: a =11, b =11, c = 13
Option 3: a= 13, b = 12, c = 11
Option 4: a =11, b = 12, c = 13
Answer: Option 2 is the correct answer
Explanation: We have made a public class where members can be accessed outside the class. The value of c is calculated by ++v, which means the value of v=10 is first incremented and then used, and the value becomes 11 and then is stored in c. The value of b is calculated using v++. The value of v is 11; v++ means first to use the value of v and then use, which makes the value of b = 11 and v = 12. Now the value of a is calculated by ++v. The value of v is 12; ++v means the value is increased by 1 and then stored in a. The value of a becomes 13.
![NPTEL Programming in C++ Assignment Solutions](https://static.tutorialandexample.com/cpp/nptel-programming-in-cpp-assignment-solutions6.png)
6. What will be the output of the following code?
#include <iostream>
using namespace std;
class point {
int x, y;
public:
point (int x_ = 0 , int y_ = 0) : x(x_), y(y_)
{ cout << “ctor “ ;} //line 1
point ( point &p) : x(p.x), y(p.y)
{ cout << “c-ctor “; } //line 2
point &operator = (point &p)
{ x = p.x; y=p.y; cout << “c-assign “ ; return *this; } //line 3
};
int main () {
point p1 (10, 20);
point p2 = p1;
point *pt;
point p3;
p3 = p2;
return 0;
}
Option 1: ctor c-ctor ctor c-ctor
Option 2: ctor c-ctor ctor c-assign
Option 3: ctor c-ctor ctor c-ctor c-assign
Option 4: ctor c-assign ctor c-assign
Answer: Option 3 is correct
Week 4:
Assignment
1. Consider the below code segment.
#include <iostream>
using namespace std;
class StatData {
static int s;
public:
void incr() { s = s+10; }
void print() { cout << s; }
};
int StatData::s = 10;
int main() {
StatData o1, o2;
o1. incr();
o2. incr();
o2.print();
return 0;
}
What will be the output?
Option 1: 0
Option 2: 10
Option 3: 20
Option 4: 30
Answer: Output 4 is correct
Explanation: Firstly, object o1 is created and called in the incr() function, which makes the value of s = 20, then object o2 is created and called in the incr() function, which changes the value of d to 30 and stored to o2.
2. Consider the following code segment.
#include <iostream> using namespace std;
class myClass {
static int a;
public:
void incr() {
a = a+10;
display();
}
_________ void display() { // line 1
cout << a;
}
};
int myClass::a = 0;
int main() {
myClass m;
m.incr();
return 0;
}
Fill in the blank at LINE-1 such that the program will print 10.
Option 1: mutable
Option 2: Static
Option 3: const
Option 4: friend
Answer: Option 2 is correct
3. Consider the below code segment.
#include <iostream>
int main() {
char greet [] = "Hello";
cout << greet; // LINE-1
return 0;
}
The cout statement at LINE-1 gives an error. Change the cout statement such that it prints Hello.
Output 1: std::cout << greet;
Output 2: using cout << greet;
Output 3: using std::cout << greet;
Output 4: std. cout << n;
Answer: Option 1 is the correct answer.
4. Consider the code segment below.
#include <iostream>
using namespace std;
int x = 1;
namespace name1 {
int x = 5;
}
int main() {
int x = 3;
cout <<_______ << endl; // LINE 1
return 0;
}
Fill in the blank at LINE-1 so that the program will print 6.
Option 1: name1::x + ::x
Option 2: name1::x + x
Option 3: x + ::x
Option 4: name1.x + ::x
Answer: Option 1 is the correct answer.
Explanation: To get output 6, we will add the global variable x =1 and the global variable of namespace name1, x = 5.
5. Consider the following code
#include<iostream>
using namespace std;
class myClass {
int a;
public:
myClass (int _a=0): a(_a) { }
_______________ // line 1
};
void display (myClass &m)
{ cout << m.a;
}
int main() {
myClass m(5); display (m);
return 0;
}
Fill in the blank at LINE-1 such that the program will print 5.
Option 1: void friend display (myClass&);
Option 2: static void display (myClass&);
Option 3: friend void display (myClass&);
Option 4: void const display (myClass&);
Answer: Options 1 and 3 are correct
6. Which line will give you the error?
#include<iostream>
using namespace std;
namespace name1 {
int a=1;
int b = 2;
}
namespace name2 {
int c =3;
int d = 4;
}
using namespace name1;
int main() {
cout << a << endl; // Line 1
cout << name1::b<<endl; // Line 2
cout<< name2::c<<endl; // Line 3
cout<< d<< endl; //Line 4
return 0;
}
Option 1: Line 1
Option 2: Line 2
Option 3: Line 3
Option 4: Line 4
Answer: Option 4 is correct. Line 4 will give an error.
7. Consider the following code
#include <iostream>
#include <cstring>
using namespace std;
class String {
int len;
char *str;
public:
String(const char* s): len(strlen(s)), str(strdup(s)) { }
__________________ (String s) { // LINE-1
String s1= strcat (this->str, s.str);
return s1;
}
void print() {
cout << str;
}
};
int main() {
String s1("Hello"), s2(" World");
String = s1+s2;
s.print();
return 0;
}
Fill in the blank at LINE-1 such that the program will print "Hello World.”
Option 1: String operator+
Option 2: char* operator+
Option 3: String +
Option 4: char operator+
Answer: Option 1 is the correct answer.
Week 5:
Assignment
1. Consider the below code segment.
#include <iostream>
using namespace std;
class A{
protected:
int id;
static int count;
public:
A() { id= ++count; cout << id << "-" << count <<", "; }
};
class B: public A {
public:
B()
{ ++count; cout << count <<”, ”;}
};
class C: public B {
public:
C() { ++count; cout << count << ", "; }
};
int A::count = 0;
int main() {
C cObj [2];
return 0;
}
What will be the output?
Option 1: 1, 2, 3
Option 2: 1, 2, 3-3, 1, 2, 3-3,
Option 3: 1, 2, 3-3, 4, 5, 6-6,
Option 4: 1-1, 2, 3, 4-4, 5, 6,
Answer: Option 4 is the correct option
2. Complete the code such that the output will be bird::fly()
#include <iostream>
using namespace std;
class bird{
public:
void fly(){ cout << "bird::fly()"; }
};
void fly(int height){ cout << "bird::fly(int)"; }
class crow: public bird{
public:
void fly(){ cout << "crow::fly()"; }
void fly(int height){ cout << "crow::fly (int)"; }
};
int main(){
crow c;
_______________//LINE-1
return 0;
}
Option 1: c.fly()
Option 2: bird::fly()
Option 3: c.bird::fly()
Option 4: bird::c.fly()
Answer: Option 3 is the correct answer.
3. Consider the following code segment.
#include <iostream>
using namespace std;
int data = 10;
class base{
protected:
int data;
public:
base(): data (20) {}
~base() {}
};
class derived: base{
protected:
int data;
public:
derived(): data(30) {}
~derived(): {}
void print() { cout <<______________; //line 1
};
int main(){
derived d;
d.print();
return 0;
}
Choose the appropriate option(s) to fill in the blank at LINE-1 such that the output becomes 30 20 10
Option 1: this->data << " " << base::data << " " << data
Option 2: derived::data << " " << base::data << " " << data
Option 3: data << " " << base::data <<< " " << ::data
Option 4: derived::data << " " << base::data << " " << ::data
Answer: Options 3 and 4 are correct.
Explanation: The class derived is derived from the base class and contains protected and public variables.
4. Which of the following statements is true in the given definition?
class base{
public:
void fun1 (int);
void fun2(char*);
void fun3();
};
class derived public base{
public:
void fun1();
void fun1 (int);
void fun3();
void fun4(char*);
};
Option 1: derived::fun1() and derived::fun1 (int) override base::fun1()
Option 2: derived::fun1() overloads and derived::fun1 (int) overrides base::fun1 (int)
Option 3: derived::fun4 (char*) overrides derived::fun2 (char*) and derived::fun3() overrides derived::fun3()
Option 4: derived::fun3() overrides base::fun3() and derived::fun1 (int) overrides base::fun1 (int)
Answer: Options 2 and 4 are correct.
5. What will be the output/error of the given code?
#include<iostream>
using namespace std;
class A{
public:
};
int a;
class B: protected A{
public:
};
class C : public B{
int b;
public:
int c;
C(int a, int b, int c) {
a = a; // Line 1
b = b_;
c = c_;
}
};
int main(){
C cObj(10, 20, 30);
cout << cObj.a << " "; // line 2
cout << cObj.b << "; // line 3
cout << cObj.c;
return 0;
}
Option 1: 10 20 30
Option 2: compiler error at line 1: A::a is not accessible
Option 3: compiler error at line 2: A::a is not accessible
Option 4: compiler error at line 3: B::b is not accessible
Answer: Option 3 is the correct answer.
6. Consider the following code.
#include<iostream> using namespace std;
class PCP{
public:
PCP() {}
~PCP () {}
private:
PCP (const PCP& obj){}
PCP& operator= (const PCP&) { return *this; }
};
class IntData: public PCP{
int i;
public:
IntData(){}
IntData(const int& i_): i(i_){} void print(){ cout << i <<< " "; }
};
int main(){
IntData i01(10);
IntData i02(20);
i01 = i02;
i01.print();
i02.print();
return 0;
What will be the output/error?
Option 1: 20 10
Option 2: 20 20
Option 3: Compiler error: 'PCP& PCP::operator= (const PCP&)' is private
Option 4: Compiler error: 'PCP:: PCP (const PCP& obj)' is private
Answer: Option 3 is correct
Explanation: The Private class objects cannot be accessed.
Week 6:
Assignment
1. Which line will give an error in the given code?
#include<iostream>
using namespace std;
int main() {
int n;
int arr [5];
n = arr; // line 1
n = *arr; // line 2
arr =n; // line 3
*arr = n; // line 4
return 0;
}
Option 1: Line 1
Option 2: Line 2
Option 3: Line 3
Option 4: Line 4
Answer: Options 1 and 3 are correct.
Explanation: We cannot assign an array to a variable. The address of the variable can be stored using pointers.
2. What will be the output of the given code?
#include <iostream>
using namespace std;
class Classi {
public:
Class1() { cout << "C1"; }
virtual ~Classi() { cout << "D1"; }
};
class Class2: public Classi {
public:
Class2(){ cout << "C2 "; }
~Class2(){ cout << "D2 "; }
};
void fun (Classic) {
cout << "F";
}
int main(){
Class2 c2;
fun (c2);
return 0;
}
Option 1: C1 C2 C1 F D1 D2 D1
Option 2: C1 C2 F D1 D2 D1
Option 3: C1 C2 F D2 D1
Option 4: C1 C2 F D2
Answer: Option 2 is correct.
3. Complete the code such that it will give the output fun().
#include <iostream>
using namespace std;
class Classi {
public:
void fun(){
cout << "fun()" << " ""; }
};
class Class2 : public Classi {
public:
__________ // line 1
void fun(int) {
cout<<"fun(int)" << " " "";
}
};
int main(){
Class2 c;
c.fun();
return 0;
}
Option 1: Class1::fun();
Option 2: using Class1::fun;
Option 3: Class1.fun();
Option 4: void fun();
Answer: Option 2 is correct.
4. Consider the code segment below.
#include <iostream>
using namespace std;
class A{
public:
_________ // line 1
};
class B: public A {
public:
void fun() {
cout << "B::fun" << endl;
}
};
int main(){
A *t = new B;
t->fun();
return 0;
}
Fill in the blank at line 1 such that the program gives output as B::fun
Option 1: void fun() = 0
Option 2: virtual void fun()
Option 3: virtual void fun() = 0
Option 4: void fun()
Answer: Option 3 is correct.
5. What is the output of the given code?
#include <iostream>
using namespace std;
class A{
public:
void f() { cout << "A"; }
};
class B: public A{
public:
virtual void f(){ cout << "B"; }
};
class C: public B {
public:
void f(){ cout << "C"; }
};
int main(){
A *t1 = new C;
B *t2 = new C;
t1->f();
t2->f();
return 0;
}
Option 1: C C
Option 2: A B
Option 3: A C
Option 4: C B
Answer: Option 3 is the correct answer
Explanation: t1 is an object of class A thus and will print ‘A,’ and t2 is an object of class B which derives class C publically and thus prints ‘C.’
6. What is the output of the code given?
#include <iostream>
using namespace std;
class A {
public:
virtual void f() { cout << "A::f()"; }
};
class B: public A{
public:
void f(){ cout << "B::f()"; }
};
class C: public B{
public:
void f(){ cout << "C::f()"; }
};
int main(){
C *t = new C;
t->B::f();
return 0;
}
Option 1: A::f()
Option 2: B::f()
Option 3: C::f()
Option 4: Compilation error: cannot call a member function of class 'B.'
Answer: Option 2 is the correct answer
Week 7:
Assignment
1. Which line will give errors?
#include < iostream >
using namespace std;
class A{
char *a;
public:
A(char *c) a (new char (*c)) { }
char* get() const { return a; }
void set (const char *x) { a = const_cast<char*>(x); }
};
int main() {
const char *c = "C++";
char *x = const_cast <char*> (c); // line 1
const A t (x);
t.set (c); // line 2
cout<<t.get(); //line 3
const_cast < A& > (t).set(x); // line 4
return 0;
}
Option 1: Line 1
Option 2: Line 2
Option 3: Line 3
Option 4: Line 4
Answer: Option 2 is correct. Line 2 will give an error.
2. Which line will give an error?
#include<iostream>
using namespace std;
class A{
char a;
public:
A(char c) a(c) { }
};
class B: public A{
int i;
public:
B(int x, char y): A(y), i(x) { }
};
int main() {
int i; int *pi;
void *pv;
A a('w');
B b(5, 'w');
i static_cast<int>(pi); // line 1
pistatic_cast<int>(pv); // line 2
v static_cast<void *>(ka); // line 3
a = static_cast<A&>(b); // line 4
return 0;
}
Option 1: Line 1
Option 2: Line 2
Option 3: Line 3
Option 4: Line 4
Answer: Option 1 is correct.
3. What will be the output of the given code segment?
#include <iostream>
using namespace std;
int incr(int p) {
return (*p)++;
}
int main() {
int n = 10;
const int *p = &n;
n = incr(const_cast<int>(p)); // line 1
cout << n << " " << *p;
return 0;
}
Option 1: 10 10
Option 2: 10 11
Option 3: 11 11
Option 4: Compilation Error at line 1: Invalid casting
Answer: Option 1 is the correct answer.
4. Consider the following code
#include <iostream>
using namespace std;
class A{
int a;
public:
A ( int x ) : a (x) { }
};
class B {
char c;
public:
B ( char f ): c (f) { }
int main ()
{
A = *t1 = new A (10);
B= *t2 = new B (‘a’);
t1 = ____________ (t2); // line 1
return 0;
}
Complete the code such that it runs successfully.
Option 1: reinterpret_cast<A>
Option 2: static_cast< A*>
Option 3: Dynamic_cast <A*>
Option 4: const_cast <A*>
Answer: Option 1 is correct.
5. Consider the code segment given below.
class A {
public:
virtual void fun1() = 0; virtual void fun2() {};
};
class B: public A {
public:
void fun1() {};
virtual void fun2() {};
};
class C: public A{
public:
void fun1() {} void fun2(){}
};
How many Virtual tables (VFT) will be set up by the compiler?
Option 1: 0
Option 2: 1
Option 3: 2
Option 4: 3
Answer: Option 4 is correct.
6. Consider the code segment given below.
#include <iostream>
#include <typeinfo>
using namespace std;
class Base{ public: virtual "Base(){} };
class Derived public Base{ };
int main() {
Base b;
Derived d;
Derived pd=&d;
Base *pb = pd;
Derived *pdd = (Derived*) (pd);
cout << (typeid(*pd).name() == typeid(*pb).name());
cout << (typeid(pb).name() == typeid(pdd).name());
cout<<< (typeid(pd).name() == typeid(pdd).name());
cout << (typeid(*pd).name() == typeid(*pdd). name());
return 0;
}
What will be the output?
Option 1: 1001
Option 2: 1011
Option 3: 0101
Option 4: 1010
Answer: Option 2 is the correct answer.
Week 8:
Assignment
1. Consider the code segment given below.
#include<iostream>
using namespace std;
int main(){
try {
try {
throw 10;
}
throw 3.14;
catch(____) // line 1
{
cout << "all" << ", ";
throw;
}
}
catch(____) // line 2
{ cout<<"all" << ", ";
}
catch (int& i){
cout << "int" << ", ";
}
}
What will be the output?
Option 1: all, all,
Option 2: all, int,
Option 3: Compilation error at line 1
Option 4: Compilation error at line 2
Answer: Option 4 is the correct answer.
2. Consider the code segment given below.
#include<iostream> using namespace std;
template<typename T>
T sum(const T& x, const T& y) {
return xy;
}
int main() {
cout <<___________; //Line 1
return 0;
}
Identify the incorrect statement/s in the above program:
Option 1: Filling the blank at Line 1 with the sum (10, 20) statement prints 30
Option 2: Filling the blank at Line 1 with the sum (10, 20.0) statement prints 30.0
Option 3: Filling the blank at Line 1 with the sum (1.2, 2.14) statement prints 3.34
Option 4: Filling the blank at Line 1 with the sum (1.2f, 2.14) statement prints 3.34
Answer: Options 2 and 4 are the correct answer.
3. Consider the following code
#include <iostream>
using namespace std;
template<class T>
class ArrayList {
private:
int size;
T *elem;
public:
ArrayList (int size_): size (size_), elem (new T[size]) { }
int getLength() {
return size;
}
};
_________________________ //LINE-1
__________________________ //LINE-2
public:
{
FixedArrayList() : ArrayList<T>(N) {}
};
int main(){
FixedArrayList<double, 10> list;
cout<<list.getLength();
return 0;
}
Identify the appropriate template definition at LINE-1 and class header at LINE-2 for class FixedArrayList such that the output is 10.
Option 1: LINE-1: template<class T>
LINE-2: class FixedArrayList: public ArrayList
Option 2: LINE-1: template<class T, int N>
LINE-2: class FixedArrayList public ArrayList
Option 3: LINE-1: template<class T, int N>
LINE-2: class FixedArrayList public ArrayList<T>
Option 4: LINE-1: template<class T> int N
LINE-2: class FixedArrayList: public ArrayList<T, N>
Answer: Option 3 is correct
4. What will be the Output?
#include<iostream>
using namespace std;
namespace Exceptionst{
class BaseTestException{};
class TestException: public BaseTestException{};
}
void test() {
try{
throw Exceptions:: TestException();
throw Exceptions::BaseTestException(); }
catch(Exceptions::BaseTestException e) {
cout << "BaseTestException" << ", ";
throw;
}
catch (Exceptions:: TestException& e)
{ cout<<< "TestException" << ", ";
throw 10;
}
}
int main(){
try{
test();
}catch(int& i){
cout << "int";
}
catch(...){
cout<<"all";
}
return 0;
}
Option 1: BaseTestException, all,
Option 2: BaseTestException, all, TestException, int
Option 3: BaseTestException, all, BaseTestException, all,
Option 4: TestException, int
Answer: Option 1 is the correct answer.
5. Consider the following code
#include<iostream>
using namespace std;
__________________ //LINE-1
class Pair{
private:
T x;
U y;
public:
Pair(Tx, U y_){
x = x_;
y = y_;
}
void print() {
cout << " x = " << x << " = " << y << endl;
}
};
int main(){
Pair<char> p01 (65, 66); Pair<> p02 (65, 66);
p01.print();
p02.print();
return 0;
}
Fill in the blank at LINE-1 such that the output of the program is:
x = A, y = B
x = 65, y = B
Option 1: template<typename T, typename U>
Option 2: template<typename Tint, typename U= char>
Option 3: template<typename T char, typename U char>
Option 4: template<typename T int, typename U int>
Answer: Option 2 is the correct answer.
6. Consider the code segment given below.
#include<iostream>
using namespace std;
class StepUp{
private:
int i;
public:
StepUp(int i = 0): i(i) { }
_____________ { cout << i; } //Line 1
________________________ { //Line 2
this->istep;
}
};
int main(){
StepUp val(10); val (5);
val();
return 0;
}
Identify the appropriate function header at LINE-1 and LINE-2 to overload the function call operator such that the output of the program is: 15
Option 1: LINE-1: void operator()
LINE-2: void operator (int step)
Option 2: LINE-1: void operator()()
LINE-2: void operator() (int step)
Option 3: LINE-1: void operator ()()
LINE-2: int operator()()
Option 4: LINE-1: void val()
LINE-2: void val (int step)
Answer: Option 2 is the correct answer.
Week 9:
Assignment
1. What is the output of the code below?
#include <iostream>
using namespace std;
int main(){
int i = 66;
printf (“%d,” “%x,” “%o,” “%c,” i, i, i, i);
}
Option 1: 66, 66, 66, 66
Option 2: 66, 66, 66, B
Option 3: 66, 42, 102, B
Option 4: 66, 066, 0x66, B
Answer: Option B is the correct answer
2. Consider the code segment given below.
#include<cstdio>
using namespace std;
int main(){
FILE *ifp, *ofp;
int c;
if((ifp = fopen("in.txt", "r")) == NULL)
return 1;
if ((ofp = fopen("out.txt", "w")) == NULL)
return 2;
while(___________) //Line 1
fputc(c, ofp);
fclose(ifp);
fclose(ofp);
return 0;
}
Identify the appropriate option to fill in the blank at LINE-1 such that the program copies the entire content of file a.txt into file b, txt.
Option 1: c = fgetc (ifp) != EOF
Option 2: (c = fgetc (ifp)) != EOF
Option 3: c = (fgetc (ifp) != NULL)
Option 4: (c = fgetc(ifp))
Answer: Option 2 is correct.
3. Match the following.
Header | Description |
A. <iostream> | I. It defines the file stream classes and the internal buffer objects used. |
B. <ios> | II. It declares some standard manipulators with parameters to be used with extraction and insertion operators. |
C. <fstream> | III. It declares the objects used to communicate through the standard input and output |
D. <iomanip> | IV. It describes the base classes of the hierarchy and is not usually included directly in most C++ programs. |
Identify the appropriate option.
Option 1: A-IV, B-II, C-I, D-II
Option 2: A-III, B-IV, C-I, D-II
Option 3: A-III, B-II, C-I, D-IV
Option 4: A-IV, B-II, C-I, D-III
Answer: Option 2 is the correct answer
4. Consider the following code
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
double d = (double) 10/7;
___________________ //LINE-1
return 0;
Identify the appropriate option(s) to fill in the blank at LINE-1 such that the program prints 1.43
Option 1: cout << setprecision (3) << d;
Option 2: cout << setprecision (2);
cout << d;
Option 3: cout.precision (3);
cout << d;
Option 4: cout.precision (3) << d;
Answer: Options 1 and 3 are correct.
5. What will be the output of the code given?
#include<iostream>
#include <vector>
#include<numeric>
#include<functional>
using namespace std;
double compute (vector<int>& vec){
double result = accumulate (vec.begin(), vec.end(), 10.0, multiples<int>());
return result;
int main(){
int arr[] = {4, 5, 6, 7};
vector <int> vec (arr, arr+ sizeof(arr)/ sizeof (*arr));
cout<<compute(vec)<<endl;
return 0;
}
Option 1: 0
Option 2: 840
Option 3: 32
Option 4: 8400
Answer: Option 4 is the correct option.
6. Consider the following code
#include<iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
ifstream myfile (“in.txt”);
start line;
if(___________) //line 1
cout<<” Unable to open file”;
}
else{
while (getline (myfile, line))
cout << line << endl;
myfile.close();
}
return 0;
Identify the options to fill in the blank at line 1 such that it checks if the file does not exist.
Option 1: myfile.is_open()
Option 2: !myfile.is_open()
Option 3: !myfile.open()
Option 4: fopen(myfile) == NULL
Answer: Option 2 is correct.
7. Consider the code segment given below.
#include<iostream>
using namespace std;
template<class Itr, class T>
void max (Itr first, Itr last, T& mval) {
int pos = 0;
mval = *first++;
while (first != last) {
if (*first > mval)
mval = first;
++first;
}
}
int main() {
int iArr[] = { 30, 20, 60, 10, 40, 50};
double mVal = 0.0;
___________________________ //line 1
cout << mVal;
return 0;
}
Identify the appropriate option(s) to fill in the blank at LINE-1 such that the program finds out the maximum element of the array iArr and the output is 60
Option 1: mVal = max(iArr, iArr + sizeof(iArr) / sizeof(*iArr))
Option 2: max(iArr, iArr + sizeof(iArr) / sizeof(*iArr), mVal)
Option 3: max(iArr, &iArr [sizeof(iArr) / sizeof(*iArr)], mVal)
Option 4: max(iArr, iArr + sizeof(*iArr) / sizeof(iArr), mVal)
Answer: Options 3 and 4 are correct