MCQ प्रश्न और उत्तर
प्रश्न 1: निम्न कोड का आउटपुट क्या होगा?
#include <stdio.h>
#include <stdlib.h>
int main() {
union my_union {
int i;
float f;
char c;
};
union my_union* u;
u = (union my_union*)malloc(sizeof(union my_union));
u->f = 20.60f;
printf("%f", u->f);
}
विकल्प:
- A. कचरा मान
- B. 20.600000
- C. सिंटैक्स त्रुटि
- D. 20.6
उत्तर: B (20.600000)
व्याख्या: यूनियन के सभी सदस्य समान मेमोरी स्थान साझा करते हैं। आकार सबसे बड़े सदस्य (यहां float, 4 बाइट्स) के बराबर होता है। u->f = 20.60f मान संग्रहीत करता है, और %f इसे 20.600000 के रूप में प्रिंट करता है।
प्रश्न 2: संकलन प्रक्रिया का सही क्रम क्या है?
विकल्प:
- A. असेंबलर, कंपाइलर, प्रीप्रोसेसर, लिंकिंग
- B. कंपाइलर, असेंबलर, प्रीप्रोसेसर, लिंकिंग
- C. प्रीप्रोसेसर, कंपाइलर, असेंबलर, लिंकिंग
- D. असेंबलर, कंपाइलर, लिंकिंग, प्रीप्रोसेसर
उत्तर: C
क्रम:
- प्रीप्रोसेसिंग: #include, #define, #ifdef विस्तार
- कंपाइलेशन: .c → .s (असेंबली कोड)
- असेंबली: .s → .o (ऑब्जेक्ट कोड)
- लिंकिंग: .o + लाइब्रेरी → एक्जीक्यूटेबल
प्रश्न 3: कौन सा कथन सत्य है?
विकल्प:
- A. लिंकिंग के दौरान #include stdio.h से प्रतिस्थापित होता है
- B. प्रीप्रोसेसिंग के दौरान #include stdio.h से प्रतिस्थापित होता है
- C. निष्पादन के दौरान #include stdio.h से प्रतिस्थापित होता है
- D. संपादन के दौरान #include stdio.h से प्रतिस्थापित होता है
उत्तर: B
व्याख्या: प्रीप्रोसेसर #include निर्देशों को संभालता है, हेडर फ़ाइल की सामग्री को स्रोत कोड में डालता है कंपाइलेशन से पहले।
प्रश्न 4: fflush() फ़ंक्शन का उद्देश्य क्या है?
विकल्प:
- A. सभी स्ट्रीम और निर्दिष्ट स्ट्रीम फ्लश करें
- B. केवल निर्दिष्ट स्ट्रीम फ्लश करें
- C. इनपुट-आउटपुट बफर फ्लश करें
- D. अमान्य लाइब्रेरी फ़ंक्शन
उत्तर: A
व्याख्या: fflush() आउटपुट स्ट्रीम को फ्लश करता है (बफर को डिवाइस पर लिखता है)। fflush(NULL) सभी खुले आउटपुट स्ट्रीम को फ्लश करता है। नोट: stdin पर fflush() अपरिभाषित व्यवहार है (C मानक)।
प्रश्न 5: निम्न कोड में त्रुटि बताएं:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char* ptr;
*ptr = (int*)malloc(30);
strcpy(ptr, "ABC");
printf("%s", ptr);
free(ptr);
}
विकल्प:
- A. strcpy() स्टेटमेंट में त्रुटि
- B.
*ptr = (int*)malloc(30);में त्रुटि - C. free(ptr) में त्रुटि
- D. कोई त्रुटि नहीं
उत्तर: B
व्याख्या: *ptr एक char है (डीरेफरेंस्ड पॉइंटर)। आप एक char को पॉइंटर (int*)malloc(30) असाइन नहीं कर सकते। सही: ptr = (char*)malloc(30); या ptr = malloc(30);।
अतिरिक्त MCQ
प्रश्न 6: निम्न में से कौन सा C में मेमोरी लीक का कारण बनता है?
- A. malloc के बाद free()
- B. free() के बाद malloc()
- C. free() के बिना malloc()
- D. malloc() के बिना free()
उत्तर: C
प्रश्न 7: स्टैक और हीप में अंतर?
- A. स्टैक तेज है, हीप धीमा
- B. स्टैक स्वचालित, हीप मैनुअल
- C. दोनों सही हैं
- D. कोई अंतर नहीं
उत्तर: C
प्रश्न 8: sizeof(int) का मान 64-बिट सिस्टम पर?
- A. 2 बाइट्स
- B. 4 बाइट्स
- C. 8 बाइट्स
- D. कंपाइलर-निर्भर
उत्तर: B (आमतौर पर 4 बाइट्स) - C मानक के अनुसार कम से कम 2 बाइट्स, आमतौर पर 4।