Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C भाषा में लूप/गोटो के बिना नाम कई बार प्रिंट करना


समस्या

किसी नाम को 10 बार प्रिंट करना बिना किसी लूप (for/while/do-while) या goto के।

विधि 1: पुनरावर्तन (Recursion)

#include <stdio.h>

void printName(char *name, int count) {
    printf("%03d: %s\n", count + 1, name);
    if (count < 9)  // बेस केस: 0 से 9 तक = 10 बार
        printName(name, count + 1);
}

int main() {
    char name[50];
    printf("नाम दर्ज करें: ");
    scanf("%49s", name);
    printName(name, 0);
    return 0;
}

आउटपुट

नाम दर्ज करें: TutorialsPoint
001: TutorialsPoint
002: TutorialsPoint
...
010: TutorialsPoint

विधि 2: स्टैंडर्ड लाइब्रेरी फंक्शन्स


// memset + write (POSIX)
#include <string.h>
#include <unistd.h>

int main() {
    char buf[100];
    sprintf(buf, "Hello\n");
    // 10 बार लिखें - लेकिन यह लूप के बिना नहीं हो सकता
}

विधि 3: कंपाइल-टाइम अनरोलिंग (मैक्रोज़)


#define PRINT10(name) \
    printf("%s\n", name); \
    printf("%s\n", name); \
    printf("%s\n", name); \
    printf("%s\n", name); \
    printf("%s\n", name); \
    printf("%s\n", name); \
    printf("%s\n", name); \
    printf("%s\n", name); \
    printf("%s\n", name); \
    printf("%s\n", name)

int main() {
    PRINT10("TutorialsPoint");
    return 0;
}

विधि 4: सरणी और कॉलबैक (अप्रत्यक्ष)


void printer(char *s) { printf("%s\n", s); }

int main() {
    void (*funcs[10])(char*) = {printer};  // केवल पहला भरा
    // फिर भी लूप चाहिए सभी 10 कॉल करने के लिए
}

विधि 5: setjmp/longjmp (नहीं अनुशंसित)

गोटो-जैसा, जटिल, त्रुटि-प्रवण।

तुलना

विधिपक्षविपक्षव्यावहारिक?
पुनरावर्तनसाफ, स्केलेबलस्टैक ओवरफ्लो (बड़े n), ओवरहेडछोटे n के लिए हाँ
मैक्रोज़कोई रनटाइम ओवरहेड नहींकोड ब्लोट, लचीला नहींनहीं (केवल निश्चित n)
लूपसरल, कुशल, मानकप्रतिबंध के विरुद्धहाँ (सामान्य)

पुनरावर्तन की सीमाएं

  • स्टैक आकार सीमित (आमतौर पर 1-8 MB)
  • गहरी पुनरावर्तन → स्टैक ओवरफ्लो
  • टेल कॉल ऑप्टिमाइजेशन (TCO) C में गारंटीड नहीं
  • प्रत्येक कॉल: रिटर्न पता, स्थानीय चर, रजिस्टर्स सेव

निष्कर्ष

व्यावहारिक प्रोग्रामिंग में लूप का उपयोग करें। यह अभ्यास केवल नियंत्रण प्रवाह समझने के लिए है। पुनरावर्तन उन समस्याओं के लिए उपयुक्त है जो स्वाभाविक रूप से पुनरावर्ती हैं (ट्री ट्रैवर्सल, डिवाइड-एंड-कॉन्कर), सरल पुनरावृत्ति के लिए नहीं।

  1. जावास्क्रिप्ट में फ्लोचार्ट का उपयोग करके फॉर लूप कैसे दिखाएं? जावास्क्रिप्ट में फ्लोचार्ट का उपयोग करके फॉर लूप कैसे दिखाएं?

    “for” लूप में लूप इनिशियलाइज़ेशन शामिल है जहां हम अपने काउंटर को एक प्रारंभिक मान पर इनिशियलाइज़ करते हैं। इनिशियलाइज़ेशन स्टेटमेंट लूप शुरू होने से पहले निष्पादित होता है, टेस्ट स्टेटमेंट जो यह टेस्ट करेगा कि दी गई कंडीशन true है या नहीं। यदि कंडीशन true है, तो लूप के अंदर दिया गया कोड

  1. - पायथन का उपयोग करके मल्टीपल लिस्ट के माध्यम से लूप कैसे करें?

    सबसे सीधा तरीका एक एक्सटर्नल इटरेटर का उपयोग करके ट्रैक रखना प्रतीत होता है। ध्यान दें कि यह उत्तर मानता है कि आप समान आकार की लिस्ट पर लूप कर रहे हैं। उदाहरण a = [10, 12, 14, 16, 18] b = [10, 8, 6, 4, 2] for i in range(len(a)): print(a[i] + b[i]) आउटपुट यह आउटपुट देगा: 20 20 20 20 20 उदाहरण आप

  1. - पायथन का उपयोग करके स्क्रीन पर कैसे प्रिंट करें?

    स्क्रीन पर आउटपुट करने का बुनियादी तरीका print स्टेटमेंट का उपयोग करना है। >>> print Hello, world Hello, world एक ही लाइन पर स्पेस से अलग कई चीजें प्रिंट करने के लिए, उनके बीच कॉमा का उपयोग करें। उदाहरण के लिए: >>> print Hello,, World Hello, World जबकि किसी भी स्ट्रिंग में स्पेस न