โŒจ๏ธ Programming in 'C' (SEC101T)

Detailed Notes โ€ข Unit 1โ€“5 โ€ข Har concept ke saath ready-made program + output โ€ข Practice sets + MCQ bank

4 CreditsESE 70 + Internal 30Lab: 16 programs

UNIT 1 โ€” Introduction to C Programming

1.1 History of C

C ek general-purpose, procedural (structured) programming language hai jise Dennis Ritchie ne 1972 me AT&T Bell Laboratories, USA me develop kiya. Iska main maksad tha โ€” UNIX operating system ko dobara likhna. C apne se pehle aayi B language ka successor hai (isliye naam "C" โ€” B ke agla letter), aur B khud BCPL se aayi thi.
SaalKya hua
1960ALGOL 60 โ€” C ka ancestor (structured programming ka idea)
1967BCPL (Basic Combined Programming Language) โ€” Martin Richards
1970B language โ€” Ken Thompson (Bell Labs)
1972C language โ€” Dennis Ritchie (AT&T Bell Laboratories, USA) โ€” UNIX OS ko dobara likhne ke liye banayi
1978"The C Programming Language" book (K&R C / Kernighan & Ritchie) โ€” pehli unofficial standard
1989/1990ANSI C / C89 standard (standardization for portability)
1999, 2011C99, C11 โ€” naye features (bool, variable-length arrays, threading support)
2018C17/C18 โ€” bug fixes aur chhote improvements
Yaad rakho: ALGOL โ†’ BCPL โ†’ B โ†’ C (har naam chhota hota gaya ๐Ÿ˜„) โ€” aur ise banaya Dennis Ritchie ne 1972 me. "C" ka naam B se aaya (B ka next letter). Aur ek fact jo MCQ me aata hai: Ken Thompson ne B banayi, Dennis Ritchie ne C โ€” dono Bell Labs me the, aur isi jodi ne UNIX pe kaam kiya.

C kyun seekhna chahiye (features/importance) โ€” exam ke liye 6 points

#FeatureMatlab + example
1Simple & powerfulSirf 32 keywords (C89), lekin inhi se poora operating system likha ja sakta hai โ€” simple syntax, kam rules
2Middle-level languageHigh-level ki aasani (English jaisi statements) + low-level ki power (memory/pointer control) โ€” isliye OS, drivers, embedded sab C me
3PortableEk machine par likha program doosri machine par chalta hai (recompile karke) โ€” hardware ki detail program me nahi hoti
4Fast & efficientHardware ke bahut paas โ€” isliye game engines ka core, database engines, OS kernel C/C++ me hote hain
5Structured + modularFunctions me todo, code reusable banta hai; block { } structure
6Rich library + base of everythingHazaaron ready-made functions (stdio.h, math.h, string.h); aur C++/Java/JavaScript/PHP ka syntax bahut hadd tak C jaisa hai
Real life: C ne "B language" ko replace kiya aur aaj bhi duniya ki sabse important language hai โ€” Windows, Linux, Android ka core, MySQL, Python ka interpreter, aapki gaadi ka ECU, washing machine ka firmware, satellite ke control systems โ€” sab kisi na kisi hisse me C se bane hain. Isliye C ko "Mother of all Languages" kehte hain. NEP 2020 me isliye BCA ke pehle semester me C hi rakhi gayi hai โ€” ye programming ki "neev" hai.
LanguageC se rishta
C++ ("C with classes")1979โ€“83, Bjarne Stroustrup โ€” C me OOP add kiya (classes, objects, inheritance)
Java / C#Syntax C jaisa, object-oriented; Java me pointers ki jagah references
JavaScript / PHP / Python (kuch hadd tak)Syntax aur control structures (if/for/while) C se inspired
Linux / Windows kernelC me hi likhe gaye โ€” isliye C "system programming" ki pehli pasand hai

1.2 Structure of a C Program

Har C program ek fixed dhaanche (structure) me likha jaata hai โ€” comments se shuru, phir header files, symbolic constants, global declarations, aur phir main() function (jahan se program chalta hai), aur akhir me user-defined functions. Exam me ye 6โ€“7 sections yaad rakhna zaroori hai.
/* 1. Documentation section โ€” comments (naam, kaam, date) */
#include <stdio.h>        /* 2. Link/Library section โ€” header files */
#define PI 3.14159        /* 3. Definition section โ€” symbolic constants */
int add(int a, int b);    /* 4. Global declaration โ€” function prototype */
int main()                /* 5. main() function โ€” yahin se program shuru */
{
    int r;                /* 6. variable declaration */
    r = 5;
    printf("Area = %f\n", PI * r * r);
    return 0;             /* 0 = program successful khatam hua */
}
int add(int a, int b) {   /* 7. Sub-programs / user-defined functions */
    return a + b;
}
SectionKaamAgar na likhe to?
DocumentationComments โ€” /* ... */ (multi-line) aur // (single line). Compiler ignore karta hai, par insaan (aur examiner) ke liye zarooriProgram chalega, par readability kam โ€” viva me marks kat sakte hain
Preprocessor / Link#include <stdio.h> โ€” input/output functions (printf/scanf) ready milte hainprintf/scanf unknown ho jaayenge โ€” compile error
Definition#define โ€” symbolic constants, macros (text replacement)Chalega, par magic numbers code me bikhrenge
Global declarationVariables & functions jo poore program me chahiye (function prototypes bhi)Function baad me define kiya to compiler ko pehle se nahi pata โ€” error/warning
main()Har C program yahin se start hota hai โ€” OS isko first call karta hai. Return type int rakho aur return 0; se khatam karomain ke bina program link hi nahi hota (error: undefined reference to main)
Sub-programsUser-defined functions โ€” code ko tukdon me baantnaSab kuch main me likha to program lamba aur reuse-mukt ho jaayega

Ek poora annotated program (exam me isi style me likho)

/* Program: circle ka area aur circumference
   Author : Ansh | Date: 2026 */
#include <stdio.h>
#define PI 3.14159

int main()
{
    float r = 7.5, area, circ;

    area = PI * r * r;          // area = ฯ€rยฒ
    circ = 2 * PI * r;          // circumference = 2ฯ€r

    printf("Radius      = %.2f\n", r);
    printf("Area        = %.4f\n", area);
    printf("Circumference = %.4f\n", circ);
    return 0;
}
/* Output:
   Radius      = 7.50
   Area        = 176.7146      (3.14159 ร— 7.5 ร— 7.5)
   Circumference = 47.1239     (2 ร— 3.14159 ร— 7.5) */
Exam ke liye zaroori: C case-sensitive hai โ€” Sum, sum, SUM teen alag naam hain. Statements ke end me ; (semicolon) aur function ke code ko { } curly braces me likhna mandatory hai. Ye chhote mistakes hi lab me 80% errors dete hain! Aur #include ke aage # aur uske baad semicolon nahi lagta (#define PI 3.14 โ€” yahan ; lagaya to PI ke saath semicolon bhi aa jayega ๐Ÿ˜…).

1.3 Compilation & Execution of a C Program

Aap jo C likhte ho, wo computer directly nahi samajhta. Usse machine code me badalne ka poora safar 5 steps me hota hai: Preprocessing โ†’ Compilation โ†’ Assembly โ†’ Linking โ†’ Loading. This is a useful sequence to understand and explain; exact exam questions vary.
Steps (yaad rakho โ€” exam me ye exact sequence puchha jata hai):

    first.c (source code โ€” aap likhte ho)
      โ”‚
      โ–ผ 1. PREPROCESSOR โ†’ #include/#define ko expand karta hai (.i file)
      โ–ผ 2. COMPILER     โ†’ C โ†’ assembly language (syntax errors yahin milti hain)
      โ–ผ 3. ASSEMBLER    โ†’ assembly โ†’ object code (first.obj / first.o)
      โ–ผ 4. LINKER       โ†’ object + library functions (printf etc.) jodta hai
    first.exe (executable)
      โ–ผ 5. LOADER       โ†’ RAM me load karke CPU ko chalane deta hai
    OUTPUT ๐ŸŽ‰
TermMatlabFile extension
Source code.c file โ€” jo aapne likhi (English jaisi).c
Preprocessed codeHeader files expand hone ke baad ka code (bada file).i
Assembly codeProcessor ki assembly language โ€” CPU ke instructions ke naam.s / .asm
Object codeMachine code, par adhoora (library calls nahi jude).obj / .o
ExecutablePoori tarah ready, chalane layak.exe (Windows) / .out (Linux)
DebuggingError dhundhna aur theek karna (Turbo C me F7 single step, Ctrl+F9 run, Alt+F5 output dekho; Linux me gcc -g + gdb)โ€”

Commands jo lab me kaam aayenge

KaamCommand (Linux/gcc)Turbo C (Windows)
Compile karogcc first.c -o firstAlt+F9
Run karo./firstCtrl+F9
Output dekhoscreen par hiAlt+F5
Sirf preprocessgcc -E first.cโ€”
Assembly dekhogcc -S first.cโ€”
Warnings ke saath compilegcc -Wall first.cOptions menu

Types of Errors (exam me alag-alag poochhte hain)

Error typeKab milta haiExample
Syntax error (compile-time)Compiler pakadta hai โ€” grammar galatprintf("hi") โ€” semicolon missing; int 1a;
Logical errorProgram chalta hai par output galat โ€” sabse khatarnak ๐Ÿ˜ˆ (compiler nahi pakadta)Average me (a+b)/2 ki jagah a+b/2 likh diya
Runtime errorProgram chalte waqt crash0 se divide, array out of range, file na mile
Linker errorLinking ke timeFunction ka naam galat likha / library include nahi ki
Worked example โ€” errors pakdo: Neeche wale 4 program segments me error type batao:
1) int a = 5 (semicolon nahi) โ†’ Syntax error (compile time).
2) float avg = a + b / 2; โ€” jahan average chahiye tha โ†’ Logical error (a + (b/2) calculate ho jaayega).
3) int x = 10 / 0; โ†’ Runtime error (divide by zero โ€” program crash).
4) printf("%d", sqr(5)); par sqrt likha tha aur math.h bhi nahi include ki โ†’ Linker error / warning (undefined reference). ๐Ÿงฎ

1.4 Data Types and Sizes

A data type tells the compiler what kind of value a variable will store (number, character, decimal) and how much memory it needs. C strongly typed hai โ€” har variable ka type pehle se batana padta hai, isliye memory ka control poore programmer ke haath me hota hai.
Data typeSize (typical 32/64-bit)Range (approx.)Format specifierExample
char1 byteโˆ’128 to 127%c'A'
int2โ€“4 bytesโˆ’32,768 to 32,767 (2 bytes) ya ยฑ2.1 billion (4 bytes)%d45
float4 bytes3.4Eโˆ’38 to 3.4E+38 (6 digits precision)%f89.75
double8 bytes1.7Eโˆ’308 to 1.7E+308 (15 digits)%lf3.14159265
void0 (no value)โ€”โ€”Function jo kuch return na kare

Modifiers (size/range badalte hain): short (chhota), long (bada), signed (negative + positive), unsigned (sirf positive โ€” 0 se 2ร— tak range). Example: unsigned int = 0 to 65,535 (2 bytes me). Aur long long = 8 bytes โ€” bade numbers (jaise 20 ka factorial) ke liye.

Data typeUsually kitnaReal-life example
charGrade: 'A'Section, grade, gender, yes/no flag
intRoll number, age, quantity38 students, โ‚น500, seat number
floatPercentage, temperature, price with paise78.5%, 36.6ยฐC
doubleScientific calculations, precise valuesฯ€, bank interest, GPS coordinates
/* Program: har data type ka size aur value print karo */
#include <stdio.h>
int main()
{
    char  c  = 'A';
    int   i  = 45;
    float f  = 89.75;
    double d = 3.14159265;
    short s  = 100;
    long long big = 123456789012345;

    printf("char   : %c  | size = %d byte\n", c, sizeof(c));
    printf("int    : %d  | size = %d bytes\n", i, sizeof(i));
    printf("float  : %.2f | size = %d bytes\n", f, sizeof(f));
    printf("double : %.8f | size = %d bytes\n", d, sizeof(d));
    printf("short  : %d  | size = %d bytes\n", s, sizeof(s));
    printf("long long : %lld | size = %d bytes\n", big, sizeof(big));
    return 0;
}
/* Output (64-bit gcc par):
   char   : A  | size = 1 byte
   int    : 45  | size = 4 bytes
   float  : 89.75 | size = 4 bytes
   double : 3.14159265 | size = 8 bytes
   short  : 100  | size = 2 bytes
   long long : 123456789012345 | size = 8 bytes */
Size kaise pata karein? printf("%d", sizeof(int)); โ†’ 4 (ya 2). sizeof ek operator hai (function nahi) jo kisi bhi type/variable ka size bytes me batata hai. Yaad rakho: size machine/compiler par depend karta hai โ€” Turbo C (16-bit) me int 2 byte hota hai, gcc (64-bit) me 4 byte. Isi liye portability ke liye sizeof use karna best practice hai. ๐Ÿงฎ
Overflow ka concept (MCQ me aata hai): Har type ki ek limit hai. char me 127 ke baad value 128 nahi, โˆ’128 ho jaati hai (wrap around). unsigned char me 255 ke baad 0. Isi tarah 2-byte int me 32,767 ke baad โˆ’32,768. Bade numbers ke liye long long use karo โ€” jaise 20! = 2,432,902,008,176,640,000 jo int me fit hi nahi hota. ๐Ÿ”

Format specifiers ki poori list (printf/scanf me kaam aati hai)

SpecifierUseExample output
%d / %iInteger45
%uUnsigned integer65535
%fFloat (default 6 decimal)89.750000
%.2fFloat โ€” 2 decimal places89.75
%lfDouble3.141593
%cSingle characterA
%sString (char array)Ansh
%x / %oHexadecimal / Octal2D / 55
%pAddress (pointer)0061FF1C
%ld / %lldLong / long long int123456789012345

1.5 Declaration of Variables

A variable is a named memory location whose value can change during program execution. Declaration = compiler ko batana ki naam kya hai, type kya hai (jagah reserve karna). Initialization = pehli value dena. Definition = declaration + memory allotment (C me aam taur par dono ek hi likhte hain).
// Declaration
int a;
// Declaration + initialization (definition)
int b = 10;
float pi = 3.14;
char grade = 'A';
int x = 5, y = 10;   // ek hi line me kai variables

// Galat tarike (exam me "identify the error" ke liye):
// int 1num = 5;        // digit se naam shuru nahi hota
// int total marks = 5; // space allowed nahi
// int int = 5;         // keyword naam nahi ban sakta

Rules for naming variables (identifiers)

TermMatlabExample
DeclarationType + naam batana (jagah reserve)int a;
InitializationPehli value denaint a = 10;
AssignmentBaad me value daalna/badalnaa = 25;
Local variableFunction/block ke andar โ€” wahi tak valid (scope chhota)main() ke andar int r;
Global variableSab functions ke bahar โ€” poore program me valid (default value 0)file ke top par int count;
/* Program: local vs global variable ka farak */
#include <stdio.h>
int total = 100;          // GLOBAL โ€” poore program me zinda

void show()
{
    int local = 5;        // LOCAL โ€” sirf is function ke andar
    printf("Inside show(): total = %d, local = %d\n", total, local);
}

int main()
{
    printf("Inside main(): total = %d\n", total);
    show();
    // printf("%d", local);  // โŒ error โ€” local main me exist nahi karta
    return 0;
}
/* Output:
   Inside main(): total = 100
   Inside show(): total = 100, local = 5 */
Exam one-liners: Variable = naam wali memory location jiski value badal sakti hai โ€ข Declaration vs initialization ka farak poochha jaata hai โ€ข Local variable ki default value garbage hoti hai, global ki 0 โ€ข Identifier ke 6 rules yaad rakho โ€ข C me variable declare karna mandatory hai (Python jaisi "on the fly" value nahi).

1.6 Keywords & Identifiers

TermMatlabExample
Keyword (reserved word)Reserved words jinka matlab compiler ko pehle se pata hai โ€” inhe variable naam ki tarah use nahi kar sakte. C me 32 keywords hote hain (C89)int, for, return, static
IdentifierAapke banaye naam โ€” variables, functions, arrays, structures ke naammarks, total_marks, calculateArea

32 keywords (yaad karne ka trick โ€” group me yaad karo ๐Ÿ’ก)

Data types : int char float double void
Modifiers  : short long signed unsigned
Storage    : auto static extern register
Control    : if else switch case default break continue goto
Loops      : for while do return
Logic/other: const sizeof typedef enum volatile union struct
GroupKeywordsKaam ek line me
Data types (5)int, char, float, double, voidVariable ka type batate hain
Modifiers (4)short, long, signed, unsignedType ka size/range badalte hain
Storage classes (4)auto, static, extern, registerScope aur lifetime decide karte hain (ยง1.8)
Decision (7)if, else, switch, case, default, break, continueCondition ke hisaab se raasta chunna
Loops/jump (4)for, while, do, gotoKaam baar-baar karna / jump karna
Functions (1)returnFunction se value wapas bhejna
User-defined types (5)struct, union, enum, typedef, sizeofNaye type banana / size nikalna
Others (2)const, volatileValue badal nahi sakti / compiler ko optimize mat karne dena
Trick: 6 groups me tod do โ€” (1) types (2) modifiers (3) storage (4) decision (5) loops (6) baaki (struct, union, enum, typedef, sizeof, const, volatile). Roz ek group likho โ€” 3 din me 32 keywords mudh me! ๐Ÿ’ช C me main bhi ek "special identifier" hai (keyword nahi) โ€” aur yahi 3 mistakes sabse zyada hoti hain: keyword ko variable naam banana, main ki spelling Main likhna, aur identifier ko digit se shuru karna.
Unit 1 practice MCQs (answers neeche):
  1. C language kisne banayi? (a) Ken Thompson (b) Dennis Ritchie (c) Martin Richards (d) Bjarne Stroustrup
  2. C ka ancestor kaunsi language thi? (a) ALGOL (b) BCPL (c) B (d) Teeno (ek chain me)
  3. C program main() ke bina chal sakta hai? (a) Haan (b) Nahi
  4. Source code ki extension? (a) .exe (b) .obj (c) .c (d) .i
  5. Object code banata kaun hai? (a) Preprocessor (b) Compiler (c) Assembler (d) Linker
  6. printf/scanf kis header file me hote hain? (a) string.h (b) math.h (c) stdio.h (d) ctype.h
  7. Kaunsa valid identifier hai? (a) 2sum (b) total marks (c) total_marks (d) int
  8. sizeof ka return type kya hai (value ka type)? (a) int (b) float (c) char (d) void
  9. Logical error kab pata chalta hai? (a) Compile time (b) Program chalte waqt output galat dekhkar (c) Linking time (d) Kabhi nahi
  10. Compiler kaunsi file banata hai? (a) .i (b) .s (c) .o/.obj (d) .exe
Answers: 1-(b) 2-(d) 3-(b, nahi) 4-(c) 5-(c) 6-(c) 7-(c) 8-(a) 9-(b) 10-(c). (Note: compiler .s assembly banata hai; assembler .o object banata hai โ€” MCQ me yahi twist hota hai.)

1.7 Symbolic Constants

Value jo program me change nahi hoti aur naam ke saath define ki jaati hai. C me 3 tarike: #define (preprocessor macro), const (keyword โ€” type-safe constant), enum (list of integer constants). Inko use karne ka fayda: "magic numbers" code me nahi bikharte, aur ek jagah change karne se poori file me apply ho jaata hai.
// 1. #define (macro) โ€” text replace (preprocessor karta hai)
#define PI 3.14159
#define MAX 100
#define MSG "Welcome"
// (Dhyaan do: #define ke end me semicolon NAHI lagta)

// 2. const keyword โ€” type-safe constant (memory me jagah leta hai)
const float GST = 0.18;
// GST = 0.20;  // โŒ error โ€” const ko badal nahi sakte

// 3. enum โ€” named integer constants
enum week { MON, TUE, WED };   // MON=0, TUE=1, WED=2
enum week today = TUE;         // today = 1
Basis#defineconstenum
Kaun handle karta haiPreprocessor (compile se pehle text replace)Compiler (ek read-only variable banta hai)Compiler (integer names ka set)
Type checkingNahi (sirf text replace โ€” galti pakdi nahi jaati)Haan (type-safe)Sirf integers ke liye
MemoryKoi jagah nahi leta (naam hata diya jaata hai)Memory leta hai (read-only variable)Memory/compile-time constants
Debugging me dikhta?Nahi (replacement ke baad naam gayab)HaanHaan
SemicolonNahi lagtaLagta haiLagta hai
Best kahanSimple values, arrays size, conditional compilationType-safe constants (GST, Pi, rates)Menu/states (MONโ€ฆSUN, PASS/FAIL, LOW/MED/HIGH)
/* Program: teeno tarike ek saath */
#include <stdio.h>
#define MAX 100
const float GST = 0.18;
enum status { FAIL, PASS };

int main()
{
    int marks = 78;
    float price = 1000, total;

    total = price + (price * GST);
    printf("MAX allowed = %d\n", MAX);
    printf("Price with GST = %.2f\n", total);
    if (marks >= 33)
        printf("Status = %d (PASS)\n", PASS);
    else
        printf("Status = %d (FAIL)\n", FAIL);
    return 0;
}
/* Output:
   MAX allowed = 100
   Price with GST = 1180.00
   Status = 1 (PASS) */
Real life: Tax rate, PI, max students, GST โ€” ye values program me kahin-kahin use hoti hain. Agar hard-code (0.18 har jagah) kar do aur rate badal jaaye, poori file edit karni padegi. Symbolic constant use karo: sirf ek jagah badlo, sab jagah apply. โœ… Yahi "good programming practice" ka pehla rule hai โ€” and is a good practice for readable, maintainable code.

1.8 Storage Classes High-yield syllabus topic

A storage class defines four things about a variable: scope (kahan tak naam chalega), lifetime (kab tak memory me rahega), default initial value (shuruaati value) aur memory location (RAM/stack/CPU register). C me 4 storage classes hain: auto, register, static, extern.
Storage classKeywordScopeLifetimeDefault valueKahan store
auto (automatic)autoSirf us function/block ke andarFunction/block khatam = memory freeGarbage (random)RAM (stack)
registerregisterSirf us block ke andarBlock khatam = freeGarbageCPU register (agar possible ho) โ€” fastest
staticstaticUs file/function ke andarProgram ke poore chalne tak (value yaad rehti hai!)0RAM (data segment)
extern (external)externPoora program (global, doosri files me bhi)Poora program0RAM (data segment)
Hinglish: auto = "aaj ka guest" ๐Ÿšช (kaam khatam, banda gaya). static = "wo diary jo har saal wahi cheez yaad rakhti hai" ๐Ÿ“” (value zinda rehti hai). register = "haath me pakdi cheez" โœ‹ (sabse tez access, CPU ke jeb me). extern = "poore mohalle ka common naam" (global โ€” kisi doosri file me bhi use ho sakta hai).
/* static ka jaadu โ€” count hota rehta hai, reset NAHI hota */
#include <stdio.h>
void counter() {
    static int c = 0;      // sirf pehli baar 0 hota hai!
    c++;
    printf("Called %d times\n", c);
}
int main() {
    counter();             // Called 1 times
    counter();             // Called 2 times
    counter();             // Called 3 times
    return 0;
}
/* Default values ka demo โ€” local garbage vs static/global zero */
#include <stdio.h>
int g;                     // global โ€” default 0
void test() {
    int local;             // auto โ€” garbage value (kuch bhi!)
    static int s;          // static โ€” default 0
    printf("local=%d  static=%d  global=%d\n", local, s, g);
}
int main() { test(); return 0; }
/* Output (local garbage ho sakti hai, static/global pakka 0):
   local=32767  static=0  global=0 */
/* extern โ€” doosri file me define hui value use karna (2 files)
   file1.c:  int total = 500;              // definition
   file2.c:  extern int total;             // declaration (yahan value nahi)
             printf("%d", total);          // 500 mil jaayega
   Compile:  gcc file1.c file2.c -o app   */
PointDetail (viva/exam me poochhte hain)
auto default haiFunction ke andar likha koi bhi normal variable by default auto hota hai โ€” keyword likhna optional
register ka limitregister int i; โ€” CPU registers kam hote hain, isliye compiler request "maan bhi sakta hai, mana bhi kar sakta hai". Aur register variable ka address & se nahi nikal sakte
static ke 2 matlab(1) Function ke andar โ€” value calls ke beech yaad rehti hai. (2) Function/file ke bahar โ€” sirf usi file me dikhta hai (private, doosri file se hidden)
extern ka kaamVariable/function ko declare karta hai (batata hai ki "kahin bahar define hai") โ€” memory allot nahi karta. Actual definition kisi ek file me hoti hai
Exam Q yaad rakho: "static variable ki value function calls ke beech kaise survive karti hai?" โ€” Kyunki static variable RAM me program ke poore lifetime ke liye banta hai (stack pe nahi), aur sirf ek baar initialize hota hai. Yahi wala counter program likh dena = complete-answer checklist โœ… Aur ek aur classic: "auto vs static โ€” default value ka farak" (garbage vs 0).

1.9 First C Program โ€” samajho line by line

Pehla program hi poore C ka naksha hai: header file, main(), printf se output, aur return 0. Isko word-by-word samajh lo โ€” baaki saare programs isi dhaanche par bante hain.
#include <stdio.h>          // printf/scanf ke liye
int main() {                // program ka entry point
    printf("Hello, BCA!\n");  // \n = new line
    return 0;               // 0 = success (OS ko bataya)
}
/* Output: Hello, BCA! */
Escape sequenceKaamOutput me dikhta?
\nNew lineNahi (cursor agli line)
\tTab (spacing)Nahi
\\Backslash printHaan (\)
\"Double quote printHaan (")
\'Single quote printHaan (')
\0Null character (string ka end โ€” Unit 4 me aayega)Nahi (terminator)
\aBeep/alarm soundNahi (sound)
\bBackspaceNahi

printf aur scanf (I/O ka A-B-C)

int age; float marks;

printf("Enter age: ");
scanf("%d", &age);            // & = address of (kahan rakhna hai)

printf("Enter marks: ");
scanf("%f", &marks);

printf("Age = %d, Marks = %.2f\n", age, marks);   // %.2f = 2 decimal places

/* Do values ek saath leni ho to:
   scanf("%d %d", &a, &b);
   aur char ke liye: scanf(" %c", &ch);   // space zaroori (buffer issue) */
Sabse common galti: scanf me & bhoolna! scanf("%d", age) = crash/galat value. Format specifier match karna bhi zaroori: int ke saath %d, float ke saath %f, double ke saath %lf, char ke saath %c. Aur printf me & nahi lagta (value print karte hain, address nahi). Ye do line ratt lo โ€” lab me aadhe errors yahin se aate hain.

Chhote-chhote ready programs (lab aur exam ke liye)

/* P1 โ€” Do numbers ka sum */
#include <stdio.h>
int main() {
    int a, b, sum;
    printf("Enter two numbers: ");
    scanf("%d %d", &a, &b);
    sum = a + b;
    printf("Sum = %d\n", sum);
    return 0;
}
/* Input: 15 25  โ†’  Output: Sum = 40 */

/* P2 โ€” Celsius se Fahrenheit */
#include <stdio.h>
int main() {
    float c, f;
    printf("Enter temperature in Celsius: ");
    scanf("%f", &c);
    f = (c * 9 / 5) + 32;          // formula: F = 9C/5 + 32
    printf("%.2f C = %.2f F\n", c, f);
    return 0;
}
/* Input: 37  โ†’  Output: 37.00 C = 98.60 F */

/* P3 โ€” Do numbers swap karo (third variable ke bina) */
#include <stdio.h>
int main() {
    int a = 5, b = 9;
    a = a + b;      // a = 14
    b = a - b;      // b = 5  (purani a)
    a = a - b;      // a = 9  (purani b)
    printf("a = %d, b = %d\n", a, b);
    return 0;
}
/* Output: a = 9, b = 5 โœ” */

/* P4 โ€” Character ka ASCII code */
#include <stdio.h>
int main() {
    char ch;
    printf("Enter a character: ");
    scanf("%c", &ch);
    printf("Character = %c, ASCII = %d\n", ch, ch);
    return 0;
}
/* Input: A  โ†’  Output: Character = A, ASCII = 65 */

/* P5 โ€” Simple interest (formula: SI = Pร—Rร—T/100) */
#include <stdio.h>
int main() {
    float p, r, t, si;
    printf("Enter P R T: ");
    scanf("%f %f %f", &p, &r, &t);
    si = (p * r * t) / 100;
    printf("Simple Interest = %.2f\n", si);
    return 0;
}
/* Input: 10000 8 2  โ†’  Output: Simple Interest = 1600.00 */
Pattern yaad rakho: I/O wale har program ka dhaancha same hai โ€” (1) variables declare karo, (2) printf se prompt, (3) scanf se input, (4) formula/calculation, (5) printf se formatted output. Isi dhaanche me aap 20+ programs likh sakte ho (area, average, percentage, EMI, discountโ€ฆ). Lab me pehle ye 5 programs type karo โ€” confidence aa jaayega. โŒจ๏ธ

โšก Unit 1 โ€” Rapid Revision

Syllabus-based exam-style practice questions (not predictions) โ€” Unit 1:
  1. History of C? C ki features explain karo. (5โ€“10)
  2. Structure of a C program โ€” saare sections explain karo. (10)
  3. Compilation & execution process of C program step-by-step likho. (10)
  4. Data types in C โ€” sizes aur format specifiers ke saath table. (5โ€“10)
  5. What is a variable? Declaration vs initialization. Identifier naming rules. (5)
  6. Keywords vs identifiers difference. (5)
  7. Symbolic constants ke 3 tarike โ€” examples ke saath. (5)
  8. Storage classes in C โ€” auto, static, register, extern table + example. (10)
  9. Types of errors in C (syntax/logical/runtime) with examples. (5)
  10. Program: do numbers ka sum/average; area of circle; swap two numbers; Celsiusโ†’Fahrenheit. (5 each)
  11. #define aur const me difference; enum kya hai? (5)
  12. Local aur global variable ka farak example ke saath. (5)
Model answer โ€” "Structure of a C program" (10 marks): Definition line ("C program 6โ€“7 sections me likha jaata hai") โ†’ diagram/sections (Documentation, Preprocessor/Link, Definition, Global declaration, main(), Sub-programs) + har section ki 1โ€“2 line + ek chhota program jisme saare sections comment ke saath label karo โ†’ closing line: "main() ke bina C program link nahi hota, aur # wali lines preprocessor ko jaati hain." Use this as one model structure; adapt this structure to the exact prompt and official rubric. โœ…

UNIT 2 โ€” C Operators & Expressions

2.1 What is an Operator & Expression?

Operator: A symbol that performs an operation on values (operands) โ€” jaise +, *, ==. Expression: A combination of operands (variables/constants) and operators that produces a value โ€” jaise a + b ya (a * b) / c. Example: c = a + b โ€” yahan + operator hai, (a+b) expression hai, aur c result store karta hai.
#CategoryOperatorsResult ka type
1Arithmetic+ โˆ’ * / %Number
2Relational< > <= >= == !=1 (true) ya 0 (false)
3Logical&& || !1 / 0
4Assignment= += -= *= /= %=Assigned value
5Increment / Decrement++ --Number (isme ยฑ1)
6Bitwise& | ^ ~ << >>Integer (bit level)
7Conditional (ternary)?:Do me se ek value
8Specialsizeof , & * . -> (cast)Mixed

Exam me "C ke operators ke types explain karo" (10 marks) isi table se shuru karo โ€” 8 categories, har ek ki 2 line + example. Aur ye yaad rakho: C me operands ka type hi result ka type decide karta hai (int + int = int, int + float = float).

2.2 Arithmetic Operators

OperatorKaamExample (a=10, b=3)Result
+Additiona + b13
โˆ’Subtractiona โˆ’ b7
*Multiplicationa * b30
/Divisiona / b3 (int/int = int! decimal kat jata hai)
%Modulus (remainder)a % b1 (10 รท 3 ka shesh)
Trap: 10/3 = 3 (not 3.33) โ€” kyunki dono int hain. Decimal chahiye to 10.0/3 ya (float)10/3 likho. Modulus (%) sirf integers pe chalta hai โ€” 10.0 % 3 = ERROR โŒ. Exam me ye question is an important practice topic! Aur ek chhota twist: -7 % 3 C me โˆ’1 deta hai (sign dividend ka hota hai), mathematics ke modulo se alag. ๐ŸŽฏ
/* Program: saare arithmetic operators ka demo + int division ka jadoo */
#include <stdio.h>
int main() {
    int a = 10, b = 3;
    float c = 10.0;

    printf("a + b = %d\n", a + b);        // 13
    printf("a - b = %d\n", a - b);        // 7
    printf("a * b = %d\n", a * b);        // 30
    printf("a / b = %d\n", a / b);        // 3  (int division)
    printf("a %% b = %d\n", a % b);       // 1
    printf("10.0 / 3 = %.4f\n", c / 3);   // 3.3333
    printf("(float)a / b = %.4f\n", (float)a / b);  // 3.3333 (casting)
    return 0;
}
/* Note: printf me %% likhne se % print hota hai (kyunki % special hai) */
% ka real-life use: Even/odd check (n % 2 == 0), "har 3rd student ki fee" (roll % 3 == 0), clock ka seconds (total % 60), circular seats (chair = position % total_chairs), date ka "kal kaunsa din" ((today + 1) % 7) โ€” aur Unit 3 me reverse-of-number ka poora program isi % 10 aur / 10 par khada hai. ๐ŸŒ

2.3 Relational Operators (comparison โ€” True=1 / False=0)

OperatorMatlabExample (a=10, b=3)Result
<Chhotaa < b0 (false)
>Badaa > b1 (true)
<=Chhota ya barabara <= b0
>=Bada ya barabara >= b1
==Barabar hai kya?a == b0
!=Barabar nahi hai?a != b1
/* Program: comparison ka result 1/0 me dikhta hai */
#include <stdio.h>
int main() {
    int a = 10, b = 3;
    printf("a > b  = %d\n", a > b);    // 1
    printf("a < b  = %d\n", a < b);    // 0
    printf("a == b = %d\n", a == b);   // 0
    printf("a != b = %d\n", a != b);   // 1
    printf("5 <= 5 = %d\n", 5 <= 5);  // 1 (barabar bhi chhota-ya-barabar me aata hai)
    return 0;
}
Sabse famous galti: = (assignment) aur == (comparison) me farak! if (a = 5) โ€” ye a me 5 daal dega (aur hamesha true!). if (a == 5) โ€” ye pooch raha hai "a 5 hai kya?" โœ”๏ธ Compiler warning de sakta hai, par error nahi deta โ€” isliye ye bug pakadna mushkil hota hai. Ek line yaad rakho: double equals = sawaal, single equal = jawab (value daal dena).

2.4 Logical Operators

OperatorNaamRuleExample
&&ANDDono true โ†’ tabhi true(age >= 18) && (citizen == 1) โ†’ vote de sakta hai?
||ORKoi ek true โ†’ true(marks >= 90) || (sports == 1) โ†’ scholarship milegi?
!NOTTrue ko false, false ko true!(a == b) โ€” same as a != b
ABA && BA || B!A
00001
01011
10010
11110
/* Program: leap year check โ€” && aur || ka classic use */
#include <stdio.h>
int main() {
    int y;
    printf("Enter year: ");
    scanf("%d", &y);

    /* Leap year: 4 se divisible AND (100 se nahi ya 400 se haan) */
    if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
        printf("%d is a Leap Year\n", y);
    else
        printf("%d is not a Leap Year\n", y);
    return 0;
}
/* 2024 โ†’ Leap โœ”  2025 โ†’ Not โœ”  1900 โ†’ Not (100 se divisible, 400 se nahi)  2000 โ†’ Leap โœ” */

Short-circuit evaluation (bonus concept โ€” viva me poochhte hain): A && B me agar A false nikal gaya, to B check hi nahi hota. A || B me A true hua to B check nahi hota. Isse code fast banta hai aur crash bachta hai โ€” jaise if (ptr != NULL && *ptr == 5): pehla false hua to doosra chala hi nahi, warna NULL pointer dereference se crash hota. Yahi trick real projects me roz kaam aati hai.

2.5 Assignment Operators

OperatorExampleMatlab
=a = 10a me 10 daalo
+=a += 5a = a + 5
โˆ’=a โˆ’= 5a = a โˆ’ 5
*=a *= 5a = a * 5
/=a /= 5a = a / 5
%=a %= 5a = a % 5
/* Program: compound assignment ka step-by-step tracking */
#include <stdio.h>
int main() {
    int a = 20;
    printf("Start: a = %d\n", a);   // 20
    a += 5;  printf("a += 5  โ†’ %d\n", a);   // 25
    a -= 3;  printf("a -= 3  โ†’ %d\n", a);   // 22
    a *= 2;  printf("a *= 2  โ†’ %d\n", a);   // 44
    a /= 4;  printf("a /= 4  โ†’ %d\n", a);   // 11
    a %= 4;  printf("a %%= 4  โ†’ %d\n", a);  // 3
    return 0;
}
Exam tip: Shorthand likhna "good programming practice" hai โ€” kam typing, kam error. Interview me bhi poochhte hain: x += 3 ka output kya hoga. Aur ek baat yaad rakho: a = a + b aur a += b ka result same hai, par bade expressions me shorthand padhne me clear hota hai. โœ…

2.6 Increment & Decrement Operators

OperatorNaamExample (a=5)Result
++ (prefix)Pehle badhao, phir use karob = ++a;a=6, b=6
++ (postfix)Pehle use karo, phir badhaob = a++;b=5, a=6
โˆ’โˆ’ (prefix)Pehle ghatao, phir use karob = โˆ’โˆ’a;a=4, b=4
โˆ’โˆ’ (postfix)Pehle use karo, phir ghataob = aโˆ’โˆ’;b=5, a=4
Trick: Prefix = "pehle kaam ki taiyari" (badhao phir do), Postfix = "baad me samay mile to badha denge" (do phir badhao). Real-life: prefix = paisa pehle gin ke dena; postfix = pehle saaman do, paisa baad me ๐Ÿ˜„
/* Program: prefix vs postfix โ€” exam ke favourite tricky questions */
#include <stdio.h>
int main() {
    int a = 5, b;
    b = a++;   printf("b = a++ โ†’ b=%d, a=%d\n", b, a);   // b=5, a=6
    b = ++a;   printf("b = ++a โ†’ b=%d, a=%d\n", b, a);   // b=7, a=7
    b = a--;   printf("b = a-- โ†’ b=%d, a=%d\n", b, a);   // b=7, a=6
    b = --a;   printf("b = --a โ†’ b=%d, a=%d\n", b, a);   // b=5, a=5

    /* Tricky exam questions โ€” khud verify karo */
    int x = 5, y;
    y = x++ + ++x;      // 5 + 7 = 12, x = 7
    printf("x=%d, y=%d\n", x, y);

    int i = 1;
    printf("%d %d %d\n", i++, ++i, i);  // evaluation order compiler par depend karta hai!
    return 0;
}
/* Output (gcc): b=5,a=6 | b=7,a=7 | b=7,a=6 | b=5,a=5 | x=7,y=12 */
Zaroori baat: Ek hi expression me ek variable par kai baar ++/-- lagana C me undefined behaviour hai (compiler alag-alag result de sakta hai) โ€” isliye exam me sirf wahi questions aate hain jinme clear order ho, jaise b = a++; ya y = x++ + ++x; ke simple cases. Rule ratt lo: postfix = pehle purani value, prefix = nayi value. Lab me aise code likhna hi nahi chahiye. โš ๏ธ

2.7 Bitwise Operators (bits par kaam โ€” 0/1)

Bitwise operators number ke bits (0/1) par seedha kaam karte hain โ€” poore number par nahi. Ye fast hote hain aur sirf integers (char, int, long) par chalte hain, float/double par nahi. Embedded systems, device drivers aur optimization me inka bahut use hota hai.
OperatorNaamKaamExample (a=5 โ†’ 0101, b=3 โ†’ 0011)Result
&Bitwise ANDDono bit 1 โ†’ 1a & b1 (0001)
|Bitwise ORKoi ek bit 1 โ†’ 1a | b7 (0111)
^Bitwise XORAlag bits (different) โ†’ 1a ^ b6 (0110)
~Bitwise NOT (1's complement)Har bit ulta~aโˆ’6 (โ€ฆ1010)
<<Left shiftBits left โ€” number ร— 2โฟ (fast multiply)a << 110 (0101โ†’1010)
>>Right shiftBits right โ€” number รท 2โฟ (fast divide)a >> 12 (0101โ†’0010)
Bit-by-bit calculation (exam me aise likho):

    5 = 0 1 0 1
    3 = 0 0 1 1
    -------------- 
  5 & 3 = 0 0 0 1 = 1      (AND: dono 1 tabhi 1)
  5 | 3 = 0 1 1 1 = 7      (OR : koi ek 1 to 1)
  5 ^ 3 = 0 1 1 0 = 6      (XOR: alag ho to 1)
     ~5 = 1 0 1 0 โ†’ sign bit ke wajah se = โˆ’6
  5 << 1 = 1 0 1 0 = 10     (left shift = 5 ร— 2)
  5 >> 1 = 0 0 1 0 = 2      (right shift = 5 รท 2)
/* Program: bitwise operators ka demo + fast multiply/divide */
#include <stdio.h>
int main() {
    int a = 5, b = 3;
    printf("a & b  = %d\n", a & b);     // 1
    printf("a | b  = %d\n", a | b);     // 7
    printf("a ^ b  = %d\n", a ^ b);     // 6
    printf("~a     = %d\n", ~a);        // -6
    printf("a << 2 = %d\n", a << 2);    // 20 (5 ร— 4)
    printf("a >> 1 = %d\n", a >> 1);    // 2  (5 รท 2, integer)

    /* Even/Odd check โ€” AND se (fastest) */
    if (a & 1) printf("%d is Odd\n", a);
    else       printf("%d is Even\n", a);
    return 0;
}
Real life uses: (1) Even/odd โ€” n & 1 (1 = odd). (2) Swap without temp check: a ^= b; b ^= a; a ^= b; โ€” XOR swap ka famous interview question. (3) Flags/permissions โ€” Linux file permissions (rwx = 111), game settings multiple on/off. (4) ร— 2, รท 2 โ€” shift se (compiler bhi yahi karta hai). (5) Colour codes โ€” RGB me har channel 8 bit, masks se nikalte hain. (6) Encryption, compression, graphics โ€” sab bit level par. ๐Ÿ”ง
Trick: AND = "dono haan" (1ร—1 = 1), OR = "koi bhi haan" (jaise ||), XOR = "dono alag" (mismatch detector). Aur shift yaad rakho: left = multiply (ร—2 per shift), right = divide (รท2 per shift) โ€” bas sign wale negative numbers me dhyaan dena: C me right shift negative ke liye implementation-defined hota hai.

2.8 Conditional (Ternary) Operator

Ye C ka ekmatra 3-operand operator hai (isliye "ternary"). Syntax: condition ? value_if_true : value_if_false. Ye chhote if-else ka short form hai aur direct expression me value deta hai โ€” isliye ise "inline if-else" kehte hain.
// Syntax
result = (condition) ? value_true : value_false;

// Example: dono me se bada number
int a = 10, b = 25, big;
big = (a > b) ? a : b;         // big = 25

// Nested ternary: teen me se bada
big = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);

// Same cheez if-else me (kitna lamba hai, dekho ๐Ÿ‘‡)
if (a > b) big = a; else big = b;
/* Program: ternary ke 3 classic uses */
#include <stdio.h>
int main() {
    int a = 15, b = 8, c = 30, marks = 40;

    /* 1. Bada number */
    printf("Bigger = %d\n", (a > b) ? a : b);          // 15

    /* 2. Pass/Fail โ€” statement me bhi */
    printf("Result: %s\n", (marks >= 33) ? "PASS" : "FAIL");  // PASS

    /* 3. Even/Odd */
    printf("%d is %s\n", a, (a % 2 == 0) ? "Even" : "Odd");   // Odd

    /* 4. Teen me se bada (nested) */
    printf("Largest of three = %d\n", (a>b) ? ((a>c)?a:c) : ((b>c)?b:c));  // 30
    return 0;
}
Kab use karein: Jab simple 2-choice decision ko ek expression me chahiye โ€” jaise printf ke andar, ya variable ki initialization me. Jab bahut lamba ya multiple statements ka kaam ho, to if-else hi behtar hai (ternary nested karke code padhna mushkil ho jaata hai). Exam me "ternary operator kya hai? Example" (5) aur "ternary vs if-else" (5) dono aate hain โ€” answer: ternary expression hai (value deta hai), if-else statement hai (kaam karta hai). โœ…

2.9 Special Operators

OperatorNaamKaamExample
,CommaKai expressions ek saath (left se right evaluate; value = rightmost)int a = 1, b = 2; โ€ข x = (a = 3, a + 2); โ†’ x = 5
sizeofSize operatorType/variable ka size bytes mesizeof(int) โ†’ 4 โ€ข sizeof(arr)/sizeof(arr[0]) โ†’ elements ki count
&Address-ofVariable ka memory addressscanf("%d", &age)
*Value-at / DereferenceAddress par padi value (Unit 5)p = &a; printf("%d", *p);
. aur ->Member operatorsStructure ke member tak pahunchna (dot = normal, arrow = pointer se)s.name โ€ข ptr->name
(type)Type castEk type ki value doosre type me badalna(float)a / b โ€ข (int)3.9 โ†’ 3
/* Program: special operators in action */
#include <stdio.h>
int main() {
    int a = 10, b = 3;
    int x = (a = 7, a + 2);            // comma: x = 9
    printf("x = %d\n", x);

    int arr[] = {10, 20, 30, 40, 50};
    printf("sizeof(arr) = %d bytes\n", sizeof(arr));               // 20 (5 ร— 4)
    printf("Elements = %d\n", sizeof(arr) / sizeof(arr[0]));        // 5 (trick!)
    printf("Address of a = %p\n", &a);

    float avg = (float)(a + b) / 2;     // cast se decimal bacha
    printf("avg = %.2f\n", avg);        // 5.00
    printf("(int)3.9 = %d\n", (int)3.9);  // 3 (truncate, round nahi)
    return 0;
}
Casting ka jadoo โ€” integer division se bacho: float avg = 7 / 2; โ†’ 3.000000 (kyunki 7/2 pehle int me hi 3 hua). float avg = (float)7 / 2; โ†’ 3.500000 โœ”๏ธ Cast ek value ko doosre type me convert karta hai. Aur yaad rakho (int)3.9 = 3 โ€” C truncate karta hai (round nahi karta); rounding chahiye to (int)(x + 0.5) ya round() use karo.

2.10 Operator Precedence & Associativity High-yield syllabus topic

Precedence: Jab ek expression me kai operators hon, to kaun pehle chalega โ€” iska order. Associativity: Same precedence wale operators me kaun pehle โ€” left-to-right (Lโ†’R) ya right-to-left (Rโ†’L). Example: 2 + 3 * 4 = 14 (kyunki * ki precedence + se zyada hai), aur 10 โˆ’ 3 โˆ’ 2 = 5 (Lโ†’R associativity).
Precedence table (upar se neeche โ€” upar wale pehle chalte hain):

    Priority  Operator(s)                     Associativity
    --------  ----------------------------    -------------
      1       ()  []  .  ->                   L โ†’ R
      2       !  ~  ++ -- (unary)  + - (unary)  (type) sizeof
               & (address)  * (deref)         R โ†’ L
      3       *  /  %                         L โ†’ R
      4       +  -                            L โ†’ R
      5       <<  >>                          L โ†’ R
      6       <  <=  >  >=                    L โ†’ R
      7       ==  !=                           L โ†’ R
      8       &  (bitwise AND)                L โ†’ R
      9       ^                                L โ†’ R
     10       |                                L โ†’ R
     11       &&                               L โ†’ R
     12       ||                               L โ†’ R
     13       ?:                               R โ†’ L
     14       =  +=  -=  *=  /=  %=  etc.      R โ†’ L
     15       ,  (comma)                       L โ†’ R
Yaad karne ka shortcut:

Worked examples โ€” step by step solve karo

/* Example 1 */  x = 10 + 2 * 3 - 4
   = 10 + 6 - 4        (* pehle)
   = 16 - 4  = 12      (+ - left to right)

/* Example 2 */  y = (10 + 2) * (7 - 4) / 2
   = 12 * 3 / 2        (brackets pehle)
   = 36 / 2   = 18

/* Example 3 */  z = 3 + 4 > 5 && 2 < 3
   = (7 > 5) && (2 < 3)   (arithmetic > relational)
   = 1 && 1 = 1 (true)

/* Example 4 */  p = 10 > 5 == 1
   = (10 > 5) == 1    (relational > equality)
   = 1 == 1 = 1

/* Example 5 */  q = 2 + 3 * 4 % 5
   = 2 + (12 % 5)     (* aur % same priority, Lโ†’R)
   = 2 + 2 = 4

/* Example 6 */  r = 5 * 2 / 4.0 + 3
   = 10 / 4.0 + 3     (* aur / same priority, Lโ†’R)
   = 2.5 + 3 = 5.5    (4.0 ke wajah se float division)

/* Example 7 โ€” same cheez, alag likhi */
   n = 10 - 3 - 2     โ†’ (10-3)-2 = 5   (Lโ†’R โ€” right se kiya to 9 aa jaata!)
/* Program: apne solve kiye answers verify karo */
#include <stdio.h>
int main() {
    printf("%d\n", 10 + 2 * 3 - 4);        // 12
    printf("%d\n", (10 + 2) * (7 - 4) / 2); // 18
    printf("%d\n", 3 + 4 > 5 && 2 < 3);      // 1
    printf("%d\n", 10 > 5 == 1);            // 1
    printf("%d\n", 2 + 3 * 4 % 5);          // 4
    printf("%.2f\n", 5 * 2 / 4.0 + 3);      // 5.50
    return 0;
}
Unit 2 practice problems (answers neeche):
  1. a = 5, b = 2; to a / b aur a % b batao.
  2. 7 & 4, 7 | 4, 7 ^ 4 โ€” teeno ke bits likho aur value batao.
  3. 12 >> 2 = ? 12 << 1 = ?
  4. int x = 5; x += 3 * 2; ke baad x = ?
  5. int a = 4; printf("%d", a++ + ++a); โ€” kitna? (careful!)
  6. (10 > 5) ? 100 : 200 ka value?
  7. z = 3 * 2 + 4 / 2 - 1; solve karo.
  8. 6 / 2 * 3 aur 6 * 2 / 3 โ€” dono batao (associativity test!).
  9. (int)9.99 + 2 = ?
  10. !(5 > 3) || (2 == 2) = ?
Answers: 1) a/b = 2, a%b = 1 โ€ข 2) 7=0111, 4=0100 โ†’ AND=4(0100), OR=7(0111), XOR=3(0011) โ€ข 3) 12>>2 = 3, 12<<1 = 24 โ€ข 4) x = 5 + 6 = 11 โ€ข 5) 4 + 6 = 10 (a final 6) โ€ข 6) 100 โ€ข 7) 6 + 2 โˆ’ 1 = 7 โ€ข 8) dono 9 (Lโ†’R: 6/2=3, ร—3=9; 6ร—2=12, /3=4 โ€” ruko! ๐Ÿ™ƒ) โ€” theek se: 6*2/3 = 12/3 = 4. Dhyaan do: left-to-right chalte hain, isliye pehla 9 aur doosra 4 โœ” โ€ข 9) 9 + 2 = 11 โ€ข 10) !(1) || 1 = 0 || 1 = 1.

2.11 Evaluation of Arithmetic Expressions & Type Conversion

Type conversion = ek data type ki value ko doosre type me badalna. 2 tarike: Implicit (automatic / type promotion / coercion) โ€” compiler khud karta hai jab mixed types ho; Explicit (type casting) โ€” programmer khud (type) likhkar karta hai. Rule: chhota type bade me automatic chala jata hai (int โ†’ float โ†’ double), par bade se chhote me jaaney par data loss ho sakta hai.
Implicit conversion ka rule (promotion chain):

     char โ†’ int โ†’ float โ†’ double โ†’ long double
     (chhota type hamesha bade type me khud badal jaata hai โ€” data safe)

     Bade se chhote me (float โ†’ int) jaaney par:
        - decimal hissa KAT jata hai (truncation)
        - kuch cases me value wrap/overflow ho sakti hai

  Example (automatic):
     int i = 5; float f = 2.5, r;
     r = i + f;        // i khud float ban gaya โ†’ r = 7.5 โœ” (data safe)

  Example (cast โ€” programmer ka adhikaar):
     int a = 10, b = 3;
     float r1 = a / b;             // 3.000000 โŒ (int division pehle hua)
     float r2 = (float) a / b;     // 3.333333 โœ”
     int   r3 = (int) 3.99;        // 3 (truncate โ€” round nahi!)
BasisImplicit (Automatic)Explicit (Type Casting)
Kaun karta haiCompilr khud (automatic)Programmer likhkar (manual)
SyntaxKuch nahi likhna: r = i + f;(type) likhna: r = (float)a / b;
Kab hota haiMixed types ke expression meJab zabardasti chahiye (average, percentage, division)
Data lossNahi (chhota โ†’ bada, safe)Ho sakta hai (bada โ†’ chhota: decimal kat sakta hai)
NaamType promotion / coercionType casting / conversion
/* Program: implicit vs explicit conversion ka farak */
#include <stdio.h>
int main() {
    int i = 7, j = 2;
    float f = 2.5;

    /* Implicit โ€” mixed types */
    printf("i + f = %.2f\n", i + f);        // 9.50 (i float ban gaya)

    /* Explicit โ€” cast */
    printf("i / j        = %.2f\n", (float) i / j);   // 3.50
    printf("(float)i / j = %.2f\n", (float) i / j);   // same 3.50
    printf("(int) 3.99   = %d\n", (int) 3.99);        // 3
    printf("(char) 65    = %c\n", (char) 65);         // A

    /* Char aur int ka rishta โ€” ASCII */
    char ch = 'A';
    printf("ch + 1 = %c (ASCII %d)\n", ch + 1, ch + 1);  // B (66)
    return 0;
}
Kab casting zaroori hoti hai: (1) Average nikalte waqt โ€” (float)total / n. (2) Percentage โ€” (float)obtained / max * 100. (3) sqrt/pow me โ€” sqrt((double)n). (4) Large int โ†’ long jab overflow ka darr ho โ€” (long)a * b. (5) Char โ†’ int ASCII ke liye โ€” jaise 'a' ko 97 banana. Ye 5 jagah exam me hi nahi, real life me bhi roz kaam aati hain. ๐Ÿ“Š
Data loss ke examples (MCQ practice focus): (int)9.99 โ†’ 9 โ€ข int x = 3.9; printf("%d", x); โ†’ 3 โ€ข (char)321 โ†’ 'A' (overflow/wrap โ€” 321 % 256 = 65 = 'A') โ€ข float f = 1.0 / 3; printf("%.2f") โ†’ 0.33. Aur ek line yaad rakho: int se float me jaana safe hai, float se int me jaana data ka nuksan karta hai.

โšก Unit 2 โ€” Rapid Revision

Syllabus-based exam-style practice questions (not predictions) โ€” Unit 2:
  1. Operators kya hain? C ke operators ke types classification ke saath explain karo. (10)
  2. Arithmetic operators explain karo โ€” 10/3 aur 10%3 ka farak. (5)
  3. Relational aur logical operators, truth table ke saath. (5โ€“10)
  4. Increment aur decrement โ€” prefix vs postfix example. (5)
  5. Bitwise operators โ€” AND/OR/XOR truth table + program. (5โ€“10)
  6. Ternary operator kya hai? Example: largest of two/three. (5)
  7. Operator precedence aur associativity โ€” table + examples solve karo. (10)
  8. Implicit aur explicit type conversion โ€” difference + example. (5โ€“10)
  9. Expression: x = 3 + 4 * 5 / 2 โˆ’ 1 solve karke steps likho. (5)
  10. Program: swap two numbers (3rd variable ke bina), even/odd, largest of three (ternary se). (5 each)
Model answer โ€” "Operator precedence with examples" (10 marks): Definition (precedence = kaun pehle, associativity = same priority me direction) โ†’ table (ya kam se kam 5 rows: unary, * / %, + โˆ’, relational, logical, assignment) โ†’ PUMA REBL TACA mnemonic โ†’ 3 worked examples with steps (10+2*3-4=12, 10-3-2=5 Lโ†’R, a=b=c=5 Rโ†’L) โ†’ closing: "Confusion ho to brackets lagao โ€” clarity ke saath marks bhi milte hain." โœ…

UNIT 3 โ€” Decision Making & Control Structures

3.1 Simple if

Decision making structures control the flow of execution โ€” condition true/false hone par program ka kaunsa rasta lena hai. C me 2 bade groups hain: Decision/branching (if, if-else, else-if ladder, nested if, switch) aur Looping/iteration (for, while, do-while). Condition ke andar jo expression hota hai wahi true (non-zero) ya false (0) decide karta hai.
StatementKaamKab use
ifEk condition true ho to kaam karoEk hi raasta (pass to next class)
if-elseTrue = ek kaam, false = doosraDo hi options (pass/fail)
else-if ladderKai conditions ek ke baad ekGrade banana (A/B/C/D)
nested ifif ke andar ifEk ke baad ek condition (age aur license)
switchEk value ke kai fixed casesMenu choice, day name
/* Syntax โ€” simple if */
if (condition)
{
    statements;   // sirf jab condition TRUE ho
}
// condition false ho to ye block skip ho jata hai (aur program aage chalta hai)

/* Example */
int marks = 72;
if (marks >= 33)
{
    printf("Pass\n");
}
printf("Result declared\n");   // ye hamesha chalega (if ke bahar hai)
Hinglish: if = "darwaza" ๐Ÿšช. Condition true = darwaza khula, andar jao (block chala). Condition false = darwaza band, aage badho. Aur ek baat: { } braces na lagane se sirf pehla statement if ka hissa banta hai โ€” doosra hamesha chalta hai. Isliye hamesha braces lagao, chahe ek hi statement ho (ye "defensive programming" hai ๐Ÿ˜Ž).
/* Program 1: ek number positive hai? */
#include <stdio.h>
int main() {
    int n;
    printf("Enter a number: ");
    scanf("%d", &n);
    if (n > 0)
        printf("%d is Positive\n", n);
    if (n == 0)
        printf("Number is Zero\n");
    if (n < 0)
        printf("%d is Negative\n", n);
    return 0;
}
/* Input: 42 โ†’ 42 is Positive | Input: -7 โ†’ -7 is Negative | Input: 0 โ†’ Number is Zero */

/* Program 2: even/odd */
#include <stdio.h>
int main() {
    int n;
    scanf("%d", &n);
    if (n % 2 == 0)                 // remainder 0 = even
        printf("%d is Even\n", n);
    if (n % 2 != 0)
        printf("%d is Odd\n", n);
    return 0;
}
/* Input: 7 โ†’ 7 is Odd    Input: 20 โ†’ 20 is Even */

/* Program 3: voting eligibility โ€” real-life condition */
#include <stdio.h>
int main() {
    int age;
    printf("Enter age: ");
    scanf("%d", &age);
    if (age >= 18)
        printf("You can vote ๐Ÿ—ณ๏ธ\n");
    if (age < 18)
        printf("Not eligible โ€” %d saal baaki\n", 18 - age);
    return 0;
}
Exam tip: A useful debugging exercise is the โ€œsemicolon after ifโ€ bug: if (a > b); โ€” ye semicolon if ko khatam kar deta hai, aur printf hamesha chalega! Isko "empty statement bug" kehte hain. Isi tarah: condition me = likh dena (if (a = 5)) โ€” hamesha true. These are common beginner mistakes; test conditions and inspect control flow carefully. โš ๏ธ

3.2 if-else

Jab do me se ek hi rasta chunna ho โ€” condition true = if block, false = else block. Dono me se sirf ek chalta hai (kabhi dono nahi, kabhi koi nahi nahi โ€” else hone se ek pakka chalega).
if (condition)
{
    statements;      // TRUE par
}
else
{
    statements;      // FALSE par
}
/* Program 1: Largest of two numbers (lab ka pehla program) */
#include <stdio.h>
int main() {
    int a, b;
    printf("Enter two numbers: ");
    scanf("%d %d", &a, &b);
    if (a > b)
        printf("%d is largest\n", a);
    else
        printf("%d is largest\n", b);
    /* Note: bada number 'equal' ho to else chalega โ€” apne mann se
       else-if lagakar "both equal" bhi likh sakte ho */
    return 0;
}
/* Input: 15 42 โ†’ 42 is largest */

/* Program 2: Grade calculator (if-else) */
#include <stdio.h>
int main() {
    int m;
    printf("Enter marks (0-100): ");
    scanf("%d", &m);
    if (m >= 33)
        printf("PASS โœ…\n");
    else
        printf("FAIL โ€” better luck next time!\n");
    return 0;
}

/* Program 3: Leap year (condition ke andar && aur ||) */
#include <stdio.h>
int main() {
    int y;
    scanf("%d", &y);
    if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
        printf("Leap Year\n");
    else
        printf("Not a Leap Year\n");
    return 0;
}
/* 2024 โ†’ Leap  2023 โ†’ Not Leap  2000 โ†’ Leap  1900 โ†’ Not Leap */
Basisif (simple)if-else
RastaEk (condition true ho to kaam)Do (true/false dono ka jawab)
else ka roleNahiFalse case handle karta hai
Chalne wala block0 ya 1Hamesha exactly 1
ExampleSirf pass hone par messagePass/Fail dono ka message

3.3 Nested if-else

if-else ke andar doosra if-else โ€” jab ek condition pass hone ke baad doosri condition check karni ho. Iska alternative logical operators (&&, ||) hain โ€” nested if ko && se chhota bhi kar sakte ho. Exam me "nested if vs else-if ladder ka farak" is an important practice topic.
if (cond1) {
    if (cond2)  statement_A;      // dono true
    else        statement_B;      // cond1 true, cond2 false
}
else {
    // cond1 false โ€” chahe cond2 kuch bhi ho
    statement_C;
}
/* Program 1: Largest of three โ€” nested se */
#include <stdio.h>
int main() {
    int a, b, c;
    printf("Enter three numbers: ");
    scanf("%d %d %d", &a, &b, &c);
    if (a >= b) {
        if (a >= c)
            printf("%d is largest\n", a);
        else
            printf("%d is largest\n", c);
    } else {
        if (b >= c)
            printf("%d is largest\n", b);
        else
            printf("%d is largest\n", c);
    }
    return 0;
}
/* Input: 12 45 33 โ†’ 45 is largest */

/* Program 2: Driver licence eligibility โ€” age + test */
#include <stdio.h>
int main() {
    int age, testPassed;
    printf("Age: ");              scanf("%d", &age);
    printf("Test passed (1/0): "); scanf("%d", &testPassed);
    if (age >= 18) {
        if (testPassed == 1)
            printf("Licence approved โœ”\n");
        else
            printf("Test clear karo phir aao\n");
    } else {
        printf("Age %d โ€” 18 se kam, licence nahi\n", age);
    }
    return 0;
}

/* Program 3: Nested โ†’ && me convert karo (same kaam, chhota code) */
int age = 20, citizen = 1;
if (age >= 18 && citizen == 1)   // nested if ki jagah &&
    printf("Vote de sakta hai\n");
Dangling else problem (interview favourite): else hamesha apne sabse nazdeek wale if ke saath judta hai โ€” chahe aap kisi aur ke saath soch rahe the. Isliye hamesha braces { } lagao: if (a) { if (b) x; } else y; โœ”๏ธ Warna if (a) if (b) x; else y; me else andar wale if ka part ban jayega (bahar wale ka nahi).

3.4 else-if Ladder (multi-way decision)

Kai conditions ek ke baad ek check karna โ€” jaisa hi ek condition true mili, wahi block chalta hai aur poora ladder khatam (aage check hi nahi hota). "Multi-way decision" ka classic tarika.
if (cond1)       statement1;
else if (cond2)  statement2;
else if (cond3)  statement3;
else             default_statement;   // sab false ho to
/* Program: Grade calculator โ€” 5-way ladder (NEP ke hisaab se) */
#include <stdio.h>
int main() {
    int m;
    printf("Enter marks (0-100): ");
    scanf("%d", &m);

    if (m >= 90)
        printf("Grade = O (Outstanding), 10 points\n");
    else if (m >= 75)
        printf("Grade = A, 9 points\n");
    else if (m >= 60)
        printf("Grade = B, 8 points\n");
    else if (m >= 50)
        printf("Grade = C, 7 points\n");
    else if (m >= 40)
        printf("Grade = D, 6 points\n");
    else
        printf("Grade = F (Fail) โ€” improvement exam do\n");
    return 0;
}
/* 92 โ†’ O | 80 โ†’ A | 65 โ†’ B | 55 โ†’ C | 45 โ†’ D | 25 โ†’ F */
/* Program 2: Simple electricity bill โ€” slab system ka real use */
#include <stdio.h>
int main() {
    float units, bill;
    printf("Units consumed: ");
    scanf("%f", &units);

    if (units <= 100)
        bill = units * 3.50;
    else if (units <= 300)
        bill = 100 * 3.50 + (units - 100) * 4.50;
    else if (units <= 500)
        bill = 100 * 3.50 + 200 * 4.50 + (units - 300) * 6.00;
    else
        bill = 100 * 3.50 + 200 * 4.50 + 200 * 6.00 + (units - 500) * 7.00;

    printf("Bill = โ‚น%.2f\n", bill);
    return 0;
}
/* Input: 250 โ†’ Bill = โ‚น1025.00  (350 + 150ร—4.50) */
Ladder vs nested โ€” ek line me answer: Ladder me conditions ek saath jude hote hain (sab ek hi variable ki range), pehli true milte hi poora ladder khatam. Nested if me andar wali condition bahar wali ke true hone par hi check hoti hai (alag-alag variables ka combination). Interview me "dono ka example do" bolna hai โ€” ladder: grade, nested: licence (age phir test). โœ…

3.5 Switch Statement

switch statement ek expression ki value ko kai constant cases se match karta hai aur matching case ka code chalata hai. Ye else-if ladder ka saaf-suthra roop hai jab ek hi variable ki exact equality check karni ho (range nahi). Har case ke baad break dena zaroori hai warna fall-through ho jaata hai.
switch (expression)      // int ya char โ€” float nahi!
{
    case value1:
        statements;
        break;           // case khatam
    case value2:
        statements;
        break;
    default:             // koi case match na ho to
        statements;
}
/* Program 1: Menu-driven calculator โ€” switch ka perfect use */
#include <stdio.h>
int main() {
    int choice;
    float a, b;
    printf("1.Add 2.Sub 3.Mul 4.Div\nEnter choice: ");
    scanf("%d", &choice);
    printf("Enter two numbers: ");
    scanf("%f %f", &a, &b);

    switch (choice) {
        case 1: printf("Sum = %.2f\n", a + b);        break;
        case 2: printf("Diff = %.2f\n", a - b);       break;
        case 3: printf("Product = %.2f\n", a * b);    break;
        case 4:
            if (b != 0)
                printf("Quotient = %.2f\n", a / b);
            else
                printf("Cannot divide by zero!\n");
            break;
        default: printf("Invalid choice โŒ\n");
    }
    return 0;
}
/* Input: 3 then 6 7 โ†’ Product = 42.00 */

/* Program 2: Day name โ€” char se switch */
#include <stdio.h>
int main() {
    int day;
    printf("Enter day number (1-7): ");
    scanf("%d", &day);
    switch (day) {
        case 1: printf("Monday\n");    break;
        case 2: printf("Tuesday\n");   break;
        case 3: printf("Wednesday\n"); break;
        case 4: printf("Thursday\n");  break;
        case 5: printf("Friday\n");    break;
        case 6: printf("Saturday\n");  break;
        case 7: printf("Sunday\n");    break;
        default: printf("Only 1-7 allowed\n");
    }
    return 0;
}

/* Program 3: Vowel check โ€” char switch ka famous example */
#include <stdio.h>
int main() {
    char ch;
    printf("Enter a letter: ");
    scanf(" %c", &ch);       // space zaroori! (buffer issue)
    switch (ch) {
        case 'a': case 'e': case 'i': case 'o': case 'u':
        case 'A': case 'E': case 'I': case 'O': case 'U':
            printf("Vowel\n");
            break;
        default: printf("Consonant\n");
    }
    return 0;
}
/* Note: kai cases ek saath โ€” jab same kaam ho to fall-through ka FAIDA uthate hain */

switch ke rules (exam me list banana hota hai)

  1. Expression integer ya character hona chahiye โ€” float/double/string allowed nahi โŒ.
  2. case ki value constant honi chahiye (literal ya #define) โ€” variable nahi.
  3. Har case ke baad break lagao, warna aage ke cases bhi chal jaayenge (fall-through).
  4. default optional hai par best practice hai (invalid input handle karta hai) โ€” ise kahin bhi likh sakte ho.
  5. Do cases ki value same nahi ho sakti (duplicate case = compile error).
  6. case me range ya condition nahi likh sakte โ€” case marks>50: โŒ galat. Range ke liye else-if ladder.
  7. switch ke andar switch (nested switch) allowed hai.
Basisswitchelse-if ladder
Condition ka typeSirf equality (==) โ€” ek value vs casesKoi bhi condition (range, &&, ||, >, <)
Expressionint/char only (float nahi)Kuch bhi (float, expression, string compare)
Case ki valueConstant honi chahiyeKoi bhi expression
SpeedFast (jump table compiler bana leta hai)Slow (ek-ek condition upar se check hoti hai)
break zaroori?Haan โ€” warna fall-throughNahi (hierarchy se hi ruk jata hai)
Best kahanMenu, day/month name, calculator, states (1/2/3)Grade, bill slabs, complex conditions
Trick: switch = "multi-way equal check" (jaise train ka platform number โ€” 1, 2, 3โ€ฆ), ladder = "scoreboard check" (85 โ‰ฅ 75? โ€ฆ โ‰ฅ 60? โ€ฆ ek-ek karke). Exam me likho: "switch equality ke liye fast aur readable hai; ranges/complex conditions ke liye else-if ladder better hai." Ye ek line 5-mark answer me poori marks dilwa deti hai. โœ…

3.6 goto Statement

goto ek unconditional jump statement hai โ€” ye program ke control ko seedha ek label par pahuncha deta hai (condition ki parvah kiye bina). Syntax: goto label; aur label ke baad colon label:. Label ka koi keyword nahi hota โ€” aap jo naam do wahi label hai, aur wahi label usi function me hona chahiye.
/* Syntax */
goto label_name;
   ...  // ye statements SKIP ho jaati hain
label_name:
   statement;   // yahan se execution dobara shuru

/* Example 1: aage jump (forward goto) */
#include <stdio.h>
int main() {
    printf("Start\n");
    goto skip;
    printf("Ye line kabhi nahi chalegi ๐Ÿ˜…\n");
skip:
    printf("End\n");
    return 0;
}
/* Output: Start \n End */
/* Example 2: peeche jump se loop banao (backward goto) */
#include <stdio.h>
int main() {
    int i = 1;
again:                       // label
    printf("%d ", i);
    i++;
    if (i <= 5)
        goto again;          // wapas label par
    return 0;
}
/* Output: 1 2 3 4 5  (yahi kaam for/while aasani se karte hain) */
/* Example 3: nested loops se ek saath bahar nikalna โ€” goto ka sahi use */
#include <stdio.h>
int main() {
    int i, j;
    for (i = 1; i <= 3; i++) {
        for (j = 1; j <= 3; j++) {
            if (i * j == 6)
                goto done;        // dono loops se ek jump me bahar!
            printf("i=%d j=%d\n", i, j);
        }
    }
done:
    printf("Found 6, loops khatam\n");
    return 0;
}
/* Output: i=1 j=1, i=1 j=2, i=1 j=3, i=2 j=1, i=2 j=2 โ†’ Found 6 */
goto ke faydegoto ke nuksaan (exam me yahi likhna hai)
Ek jagah se doosri jagah turant jump โ€” simple haiSpaghetti code โ€” program ka flow bikhra hua, padhna mushkil
Nested loops/conditions se ek saath bahar nikalne me kaam aata haiStructured programming ke khilaaf โ€” C ka design flow control (if/loop) ke liye hai
Error handling me ek jagah par saare cleanup par jump (real projects me)Debugging mushkil โ€” code upar-neeche bhaagta rehta hai, trace karna painful
Assembly-level thinking ko C me utaarna aasanCompiler optimization aur reasoning me dikkat; "goto se bacho" best practice
Exam me ye answer likho: "goto ek unconditional jump hai jo label par le jaata hai. Ye simple hai par structured programming ke khilaaf hai โ€” code ka flow bikhra (spaghetti) ho jaata hai aur debugging mushkil hoti hai. Isliye normally break/continue/loops use karo; haan, nested loops se ek saath bahar nikalne jaisi rare situations me goto kaam aa jaata hai." โ€” concise practice answer; tailor it to the actual prompt โœ…

3.7 break & continue

break = loop (ya switch) se poora bahar nikal jaana โ€” loop khatam. continue = sirf current iteration skip karna โ€” baaki loop aage chalta rehta hai. Dono jump statements hain aur aam taur par if ke saath likhe jaate hain (jab particular condition bane).
Basisbreakcontinue
KaamLoop ko turant khatam kar deta haiCurrent round skip karke next round par jaata hai
Loop ka statusLoop poora band (bahar aa gaye)Loop chal raha hai โ€” sirf ek chakkar chhoda
Baad wale iterationsKabhi nahi chalteChalte rehte hain
Kahan useSwitch ke cases, "mil gaya to ruk jao" (search)"Ye value skip karo, baaki dekho" (even numbers skip, negative skip)
Kaam ka examplePrime check me divisor mil gaya โ†’ breakString me vowels chhodkar consonants count karo
/* break vs continue โ€” ek hi program me dono */
#include <stdio.h>
int main() {
    int i;
    printf("break demo (5 par ruk jayega): ");
    for (i = 1; i <= 10; i++) {
        if (i == 5)
            break;            // poora loop khatam
        printf("%d ", i);
    }
    printf("\n");

    printf("continue demo (5 skip hoga): ");
    for (i = 1; i <= 10; i++) {
        if (i == 5)
            continue;         // sirf ye round chhoda
        printf("%d ", i);
    }
    printf("\n");
    return 0;
}
/* Output:
   break demo (5 par ruk jayega): 1 2 3 4
   continue demo (5 skip hoga): 1 2 3 4 6 7 8 9 10 */
/* break ka real use: prime check โ€” divisor mila to ruk jao */
#include <stdio.h>
int main() {
    int n, i, flag = 1;
    scanf("%d", &n);
    for (i = 2; i <= n / 2; i++) {
        if (n % i == 0) {
            flag = 0;
            break;        // ek divisor mil gaya, aage check ki zarurat nahi
        }
    }
    printf("%d is %s\n", n, (flag && n > 1) ? "Prime" : "Not Prime");
    return 0;
}
/* 17 โ†’ Prime (poora loop chala) | 21 โ†’ Not Prime (3 par break) */

/* continue ka real use: sirf positive numbers ka average */
#include <stdio.h>
int main() {
    int n, i, x, sum = 0, count = 0;
    scanf("%d", &n);
    for (i = 1; i <= n; i++) {
        scanf("%d", &x);
        if (x <= 0)
            continue;        // negative/zero skip
        sum += x;
        count++;
    }
    printf("Average of positives = %.2f\n", (float)sum / count);
    return 0;
}
โš ๏ธ while me continue ka jhatka: while loop me agar continue se pehle i++ nahi likha, to i kabhi badhega hi nahi โ†’ infinite loop! Isliye while me update continue se pehle likho, ya for loop use karo (jahan update khud ho jaata hai). This makes a useful output-tracing and debugging exercise. ๐Ÿ”

3.8 Looping Statements โ€” Entry vs Exit Controlled High-yield syllabus topic

Loop (iteration): Ek ya zyada statements ko baar-baar chalana jab tak condition true rahe. C me 3 loops hain: for aur while (entry-controlled โ€” condition pehle check hoti hai, 0 baar bhi chal sakte hain) aur do-while (exit-controlled โ€” body pehle chalti hai, kam se kam 1 baar pakka).
LoopTypeSyntaxKab use (rule of thumb)
forEntry-controlledfor (init; cond; update)Jab kitni baar chalega wo pata ho (1 se 10 tak table)
whileEntry-controlledwhile (cond) { body }Jab count nahi pata, condition se pata chalega (jab tak password galat)
do-whileExit-controlleddo { body } while (cond);Jab pehli baar to karna hi hai (menu dikhao, PIN maango)

for loop

for (initialization ; condition ; update)
{
    body;
}
/* Step by step: 1) init ek baar  2) condition check  3) body
                 4) update  5) wapas condition... jab tak condition false */

/* for loop ki 4 shakalein (exam me trick questions isi par) */
for (i = 1; i <= 5; i++)        // normal โ€” 1 2 3 4 5
for (i = 5; i >= 1; i--)        // ulta โ€” 5 4 3 2 1
for (i = 0; i <= 10; i += 2)    // step 2 ka โ€” 0 2 4 6 8 10
for ( ; ; )                     // infinite loop (teeno khaali) โš ๏ธ

/* Ek hi line me kai variables (comma operator) */
for (i = 1, j = 10; i < j; i++, j--)
    printf("%d %d\n", i, j);    // 1 10 / 2 9 / 3 8 / 4 7 / 5 6
/* Program: sum aur average โ€” classic for loop */
#include <stdio.h>
int main() {
    int n, i, x, sum = 0;
    float avg;
    printf("Kitne numbers? ");  scanf("%d", &n);

    for (i = 1; i <= n; i++) {
        printf("Number %d: ", i);
        scanf("%d", &x);
        sum += x;
    }
    avg = (float) sum / n;
    printf("Sum = %d, Average = %.2f\n", sum, avg);
    return 0;
}
/* n=4, inputs 10 20 30 40 โ†’ Sum = 100, Average = 25.00 */

/* Program: multiplication table (kitni baar pata hai โ€” for best) */
#include <stdio.h>
int main() {
    int n, i;
    printf("Table of: ");  scanf("%d", &n);
    for (i = 1; i <= 10; i++)
        printf("%d x %d = %d\n", n, i, n * i);
    return 0;
}
/* n=7 โ†’ 7 x 1 = 7 ... 7 x 10 = 70 */

while loop (entry-controlled โ€” 0 baar bhi chal sakta hai)

initialization;
while (condition)
{
    body;
    update;        // โš ๏ธ ise bhoolna = infinite loop!
}

/* Program: sum of digits โ€” while ka classic (n % 10, n / 10 trick) */
#include <stdio.h>
int main() {
    int n, sum = 0, r;
    printf("Enter number: ");  scanf("%d", &n);
    while (n != 0) {
        r = n % 10;        // last digit nikalo
        sum = sum + r;
        n = n / 10;        // last digit hatao
    }
    printf("Sum of digits = %d\n", sum);
    return 0;
}
/* 4821 โ†’ 4+8+2+1 = 15  |  Jab tak number ke digits hain, loop chalta hai */

while ka trace (dry run โ€” exam me likhna): n = 4821 โ†’ (r=1, sum=1, n=482) โ†’ (r=2, sum=3, n=48) โ†’ (r=8, sum=11, n=4) โ†’ (r=4, sum=15, n=0) โ†’ loop khatam. Aise table banake dikhana = examiner khush ๐Ÿ˜Š

do-while loop (exit-controlled โ€” kam se kam 1 baar)

do
{
    body;
    update;
} while (condition);      // โ— semicolon lagana mat bhoolna!

/* Program 1: 1 se 5 print */
#include <stdio.h>
int main() {
    int i = 1;
    do {
        printf("%d ", i);
        i++;
    } while (i <= 5);      // 1 2 3 4 5
    return 0;
}

/* Program 2: menu โ€” jab tak user exit na chune (asli use case) */
#include <stdio.h>
int main() {
    int choice;
    do {
        printf("\n1. Say Hello\n2. Say Bye\n3. Exit\nChoice: ");
        scanf("%d", &choice);
        if (choice == 1) printf("Hello BCA! ๐Ÿ‘‹\n");
        else if (choice == 2) printf("Bye! ๐Ÿ‘‹\n");
    } while (choice != 3);      // exit chune bina menu dikhta rahega
    printf("Program khatam\n");
    return 0;
}
Basisforwhiledo-while
TypeEntry-controlledEntry-controlledExit-controlled
Condition kab checkHar iteration se pehleHar iteration se pehleHar iteration ke baad
Kam se kam kitni baar001
Init/update kahanEk hi line me (init; cond; update)Bahar init, andar updateBahar init, andar update
SemicolonHeader ke andar hi nahiNahiwhile(cond); โ€” lagta hai
Best kahanCount pata ho (table, 1-100, array)Condition se pata chale (digits, jab tak)Pehli baar kaam zaroori (menu, PIN, quiz)
Output-tracing exercise:

   int i = 10;
   while (i < 5)  { printf("A"); i++; }     // 0 baar โ€” kuch print nahi
   do { printf("B"); i++; } while (i < 5);  // 1 baar โ€” "B" print hua

   Isliye: do-while "pehle kaam, phir sawaal" ๐Ÿ’ก

Nested loops (loop ke andar loop) โ€” pattern aur table ka raja

/* Program 1: Table 1-5 (outer loop ร— inner loop) */
for (i = 1; i <= 5; i++) {          // outer = kitni tables
    for (j = 1; j <= 10; j++) {     // inner = 1 se 10 tak
        printf("%d x %d = %d\n", i, j, i * j);
    }
    printf("\n");                    // har table ke baad khali line
}

/* Program 2: Star patterns (lab me sabse zyada poochha jaata hai) */
// (a) Right triangle            // (b) Ulta triangle
for (i = 1; i <= 4; i++) {        for (i = 4; i >= 1; i--) {
    for (j = 1; j <= i; j++)          for (j = 1; j <= i; j++)
        printf("* ");                     printf("* ");
    printf("\n");                      printf("\n");
}                                 }
/* Output (a):                     Output (b):
   *                                * * * *
   * *                              * * *
   * * *                            * *
   * * * *                          *            */

// (c) Pyramid (spaces + stars) โ€” thoda advanced
for (i = 1; i <= 4; i++) {
    for (j = 1; j <= 4 - i; j++) printf(" ");    // spaces
    for (j = 1; j <= 2 * i - 1; j++) printf("*"); // stars (1,3,5,7)
    printf("\n");
}
/* Output (c):
      *
     ***
    *****
   *******  */

/* Program 3: Number pattern */
for (i = 1; i <= 4; i++) {
    for (j = 1; j <= i; j++)
        printf("%d ", j);      // 1 / 1 2 / 1 2 3 / 1 2 3 4
    printf("\n");
}
Infinite loop se bacho โ€” 3 kaaran: (1) condition kabhi false hi na ho (i <= 5 ki jagah i >= 5 likh diya), (2) update statement (i++) bhoolna, (3) galat jagah semicolon โ€” while (i <= 5); โ€” loop body khaali ho jaati hai aur condition kabhi badalti nahi! Agar program "hang" ho gaya to Ctrl+C se rok dena. These are three common causes of infinite loops; practise identifying each in code. โฑ๏ธ
Dry-run practice (trace table banao โ€” exam me isi se marks milte hain): Neeche wala loop chalao aur values likho:
int s = 0, i = 1; while (i <= 4) { s += i * i; i++; }
| Iteration | i | i*i | s |
| 1 | 1 | 1 | 1 |
| 2 | 2 | 4 | 5 |
| 3 | 3 | 9 | 14 |
| 4 | 4 | 16 | 30 |
โ†’ s = 30 (i = 5 par condition false). Aisa trace har loop ke liye banao โ€” 90% students ise skip karte hain aur silly mistakes karte hain. ๐Ÿงฎ

3.9 Complete Practice Programs (ye likh-mar do, exam me direct aate hain)

/* P1 โ€” Largest of two numbers (if-else) */
#include <stdio.h>
int main() {
    int a, b;
    printf("Enter two numbers: ");
    scanf("%d %d", &a, &b);
    if (a > b)
        printf("%d is largest\n", a);
    else
        printf("%d is largest\n", b);
    return 0;
}
/* Input: 15 42 โ†’ Output: 42 is largest */

/* P2 โ€” Reverse of a number (while loop + % aur /) */
#include <stdio.h>
int main() {
    int n, rev = 0, r;
    printf("Enter number: ");
    scanf("%d", &n);
    while (n != 0) {
        r = n % 10;            // last digit nikala
        rev = rev * 10 + r;    // reverse me joda
        n = n / 10;            // last digit hata diya
    }
    printf("Reverse = %d\n", rev);
    return 0;
}
/* Trace: n=1234 โ†’ r=4 rev=4 n=123 โ†’ r=3 rev=43 n=12 โ†’ r=2 rev=432 n=1 โ†’ r=1 rev=4321 n=0
   Input: 1234 โ†’ Output: Reverse = 4321 */

/* P3 โ€” Sum of first n natural numbers (formula bhi batao: n(n+1)/2) */
#include <stdio.h>
int main() {
    int n, i, sum = 0;
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
        sum += i;
    printf("Sum = %d\n", sum);
    return 0;
}
/* Input: 10 โ†’ Sum = 55  (formula: 10 ร— 11 / 2 = 55 โœ”) */

/* P4 โ€” Factorial (bada number โ€” long long use karo) */
#include <stdio.h>
int main() {
    int n, i; long long f = 1;
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
        f = f * i;
    printf("Factorial = %lld\n", f);
    return 0;
}
/* 5 โ†’ 120 | 10 โ†’ 3628800 | 20 โ†’ 2432902008176640000 (2-byte int me overflow!) */

/* P5 โ€” Fibonacci series (0 1 1 2 3 5 8 13 ...) */
#include <stdio.h>
int main() {
    int n, i, a = 0, b = 1, c;
    scanf("%d", &n);
    printf("%d %d ", a, b);
    for (i = 3; i <= n; i++) {
        c = a + b;         // agla number = pichle do ka sum
        printf("%d ", c);
        a = b; b = c;      // dono ko ek kadam aage khiskao
    }
    return 0;
}
/* n = 8 โ†’ 0 1 1 2 3 5 8 13 */

/* P6 โ€” Armstrong number (153 = 1ยณ + 5ยณ + 3ยณ) */
#include <stdio.h>
int main() {
    int n, temp, r, sum = 0;
    scanf("%d", &n);
    temp = n;
    while (temp != 0) {
        r = temp % 10;
        sum += r * r * r;
        temp /= 10;
    }
    if (sum == n) printf("Armstrong\n");
    else          printf("Not Armstrong\n");
    return 0;
}
/* 153 โ†’ Armstrong โœ” | 370 โœ” | 371 โœ” | 123 โœ˜ */

/* P7 โ€” Prime check */
#include <stdio.h>
int main() {
    int n, i, flag = 1;
    scanf("%d", &n);
    for (i = 2; i <= n / 2; i++) {
        if (n % i == 0) { flag = 0; break; }
    }
    if (flag && n > 1) printf("Prime\n");
    else               printf("Not Prime\n");
    return 0;
}
/* 2 โœ” 13 โœ” 1 โœ˜ (1 prime nahi) 15 โœ˜ */

/* P8 โ€” Palindrome number (121 ulta bhi 121) */
#include <stdio.h>
int main() {
    int n, temp, rev = 0, r;
    scanf("%d", &n);
    temp = n;
    while (temp != 0) {
        r = temp % 10;
        rev = rev * 10 + r;
        temp /= 10;
    }
    if (rev == n) printf("Palindrome\n");
    else          printf("Not Palindrome\n");
    return 0;
}
/* 121 โ†’ Palindrome | 1234 โ†’ Not Palindrome (reverse nikalo, phir compare!) */

/* P9 โ€” Perfect number check (6 = 1+2+3) */
#include <stdio.h>
int main() {
    int n, i, sum = 0;
    scanf("%d", &n);
    for (i = 1; i < n; i++) {
        if (n % i == 0) sum += i;    // proper divisors ka sum
    }
    if (sum == n) printf("Perfect number\n");
    else          printf("Not Perfect\n");
    return 0;
}
/* 6 โœ” (1+2+3) | 28 โœ” (1+2+4+7+14) | 12 โœ˜ */

/* P10 โ€” HCF aur LCM (bade number ke liye long long) */
#include <stdio.h>
int main() {
    int a, b, x, y, hcf, lcm;
    scanf("%d %d", &a, &b);
    x = a; y = b;
    while (x != y) {                 // GCD (HCF) โ€” dono ko barabar karne wala loop
        if (x > y) x = x - y;
        else       y = y - x;
    }
    hcf = x;
    lcm = (a * b) / hcf;             // formula: LCM = (a ร— b) / HCF
    printf("HCF = %d, LCM = %d\n", hcf, lcm);
    return 0;
}
/* 12 18 โ†’ HCF = 6, LCM = 36 | 7 5 โ†’ HCF = 1, LCM = 35 (co-prime) */

/* P11 โ€” Table aur pattern wale programs upar ยง3.8 me hain โ€” unhe bhi likh lo */
/* P12 โ€” Count digits (kitne aankde) */
#include <stdio.h>
int main() {
    long n; int count = 0;
    scanf("%ld", &n);
    do {
        count++;          // do-while ka perfect use (0 me bhi 1 digit)
        n = n / 10;
    } while (n != 0);
    printf("Digits = %d\n", count);
    return 0;
}
/* 4821 โ†’ 4 | 0 โ†’ 1 (isliye do-while, warna 0 ke liye 0 aata) */
Pattern yaad rakho (jo lab me kaam aayega): (1) Reverse / Sum of digits = % 10 se last digit, / 10 se hatao โ€” same engine, sirf formula badal jata hai (reverse me rev*10+r, sum me sum+r). (2) Table / pattern = nested loop (outer = lines, inner = stars/numbers). (3) Prime / Factorial / Perfect = ek loop + condition. (4) Armstrong / Palindrome = digits ka loop, phir original se compare. (5) HCF/LCM = subtraction wala loop ya Euclid ka a % b. Ye 5 patterns samajh gaye to poora lab ready โœ…
Unit 3 extra practice (answers neeche):
  1. Sum of even numbers 1 se 50 tak (for loop).
  2. 1 se 100 tak ke prime numbers print karo (nested loop).
  3. Ek number ka reverse nikaalo aur check karo ki wo palindrome hai โ€” ek hi program me.
  4. Sum of digits = 15 aane wale 3-digit numbers ka counter likho (hint: while + % 10).
  5. for (i = 0; i < 5; i++); printf("*"); โ€” kitne stars print honge? (dhyaan se!)
  6. int i = 0; while (i < 3) { if (i == 1) continue; printf("%d", i); i++; } โ€” output?
  7. Star pattern print karo: 1 star, 2 stars, 3 starsโ€ฆ 5 lines (nested loop).
  8. Fibonacci series ke pehle 10 terms ka sum nikaalo.
Answers: 1) loop i=2; i<=50; i+=2 ya if (i%2==0), sum = 650 โ€ข 2) outer 2 se 100, inner 2 se n/2, flag check โ€ข 3) reverse nikaal ke rev == n compare (P2 + P8 ka fusion) โ€ข 4) while loop me sum == 15 par count++ โ€ข 5) 1 star โ€” kyunki ; ne for ko khatam kar diya, print loop ke bahar hai! โ€ข 6) Infinite loop (i=1 par continue, i++ tak pahunchta hi nahi) โ€” Ctrl+C โš ๏ธ โ€ข 7) ยง3.8 wala star pattern โ€ข 8) 0+1+1+2+3+5+8+13+21+34 = 88.

โšก Unit 3 โ€” Rapid Revision

Syllabus-based exam-style practice questions (not predictions) โ€” Unit 3:
  1. Control structures kya hain? Types explain karo. (5)
  2. if-else vs switch โ€” differences + example program. (10)
  3. Write a program: largest of three numbers. (5 โ€” practical)
  4. Entry controlled vs exit controlled loops difference with examples. (5)
  5. Difference between while and do-while with example. (5)
  6. for, while, do-while โ€” teeno ka syntax, comparison table. (10)
  7. break aur continue ka difference, example ke saath. (5)
  8. Nested loop se star pattern print karo. (5โ€“10)
  9. goto statement kya hai? Iske nuksaan likho. (5)
  10. Programs: reverse of number, sum of digits, factorial, prime, Fibonacci, Armstrong, palindrome, HCF/LCM. (10 โ€” practical)
  11. Infinite loop kya hai? Kitne kaaran ho sakte hain? (3โ€“5)
Model answer โ€” "while vs do-while" (5 marks): Definition (dono loops, farak condition check ke time me) โ†’ table (condition pehle/baad, minimum iterations 0 vs 1, syntax me semicolon) โ†’ do chhote programs ya ek hi input 10 par: while โ†’ kuch print nahi, do-while โ†’ ek baar "B" print โ†’ closing: "isliye menu/PIN jaise kaam ke liye do-while, aur digits jaise condition-driven kaam ke liye while." โœ…

UNIT 4 โ€” Arrays and Strings

4.1 Array โ€” Introduction

An array is a collection of a fixed number of elements of the same data type, stored in contiguous (continuous) memory locations and accessed using a common name with an index. C me index 0 se shuru hota hai โ€” pehla element a[0], aakhri a[n-1].
Hinglish: Array = ek hi type ki cheezon ki "trey" ๐Ÿฝ๏ธ โ€” jaise ek thali me rakhi 10 rotis, ya ek row me baithhe 60 students. Naam sirf ek (marks), par har element ka apna number/index (marks[0], marks[1], โ€ฆ). Bina array ke 60 students ke liye 60 variables banane padte ๐Ÿ˜ฑ โ€” array ne zindagi aasan kar di.

Array ki zarurat kyun padi? (motivation โ€” exam me pehla point)

Bina array (variables)Array ke saath
int m1, m2, m3, โ€ฆ, m60; โ€” 60 declarations ๐Ÿ˜ฉint m[60]; โ€” ek declaration โœ…
Loop nahi chala sakte (har naam alag hai)Ek loop se saare 60 elements pakdo โ€” for (i=0;i<60;i++)
Sum/average/largest nikalne ke liye 60 lines5โ€“6 lines me kaam khatam
Naya student add karna = poora code badalnaSirf size badlo (ya #define MAX 60)

Array ki characteristics (5 points โ€” ratt lo)

  1. Same type: sab elements ka data type ek hi (int array me sirf ints, float me floats). Mix nahi kar sakte.
  2. Contiguous memory: elements RAM me lagataar (ek ke baad ek) rakhte hain โ€” isliye address formula kaam karta hai.
  3. Fixed size: size declare karte waqt batana padta hai; program chalte waqt badha nahi sakte.
  4. Index 0 se: pehla element index 0, last index = size โˆ’ 1. Size 5 โ†’ valid indexes 0,1,2,3,4.
  5. Ek naam, kai values: array ka naam base address ko represent karta hai (array ka naam hi pehle element ka pointer hai โ€” Unit 5 me detail me).

Array ke advantages & disadvantages

Advantages โœ”๏ธDisadvantages โŒ
Ek naam se bahut saare values โ€” code chhotaSize fix โ€” program chalte waqt badha nahi sakte
Index se direct access โ€” O(1) fastest (random access)Insert/delete beech me costly (baaki elements shift karne padte hain)
Loops ke saath sorting/searching aasanSirf same type ka data (int + char mix nahi)
Memory me continuous โ€” cache friendly (fast)Bounds check nahi hota โ€” galat index = garbage/crash
2D/multi-D bana kar table/matrix easily handleZarurat se zyada (ya kam) memory ka risk โ€” size pehle guess karna padta hai

Array ke types

TypeDeclarationKahan use
One-dimensional (1D)int a[10];Marks list, prices, simple list
Two-dimensional (2D)int m[3][4];Matrix, timetable, seats, marksheet
Multi-dimensional (3D+)int t[2][3][4];Rare โ€” 3D graphics, scientific data
Character array (string)char name[20];Text โ€” Unit 4 ke aage (ยง4.4)
Real life: Class ke 60 students ke marks = array. Cricket team ke 11 players ka score = array. WhatsApp chat ke messages = array (list). Excel ka column = array. Image = 2D array of pixels. DSA me stack, queue, heap, hashing, sorting โ€” sab arrays se bante hain. Ye C ka pehla "data structure" hai, aur poori DSA isi ki neev par khadi hai.

4.2 One-Dimensional Array

1D array = ek single line/row me values. Sabse simple aur sabse zyada use hone wala array. Iske 3 kaam yaad rakho: declare karo, initialize karo, loop se access karo.
/* 1) DECLARATION (kitne elements chahiye) */
int marks[60];          // 60 ints (index 0..59)
float price[5];
char grade[10];

/* 2) INITIALIZATION โ€” 4 tarike */
int a[5] = {10, 20, 30, 40, 50};   // poora
int b[5] = {10, 20};               // baaki 3 automatically 0
int c[]  = {5, 10, 15};            // size compiler count karega (3)
int d[5] = {0};                    // saare 5 elements 0 (reset ka trick!)

/* 3) ACCESS (index 0 se shuru!) */
a[0] = 10;              // pehla element
a[4] = 50;              // 5th (aakhri) element
a[5] = 99;              // โŒ OUT OF BOUNDS โ€” undefined behaviour (garbage/crash!)

/* 4) LOOP se input + output (classic pattern) */
for (i = 0; i < 5; i++)
    scanf("%d", &marks[i]);
for (i = 0; i < 5; i++)
    printf("%d ", marks[i]);
Bounds ka dhyaan: C arrays par koi bounds checking nahi karta (Python/Java me error aata hai, C me nahi!). int a[5] me a[5] ya a[-1] likhne par compiler kuch nahi kahega, par program garbage value dega ya crash โ€” is bug ko pakadna bahut mushkil hota hai. Isliye loop hamesha i < n par roko (kabhi i <= n nahi!). Ye "off-by-one error" exam me hi nahi, real jobs me bhi famous galti hai. โš ๏ธ

Memory Representation (exam me poochhte hain โ€” address calculation)

int a[5] = {10, 20, 30, 40, 50};   (assume int = 4 bytes, base address 1000)

Index    :  a[0]   a[1]   a[2]   a[3]   a[4]
Value    :   10     20     30     40     50
Address  :  1000   1004   1008   1012   1016
             โ†‘ Base address (a == &a[0])

FORMULA:  Address of a[i] = Base_Address + (i ร— size_of_one_element)

Verification:
  a[0] โ†’ 1000 + (0 ร— 4) = 1000 โœ”
  a[3] โ†’ 1000 + (3 ร— 4) = 1012 โœ”
  a[4] โ†’ 1000 + (4 ร— 4) = 1016 โœ” (aakhri element)

Exam question: "int a[10]; base address 2000 hai, a[6] ka address kya hoga?"
Answer: 2000 + (6 ร— 4) = 2024.

Aur ye formula hi ARRAY KA SABSE BADA PLUS hai โ€” O(1) random access:
1000th element bhi utni hi speed se milta hai jitni 1st (formula se seedha address).
Real life analogy: Library me ek shelf pe saari kitaabein serial-wise lagao (array) vs alag-alag kamron me rakho (linked list). Shelf me "7th kitaab" ka address formula se turant pata (base + 6 ร— size), par beech me nayi kitaab daalni ho to saari khiskaani padegi โ€” bilkul array ke insert/delete ki tarah ๐Ÿ“š

1D array ke programs (lab me sabse zyada aate hain) โ€” output ke saath

/* Program 1: Sum, average, largest, smallest โ€” ek hi loop me sab */
#include <stdio.h>
int main() {
    int a[50], n, i, sum = 0, max, min;
    float avg;
    printf("Kitne elements? ");  scanf("%d", &n);
    for (i = 0; i < n; i++) {
        printf("a[%d] = ", i);
        scanf("%d", &a[i]);
    }
    max = min = a[0];             // pehle element se maan lo
    for (i = 0; i < n; i++) {
        sum += a[i];
        if (a[i] > max) max = a[i];
        if (a[i] < min) min = a[i];
    }
    avg = (float) sum / n;
    printf("Sum = %d\nAverage = %.2f\nLargest = %d\nSmallest = %d\n", sum, avg, max, min);
    return 0;
}
/* n=5, inputs 45 12 78 3 90 โ†’
   Sum = 228 | Average = 45.60 | Largest = 90 | Smallest = 3 */

/* Program 2: Array ko reverse print karo (majbooti: loop ulta chalao) */
for (i = n - 1; i >= 0; i--)
    printf("%d ", a[i]);
/* 10 20 30 40 50 โ†’ 50 40 30 20 10 */

/* Program 3: Linear search โ€” element dhundho, position batao */
#include <stdio.h>
int main() {
    int a[20] = {10, 25, 30, 45, 60}, n = 5, key, i, pos = -1;
    printf("Kya dhundhna hai? ");  scanf("%d", &key);
    for (i = 0; i < n; i++) {
        if (a[i] == key) { pos = i; break; }
    }
    if (pos == -1) printf("Not found โŒ\n");
    else printf("%d index %d par mila โœ”\n", key, pos);
    return 0;
}
/* key = 30 โ†’ 30 index 2 par mila | key = 99 โ†’ Not found */

/* Program 4: Count even/odd */
int e = 0, o = 0;
for (i = 0; i < n; i++)
    (a[i] % 2 == 0) ? e++ : o++;
printf("Even = %d, Odd = %d\n", e, o);

/* Program 5: Do arrays ko add karke teesre me daalo (c[i] = a[i] + b[i]) */
for (i = 0; i < n; i++)
    c[i] = a[i] + b[i];

/* Program 6: char array me vowels count (string ka pehla jhalak) */
char s[50]; int v = 0;
scanf("%s", s);                  // & nahi lagta (array khud address hai)
for (i = 0; s[i] != '\0'; i++)
    if (s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u') v++;
printf("Vowels = %d\n", v);

size nikalne ka trick: int n = sizeof(a) / sizeof(a[0]); โ€” poore array ka size รท ek element ka size = elements ki count. Ye tab kaam aata hai jab array initialized ho aur size na likhi ho (jaise function me bhejne par). Exam me bhi poochhte hain: sizeof(a)/sizeof(a[0]) ka matlab.

4.3 Two-Dimensional Array (matrix / table)

A 2D array is a collection of elements arranged in rows and columns (table/matrix). Declaration: type name[rows][columns]; โ€” pehla index row, doosra column. int m[3][4] = 3 rows, 4 columns = 12 elements. Input/output ke liye nested loops chahiye (bahar row, andar column).
/* Declaration aur initialization ke 3 tarike */
int a[3][4];                                  // khaali (garbage/0)
int m[2][3] = { {1, 2, 3},                    // nested braces (clear)
                {4, 5, 6} };
int m2[2][3] = {1, 2, 3, 4, 5, 6};            // flat โ€” same cheez (row-by-row)
int m3[2][3] = { {1, 2}, {4} };               // baaki cells 0 ho jaati hain

/* Access: m[row][column] โ€” dono index 0 se */
m[0][0] = 1;      // pehli row, pehla column
m[1][2] = 6;      // doosri row, teesra column (aakhri element)

/* Input / Output โ€” nested loops (billing loops zaroori!) */
for (i = 0; i < rows; i++) {          // outer = row
    for (j = 0; j < cols; j++) {      // inner = column
        scanf("%d", &m[i][j]);
    }
}
for (i = 0; i < rows; i++) {
    for (j = 0; j < cols; j++) {
        printf("%4d", m[i][j]);       // row me print โ€” %4d se alignment
    }
    printf("\n");                      // har row ke baad newline
}

2D array ki memory representation (Row-Major Order) โ€” important practice topic

int m[2][3] = { {1,2,3}, {4,5,6} };   (int = 4 bytes, base = 2000)

C memory me 2D array ko LINEAR (ek seedhi line me) rakhta hai โ€” ROW by ROW:

  [1]   [2]   [3]   [4]   [5]   [6]
  2000  2004  2008  2012  2016  2020
  โ†โ”€โ”€ row 0 โ”€โ”€โ†’     โ†โ”€โ”€ row 1 โ”€โ”€โ†’

ADDRESS FORMULA:  addr(m[i][j]) = Base + ( (i ร— number_of_columns) + j ) ร— size

Verification:
  m[0][2] โ†’ 2000 + ((0ร—3) + 2) ร— 4 = 2000 + 8  = 2008 โœ” (row 0 ka teesra)
  m[1][0] โ†’ 2000 + ((1ร—3) + 0) ร— 4 = 2000 + 12 = 2012 โœ” (row 1 ka pehla)
  m[1][2] โ†’ 2000 + ((1ร—3) + 2) ร— 4 = 2000 + 20 = 2020 โœ” (aakhri element)

โš ๏ธ C me ROW-MAJOR order hota hai (pehle row bhar jati hai).
   COLUMN-MAJOR order (FORTRAN) me pehle column bhar jata hai โ€” MCQ me aata hai!

2D array ke common programs

/* Program 1: Matrix ka addition โ€” C[i][j] = A[i][j] + B[i][j] */
#include <stdio.h>
int main() {
    int A[2][2], B[2][2], C[2][2], i, j;
    printf("Matrix A ke 4 elements: ");
    for (i = 0; i < 2; i++) for (j = 0; j < 2; j++) scanf("%d", &A[i][j]);
    printf("Matrix B ke 4 elements: ");
    for (i = 0; i < 2; i++) for (j = 0; j < 2; j++) scanf("%d", &B[i][j]);

    for (i = 0; i < 2; i++)
        for (j = 0; j < 2; j++)
            C[i][j] = A[i][j] + B[i][j];

    printf("Sum matrix:\n");
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 2; j++) printf("%4d", C[i][j]);
        printf("\n");
    }
    return 0;
}
/* A = [1 2; 3 4], B = [5 6; 7 8] โ†’ Sum = [ 6  8; 10 12] */

/* Program 2: Matrix MULTIPLICATION (Lab #7) โ€” 3 nested loops, yaad kar lo */
#include <stdio.h>
int main() {
    int A[2][2] = { {1, 2}, {3, 4} };
    int B[2][2] = { {5, 6}, {7, 8} };
    int C[2][2], i, j, k;

    for (i = 0; i < 2; i++) {
        for (j = 0; j < 2; j++) {
            C[i][j] = 0;                       // accumulator reset
            for (k = 0; k < 2; k++) {
                C[i][j] += A[i][k] * B[k][j];  // row ร— column ka dot product
            }
        }
    }
    printf("Product:\n");
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 2; j++) printf("%4d", C[i][j]);
        printf("\n");
    }
    return 0;
}
/* Output: [19 22; 43 50]
   C[0][0] = 1ร—5 + 2ร—7 = 19     C[0][1] = 1ร—6 + 2ร—8 = 22
   C[1][0] = 3ร—5 + 4ร—7 = 43     C[1][1] = 3ร—6 + 4ร—8 = 50
   RULE: A (mร—n) ร— B (nร—p) = C (mร—p) โ€” beech wala n match hona zaroori!
   A[2][3] ร— B[3][2] = C[2][2] โœ”   A[2][3] ร— B[2][2] = โŒ invalid */

/* Program 3: Transpose โ€” rows โ†” columns (trans[j][i] = A[i][j]) */
for (i = 0; i < r; i++)
    for (j = 0; j < c; j++)
        trans[j][i] = A[i][j];
/* [1 2 3; 4 5 6] ka transpose = [1 4; 2 5; 3 6] */

/* Program 4: Diagonal sum (square matrix) + largest element */
int dsum = 0, big = A[0][0];
for (i = 0; i < n; i++)
    for (j = 0; j < n; j++) {
        if (i == j) dsum += A[i][j];     // main diagonal
        if (A[i][j] > big) big = A[i][j];
    }
printf("Diagonal sum = %d, Largest = %d\n", dsum, big);
Exam tip โ€” 3 loops wala question: Matrix multiplication ka code likhte waqt order likhna nahi bhoolo: i โ†’ j โ†’ k. Aur C[i][j] = 0; reset andar wale loop se pehle likhna hai, warna garbage judta rahega. Matrix ka 2D array hi hai isliye ye program "arrays" chapter ka sabse bada practical question hai โ€” lab #7 me bhi yahi hai. โœ…
Real life: 2D array = Excel sheet ๐Ÿ“Š (rows ร— columns), timetable (periods ร— days), cinema hall ki seats (row ร— seat number), image ka pixel grid (RGB channels), marksheet (student ร— subject), Sudoku/chess board, game ka map (tiles). Jab bhi data "table" ki tarah dikhe, samajh lo 2D array hai.

4.4 Strings in C

A string in C is a sequence of characters stored in a character array and terminated by a special character '\0' (null character). C me koi alag "string" data type nahi hai โ€” strings char arrays hi hote hain, bas aakhir me '\0' laga hota hai.
/* Declaration & initialization ke 3 tarike */
char name[20] = "Ansh";                     // compiler '\0' khud lagata hai
char city[5] = {'H','a','l','d','w'};      // bina '\0' โ€” risky!
char s[] = "BCA";                           // size = 4 (3 chars + '\0')

/* Memory me aise dikhta hai: */
Index  :  s[0]   s[1]   s[2]   s[3]
Value  :  'B'    'C'    'A'    '\0'
ASCII  :   66     67     65      0
                                โ†‘ string ka "full stop" ๐Ÿ›‘

/* Input / Output */
scanf("%s", name);          // & ki zarurat NAHI (array khud address hai)
                             // โš ๏ธ %s space par RUK jata hai โ€” "Ansh Kumar" me sirf "Ansh"
printf("%s\n", name);
fgets(name, 20, stdin);     // poora line (spaces ke saath) โ€” SAFE
gets(name);                 // poora line par INSECURE โ€” aaj use mat karo
puts(name);                 // print + automatic newline
Sabse zaroori concept โ€” '\0' string ka "full stop" hai ๐Ÿ›‘: Computer ko isi se pata chalta hai ki string kahan khatam hui. Isliye string ke liye size = characters + 1 chahiye ("BCA" ke liye 4). Agar '\0' nahi hai to printf("%s") array ke bahar padh sakta hai, jisse undefined behaviour hota hai. Example: char city[5] = {'H','a','l','d','w'}; mein koi null terminator nahi hai; ise C string ki tarah print mat karo. Iske opposite, char city[10] = {'H','a','l','d','w'}; mein baaki elements zero-initialise hote hain, so it is null-terminated. Isko char city[6] = "Haldw"; likho โ€” kaam ban jayega. โœ…
/* Program: string ki length khud nikaalo (strlen ke bina) โ€” concept clear karega */
#include <stdio.h>
int main() {
    char s[50];
    int i, len = 0;
    printf("Enter a word: ");
    scanf("%s", s);                 // & nahi!
    for (i = 0; s[i] != '\0'; i++)  // '\0' milte hi ruk jao
        len++;
    printf("Length = %d\n", len);
    return 0;
}
/* Input: Programming โ†’ Length = 11 */

/* Program: string ko character-by-character print + uppercase (tolower/toupper se) */
for (i = 0; s[i] != '\0'; i++)
    printf("%c-", s[i]);            // B-C-A-

/* Program: string me spaces ke saath input */
#include <stdio.h>
int main() {
    char line[100];
    printf("Enter your full name: ");
    fgets(line, 100, stdin);        // "Ansh Kumar" poora aayega
    printf("Hello, %s", line);
    return 0;
}
Yaad rakho: string = char array + '\0' โ€ข scanf("%s", s) me & nahi lagta (array ka naam hi address hai) โ€ข %s space par rukta hai, gets/fgets poora line leta hai โ€ข size = characters + 1 โ€ข '\0' ka ASCII code 0 hai โ€” isliye if (!s[i]) bhi "string khatam" test karta hai. These four points are useful for MCQ and code-reading practice; no question frequency is guaranteed. ๐ŸŽฏ

4.5 String Handling Functions (string.h) Lab #13

C library string.h me ready-made functions hain jo strings par kaam karte hain โ€” length nikalna, copy karna, jodna, compare karna. Inhe use karne ke liye program me #include <string.h> likhna zaroori hai. Ye internally pointers use karte hain (isliye Unit 5 ka connection).
FunctionKaamExampleResult
strlen(s)Length nikalta hai ('\0' se pehle tak ke characters)strlen("BCA")3
strcpy(dest, src)Source se destination me copystrcpy(a, "Hello")a = "Hello"
strncpy(dest, src, n)Sirf n characters copy (safe version)strncpy(a, "Hello", 3)a = "Hel"
strcat(d1, d2)d2 ko d1 ke aage jodna (d1 badalta hai)"Hello" + " ji""Hello ji"
strncat(d1, d2, n)Sirf n characters jodnastrncat(a, "BCA", 2)"โ€ฆBC"
strcmp(s1, s2)ASCII comparison: 0 = equal, +ve = s1 bada, โˆ’ve = s1 chhotastrcmp("apple","banana")negative (a < b)
strrev(s)String reverse (Turbo C me; standard C me nahi)"abc""cba"
strlwr(s) / strupr(s)Lower / Upper case me badalna (Turbo C)"AbC""abc" / "ABC"
strstr(s1, s2)s1 ke andar s2 (substring) dhundhnastrstr("BCA notes","notes")pointer to "notes"
strchr(s, ch)String me character ka pehla occurrencestrchr("Apple", 'p')pointer to "pple"
/* Lab #13 โ€” string.h ke saare functions ka demo (output ke saath) */
#include <stdio.h>
#include <string.h>
int main() {
    char a[30] = "BCA";
    char b[30] = "Students";
    char c[30];
    char d[30] = "apple", e[30] = "banana";

    printf("1. strlen(a) = %zu\n", strlen(a));        // 3
    printf("2. strlen(\"Hello\") = %zu\n", strlen("Hello")); // 5

    strcpy(c, a);
    printf("3. After strcpy, c = %s\n", c);          // BCA

    strcat(a, " ");
    strcat(a, b);
    printf("4. After strcat, a = %s\n", a);          // BCA Students

    printf("5. strcmp(d, e) = %d (negative โ†’ d chhota)\n", strcmp(d, e));
    printf("6. strcmp(\"abc\", \"abc\") = %d\n", strcmp("abc", "abc"));  // 0

    if (strcmp("abc", "abc") == 0)
        printf("7. Strings equal โœ”\n");
    return 0;
}
/* Output:
   1. strlen(a) = 3
   2. strlen("Hello") = 5
   3. After strcpy, c = BCA
   4. After strcat, a = BCA Students
   5. strcmp(d, e) = -1 (negative โ†’ d chhota)
   6. strcmp("abc", "abc") = 0
   7. Strings equal โœ” */
/* Program: palindrome check โ€” strrev se (Turbo C) / manual reverse se (standard) */
#include <stdio.h>
#include <string.h>
int main() {
    char s[50], t[50];
    int i, len, ok = 1;

    printf("Enter a word: ");
    scanf("%s", s);

    len = strlen(s);
    for (i = 0; i < len; i++)              // manual reverse copy
        t[i] = s[len - 1 - i];
    t[len] = '\0';                          // terminator lagana mat bhoolo!

    if (strcmp(s, t) == 0)
        printf("%s is a Palindrome โœ”\n", s);
    else
        printf("%s is not a Palindrome\n", s);
    return 0;
}
/* madam โ†’ Palindrome | level โ†’ Palindrome | BCA โ†’ Not Palindrome */

/* Program: do strings jodo โ€” strcat ke bina (logic clear hoga) */
int i = 0, j = 0;
while (s1[i] != '\0') i++;               // s1 ke end par jao
while (s2[j] != '\0') { s1[i] = s2[j]; i++; j++; }
s1[i] = '\0';                            // naya end
printf("Joined: %s\n", s1);
Trick โ€” S-C-L-C: Strlen (length), Cpy (strcpy), Link (strcat), Compare (strcmp) โ€” 4 sabse zaroori functions. Aur dhyaan rakho: strcmp ka result number hai, string nahi โ€” compare karne ke liye == 0 likhna hota hai. if (s1 == s2) C me galat hai (ye addresses compare karta hai, characters nahi!). Ye ek line interview me bhi poochhi jaati hai. โœ…

4.6 Character Handling Functions (ctype.h)

Standard C portability note: Use isdigit() from <ctype.h> to test decimal digits; isnumeric() is not a standard C function. toascii() is also non-standard/implementation-specific and ASCII is not the same as every execution character set. For portable case conversion/classification, use toupper, tolower, isalpha, isdigit, etc. Pass either EOF or a value converted to unsigned char to the ctype functions, e.g. toupper((unsigned char)ch), to avoid undefined behaviour for negative plain-char values.
ctype.h me character-level check aur convert karne wale functions hain โ€” jaise "ye letter hai ya digit?" ya "chhota se bada karo". Ye test karne wale (isalpha, isdigitโ€ฆ) true/false (nonzero/0) dete hain, aur badalne wale (toupper, tolower) naya character dete hain.
FunctionKaamExampleResult
isalpha(ch)Letter hai kya? (A-Z / a-z)isalpha('5')0 (false)
isdigit(ch)Digit hai kya? (0-9)isdigit('7')non-zero (true)
isalnum(ch)Letter ya digitisalnum('!')0
isspace(ch)Space / tab / newline hai?isspace(' ')true
isupper(ch)Capital letter hai?isupper('A')true
islower(ch)Small letter hai?islower('A')0
ispunct(ch)Punctuation mark (@, !, .)ispunct('@')true
toupper(ch)Small โ†’ Capital (badal ke deta hai)toupper('a')'A'
tolower(ch)Capital โ†’ smalltolower('B')'b'
toascii(ch)Character ka ASCII codetoascii('A')65
/* Program: ek string ka poora analysis โ€” letters, digits, spaces, special */
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main() {
    char s[100];
    int i, alpha = 0, digit = 0, space = 0, special = 0;

    printf("Enter a line: ");
    fgets(s, 100, stdin);

    for (i = 0; i < strlen(s); i++) {
        if (isalpha(s[i]))       alpha++;
        else if (isdigit(s[i]))  digit++;
        else if (isspace(s[i]))  space++;
        else                     special++;
    }
    printf("Letters = %d\nDigits = %d\nSpaces = %d\nSpecial = %d\n",
           alpha, digit, space, special);
    return 0;
}
/* Input: "BCA 2026 !" โ†’ Letters = 3, Digits = 4, Spaces = 2, Special = 2 */

/* Program: case toggle โ€” capital ko small, small ko capital (XOR trick ke saath) */
for (i = 0; s[i] != '\0'; i++) {
    if (isupper(s[i]))      s[i] = tolower(s[i]);
    else if (islower(s[i])) s[i] = toupper(s[i]);
}
printf("Toggled: %s\n", s);
/* "Bca Notes" โ†’ "bCA nOTES" */

/* Program: sirf digits wala validation (form ka mobile number check) */
int valid = 1;
for (i = 0; s[i] != '\0'; i++)
    if (!isdigit(s[i])) { valid = 0; break; }
printf(valid ? "Valid number โœ”\n" : "Invalid โŒ\n");
Real life: Form validation โ€” "Mobile number me sirf digits" (isdigit), "Name me sirf letters" (isalpha), "Password me capital + small dono" (isupper + islower), "Email me @ ke baad kuch ho" (strstr/strchr), "Extra spaces hatao" (isspace). Aapki har app me yahi functions peeche chal rahe hote hain ๐Ÿ“ฑ โ€” aur yahi is chapter ka practical connection hai.

4.7 Ek Poora String Program (lab #14 se related)

/* Program: vowels, consonants, words count + uppercase conversion โ€” sab ek saath */
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
    char str[200];
    int i, vowels = 0, cons = 0, words = 1, len;

    printf("Enter a sentence: ");
    fgets(str, 200, stdin);
    len = strlen(str);

    for (i = 0; i < len; i++) {
        char ch = tolower(str[i]);          // compare easy ho jayega

        if (isalpha(ch)) {
            if (ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u')
                vowels++;
            else
                cons++;
        }
        if (isspace(str[i]) && isalpha(str[i+1]))
            words++;                        // space ke baad letter = naya word
    }
    printf("Length = %d\nVowels = %d\nConsonants = %d\nWords = %d\n",
           len, vowels, cons, words);
    return 0;
}
/* Input: "Hello BCA Students" โ†’
   Length = 19 (newline ke saath), Vowels = 6, Consonants = 9, Words = 3 */

/* Program: naam ka pehla letter capital karo (Title Case โ€” naam formatting) */
int newWord = 1;
for (i = 0; str[i] != '\0'; i++) {
    if (isspace(str[i])) newWord = 1;
    else if (newWord) { str[i] = toupper(str[i]); newWord = 0; }
    else str[i] = tolower(str[i]);
}
printf("Formatted: %s", str);      // "ansh kumar gupta" โ†’ "Ansh Kumar Gupta"

/* Program: do strings compare karo โ€” strcmp ke bina (ASCII difference se) */
int i = 0, diff = 0;
while (s1[i] != '\0' && s2[i] != '\0' && s1[i] == s2[i])
    i++;
diff = s1[i] - s2[i];             // 0 = equal, +ve/โˆ’ve = bada/chhota
printf(diff == 0 ? "Equal\n" : "Not equal\n");
Interview/important practice topic โ€” "string reverse kaise karenge?" 3 tarike batao: (1) strrev(s) (Turbo C โ€” standard me nahi), (2) loop se do pointers/temporary variable (swap s[i] aur s[len-1-i]), (3) ek naya array me ulta copy karke strcmp. Aur "palindrome check" ke liye exactly yahi reverse + strcmp. Ye do questions strings chapter ke 90% practicals cover kar dete hain. โœ…

โšก Unit 4 โ€” Rapid Revision

Syllabus-based exam-style practice questions (not predictions) โ€” Unit 4:
  1. Array kya hai? 1D array ka declaration, initialization aur memory representation explain karo. (10)
  2. Array ke advantages aur disadvantages. (5)
  3. Address calculation: int a[5], base 1000 โ€” a[3] ka address? (5)
  4. 2D array kya hai? Row-major order me memory representation samjhao. (10)
  5. Program: sum/average/largest of array elements, linear search, reverse array. (5โ€“10 โ€” practical)
  6. Matrix multiplication ka program likho (3 loops explain karo). (10 โ€” Lab #7)
  7. String kya hai? '\0' ka kya role hai? (5)
  8. String handling functions (strlen, strcpy, strcat, strcmp) examples ke saath explain karo. (10)
  9. Program: reverse a string / count vowels / palindrome check. (5โ€“10)
  10. Character handling functions (toupper, isalpha, isdigit) kahan use hote hain? (5)
Model answer โ€” "String in C + role of '\0'" (5 marks): Definition (char array + '\0' terminator, koi alag data type nahi) โ†’ memory diagram (BCA\0 with index + ASCII) โ†’ role: "computer ko batata hai string kahan khatam hui; isliye size = characters + 1; '\0' ke bina printf aage ka garbage print karta hai (unterminated string)" โ†’ ek chhota example (strlen andar tak ginti karta hai) โ†’ closing line. โœ…

UNIT 5 โ€” Functions and Pointers in C

5.1 Functions โ€” Introduction

A function is a self-contained block of statements that performs a specific task and can be called (used) from anywhere in the program. Functions se program modular, reusable aur easy to debug ban jata hai โ€” bade program ko chhote-chhote kaamon me todne ka tool yahi hai.
Hinglish: Function = "kaam ka ek packet" ๐Ÿ“ฆ. Aapne ek baar "chai banane ka tarika" likh liya (function), ab jab bhi chai chahiye โ€” bas naam pukaro (call karo), poora tarika dobara likhne ki zarurat nahi. Isse code chhota, saaf aur reuse-worthy ban jata hai. Aur agar tarika badalna ho to bas ek jagah badlo โ€” sab jagah apply ho jaata hai โœ…

Function ka anatomy (5 hisse โ€” exam me diagram ke saath likhna)

   return_type  function_name ( parameter_list )
   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        int      calculateArea   (float radius)
   {
       float area = 3.14 * radius * radius;   // body (kaam)
       return area;                            // result wapas
   }
                    โ†‘
             function ko "call" karte waqt:
             area = calculateArea(7.5);   // 7.5 = argument
HissaMatlabExample
Return typeFunction kya wapas dega (int, float, char, ya void = kuch nahi)int, float, void
Function nameNaam jisse call karenge (identifier rules wahi โ€” letter/_ se shuru)calculateArea
Parameters (formal)Function ko di jaane wali values ke dabbe โ€” float radius(float radius, float height)
Body { }Actual kaam ke statementsarea = PI*r*r;
returnResult wapas bhejna + function khatam. Sirf ek value return ho sakti haireturn area;

Benefits of functions (6 points โ€” 5-mark question)

Real life: Zomato app me "delivery charge calculate karna", Paytm me "cashback lagana", WhatsApp me "message bhejna" โ€” ye ek baar likhe gaye functions hain jo har action pe call hote hain. Bina functions ke 1 lakh jagah same code likhna padta โ€” aur ek bug = 1 lakh jagah fix ๐Ÿ˜ฑ. Aur C me toh poori standard library hi functions ka collection hai (printf, scanf, strlen, sqrt...) โ€” main() khud bhi ek function hai jise OS call karta hai!

5.2 Types of Functions: Built-in vs User-defined

BasisBuilt-in (Library) FunctionsUser-defined Functions
Kaun banata haiC library ke developers (pehle se ready-made)Programmer khud (aap!)
Header fileInclude karni padti hai (#include <math.h>)Program ke andar hi likhi hoti hai
CodeSirf call karte hain โ€” andar ka code dikhta nahiDefinition likhni padti hai (body aapke saamne)
Udaharanprintf(), scanf() (stdio.h) โ€ข strlen(), strcpy() (string.h) โ€ข sqrt(), pow(), sin() (math.h) โ€ข toupper() (ctype.h) โ€ข abs() (stdlib.h)add(), area(), isPrime(), factorial(), calculateBill() โ€” jo aap likhte ho
Badal sakte?Nahi (read-only โ€” source library me hai)Haan โ€” jitna marzi badlo, apna code hai
FaydaTime bachta hai, tested code, standardApni zarurat ke hisaab se custom kaam
/* Useful library functions ki list (lab me kaam aayegi) */
stdio.h  โ†’ printf, scanf, gets, puts, fgets, fopen, fclose   // input-output, file
math.h   โ†’ sqrt, pow, fabs, ceil, floor, sin, cos, log       // maths
string.h โ†’ strlen, strcpy, strcat, strcmp, strstr, strchr   // strings
ctype.h  โ†’ isalpha, isdigit, isspace, toupper, tolower       // characters
stdlib.h โ†’ malloc, free, abs, atoi, rand, exit              // memory, conversion, random
time.h   โ†’ time, clock                                       // date/time

/* Program: math.h ke functions ka demo */
#include <stdio.h>
#include <math.h>
int main() {
    printf("sqrt(144) = %.1f\n", sqrt(144));     // 12.0
    printf("pow(2,10) = %.0f\n", pow(2, 10));    // 1024
    printf("fabs(-7.5) = %.1f\n", fabs(-7.5));   // 7.5
    printf("ceil(4.1) = %.1f\n", ceil(4.1));     // 5.0
    printf("floor(4.9) = %.1f\n", floor(4.9));   // 4.0
    return 0;
}
/* Compile karte waqt kuch compilers me '-lm' lagana padta hai: gcc prog.c -o prog -lm */
Exam tip: "Built-in vs user-defined function" ka answer table me likho aur 4-4 examples do. Bonus line (marks badhane wali): "C ka main() bhi ek function hai โ€” par wo user-defined hai jise OS khud call karta hai (program ka entry point)." ๐ŸŽฏ

5.3 Function Declaration, Definition aur Call (3 steps)

Har user-defined function ke 3 hisse hote hain: (1) Declaration / Prototype โ€” compiler ko pehle bata dena ki "aisa function aane wala hai" (return type, naam, parameters), (2) Definition โ€” function ka actual code, (3) Call โ€” function ko chalane wala statement (naam + arguments). Prototype main() se pehle likhna best practice hai โ€” warna C89 me warning/error aata hai.
/* Teeno steps ek program me โ€” LAB #9 type ka program */
#include <stdio.h>

/* 1. DECLARATION (prototype) โ€” semicolon ke saath */
int add(int a, int b);
float areaCircle(float r);
void greet();                       // void = kuch return nahi karega

int main() {
    int s;
    /* 3. CALL โ€” naam + arguments (actual parameters) */
    s = add(5, 3);
    printf("Sum = %d\n", s);                    // Sum = 8
    printf("Area = %.2f\n", areaCircle(7));     // Area = 153.94
    greet();                                    // Hello! (koi value nahi milti)
    return 0;
}

/* 2. DEFINITION โ€” yahan actual kaam (formal parameters) */
int add(int a, int b) {          // a, b = formal parameters
    return a + b;                // result wapas
}
float areaCircle(float r) {
    return 3.14159 * r * r;
}
void greet() {
    printf("Hello! ๐Ÿ‘‹\n");
    // return;  โ€” void me return value ke bina bhi likh sakte ho
}
TermMatlabExample
Formal parametersDefinition me likhe dabbe (values receive karte hain)int add(int a, int b) me a, b
Actual parameters / argumentsCall karte waqt bheji gayi valuesadd(5, 3) me 5, 3
returnValue wapas bhejna aur function turant khatam. Ek function se sirf ek valuereturn a + b;
void"Kuch nahi" โ€” kuch return nahi karta (par printf se output dikha sakta hai)void greet()
Return ki value ka useExpression ki tarah kahin bhi: printf("%d", add(2,3));x = add(1,2) * 2;
/* Program: function se table aur factorial โ€” do chhote functions */
#include <stdio.h>
void table(int n);            // prototype (void โ€” kuch return nahi)
int factorial(int n);         // prototype (int return karega)

int main() {
    table(5);
    printf("5! = %d\n", factorial(5));
    return 0;
}
void table(int n) {
    int i;
    for (i = 1; i <= 10; i++)
        printf("%d x %d = %d\n", n, i, n * i);
}
int factorial(int n) {
    int i, f = 1;
    for (i = 1; i <= n; i++)
        f *= i;
    return f;
}
/* Output: 5 x 1 = 5 ... 5 x 10 = 50, phir 5! = 120 */

/* Program: isPrime() function โ€” function se code kitna saaf lagta hai! */
int isPrime(int n) {
    int i;
    if (n < 2) return 0;                 // 0 aur 1 prime nahi
    for (i = 2; i <= n / 2; i++)
        if (n % i == 0) return 0;        // divisor mila โ†’ prime nahi
    return 1;                            // koi divisor nahi mila โ†’ prime
}
/* main me: if (isPrime(17)) printf("Prime"); โ€” English jaisa code! */

/* Program: 1 se 50 tak ke prime numbers print (function ka fayda) */
int main() {
    int i;
    for (i = 2; i <= 50; i++)
        if (isPrime(i))
            printf("%d ", i);            // 2 3 5 7 11 ... 47
    return 0;
}
Function related common errors (lab me pakadna): (1) Prototype ke baad semicolon bhoolna โ†’ int add(int a, int b) (definition jaisa lagta hai) โ€ข (2) Definition aur call ke arguments ka type/count mismatch โ†’ galat result ya warning โ€ข (3) Return type void rakha par return a+b; likh diya โ†’ error โ€ข (4) Ek hi naam ke 2 functions same parameters ke saath โ†’ "redefinition" error โ€ข (5) Function ko main() ke andar define kar dena (C me nested function allowed nahi) โ€” definition bahar likho. Ye 5 galtiyan 90% lab errors hain. โš ๏ธ

5.4 Parameter Passing: Call by Value vs Call by Reference High-yield syllabus topic

Language accuracy โ€” C uses pass-by-value: Standard C passes every function argument by value. A pointer value is also copied when passed. If that copied pointer points to an object, dereferencing it lets the function modify the callerโ€™s object; this is often called โ€œcall by referenceโ€ informally in introductory courses, but it is not a true reference parameter as in C++. Arrays passed to functions are adjusted to pointer parameters; the pointer is passed by value, and element writes can modify the original array. Use this precise wording in modern C answers.
Call by value: function ko variable ki value ki copy jaati hai โ€” function andar jo badle, original par asar nahi. Call by reference: function ko variable ka address (pointer) jaata hai โ€” function usi original memory par kaam karta hai, isliye original value badal jaati hai.
MEMORY PICTURE (call by value) โ€” sirf copy jaati hai:

  main() me:  a = 10, b = 20           swapVal(x, y) me:
                                        x = 10, y = 20   โ† ALAG copies
  Function khatam โ†’ copies gayab โ†’  a = 10, b = 20 (unchanged!)

MEMORY PICTURE (call by reference) โ€” address jaata hai:

  main() me:        a = 10   (address 1000)
                    b = 20   (address 1004)
                              โ†‘        swapRef(&a, &b) me:
                              โ””โ”€โ”€โ”€โ”€โ”€โ”€  x = 1000, y = 1004 (addresses)
  *x = 20 karne se  โ†’ a (jo 1000 par hai) ki value badal gayi!
  Function khatam โ†’ a = 20, b = 10 โœ” (original badla)
BasisCall by ValueCall by Reference
Kya bhejte hainValue ki copyVariable ka address (pointer)
Original par asarNahi โ€” original safe rehta haiHaan โ€” original badal jaata hai
Kaise likhte hainswap(a, b); โ†’ void swap(int x, int y)swap(&a, &b); โ†’ void swap(int *x, int *y)
MemoryAlag copy banti hai (extra memory)Copy nahi banti (same memory par kaam)
Kab useJab original badalna nahi hai (calculation, print)Jab original badalna hai (swap, update, arrays, multiple return)
Speed/safetySafe (accidental change nahi)Thoda risky (galti se original bigad sakta hai)
/* LAB #10 โ€” Call by value vs Call by reference (swap example) โ€” poora program */
#include <stdio.h>

/* ---- CALL BY VALUE: original nahi badlega ---- */
void swapVal(int x, int y) {
    int t = x; x = y; y = t;        // sirf copies badli
}

/* ---- CALL BY REFERENCE: original BADLEGA ---- */
void swapRef(int *x, int *y) {
    int t = *x;                      // * = us address ki value
    *x = *y;
    *y = t;                          // original memory badli
}

int main() {
    int a = 10, b = 20;
    swapVal(a, b);
    printf("After call by value: a=%d b=%d\n", a, b);      // a=10 b=20
    swapRef(&a, &b);
    printf("After call by reference: a=%d b=%d\n", a, b);   // a=20 b=10 โœ”
    return 0;
}
/* Output:
   After call by value: a=10 b=20      โ† kuch nahi badla!
   After call by reference: a=20 b=10  โ† original badal gaya โœ” */
Trick: Call by value = photocopy dena ๐Ÿ“„ (aapke original document par koi asar nahi). Call by reference = original file ka pata dena ๐Ÿ  (jo bhi usse badlega, aapke ghar me hi badlega). Aur ek extra line jo MCQ me aati hai: function parameter mein array notation pointer parameter me adjust hota hai; C pointer value ko by value pass karta hai. void update(int a[], int n) mein pointed-to elements badalne se caller ka original array badal sakta hai, bina array ke aage & lagaye.

5.5 Recursion

A recursive function is a function that calls itself to solve a smaller version of the same problem. Har recursion me ek base case (rukne ki condition) hona zaroori hai โ€” warna infinite recursion aur stack overflow ๐Ÿ’ฅ. Recursive solutions math problems (factorial, Fibonacci, GCD, Tower of Hanoi) ke liye bahut elegant hote hain.
/* Factorial โ€” recursion se (lab: GCD bhi isi tarah) */
#include <stdio.h>
long factorial(int n) {
    if (n == 0 || n == 1)
        return 1;                  // BASE CASE (ruko!)
    else
        return n * factorial(n - 1);   // khud ko chhote input se call
}
int main() {
    printf("5! = %ld\n", factorial(5));   // 120
    return 0;
}
/* Andar kya hua (recursion ka tree):
   factorial(5) = 5 * factorial(4)
                = 5 * 4 * factorial(3)
                = 5 * 4 * 3 * factorial(2)
                = 5 * 4 * 3 * 2 * factorial(1)
                = 5 * 4 * 3 * 2 * 1
                = 120 โœ” (base case par ruk kar sab multiply hua) */
/* Program: Fibonacci ka n-th term by recursion (2 calls โ€” recursion tree) */
int fib(int n) {
    if (n == 0) return 0;          // base
    if (n == 1) return 1;          // base
    return fib(n - 1) + fib(n - 2);  // do recursive calls!
}
/* fib(6) = fib(5) + fib(4) = 5 + 3 = 8
   Note: yahan calls ki ginti exponential hoti hai โ€” fib(40) dheere chalega.
   Isliye iteration wala version fast hota hai (recursion vs iteration ka point!) */

/* LAB #8 โ€” GCD by iteration AND recursion */
int gcdIter(int a, int b) {          // loop wala
    while (b != 0) {
        int t = b;
        b = a % b;
        a = t;
    }
    return a;
}
int gcdRec(int a, int b) {            // recursion wala (Euclid)
    if (b == 0) return a;             // base case
    return gcdRec(b, a % b);          // chhote problem par pass
}
/* gcdRec(48, 18) โ†’ gcdRec(18, 12) โ†’ gcdRec(12, 6) โ†’ gcdRec(6, 0) โ†’ 6 โœ” */

/* Program: sum of digits by recursion (n%10 nikalo, n/10 par call) */
int digitSum(int n) {
    if (n == 0) return 0;
    return (n % 10) + digitSum(n / 10);
}
/* digitSum(4821) = 1 + digitSum(482) = 1 + 2 + digitSum(48) = 1+2+8+digitSum(4) = 1+2+8+4 = 15 โœ” */

/* Program: x^n by recursion (power) */
int power(int x, int n) {
    if (n == 0) return 1;              // kuch bhi ^ 0 = 1
    return x * power(x, n - 1);
}
/* power(2, 5) = 2 ร— 2 ร— 2 ร— 2 ร— 2 = 32 โœ” */

Tower of Hanoi (recursion ka sabse famous example)

/* 3 disk, 3 rods (Source โ†’ Auxiliary โ†’ Destination) */
#include <stdio.h>
void hanoi(int n, char from, char to, char via) {
    if (n == 1) {                          // base case: 1 disk seedha le jao
        printf("Disk 1: %c โ†’ %c\n", from, to);
        return;
    }
    hanoi(n - 1, from, via, to);           // upar wale disks hatao
    printf("Disk %d: %c โ†’ %c\n", n, from, to);  // sabse badi disk le jao
    hanoi(n - 1, via, to, from);           // hatai hui disks wapas rakho
}
int main() {
    hanoi(3, 'A', 'C', 'B');               // 7 moves โ†’ 2ยณ โˆ’ 1
    return 0;
}
/* Moves ka formula = 2โฟ โˆ’ 1  โ†’  3 disk = 7, 4 disk = 15, 64 disk = 1.8 ร— 10ยนโน (baah!) */

/* Program: factorial(5) ka recursion tree visual (exam me ise likhna)
   factorial(5)
   โ””โ”€โ”€ 5 * factorial(4)
           โ””โ”€โ”€ 4 * factorial(3)
                   โ””โ”€โ”€ 3 * factorial(2)
                           โ””โ”€โ”€ 2 * factorial(1)
                                   โ””โ”€โ”€ 1  โ† BASE CASE (wapsi shuru)
   Wapas: 1 โ†’ 2 โ†’ 6 โ†’ 24 โ†’ 120  */
BasisRecursion โœ”๏ธIteration (loops)
CodeChhota aur math ke paas (tree, factorial, Hanoi)Thoda lamba par seedha (loop)
MemoryHar call ka stack frame โ€” zyada memoryEk hi block โ€” kam memory
SpeedSlow (function call overhead) โ€” Fibonacci me bahut slowFast (koi call overhead nahi)
RiskBase case bhoolna = stack overflow ๐Ÿ’ฅUpdate/condition bhoolna = infinite loop ๐Ÿ”
Kab useTree, graph, divide & conquer, Hanoi, sorting (quick/merge)Simple repetition, arrays/table wale kaam
Real life: Recursion = "office ka kaam aage pass karna" ๐Ÿ“‹. Boss ne kaam diya โ†’ assistant ko diya โ†’ assistant ne intern ko diya โ†’ intern sabse chhota kaam khud kar leta hai (base case) โ†’ result wapas chain me upar aata hai. Google Drive me "folders ke andar folders" dhundhna, file system ke directories traverse karna, DOM tree โ€” wahi recursion hai. Language kuch bhi ho, recursion DSA ka core hai. ๐ŸŒณ

5.6 Understanding Pointers

A pointer is a variable that stores the memory address of another variable (value ki jagah address). Isse memory ko directly access/control kiya jaata hai โ€” yeh C ki sabse powerful (aur thoda dangerous ๐Ÿ˜ˆ) feature hai, aur C ko "middle-level language" banata hai.
Hinglish: Normal variable = ghar ๐Ÿ  (usme rehne wala). Pointer = us ghar ka address likha hua parcha ๐Ÿ“ฎ. Address ke paas jaake aap ghar me kya hai dekh sakte ho (value padho) ya badal bhi sakte ho (value likho). Isliye pointer ko "address wala variable" kehte hain.
/* Pointer declaration, initialization & use โ€” poora program */
#include <stdio.h>
int main() {
    int a = 10;                // ek normal variable
    int *p;                    // pointer declaration (int ka pointer)

    p = &a;                    // p me a ka ADDRESS daala (& = address-of)

    printf("Value of a     = %d\n", a);      // 10
    printf("Address of a   = %p\n", &a);     // e.g. 0061FF1C
    printf("p me kya hai   = %p\n", p);      // wahi address!
    printf("a ki value via p = %d\n", *p);   // 10 (* = dereference)

    *p = 50;                   // pointer se a ki value badal di
    printf("Ab a = %d\n", a);                // 50 โœ”
    return 0;
}
/* Yaad rakho: p = address rakhta hai, *p = us address par padi VALUE
   a  aur  *p  ek hi jagah hain โ€” ek ko badla, doosra bhi badla! */
Symbol / TermNaamMatlab
&Address-of operatorVariable ka address nikalta hai: &a โ†’ 1000
*Dereference / indirection operatorAddress par padi value: *p โ€” padhna ya likhna dono
int *pDeclaration"p ek pointer hai jo int ka address rakhega"
NULLNull pointerint *p = NULL; โ€” kisi address par nahi (safe practice)
Pointer ka sizeโ€”Har pointer ka size sizeof se 8 byte (64-bit) / 4 byte (32-bit) โ€” chahe wo int ka ho ya char ka
/* Type ka matlab: int* โ†’ 4 byte skip, char* โ†’ 1 byte skip (pointer arithmetic) */
int  a = 10;   int  *p = &a;     // p++ se 4 byte aage (int ka size)
char c = 'A';  char *q = &c;     // q++ se 1 byte aage (char ka size)

/* Program: pointer ka size aur address */
#include <stdio.h>
int main() {
    int a = 5; char c = 'x'; float f = 1.5;
    int *p1 = &a; char *p2 = &c; float *p3 = &f;
    printf("sizeof(p1)=%d sizeof(p2)=%d sizeof(p3)=%d\n",
            sizeof(p1), sizeof(p2), sizeof(p3));   // sab 8 (64-bit machine par)
    printf("a via p1 = %d, c via p2 = %c, f via p3 = %.1f\n", *p1, *p2, *p3);
    return 0;
}
Safety rules (nahi to crash ๐Ÿ’ฅ): (1) Bina initialize pointer ko dereference mat karo โ€” int *p; *p = 5; โŒ (p kisi bhi random jagah point kar raha hai โ†’ garbage overwrite / crash). (2) NULL check karo: if (p != NULL) *p = 5; (3) Function se local variable ka address return mat karo โ€” wo variable function khatam hone par mar jaata hai (aap "dangling pointer" dete ho). (4) free() ke baad pointer ko NULL kar do. Ye chaar rules "wild pointer", "dangling pointer" aur "segmentation fault" se bachate hain โ€” aur ye terms exam me bhi poochhe jaate hain.

5.7 Pointers and Arrays (dono bhai-bhai hain)

C me array ka naam uske pehle element ka pointer hai โ€” arr == &arr[0]. Aur arr[i] likhna aur *(arr + i) likhna bilkul same cheez hai (compiler andar se arr[i] ko *(arr+i) hi convert karta hai). Function parameter me array syntax pointer parameter me adjust hota hai; pointer value copy hoti hai, par usse original array elements access/modify kiye ja sakte hain.
int arr[5] = {10, 20, 30, 40, 50};
int *p = arr;              // arr khud pehle element ka address hai!

/* Ye chaaro lines SAME cheez tak le jaati hain: */
arr[2]  ==  *(arr + 2)  ==  *(p + 2)  ==  p[2]     // sab = 30 โœ”
 &arr[0] ==  arr  ==  p                            // base address
 &arr[2] ==  (arr + 2) == (p + 2)                  // teesre element ka address

/* Loop with pointer (array ka alternative tarika) */
for (i = 0; i < 5; i++)
    printf("%d ", *(p + i));         // 10 20 30 40 50

/* Array parameter pointer me adjust hota hai; pointer value is passed by value. */
#include <stdio.h>
void doubleAll(int a[], int n) {      // a[] as good as int *a
    int i;
    for (i = 0; i < n; i++)
        a[i] = a[i] * 2;              // ORIGINAL array hi badla
}
int main() {
    int x[4] = {1, 2, 3, 4}, i;
    doubleAll(x, 4);
    for (i = 0; i < 4; i++) printf("%d ", x[i]);   // 2 4 6 8 โœ”
    return 0;
}
Yaad rakho: arr[i] = *(arr + i) = *(p + i) = p[i] โ€” exam me ye chaar roop ek saath likh kar dikhana, examiner ka favourite point hai. Aur &arr[i] = arr + i โ€ข sizeof(arr) = poore array ka size, lekin sizeof(p) sirf pointer ka 8 byte โ€” array aur pointer ka farak yahi hai (array ka size pata hota hai, pointer ka nahi). ๐ŸŽฏ

5.8 Pointer Arithmetic

Pointer par ++, --, + n, - n, aur do pointers ka difference โ€” ye sab allowed hai. Rule: pointer ยฑ n = n ELEMENTS aage/peeche โ€” compiler khud type ka size (int = 4, char = 1) multiply kar deta hai. Ye n ka "n bytes nahi, n elements hai" wala point hi poore concept ka nichod hai.
int arr[5] = {10, 20, 30, 40, 50};
int *p = arr;                  // maan lo address = 1000

p++;      // agle ELEMENT par โ€” address 1000 โ†’ 1004 (+4, int ke size jitna) โ†’ *p = 20
p--;      // pichle element par โ†’ 1004 โ†’ 1000 โ†’ *p = 10
p = p + 2;  // do element aage โ†’ 1008 โ†’ *p = 30
p = p - 1;  // ek peeche โ†’ 1004 โ†’ *p = 20

int *q = &arr[4];   // address 1016
q - p;              // do pointers ka difference = kitne ELEMENTS ka gap (bytes ka nahi!)
                    // 1016 - 1004 = 12 bytes รท 4 = 3 elements

/* char pointer me farak dekho */
char s[] = "BCA";
char *c = s;        // address 2000
c++;                // 2001 (+1 byte, char ke size jitna) โ†’ *c = 'C'

/* Comparison allowed hai */
if (p < q) printf("p pehle wale element par hai\n");   // addresses ki comparison
/* Program: pointer arithmetic se array traverse (dono loop style) */
#include <stdio.h>
int main() {
    int a[5] = {10, 20, 30, 40, 50};
    int *p = a, sum = 0;

    while (p < a + 5) {        // jab tak aakhri element tak na pahuncho
        sum += *p;
        p++;
    }
    printf("Sum = %d\n", sum);   // Sum = 150

    p = a;                        // reset
    for (int i = 0; i < 5; i++)
        printf("%d ", *(p + i));  // 10 20 30 40 50
    return 0;
}
Rule yaad rakho: p++ ka matlab "1 byte aage" nahi hai โ€” matlab "1 ELEMENT aage" (int me 4 bytes, char me 1 byte, float me 4 bytes, double me 8 bytes). Compiler khud type ka size lagata hai. Isliye char* ka p++ = 1 byte, int* ka p++ = 4 bytes. Aur ek MCQ practice focus: do pointers ko jodna/nikalna โ€” p1 + p2 โŒ invalid, p1 - p2 โœ” valid (elements ka difference deta hai). ๐ŸŽฏ

5.9 Advantages & Disadvantages of Pointers

Advantages โœ”๏ธDisadvantages โŒ
Efficient memory access + manipulation (hardware ke paas)Galat use = crash / memory corruption / security holes
Pointer parameters se pointed objects modify kar sakte ho (reference-style effect; C passes pointer values by value)Samajhna mushkil โ€” beginners ke liye confusing (indirection ka level)
Dynamic memory allocation (malloc/calloc/realloc/free) sirf pointers seMemory leak โ€” free() bhoolna (program slow/crash over time)
Linked list, tree, graph, hash table jaise data structures pointers se banti hainDangling pointer (free ke baad use), wild pointer (uninitialized) ka khatra
Arrays/strings efficiently handle โ€” string functions internally pointers use karti hainDebugging mushkil โ€” galti jahan hui wahan nahi, kai lines baad crash hota hai
Hardware/OS/driver programming, embedded systems ke liye essentialPortability issues (32/64-bit par size badalta hai), security (buffer overflow)
/* Dynamic memory ka ek chhota demo (pointers ka sabse bada fayda) */
#include <stdio.h>
#include <stdlib.h>         // malloc/free ke liye
int main() {
    int n = 5, i;
    int *arr = (int *) malloc(n * sizeof(int));   // runtime par jagah mili

    if (arr == NULL) { printf("Memory nahi mili!\n"); return 1; }

    for (i = 0; i < n; i++) arr[i] = (i + 1) * 10;
    for (i = 0; i < n; i++) printf("%d ", arr[i]);   // 10 20 30 40 50

    free(arr);              // โš ๏ธ wapas kar dena zaroori (memory leak se bacho)
    arr = NULL;             // dangling pointer se bacho
    return 0;
}
/* Yaad rakho: malloc = "memory a lot", free = "wapas de do". Ye pair hi
   C me dynamic arrays, linked lists, strings โ€” sab ka base hai (Unit 4 ke
   arrays ka "runtime size" wala nuksaan yahin theek hota hai) */
Real life: Pointer = "gaadi ka steering" ๐Ÿš— โ€” sahi haath me aapko tez aur efficient le jaata hai, galat haath me acche se hagaara bhi de sakta hai (segmentation fault ๐Ÿ˜…). Isiliye Java/Python ne pointers hata diye (references + automatic memory management/garbage collector) taaki programmer se ye galti hi na ho. Par OS, drivers, game engines aur embedded systems aaj bhi C/C++ me likhe jaate hain โ€” kyunki pointer ki power ka koi replacement nahi. ๐Ÿ’ช

5.10 Pointer + Function = Reference-style Modification (syllabus phrase: call by reference)

Jab function ko variable ka address (pointer) bhejte hain, to function us original memory par kaam karta hai โ€” isse ek function se kai values "wapas" mil sakti hain (jaise min + max, sum + average) aur swap/update jaisa kaam ho jaata hai. C ka return sirf ek value deta hai, par pointers ki madad se hum 2, 3, jitni chahiye values modify kar sakte hain.
/* Program: function jo ek array ke min AUR max dono return kare (pointers se) */
#include <stdio.h>
void minMax(int arr[], int n, int *mn, int *mx) {
    int i;
    *mn = *mx = arr[0];              // pehle element se start
    for (i = 1; i < n; i++) {
        if (arr[i] < *mn) *mn = arr[i];
        if (arr[i] > *mx) *mx = arr[i];
    }
}
int main() {
    int a[6] = {45, 12, 78, 3, 90, 56};
    int small, big;
    minMax(a, 6, &small, &big);      // addresses bheje
    printf("Smallest = %d, Largest = %d\n", small, big);
    // Output: Smallest = 3, Largest = 90 โœ”
    return 0;
}
/* Program: sum aur average dono ek hi function se */
void stats(int a[], int n, int *sum, float *avg) {
    int i;
    *sum = 0;
    for (i = 0; i < n; i++) *sum += a[i];
    *avg = (float) *sum / n;
}
/* main me: stats(a, n, &s, &avg);
   printf("Sum = %d, Average = %.2f", s, avg); */

/* Program: pointer se string ki length (strlen ka apna version) */
int myStrlen(char *s) {
    int count = 0;
    while (*s != '\0') {      // jab tak null na mile
        count++;
        s++;                  // agle character par
    }
    return count;
}
/* myStrlen("Programming") โ†’ 11 (string functions andar aise hi kaam karte hain!) */

/* Program: do numbers ka swap by reference โ€” function ke saath (LAB #10 recap) */
void swap(int *x, int *y) { int t = *x; *x = *y; *y = t; }
/* main: swap(&a, &b);  โ†’  original values badal jaati hain */
Exam tip (bahut common question โ€” 5/10 marks): "C me ek function se ek se zyada value kaise return karein?" โ†’ Answer: "C ka return sirf ek value de sakta hai; isliye hum pointers (reference-style modification in C) use karte hain โ€” function ko variables ke address bhejte hain, function unn addresses par values likh deta hai, aur main me wo values update ho jaati hain." Phir minMax() ya stats() ka program likh do = complete-answer checklist โœ… Isi tarah "swap by reference" aur "array function me bhejo aur change karke dikhao" โ€” dono isi concept ke roop hain.

โšก Unit 5 โ€” Rapid Revision

Syllabus-based exam-style practice questions (not predictions) โ€” Unit 5:
  1. Function kya hai? Declaration, definition aur call ko example se samjhao. (10)
  2. Built-in aur user-defined functions me difference + examples. (5)
  3. Function ke fayde (reusability, modularityโ€ฆ) likho. (5)
  4. Call by value vs call by reference โ€” swap program ke saath. (10 โ€” Lab #10)
  5. Recursion kya hai? Factorial ka recursive program likho + trace do. (10)
  6. Recursion vs iteration (differences). (5)
  7. Pointer kya hai? Declaration, initialization aur access explain karo. (10)
  8. Pointers aur arrays ka relation: arr[i], *(arr+i), p[i] samjhao. (10)
  9. Pointer arithmetic kya hai? Example do. (5)
  10. Advantages aur disadvantages of pointers. (5)
  11. Program: pointer se do numbers swap karo / min-max nikalo / array ka sum-average function se. (5โ€“10)
  12. C me ek function se ek se zyada values kaise return karenge? (5)
Model answer โ€” "Pointers and arrays ka relation" (10 marks): Definition line ("array expression aam taur par first element ke pointer me convert hota hai; special contexts jaise sizeof me nahi") โ†’ arr == &arr[0] โ†’ arr[i] == *(arr+i) equivalence table (4 forms) โ†’ ek loop example (*(p+i) se traverse) โ†’ array parameter adjustment and pointer-based access ka point โ†’ closing: "isliye string functions internals me pointers use karti hain". Use this as a model structure and adapt it to the question. โœ…

โšก Rapid-fire 2-mark Q&A โ€” poore syllabus ka nichod (viva + short answers ke liye)

  1. C ko "mother of all languages" kyun? Kyunki C++/Java/JavaScript/PHP/jaisi languages ka syntax aur concepts C se aaye, aur OS/kernels (Linux/Windows) bhi C me likhe gaye.
  2. Compiler aur interpreter me farak? Compiler poora program ek saath machine code me badalta hai (fast, error pehle milte hain); interpreter line-by-line chalata hai (Python).
  3. Header file kya hai? Ready-made function declarations ki file โ€” #include se judti hai (stdio.h, math.h, string.h).
  4. Token kya hai? Program ka sabse chhota meaningful tukda โ€” keyword, identifier, operator, literal, special symbol.
  5. Variable aur constant me farak? Variable ki value badal sakti hai; constant (const/#define) nahi badal sakti.
  6. Lvalue aur Rvalue? Lvalue memory location hai (left side โ€” a), Rvalue value hai (5) โ€” 5 = a; galat hai kyunki 5 lvalue nahi.
  7. #define PI 3.14; me galti kya hai? Semicolon โ€” isse PI ki jagah "3.14;" replace ho jaayega. #define me ; nahi lagta.
  8. Garbage value kya hai? Bina initialize local variable me pehle se padi random value (auto variable ka default).
  9. Explicit aur implicit conversion ka farak? Implicit compiler khud karta hai (promotion, safe); explicit programmer (type) likhkar (data loss ho sakta hai).
  10. Operator aur operand? Operator kaam karne wala symbol (+); operand jis par kaam hota hai (a, b).
  11. Unary vs binary operator? Unary ek operand par (!a, a++, -a), binary do par (a+b, a>b).
  12. Short-circuit evaluation? && me pehla false โ†’ doosra check nahi; || me pehla true โ†’ doosra check nahi.
  13. sizeof function hai ya operator? Operator โ€” compile time par size nikalta hai, parentheses optional hain.
  14. Entry aur exit controlled loop? Entry: condition pehle (for, while). Exit: body pehle, condition baad me (do-while, kam se kam 1 baar).
  15. Dangling else kya hai? Bina braces ke if-else me else sabse nazdeek wale if se jud jata hai โ€” confusion.
  16. switch me default zaroori hai? Optional hai, par best practice โ€” invalid input handle karne ke liye.
  17. Infinite loop ke kaaran? Update statement na hona, condition kabhi false na hona, galat semicolon (while(i<5);).
  18. Array ka size program chalte waqt badal sakte hain? Nahi โ€” static array ka size compile time par fix hota hai (runtime ke liye dynamic memory chahiye).
  19. Array aur pointer ka ek farak? sizeof(arr) = poore array ka size; sizeof(p) = pointer ka size. Aur array ka naam constant address hai (badla nahi ja sakta).
  20. Row-major aur column-major? C row-major (pehle row bhar); FORTRAN column-major.
  21. '\0' aur '0' me farak? '\0' = null character (ASCII 0, string terminator); '0' = digit zero (ASCII 48).
  22. scanf("%s") ki kami? Space par ruk jata hai โ€” multi-word input ke liye fgets/gets chahiye.
  23. gets() kyun mana hai? Buffer size check nahi karta โ€” overflow ka risk (security issue).
  24. strlen aur sizeof me farak (array of chars)? strlen '\0' se pehle ke characters ginta hai; sizeof poore array ke bytes.
  25. Function prototype kyun likhte hain? Compiler ko pehle bata dete hain (return type + parameters), warna call par warning/error aa sakti hai.
  26. Actual vs formal parameter? Actual = call me bheji value; formal = definition ke dabbe jo value receive karte hain.
  27. Function se 2 values kaise? Pointers (reference-style modification in C) โ€” address bhejo, function values likh dega.
  28. Recursion me base case kyun? Rukne ke liye โ€” warna infinite recursion aur stack overflow.
  29. Recursion kab iteration se better? Tree/graph/Hanoi/quick-sort jaise problems me jahan solution recursive structure ka ho.
  30. Pointer ka size type par depend karta hai? Nahi โ€” har pointer ka size same (4/8 byte machine ke hisaab se).
/* Ek final program โ€” jo sab units ko jodta hai (array + function + pointer + string) */
#include <stdio.h>
#include <string.h>

void bestStudent(char names[][20], int marks[], int n, char topName[], int *topMarks) {
    int i, best = 0;
    for (i = 1; i < n; i++)
        if (marks[i] > marks[best]) best = i;
    strcpy(topName, names[best]);     // string copy (Unit 4)
    *topMarks = marks[best];          // pointer se value wapas (Unit 5)
}

int main() {
    char names[3][20] = {"Ansh", "Priya", "Rahul"};
    int marks[3] = {78, 91, 85}, m;
    char top[20];

    bestStudent(names, marks, 3, top, &m);   // function call (Unit 5)

    printf("Topper: %s with %d marks\n", top, m);
    return 0;
}
Output:
Topper: Priya with 91 marks
Kaise samjho ki aap ready ho: (1) Ye 30 rapid-fire questions zubani bol sako (viva me yahi poochhte hain). (2) Har unit ke "Syllabus-based exam-style practice questions (not predictions)" ka answer 5โ€“10 line me likh sako. (3) 15-program bank ka code bina dekhe likh sako. (4) Har program ke saath output likhna aadat bana lo. Ye 4 cheezein ho gayi to lab + theory dono me full confidence. ๐Ÿ’ช

๐Ÿงช Lab practical bank (SEC101P) โ€” 16 programs ka checklist + viva Q&A

Neeche SEC101P lab ke 16 programs ka checklist hai โ€” kaunsa program kis unit ka concept test karta hai aur kya dhyaan rakhna hai. Poora code + output file 07_Lab_Practicals.html (SEC101P section) me hai; yahan revision ke liye logic aur viva ke answers hain.

#Lab programKaunsa concept (unit)Dhyaan rakho
P1Largest of two / three numbersif, if-else, ternary (U3)Ternary ka nested form aur if-else dono versions likho
P2Reverse of a numberwhile + % / (U3)rev = rev*10 + n%10; n /= 10; โ€” trace table zaroor
P3Prime numbers 2 se n takNested loop + break (U3)Inner loop i <= n/2 tak; 1 prime nahi hai
P4Quadratic equation (switch)switch + math.h (U3)Discriminant D = bยฒโˆ’4ac ke 3 cases; math.h include
P5Triangle of starsNested loops (U3)Outer = lines, inner = stars; spaces wala pyramid bhi try karo
P6Largest & smallest in a listArray + loop (U4)max = min = a[0] se start karo
P7Product of two matrices2D array, 3 loops (U4)C[i][j] = 0 reset pehle; loop order iโ†’jโ†’k
P8GCD โ€” iteration aur recursion donoLoop + recursion (U3, U5)Euclid: gcdRec(b, a%b); base case b == 0
P9Storage classes illustrationauto/static/extern/register (U1)static counter program โ€” value calls ke beech yaad rehti hai
P10Call by value vs referencePointers, functions (U5)swapVal vs swapRef; output me farak dikhao
P11Count occurrences of each alphabet (command line arguments)Strings + argv (U4)int main(int argc, char *argv[]) โ€” argument string me aata hai
P12enum data type illustrationenum (U1)Values 0, 1, 2โ€ฆ default; naam se code readable
P13String functions (string.h)strlen/strcpy/strcat/strcmp (U4)Har function ka output alag line me likho
P14Count characters in a fileFile handling (U5 extension)fopen("f.txt","r"), fgetc loop, fclose; NULL check
P15Structure Student โ€” 10 students file mestruct + file (U5 extension)fprintf se likho, fscanf se padho; feof se loop roko
P16Copy file โ€” lowercase โ†’ UPPERCASEFile + ctype.h (U4/U5)toupper() per character; do files (source, target)
Lab viva โ€” 20 questions jo har baar poochhe jaate hain (short answers):
  1. Why do we write return 0; in main? OS ko batane ke liye ki program successful khatam hua (0 = success).
  2. What is a header file? Ready-made function declarations ki file jo #include se judti hai.
  3. #include <stdio.h> aur #include "myfile.h" me farak? Angle brackets system headers ke liye, double quotes apni file ke liye.
  4. Why is & used in scanf but not in printf? scanf ko address chahiye (kahan rakhna hai), printf ko value.
  5. %f aur %lf me farak? %f float ke liye, %lf double ke liye.
  6. What is type casting? Zabardasti type badalna โ€” (float)a / b.
  7. Why do we use long long in factorial? Bade result ke liye (20! int me overflow ho jaata hai).
  8. Difference between = and ==? = value daalta hai, == compare karta hai.
  9. What is fall-through in switch? break na hone par agli case bhi chal jaana.
  10. Why does a do-while run at least once? Condition body chalne ke baad check hoti hai.
  11. What is an entry-controlled loop? Jisme condition pehle check hoti hai (for, while) โ€” 0 baar bhi chal sakta hai.
  12. Array ka index 0 se kyun? Address formula me offset 0 se start hota hai (base + i ร— size).
  13. Why can't we compare two strings with ==? Ye addresses compare karta hai; content ke liye strcmp().
  14. Why do we need '\0' in a string? String ka end batane ke liye; iske bina printf garbage print karta hai.
  15. Function prototype kyun likhte hain? Compiler ko pehle function ka signature batane ke liye.
  16. Call by value vs pointer-based reference-style modification? C mein har argument ki value copy hoti hai; pointer pass karne par copied pointer se caller ke object ko modify kiya ja sakta hai.
  17. Recursion me base case na ho to? Stack overflow (infinite recursion) ๐Ÿ’ฅ
  18. Why can a function modify array elements through an array parameter? In a function parameter, array notation adjusts to a pointer parameter; the pointer value is copied, but it points to the callerโ€™s elements.
  19. Pointer ka size kya hota hai? Machine par depend โ€” 4 byte (32-bit) / 8 byte (64-bit), type se farak nahi padta.
  20. Dangling pointer kya hai? Wo pointer jo free/expire ho chuki memory ko point karta hai โ€” use karna crash de sakta hai.
Lab exam ke 5 rules (practical file aur exam dono ke liye): (1) Har program me pehle algorithm/flowchart likho, phir code. (2) Code me 2โ€“3 comments (kyun, kya kar raha hai). (3) Input ka sample aur output ka screenshot/text paste karo. (4) Error aaye to output ke saath error bhi likho aur usko kaise theek kiya โ€” ye "debugging skill" dikhata hai. (5) In a viva, state a concise definition and then give an example; explain further when asked. โœ…

๐Ÿ“ Exam program bank โ€” 15 programs jo baar-baar aate hain (ek line ka logic yaad rakho)

#ProgramLogic ek line meKey statement
1Sum / average of two numbersInput โ†’ jodo โ†’ divideavg = (float)(a+b)/2;
2Area & circumference of circleฯ€rยฒ aur 2ฯ€r#define PI 3.14159
3Swap two numbersTeen variable (ya bina temp: a=a+b; b=a-b; a=a-b;)t=a; a=b; b=t;
4Largest of threeNested if / ternary(a>b)?((a>c)?a:c):((b>c)?b:c)
5Even / oddModulus 2n % 2 == 0
6Leap year4 se divisible aur 100 se nahi, ya 400 se(y%4==0 && y%100!=0) || y%400==0
7Grade using else-if ladderUpar se neeche range checkif (m>=90) โ€ฆ else if (m>=75) โ€ฆ
8Simple calculator (menu)switch + 4 cases + defaultcase 1: printf("%f", a+b); break;
9Reverse of a number% 10 se digit, / 10 se hataorev = rev*10 + n%10; n /= 10;
10Factorial1 se n tak multiply (long long)f = f * i;
11Prime check2 se n/2 tak koi divisor? break!if (n % i == 0) { flag = 0; break; }
12Fibonacci seriesAgla = pichle do ka sumc = a + b; a = b; b = c;
13Armstrong numberDigits ke cubes ka sum = numbersum += r*r*r;
14Array: sum, largest, smallestEk loop + 2 comparisonsif (a[i] > max) max = a[i];
15String: reverse / vowels / palindromeLoop + '\0' par ruko (ya strlen)t[i] = s[len-1-i]; t[len] = '\0';
/* Bonus: in 5 programs ka COMPLETE code ek jagah (lab file ke liye ready) */
/* A. Even-Odd (ternary) */
int n; scanf("%d", &n);
printf("%d is %s\n", n, (n % 2 == 0) ? "Even" : "Odd");

/* B. Table of any number */
int n, i; scanf("%d", &n);
for (i = 1; i <= 10; i++) printf("%d x %d = %d\n", n, i, n*i);

/* C. Sum of digits */
int n, s = 0; scanf("%d", &n);
while (n != 0) { s += n % 10; n /= 10; }
printf("Sum = %d\n", s);

/* D. Largest in array */
int a[5] = {45, 12, 78, 3, 90}, i, max = a[0];
for (i = 1; i < 5; i++) if (a[i] > max) max = a[i];
printf("Max = %d\n", max);        // 90

/* E. Reverse a string (manual) */
char s[50], t[50]; int i, len;
scanf("%s", s);
for (len = 0; s[len] != '\0'; len++);
for (i = 0; i < len; i++) t[i] = s[len-1-i];
t[len] = '\0';
printf("Reverse = %s\n", t);
Exam strategy for programs: Program likhte waqt ye 5 cheezein zaroor likho โ€” (1) #include + main(), (2) variables ke saath comments, (3) input prompt (printf("Enterโ€ฆ")), (4) code ke andar 2โ€“3 comment, (5) aakhir me sample output. Examiner output dekh kar hi maanta hai ki program chalega โ€” aur output likhna 1โ€“2 marks extra dilata hai. โœ…

โœ… Mixed MCQ bank (30 questions โ€” answers neeche)

Unit 1:
  1. C language ka developer kaun hai? (a) Ken Thompson (b) Dennis Ritchie (c) Bjarne Stroustrup (d) James Gosling
  2. Source code ki extension kya hai? (a) .obj (b) .exe (c) .c (d) .i
  3. Kaunsi cheez memory me jagah nahi leti? (a) int (b) #define (c) const (d) static
  4. Storage class jo value ko calls ke beech yaad rakhti hai: (a) auto (b) register (c) static (d) extern
  5. printf ka return type? (a) void (b) int (c) char (d) float
Unit 2:
  1. 10 / 3 ka result C me? (a) 3.33 (b) 3 (c) 4 (d) error
  2. 10 % 3 = ? (a) 3 (b) 1 (c) 0 (d) 3.33
  3. 5 & 3 = ? (a) 7 (b) 1 (c) 6 (d) 15
  4. 5 | 3 = ? (a) 1 (b) 6 (c) 7 (d) 8
  5. 5 ^ 3 = ? (a) 6 (b) 2 (c) 8 (d) 1
  6. int x = 5; printf("%d", x++); output? (a) 6 (b) 5 (c) 4 (d) error
  7. Ternary operator kaun hai? (a) ?: (b) && (c) sizeof (d) ,
  8. Kaunse operator ki associativity right-to-left hai? (a) + (b) * (c) = (d) %
  9. (int) 9.99 = ? (a) 10 (b) 9 (c) 9.9 (d) error
Unit 3:
  1. Exit-controlled loop kaunsa hai? (a) for (b) while (c) do-while (d) koi nahi
  2. switch me kaunsa type allowed nahi? (a) int (b) char (c) float (d) enum
  3. break loop par kya asar karta hai? (a) skip current (b) poora khatam (c) restart (d) kuch nahi
  4. while (0) { } kitni baar chalta hai? (a) 0 (b) 1 (c) infinity (d) error
  5. do-while me semicolon kahan? (a) nahi lagta (b) condition ke baad (c) do ke baad (d) dono jagah
Unit 4:
  1. Array ka pehla index? (a) 1 (b) 0 (c) โˆ’1 (d) depend karta hai
  2. int a[5] me aakhri valid index? (a) 5 (b) 4 (c) 6 (d) 0
  3. 2D array C me kis order me store hota hai? (a) column-major (b) row-major (c) random (d) dono
  4. String ka terminator kaunsa hai? (a) '\n' (b) '\0' (c) '0' (d) EOF
  5. strcmp("abc", "abc") = ? (a) 1 (b) 0 (c) โˆ’1 (d) "abc"
  6. Kaunsa function string ki length deta hai? (a) strlength (b) strlen (c) len (d) size
Unit 5:
  1. Call by value me original variable? (a) badalta hai (b) nahi badalta (c) kabhi kabhi (d) crash
  2. Recursion ke liye kya zaroori hai? (a) loop (b) base case (c) array (d) pointer
  3. Address-of operator kaunsa hai? (a) * (b) & (c) # (d) %
  4. arr[i] kis ke barabar hai? (a) *(arr+i) (b) arr+i (c) &arr[i] (d) *arr+i
  5. Ek function se ek se zyada value kaise? (a) impossible (b) pointers se (c) return se (d) goto se
Answers: 1-(b) 2-(c) 3-(b) 4-(c) 5-(b) 6-(b) 7-(b) 8-(b) 9-(c) 10-(a) 11-(b) 12-(a) 13-(c) 14-(b) 15-(c) 16-(c) 17-(b) 18-(a) 19-(b) 20-(b) 21-(b) 22-(b) 23-(b) 24-(b) 25-(b) 26-(b) 27-(b) 28-(b) 29-(a) 30-(b)
(Explanation chahiye to: 6 โ€” int/int = int; 8 โ€” 0101 & 0011 = 0001; 9 โ€” 0101 | 0011 = 0111; 10 โ€” 0101 ^ 0011 = 0110; 11 โ€” postfix pehle purani value deta hai; 23 โ€” '\0' null character; 24 โ€” equal par 0; 29 โ€” array ka naam + i = address, par arr[i] = us address ki value = *(arr+i).)

๐ŸŽ“ Model answers โ€” 5 sabse important 10-mark questions

Q1. Structure of a C program (10): Definition line โ†’ 6โ€“7 sections ka list (Documentation, Link/Preprocessor, Definition, Global declaration, main(), Sub-programs) โ†’ har section 1โ€“2 line explanation (table me) โ†’ ek chhota program jisme saare sections comment ke saath label karo โ†’ closing: "main() ke bina link nahi hota; # wali lines preprocessor ko jaati hain".
Q2. Storage classes (10): 4 storage classes (auto, register, static, extern) โ†’ table: keyword, scope, lifetime, default value, memory โ†’ static ka counter program (value yaad rehna) โ†’ extern ka do-file point โ†’ closing: "auto default hai; register ka address nahi milta; static sirf ek baar initialize hota hai; extern declaration hai, definition nahi".
Q3. Operator precedence with examples (10): Definition (precedence + associativity) โ†’ table (unary, * / %, + โˆ’, relational, logical, assignment) โ†’ PUMA REBL TACA โ†’ 3 solved examples step-by-step (10+2*3โˆ’4, 10โˆ’3โˆ’2, a=b=c=5) โ†’ closing: "confusion ho to brackets lagao".
Q4. Call by value vs call by reference (10): Definition 2 lines โ†’ memory diagram (copy vs address) โ†’ table (kya bhejte hain, original par asar, syntax, use case) โ†’ swap ka poora program dono versions ke saath + output (10 20 โ†’ 20 10 pointer-based modification ke example mein) โ†’ closing: "array parameter pointer me adjust hota hai (C mein pointer value by value pass hoti hai); pointers se ek function se kai values mil sakti hain".
Q5. Loops: for vs while vs do-while (10): Teeno ka syntax โ†’ table (entry/exit, condition kab, minimum iterations, semicolon) โ†’ do chhote programs ya ek hi input (i = 10) par farak dikhao (while 0 baar, do-while 1 baar) โ†’ kab kya use karein (count pata / condition-driven / pehli baar zaroori) โ†’ closing: "infinite loop ke 3 kaaran: update, condition, galat semicolon".

๐Ÿงช Sample question paper โ€” SEC101T (Programming in C) โ€ข 70-mark practice total โ€ข suggested timing only; official duration/pattern not stated in the supplied PDF

Section A โ€” Very short answer (2 marks ร— 5 = 10)
  1. Escape sequence \n aur \t ka kaam likho.
  2. sizeof operator hai ya function? Kyun?
  3. Do example do: valid aur invalid identifier.
  4. 10 / 3.0 ka result kya hoga aur kyun?
  5. do-while loop kam se kam kitni baar chalta hai aur kyun?
Section B โ€” Short answer (5 marks ร— 6 = 30)
  1. C program ka structure sections ke saath explain karo.
  2. Storage classes ka table banao (scope, lifetime, default value).
  3. break aur continue ka difference example ke saath.
  4. Array kya hai? Address calculation ka formula likho aur ek example solve karo.
  5. String aur '\0' ka relation samjhao.
  6. Call by value aur call by reference ka farak (example).
Section C โ€” Long answer / Programs (10 marks ร— 3 = 30)
  1. Switch statement ka syntax aur rules likho + menu-driven calculator ka program banao.
  2. Matrix multiplication ka program likho (3 loops explain karo).
  3. Recursion kya hai? Factorial ka recursive program likho aur trace dikhao. OR Pointer kya hai? Pointer aur array ka relation example se samjhao.
Suggested timed-practice strategy (not official university timing): Use this only as a self-imposed timed-practice exercise; the syllabus PDF does not specify the university paper sections or duration. Practise allocating time across short explanations, longer answers and programs, leaving time to review. Marks ka golden rule: 2-mark = 2โ€“3 line, 5-mark = 6โ€“8 line + table/example, 10-mark = definition + table/diagram + program + output. Jo question na aata ho, usme bhi definition aur ek example likh do โ€” a concise structure can help; follow the question and official assessment rubric. โฑ๏ธ

๐Ÿ“– C glossary โ€” important terms ek jagah

TermMatlab (ek line)
CompilerC code ko machine code me badalne wala program (error pakadta hai)
PreprocessorCompile se pehle # wali lines (#include, #define) handle karta hai
LinkerObject code + library functions jodkar .exe banata hai
TokenProgram ka sabse chhota tukda โ€” keywords, identifiers, literals, operators
Escape sequenceBackslash wala special character (\n, \t, \\, \0)
Format specifierprintf/scanf me type batane wala code (%d, %f, %c, %s)
Type castingZabardasti type badalna โ€” (float) a / b
Fall-throughswitch me break na hone par agli case bhi chal jaana
Entry controlled loopCondition pehle check (for, while) โ€” 0 baar chal sakta hai
Exit controlled loopBody pehle chal (do-while) โ€” kam se kam 1 baar
Infinite loopLoop jo kabhi khatam na ho (update/condition/semicolon ki galti)
Contiguous memoryLagataar addresses par rakhi values (array ki khaas baat)
Row-major order2D array ko row-by-row memory me rakhna (C ka tarika)
Null character'\0' โ€” string ka terminator (ASCII 0)
PrototypeFunction ki advance declaration (int add(int, int);)
Base caseRecursion me rukne ki condition (iske bina stack overflow)
Stack overflowBahut zyada function calls/recursion se memory khatam ho jaana
PointerAddress store karne wala variable
Dereference*p โ€” address par padi value padhna/likhna
Dangling pointerWo pointer jo free/expire ho chuki memory ko point kare
Segmentation faultGalat memory access par program ka crash
Dynamic memoryRuntime par malloc/free se lena-dena (sirf pointers se)
๐Ÿ Poora Paper SEC101T โ€” Final strategy: Unit 1โ€“2 = concepts + ratta (keywords, storage classes, precedence table). Unit 3โ€“5 = programs likhne wali practice โ€” roz 2 program (largest, reverse, prime, factorial, Fibonacci, Armstrong, matrix, string functions, swap by reference, recursion). When a programming question asks for an explanation or output, include readable comments and a trace; follow the exact prompt and rubric. All the best! ๐Ÿ’ช