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.
Saal
Kya hua
1960
ALGOL 60 โ C ka ancestor (structured programming ka idea)
1967
BCPL (Basic Combined Programming Language) โ Martin Richards
1970
B language โ Ken Thompson (Bell Labs)
1972
C 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/1990
ANSI C / C89 standard (standardization for portability)
1999, 2011
C99, C11 โ naye features (bool, variable-length arrays, threading support)
2018
C17/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
#
Feature
Matlab + example
1
Simple & powerful
Sirf 32 keywords (C89), lekin inhi se poora operating system likha ja sakta hai โ simple syntax, kam rules
2
Middle-level language
High-level ki aasani (English jaisi statements) + low-level ki power (memory/pointer control) โ isliye OS, drivers, embedded sab C me
3
Portable
Ek machine par likha program doosri machine par chalta hai (recompile karke) โ hardware ki detail program me nahi hoti
4
Fast & efficient
Hardware ke bahut paas โ isliye game engines ka core, database engines, OS kernel C/C++ me hote hain
5
Structured + modular
Functions me todo, code reusable banta hai; block { } structure
6
Rich library + base of everything
Hazaaron 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.
Language
C 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 kernel
C 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;
}
Section
Kaam
Agar na likhe to?
Documentation
Comments โ /* ... */ (multi-line) aur // (single line). Compiler ignore karta hai, par insaan (aur examiner) ke liye zaroori
Program chalega, par readability kam โ viva me marks kat sakte hain
Preprocessor / Link
#include <stdio.h> โ input/output functions (printf/scanf) ready milte hain
printf/scanf unknown ho jaayenge โ compile error
Variables & 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 karo
main ke bina program link hi nahi hota (error: undefined reference to main)
Sub-programs
User-defined functions โ code ko tukdon me baantna
Sab 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 ๐
Term
Matlab
File extension
Source code
.c file โ jo aapne likhi (English jaisi)
.c
Preprocessed code
Header files expand hone ke baad ka code (bada file)
.i
Assembly code
Processor ki assembly language โ CPU ke instructions ke naam
.s / .asm
Object code
Machine code, par adhoora (library calls nahi jude)
.obj / .o
Executable
Poori tarah ready, chalane layak
.exe (Windows) / .out (Linux)
Debugging
Error 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
Kaam
Command (Linux/gcc)
Turbo C (Windows)
Compile karo
gcc first.c -o first
Alt+F9
Run karo
./first
Ctrl+F9
Output dekho
screen par hi
Alt+F5
Sirf preprocess
gcc -E first.c
โ
Assembly dekho
gcc -S first.c
โ
Warnings ke saath compile
gcc -Wall first.c
Options menu
Types of Errors (exam me alag-alag poochhte hain)
Error type
Kab milta hai
Example
Syntax error (compile-time)
Compiler pakadta hai โ grammar galat
printf("hi") โ semicolon missing; int 1a;
Logical error
Program chalta hai par output galat โ sabse khatarnak ๐ (compiler nahi pakadta)
Average me (a+b)/2 ki jagah a+b/2 likh diya
Runtime error
Program chalte waqt crash
0 se divide, array out of range, file na mile
Linker error
Linking ke time
Function 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 type
Size (typical 32/64-bit)
Range (approx.)
Format specifier
Example
char
1 byte
โ128 to 127
%c
'A'
int
2โ4 bytes
โ32,768 to 32,767 (2 bytes) ya ยฑ2.1 billion (4 bytes)
%d
45
float
4 bytes
3.4Eโ38 to 3.4E+38 (6 digits precision)
%f
89.75
double
8 bytes
1.7Eโ308 to 1.7E+308 (15 digits)
%lf
3.14159265
void
0 (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 type
Usually kitna
Real-life example
char
Grade: 'A'
Section, grade, gender, yes/no flag
int
Roll number, age, quantity
38 students, โน500, seat number
float
Percentage, temperature, price with paise
78.5%, 36.6ยฐC
double
Scientific 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)
Specifier
Use
Example output
%d / %i
Integer
45
%u
Unsigned integer
65535
%f
Float (default 6 decimal)
89.750000
%.2f
Float โ 2 decimal places
89.75
%lf
Double
3.141593
%c
Single character
A
%s
String (char array)
Ansh
%x / %o
Hexadecimal / Octal
2D / 55
%p
Address (pointer)
0061FF1C
%ld / %lld
Long / long long int
123456789012345
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)
Naam sirf letters (AโZ, aโz), digits (0โ9) aur underscore (_) se banega.
Pehla character letter ya underscore ho โ digit nahi. โ 1num โ๏ธ num1
Naam me space ya special symbol nahi (@, #, $, -). โ totalmarks
Keyword naam nahi ho sakta. โ int int;
C case-sensitive hai: marks aur Marks alag hain.
Naam meaningful rakho (marks, total, avg) โ debugging easy.
Maximum length compiler par depend karti hai, par 31 characters tak ka naam har jagah chal jaata hai.
Term
Matlab
Example
Declaration
Type + naam batana (jagah reserve)
int a;
Initialization
Pehli value dena
int a = 10;
Assignment
Baad me value daalna/badalna
a = 25;
Local variable
Function/block ke andar โ wahi tak valid (scope chhota)
main() ke andar int r;
Global variable
Sab 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
Term
Matlab
Example
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
Identifier
Aapke banaye naam โ variables, functions, arrays, structures ke naam
marks, 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
Group
Keywords
Kaam ek line me
Data types (5)
int, char, float, double, void
Variable ka type batate hain
Modifiers (4)
short, long, signed, unsigned
Type ka size/range badalte hain
Storage classes (4)
auto, static, extern, register
Scope aur lifetime decide karte hain (ยง1.8)
Decision (7)
if, else, switch, case, default, break, continue
Condition ke hisaab se raasta chunna
Loops/jump (4)
for, while, do, goto
Kaam baar-baar karna / jump karna
Functions (1)
return
Function se value wapas bhejna
User-defined types (5)
struct, union, enum, typedef, sizeof
Naye type banana / size nikalna
Others (2)
const, volatile
Value 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):
C language kisne banayi? (a) Ken Thompson (b) Dennis Ritchie (c) Martin Richards (d) Bjarne Stroustrup
C ka ancestor kaunsi language thi? (a) ALGOL (b) BCPL (c) B (d) Teeno (ek chain me)
C program main() ke bina chal sakta hai? (a) Haan (b) Nahi
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
#define
const
enum
Kaun handle karta hai
Preprocessor (compile se pehle text replace)
Compiler (ek read-only variable banta hai)
Compiler (integer names ka set)
Type checking
Nahi (sirf text replace โ galti pakdi nahi jaati)
/* 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 class
Keyword
Scope
Lifetime
Default value
Kahan store
auto (automatic)
auto
Sirf us function/block ke andar
Function/block khatam = memory free
Garbage (random)
RAM (stack)
register
register
Sirf us block ke andar
Block khatam = free
Garbage
CPU register (agar possible ho) โ fastest
static
static
Us file/function ke andar
Program ke poore chalne tak (value yaad rehti hai!)
0
RAM (data segment)
extern (external)
extern
Poora program (global, doosri files me bhi)
Poora program
0
RAM (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 */
Point
Detail (viva/exam me poochhte hain)
auto default hai
Function ke andar likha koi bhi normal variable by default auto hota hai โ keyword likhna optional
register ka limit
register 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 kaam
Variable/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 sequence
Kaam
Output me dikhta?
\n
New line
Nahi (cursor agli line)
\t
Tab (spacing)
Nahi
\\
Backslash print
Haan (\)
\"
Double quote print
Haan (")
\'
Single quote print
Haan (')
\0
Null character (string ka end โ Unit 4 me aayega)
Nahi (terminator)
\a
Beep/alarm sound
Nahi (sound)
\b
Backspace
Nahi
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
C: Dennis Ritchie, 1972, Bell Labs โข ALGOL โ BCPL โ B โ C โข ANSI C standard (1989) โข "Mother of all Languages"
Main features: simple, portable, middle-level, fast, structured, rich library
Specifiers: %d, %f, %c, %lf, %.2f, %lld โข sizeof = size in bytes (operator, not function)
Identifier rules: letter/_ se start, no space/special char, keyword nahi, case-sensitive โข 32 keywords
Symbolic constants: #define (no semicolon), const, enum
Storage classes: auto (block, garbage), register (fastest, no address), static (value yaad rehti hai, default 0), extern (global declaration)
printf/scanf ke liye stdio.h; scanf me & lagana mat bhoolna; character se pehle space
Escape sequences: \n, \t, \\, \", \0, \a
Syllabus-based exam-style practice questions (not predictions) โ Unit 1:
History of C? C ki features explain karo. (5โ10)
Structure of a C program โ saare sections explain karo. (10)
Compilation & execution process of C program step-by-step likho. (10)
Data types in C โ sizes aur format specifiers ke saath table. (5โ10)
What is a variable? Declaration vs initialization. Identifier naming rules. (5)
Keywords vs identifiers difference. (5)
Symbolic constants ke 3 tarike โ examples ke saath. (5)
Storage classes in C โ auto, static, register, extern table + example. (10)
Types of errors in C (syntax/logical/runtime) with examples. (5)
Program: do numbers ka sum/average; area of circle; swap two numbers; CelsiusโFahrenheit. (5 each)
#define aur const me difference; enum kya hai? (5)
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.
#
Category
Operators
Result ka type
1
Arithmetic
+ โ * / %
Number
2
Relational
< > <= >= == !=
1 (true) ya 0 (false)
3
Logical
&& || !
1 / 0
4
Assignment
= += -= *= /= %=
Assigned value
5
Increment / Decrement
++ --
Number (isme ยฑ1)
6
Bitwise
& | ^ ~ << >>
Integer (bit level)
7
Conditional (ternary)
?:
Do me se ek value
8
Special
sizeof , & * . -> (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
Operator
Kaam
Example (a=10, b=3)
Result
+
Addition
a + b
13
โ
Subtraction
a โ b
7
*
Multiplication
a * b
30
/
Division
a / b
3 (int/int = int! decimal kat jata hai)
%
Modulus (remainder)
a % b
1 (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. ๐
/* 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).
/* 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
Operator
Example
Matlab
=
a = 10
a me 10 daalo
+=
a += 5
a = a + 5
โ=
a โ= 5
a = a โ 5
*=
a *= 5
a = a * 5
/=
a /= 5
a = a / 5
%=
a %= 5
a = 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
Operator
Naam
Example (a=5)
Result
++ (prefix)
Pehle badhao, phir use karo
b = ++a;
a=6, b=6
++ (postfix)
Pehle use karo, phir badhao
b = a++;
b=5, a=6
โโ (prefix)
Pehle ghatao, phir use karo
b = โโa;
a=4, b=4
โโ (postfix)
Pehle use karo, phir ghatao
b = 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.
/* 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
Operator
Naam
Kaam
Example
,
Comma
Kai expressions ek saath (left se right evaluate; value = rightmost)
int a = 1, b = 2; โข x = (a = 3, a + 2); โ x = 5
sizeof
Size operator
Type/variable ka size bytes me
sizeof(int) โ 4 โข sizeof(arr)/sizeof(arr[0]) โ elements ki count
&
Address-of
Variable ka memory address
scanf("%d", &age)
*
Value-at / Dereference
Address par padi value (Unit 5)
p = &a; printf("%d", *p);
. aur ->
Member operators
Structure ke member tak pahunchna (dot = normal, arrow = pointer se)
s.name โข ptr->name
(type)
Type cast
Ek 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.
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
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!)
Ho sakta hai (bada โ chhota: decimal kat sakta hai)
Naam
Type promotion / coercion
Type 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
Operators ki 8 categories: arithmetic, relational, logical, assignment, increment/decrement, bitwise, ternary, special
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.
Statement
Kaam
Kab use
if
Ek condition true ho to kaam karo
Ek hi raasta (pass to next class)
if-else
True = ek kaam, false = doosra
Do hi options (pass/fail)
else-if ladder
Kai conditions ek ke baad ek
Grade banana (A/B/C/D)
nested if
if ke andar if
Ek ke baad ek condition (age aur license)
switch
Ek value ke kai fixed cases
Menu 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 printfhamesha 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 */
Basis
if (simple)
if-else
Rasta
Ek (condition true ho to kaam)
Do (true/false dono ka jawab)
else ka role
Nahi
False case handle karta hai
Chalne wala block
0 ya 1
Hamesha exactly 1
Example
Sirf pass hone par message
Pass/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)
Expression integer ya character hona chahiye โ float/double/string allowed nahi โ.
case ki value constant honi chahiye (literal ya #define) โ variable nahi.
Har case ke baad break lagao, warna aage ke cases bhi chal jaayenge (fall-through).
default optional hai par best practice hai (invalid input handle karta hai) โ ise kahin bhi likh sakte ho.
Do cases ki value same nahi ho sakti (duplicate case = compile error).
case me range ya condition nahi likh sakte โ case marks>50: โ galat. Range ke liye else-if ladder.
switch ke andar switch (nested switch) allowed hai.
Basis
switch
else-if ladder
Condition ka type
Sirf equality (==) โ ek value vs cases
Koi bhi condition (range, &&, ||, >, <)
Expression
int/char only (float nahi)
Kuch bhi (float, expression, string compare)
Case ki value
Constant honi chahiye
Koi bhi expression
Speed
Fast (jump table compiler bana leta hai)
Slow (ek-ek condition upar se check hoti hai)
break zaroori?
Haan โ warna fall-through
Nahi (hierarchy se hi ruk jata hai)
Best kahan
Menu, 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 fayde
goto ke nuksaan (exam me yahi likhna hai)
Ek jagah se doosri jagah turant jump โ simple hai
Spaghetti code โ program ka flow bikhra hua, padhna mushkil
Nested loops/conditions se ek saath bahar nikalne me kaam aata hai
Structured 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)
Compiler 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).
Basis
break
continue
Kaam
Loop ko turant khatam kar deta hai
Current round skip karke next round par jaata hai
Loop ka status
Loop poora band (bahar aa gaye)
Loop chal raha hai โ sirf ek chakkar chhoda
Baad wale iterations
Kabhi nahi chalte
Chalte rehte hain
Kahan use
Switch ke cases, "mil gaya to ruk jao" (search)
"Ye value skip karo, baaki dekho" (even numbers skip, negative skip)
Kaam ka example
Prime check me divisor mil gaya โ break
String 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. ๐
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).
Loop
Type
Syntax
Kab use (rule of thumb)
for
Entry-controlled
for (init; cond; update)
Jab kitni baar chalega wo pata ho (1 se 10 tak table)
while
Entry-controlled
while (cond) { body }
Jab count nahi pata, condition se pata chalega (jab tak password galat)
do-while
Exit-controlled
do { 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;
}
Basis
for
while
do-while
Type
Entry-controlled
Entry-controlled
Exit-controlled
Condition kab check
Har iteration se pehle
Har iteration se pehle
Har iteration ke baad
Kam se kam kitni baar
0
0
1
Init/update kahan
Ek hi line me (init; cond; update)
Bahar init, andar update
Bahar init, andar update
Semicolon
Header ke andar hi nahi
Nahi
while(cond); โ lagta hai
Best kahan
Count 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):
Sum of even numbers 1 se 50 tak (for loop).
1 se 100 tak ke prime numbers print karo (nested loop).
Ek number ka reverse nikaalo aur check karo ki wo palindrome hai โ ek hi program me.
Sum of digits = 15 aane wale 3-digit numbers ka counter likho (hint: while + % 10).
for (i = 0; i < 5; i++); printf("*"); โ kitne stars print honge? (dhyaan se!)
int i = 0; while (i < 3) { if (i == 1) continue; printf("%d", i); i++; } โ output?
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.
Digits wale programs ka trick: n % 10 (last digit nikalo), n / 10 (hatao) โ reverse, sum, palindrome, Armstrong sab isi par
HCF ke liye subtraction/Euclid, LCM = (aรb)/HCF
Trace table banao โ dry run se hi aadhe marks milte hain
Syllabus-based exam-style practice questions (not predictions) โ Unit 3:
Control structures kya hain? Types explain karo. (5)
if-else vs switch โ differences + example program. (10)
Write a program: largest of three numbers. (5 โ practical)
Entry controlled vs exit controlled loops difference with examples. (5)
Difference between while and do-while with example. (5)
for, while, do-while โ teeno ka syntax, comparison table. (10)
break aur continue ka difference, example ke saath. (5)
Nested loop se star pattern print karo. (5โ10)
goto statement kya hai? Iske nuksaan likho. (5)
Programs: reverse of number, sum of digits, factorial, prime, Fibonacci, Armstrong, palindrome, HCF/LCM. (10 โ practical)
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 lines
5โ6 lines me kaam khatam
Naya student add karna = poora code badalna
Sirf size badlo (ya #define MAX 60)
Array ki characteristics (5 points โ ratt lo)
Same type: sab elements ka data type ek hi (int array me sirf ints, float me floats). Mix nahi kar sakte.
Contiguous memory: elements RAM me lagataar (ek ke baad ek) rakhte hain โ isliye address formula kaam karta hai.
Fixed size: size declare karte waqt batana padta hai; program chalte waqt badha nahi sakte.
Index 0 se: pehla element index 0, last index = size โ 1. Size 5 โ valid indexes 0,1,2,3,4.
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 chhota
Size 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 aasan
Sirf 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 handle
Zarurat se zyada (ya kam) memory ka risk โ size pehle guess karna padta hai
Array ke types
Type
Declaration
Kahan 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).
Function
Kaam
Example
Result
strlen(s)
Length nikalta hai ('\0' se pehle tak ke characters)
/* 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.
Function
Kaam
Example
Result
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 digit
isalnum('!')
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 โ small
tolower('B')
'b'
toascii(ch)
Character ka ASCII code
toascii('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
Array = same type, contiguous memory, index 0 se shuru, size fix (runtime par nahi badalta)
Declaration: int a[5]; โข Initialization: {10,20,30} โข Size auto: int c[] = {โฆ}; โข Reset: int a[5] = {0};
Address formula: Base + (i ร size) โ isliye random access O(1) โข sizeof(a)/sizeof(a[0]) = element count
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
Hissa
Matlab
Example
Return type
Function kya wapas dega (int, float, char, ya void = kuch nahi)
int, float, void
Function name
Naam 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 statements
area = PI*r*r;
return
Result wapas bhejna + function khatam. Sirf ek value return ho sakti hai
return area;
Benefits of functions (6 points โ 5-mark question)
Reusability: Ek baar likho, baar-baar use karo (code duplication khatam).
Modularity: Bada program chhote-chhote tasks me bat jata hai โ samajhna aasan.
Easy debugging: Problem wale function ko alag test kar sakte ho, poori file nahi.
Readability:calculateInterest() dekh kar hi samajh aa jata hai kya ho raha hai (comment ki zarurat kam).
Maintainability: Badlav ek jagah โ 50 jagah nahi (bug fix ek hi baar).
Teamwork: Alag-alag log alag-alag functions par kaam kar sakte hain.
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
Basis
Built-in (Library) Functions
User-defined Functions
Kaun banata hai
C library ke developers (pehle se ready-made)
Programmer khud (aap!)
Header file
Include karni padti hai (#include <math.h>)
Program ke andar hi likhi hoti hai
Code
Sirf call karte hain โ andar ka code dikhta nahi
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
}
Term
Matlab
Example
Formal parameters
Definition me likhe dabbe (values receive karte hain)
int add(int a, int b) me a, b
Actual parameters / arguments
Call karte waqt bheji gayi values
add(5, 3) me 5, 3
return
Value wapas bhejna aur function turant khatam. Ek function se sirf ek value
return a + b;
void
"Kuch nahi" โ kuch return nahi karta (par printf se output dikha sakta hai)
void greet()
Return ki value ka use
Expression 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)
Basis
Call by Value
Call by Reference
Kya bhejte hain
Value ki copy
Variable ka address (pointer)
Original par asar
Nahi โ original safe rehta hai
Haan โ original badal jaata hai
Kaise likhte hain
swap(a, b); โ void swap(int x, int y)
swap(&a, &b); โ void swap(int *x, int *y)
Memory
Alag copy banti hai (extra memory)
Copy nahi banti (same memory par kaam)
Kab use
Jab original badalna nahi hai (calculation, print)
Jab original badalna hai (swap, update, arrays, multiple return)
Speed/safety
Safe (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 */
Basis
Recursion โ๏ธ
Iteration (loops)
Code
Chhota aur math ke paas (tree, factorial, Hanoi)
Thoda lamba par seedha (loop)
Memory
Har call ka stack frame โ zyada memory
Ek hi block โ kam memory
Speed
Slow (function call overhead) โ Fibonacci me bahut slow
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 / Term
Naam
Matlab
&
Address-of operator
Variable ka address nikalta hai: &a โ 1000
*
Dereference / indirection operator
Address par padi value: *p โ padhna ya likhna dono
int *p
Declaration
"p ek pointer hai jo int ka address rakhega"
NULL
Null pointer
int *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 se
Memory leak โ free() bhoolna (program slow/crash over time)
Linked list, tree, graph, hash table jaise data structures pointers se banti hain
Dangling pointer (free ke baad use), wild pointer (uninitialized) ka khatra
Arrays/strings efficiently handle โ string functions internally pointers use karti hain
Debugging mushkil โ galti jahan hui wahan nahi, kai lines baad crash hota hai
Hardware/OS/driver programming, embedded systems ke liye essential
Portability 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
Function = block of statements, specific kaam, reusable โข 3 steps: Declaration (prototype) โ Definition โ Call
Anatomy: return type + naam + parameters + body + return โข void = kuch return nahi โข ek function sirf ek value return karta hai
Built-in (printf, scanf, sqrt, strlen) vs User-defined (apne banaye) โ built-in ke liye header file zaroori
Formal parameters (definition me) vs actual arguments (call me)
Call by value = copy (original safe) โข Call by reference = address (original badalta hai) โข array parameter adjusts to pointer; pointer is passed by value
Recursion = function khud ko call kare โข base case zaroori (warna stack overflow) โข factorial, Fibonacci, GCD, Hanoi, power
Recursion vs iteration: recursion elegant par slow + zyada memory; iteration fast
Pointer = address store karne wala variable โข & = address of, * = value at address โข NULL/init zaroori
Array ka naam hi pehle element ka pointer hai: arr == &arr[0]
Ek function se kai values = pointers (minMax, stats, swap) โ exam ka favourite
Syllabus-based exam-style practice questions (not predictions) โ Unit 5:
Function kya hai? Declaration, definition aur call ko example se samjhao. (10)
Built-in aur user-defined functions me difference + examples. (5)
Function ke fayde (reusability, modularityโฆ) likho. (5)
Call by value vs call by reference โ swap program ke saath. (10 โ Lab #10)
Recursion kya hai? Factorial ka recursive program likho + trace do. (10)
Recursion vs iteration (differences). (5)
Pointer kya hai? Declaration, initialization aur access explain karo. (10)
Pointers aur arrays ka relation: arr[i], *(arr+i), p[i] samjhao. (10)
Pointer arithmetic kya hai? Example do. (5)
Advantages aur disadvantages of pointers. (5)
Program: pointer se do numbers swap karo / min-max nikalo / array ka sum-average function se. (5โ10)
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)
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.
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).
Header file kya hai? Ready-made function declarations ki file โ #include se judti hai (stdio.h, math.h, string.h).
Token kya hai? Program ka sabse chhota meaningful tukda โ keyword, identifier, operator, literal, special symbol.
Variable aur constant me farak? Variable ki value badal sakti hai; constant (const/#define) nahi badal sakti.
Lvalue aur Rvalue? Lvalue memory location hai (left side โ a), Rvalue value hai (5) โ 5 = a; galat hai kyunki 5 lvalue nahi.
#define PI 3.14; me galti kya hai? Semicolon โ isse PI ki jagah "3.14;" replace ho jaayega. #define me ; nahi lagta.
Garbage value kya hai? Bina initialize local variable me pehle se padi random value (auto variable ka default).
Explicit aur implicit conversion ka farak? Implicit compiler khud karta hai (promotion, safe); explicit programmer (type) likhkar (data loss ho sakta hai).
Operator aur operand? Operator kaam karne wala symbol (+); operand jis par kaam hota hai (a, b).
Unary vs binary operator? Unary ek operand par (!a, a++, -a), binary do par (a+b, a>b).
Short-circuit evaluation?&& me pehla false โ doosra check nahi; || me pehla true โ doosra check nahi.
sizeof function hai ya operator? Operator โ compile time par size nikalta hai, parentheses optional hain.
Entry aur exit controlled loop? Entry: condition pehle (for, while). Exit: body pehle, condition baad me (do-while, kam se kam 1 baar).
Dangling else kya hai? Bina braces ke if-else me else sabse nazdeek wale if se jud jata hai โ confusion.
switch me default zaroori hai? Optional hai, par best practice โ invalid input handle karne ke liye.
Infinite loop ke kaaran? Update statement na hona, condition kabhi false na hona, galat semicolon (while(i<5);).
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).
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).
Row-major aur column-major? C row-major (pehle row bhar); FORTRAN column-major.
'\0' aur '0' me farak?'\0' = null character (ASCII 0, string terminator); '0' = digit zero (ASCII 48).
scanf("%s") ki kami? Space par ruk jata hai โ multi-word input ke liye fgets/gets chahiye.
gets() kyun mana hai? Buffer size check nahi karta โ overflow ka risk (security issue).
strlen aur sizeof me farak (array of chars)?strlen '\0' se pehle ke characters ginta hai; sizeof poore array ke bytes.
Function prototype kyun likhte hain? Compiler ko pehle bata dete hain (return type + parameters), warna call par warning/error aa sakti hai.
Actual vs formal parameter? Actual = call me bheji value; formal = definition ke dabbe jo value receive karte hain.
Function se 2 values kaise? Pointers (reference-style modification in C) โ address bhejo, function values likh dega.
Recursion me base case kyun? Rukne ke liye โ warna infinite recursion aur stack overflow.
Recursion kab iteration se better? Tree/graph/Hanoi/quick-sort jaise problems me jahan solution recursive structure ka ho.
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 program
Kaunsa concept (unit)
Dhyaan rakho
P1
Largest of two / three numbers
if, if-else, ternary (U3)
Ternary ka nested form aur if-else dono versions likho
fprintf se likho, fscanf se padho; feof se loop roko
P16
Copy file โ lowercase โ UPPERCASE
File + ctype.h (U4/U5)
toupper() per character; do files (source, target)
Lab viva โ 20 questions jo har baar poochhe jaate hain (short answers):
Why do we write return 0; in main? OS ko batane ke liye ki program successful khatam hua (0 = success).
What is a header file? Ready-made function declarations ki file jo #include se judti hai.
#include <stdio.h> aur #include "myfile.h" me farak? Angle brackets system headers ke liye, double quotes apni file ke liye.
Why is & used in scanf but not in printf? scanf ko address chahiye (kahan rakhna hai), printf ko value.
%f aur %lf me farak?%f float ke liye, %lf double ke liye.
What is type casting? Zabardasti type badalna โ (float)a / b.
Why do we use long long in factorial? Bade result ke liye (20! int me overflow ho jaata hai).
Difference between = and ==?= value daalta hai, == compare karta hai.
What is fall-through in switch? break na hone par agli case bhi chal jaana.
Why does a do-while run at least once? Condition body chalne ke baad check hoti hai.
What is an entry-controlled loop? Jisme condition pehle check hoti hai (for, while) โ 0 baar bhi chal sakta hai.
Array ka index 0 se kyun? Address formula me offset 0 se start hota hai (base + i ร size).
Why can't we compare two strings with ==? Ye addresses compare karta hai; content ke liye strcmp().
Why do we need '\0' in a string? String ka end batane ke liye; iske bina printf garbage print karta hai.
Function prototype kyun likhte hain? Compiler ko pehle function ka signature batane ke liye.
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.
Recursion me base case na ho to? Stack overflow (infinite recursion) ๐ฅ
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.
Pointer ka size kya hota hai? Machine par depend โ 4 byte (32-bit) / 8 byte (64-bit), type se farak nahi padta.
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)
#
Program
Logic ek line me
Key statement
1
Sum / average of two numbers
Input โ jodo โ divide
avg = (float)(a+b)/2;
2
Area & circumference of circle
ฯrยฒ aur 2ฯr
#define PI 3.14159
3
Swap two numbers
Teen variable (ya bina temp: a=a+b; b=a-b; a=a-b;)
t=a; a=b; b=t;
4
Largest of three
Nested if / ternary
(a>b)?((a>c)?a:c):((b>c)?b:c)
5
Even / odd
Modulus 2
n % 2 == 0
6
Leap year
4 se divisible aur 100 se nahi, ya 400 se
(y%4==0 && y%100!=0) || y%400==0
7
Grade using else-if ladder
Upar se neeche range check
if (m>=90) โฆ else if (m>=75) โฆ
8
Simple calculator (menu)
switch + 4 cases + default
case 1: printf("%f", a+b); break;
9
Reverse of a number
% 10 se digit, / 10 se hatao
rev = rev*10 + n%10; n /= 10;
10
Factorial
1 se n tak multiply (long long)
f = f * i;
11
Prime check
2 se n/2 tak koi divisor? break!
if (n % i == 0) { flag = 0; break; }
12
Fibonacci series
Agla = pichle do ka sum
c = a + b; a = b; b = c;
13
Armstrong number
Digits ke cubes ka sum = number
sum += r*r*r;
14
Array: sum, largest, smallest
Ek loop + 2 comparisons
if (a[i] > max) max = a[i];
15
String: reverse / vowels / palindrome
Loop + '\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:
C language ka developer kaun hai? (a) Ken Thompson (b) Dennis Ritchie (c) Bjarne Stroustrup (d) James Gosling
arr[i] kis ke barabar hai? (a) *(arr+i) (b) arr+i (c) &arr[i] (d) *arr+i
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".
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)
Escape sequence \n aur \t ka kaam likho.
sizeof operator hai ya function? Kyun?
Do example do: valid aur invalid identifier.
10 / 3.0 ka result kya hoga aur kyun?
do-while loop kam se kam kitni baar chalta hai aur kyun?
Section B โ Short answer (5 marks ร 6 = 30)
C program ka structure sections ke saath explain karo.
Storage classes ka table banao (scope, lifetime, default value).
break aur continue ka difference example ke saath.
Array kya hai? Address calculation ka formula likho aur ek example solve karo.
String aur '\0' ka relation samjhao.
Call by value aur call by reference ka farak (example).
Section C โ Long answer / Programs (10 marks ร 3 = 30)
Switch statement ka syntax aur rules likho + menu-driven calculator ka program banao.
Matrix multiplication ka program likho (3 loops explain karo).
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
Term
Matlab (ek line)
Compiler
C code ko machine code me badalne wala program (error pakadta hai)
Preprocessor
Compile se pehle # wali lines (#include, #define) handle karta hai
Linker
Object code + library functions jodkar .exe banata hai
Token
Program ka sabse chhota tukda โ keywords, identifiers, literals, operators
Escape sequence
Backslash wala special character (\n, \t, \\, \0)
Format specifier
printf/scanf me type batane wala code (%d, %f, %c, %s)
Type casting
Zabardasti type badalna โ (float) a / b
Fall-through
switch me break na hone par agli case bhi chal jaana
Loop jo kabhi khatam na ho (update/condition/semicolon ki galti)
Contiguous memory
Lagataar addresses par rakhi values (array ki khaas baat)
Row-major order
2D array ko row-by-row memory me rakhna (C ka tarika)
Null character
'\0' โ string ka terminator (ASCII 0)
Prototype
Function ki advance declaration (int add(int, int);)
Base case
Recursion me rukne ki condition (iske bina stack overflow)
Stack overflow
Bahut zyada function calls/recursion se memory khatam ho jaana
Pointer
Address store karne wala variable
Dereference
*p โ address par padi value padhna/likhna
Dangling pointer
Wo pointer jo free/expire ho chuki memory ko point kare
Segmentation fault
Galat memory access par program ka crash
Dynamic memory
Runtime 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! ๐ช