Table of contents
- printf() function
- Data types in C
- int type:
- float type:
- char type
- how to reading input for keyboard or user
- operators
- type conversion
- condition
- switch statement
- ternary operator
- Loop in C programming
- while loop in C
- Do while loop
- Array in C programming
- String in C programming
- copy string value and concat
- reversing array
- Function in C programming
- Pointer in C programming
- Arithmetic Of pointer
- Pass by add and change value
- selection sort
- Bubble sort
c programming is case sensitive language
#include <stdio.h>
int main(){
printf("i am writing basic c notes\n");
//variables
int price = 100;
int discount = 10;
float price_1 = 10.10;
printf("%d\n",price);
printf("i got %d marks\n",price );
printf("product price %d and discount %d\n",price ,discount);// %d এঁর স্থানে গুলোতে সিরিয়াল অনুযায়ী ভেলু বসে যাবে
printf("%f\n",price_1);// parcent এঁর পড় ৪ ঘর দেখাবে
return 0;// return 0 করতেই হবে।
};
printf() function
#include <stdio.h>
int main(){
printf("hello\n i am rashedul islam\n");// \n for new line
printf("hello\t i am rashedul islam");// \t for tab
printf("%.2lf/n",area)// oদশমিকের পড় ২ ঘর দেখাবে
return 0;
}
Data types in C
#include <stdio.h>
int main(){
int price = 100;// storing integers value || positive or negative value
float temp = 40.10;// storing floats value
double temp2 = 29.9;
printf("%lf\n", temp2); // %lf for print double type variable values
char name = 'rashedul';
printf("character = %c\n",name);
return 0 ;
};
int type:
#include <limuts.h>
// ==========to show int limit=========
printf("%d",INT_MAX);
printf("%d",INT_MIN);
// ==========to show short int limit=========
short int age = 20;
printf("%d", SHRT_MAX);
printf("%d", SHRT_MIN)
// ==========to show Long int limit=========
long int age = 20; // এটা তেমন আমরা ব্যাবহার করি না ।
// ==========to show Long long int/ long long limit=========
long long age = 1124234;
printf("%lld", LONG_MAX);
printf("%lld", LONG_MIN);
======================================================================
unsigned int a = 0;
float type:
আমরা float এঁর সাথে আর একটা type দেহেছিলাম যেটা হচ্ছে dubble, এদের মধ্যে পার্থক্য হচ্ছে /
FLoat | Dubble |
ধারণ ক্ষমতা কম | ধারণ ক্ষমতা বেশি |
Accuracy কম --> মানে কালকুলেশন এ একজ্যাক্ট মান পাওয়া যাই না বড় সংখ্যার ক্ষেত্রে | Accuracy বেশি --> মানে কালকুলেশন এ একজ্যাক্ট মান পাওয়া যাই বড় সংখ্যার ক্ষেত্রে |
বড় মান ধারণ করতে পারে না | বড় মান ধারণ করতে পারে |
math library এঁর ফাংশন গুলো কাজ করে না | math library এঁর ফাংশন গুলো কাজ করে |
#include <math.h> | |
double num = 1000; | |
double cude = pow(num,3); | |
double squereRoor = sqrt(num,3); | |
printf("%llf",cube) |
char type
#include <ctype.h>
for (i = 32, i<= 126, i++){
printf("%d\t %c\n", i,i) // to see ASCII code of your keyboard .
}
how to reading input for keyboard or user
scanf() এঁর বিশিষ্ট হল প্রথমে আমাদের type বা format specifier তার পর কোন ভেরিয়েবলে ষ্টোর হবে সেটা হলে দিতে হবে ।
#include <stdio.h>
int main(){
int eng_marks ;
int bn_marks ;
printf("please inter your eng mark:");
scanf("%d",&eng_marks);
printf("please inter your bn mark:");
scanf("%d",&bn_marks);
// এভাবে এলাদা আলাদা ইনপুট না নিয়ে আমরা এক লাইনেই ২ টা ডাটার ইনপুট নিতে পারতাম ।
printf("please enter your english and bang marks");
scanf("%d%d",&eng_marks,&bn_marks);
int total_marks = eng_marks + bn_marks;
printf("total mark = %d\n", total_marks);
return 0 ;
}
operators
Arithmetic : +, - , * , / , %
assignment: +=,-=,8=,/=%=,,++,--
conditional && , || ,
#include <stdio.h>
// arithmetic operator example:
int main(){
int num1 ;
int num2;
printf("please inter your first and second number:");
scanf("%d %d",&num1,&num2);
int sum = num1+num2;
int sub = num1-num2;
int multiplication = num1*num2;
float division = num1/num2;
int mod = num1%num2;
printf("sum = %d, sub = %d, multiplication = %d, deviation = %f, mod= %d",sum,sub,multiplication,division,mod);
return 0 ;
}
#include <stdio.h>
// arithmetic operator example:
int main(){
int price ;
price = 10;
printf("%d\n",price);
price += 10;
printf("%d\n",price);
price %= 10;
price++ //post increment
++price //pre increment
printf("%d\n",price);
return 0 ;
}
type conversion
অনেক সময় এমন অবস্থা তৈরি হয় যেখানে আমাদের পূর্বের ডিক্লার করা ডাটা টাইপ পরিবর্তন করতে হয় । এমন অবস্থাই এই পদ্ধতি ব্যাবহার হয় ,
#include <stdio.h>
int main(){
double realNum = 10.45645 ;
int num = realNum ;
printf("num = %d, realNum = %lf\n", num , realNum);
// উপরের কোড গুলো হল ইমপ্লিসিট conversions । কারণে উপরে কোড গুলো আমরা ম্যানুয়ালি type change করে ভেলু আসাইন করেছি ।
printf("number = %d\n", (int) realNum);// এখানে আমরা জোর করে টাইপ কনভার্সন করলাম এটাকে এক্সপ্লিসিট কনভার্সন বলে ।
//=================================
int num1, num2;
num1 = 20,num2=30;
double vagfol = (double)num1/(double)num2;
//=================================
//===========const variable===============
const int = 10, // এটার শুধু রিডএবল পরবর্তীতে আর ভেলু সেট করা যাবে না ।
//===========const variable===============
return 0 ;
}
condition
if, if else, else
< , > ,<=, >= , == , !=
c তে conditional সত্য হলে ১ রিটার্ন করে না হলে ০ রিটার্ন করে । যদি true ,false রিটার্ন ভেলু হিসেবে পেতে চাই তাহলে ইম্পরট করতে হবে .
#include <stdio.h> #include <stdbool.h> 👆👆👆👆👆👆👆👆👆👆👆👆 must import করতে হবে int main(){ bool num = false ; printf("%d",num); // it's return 0 because //==========এভাবেও true,false প্রকাশ করা যায়========== bool num = 1 // true bool num = 0 // false //==========----------------------------========== return 0; }
multiple condition joiner logical operators
&& , || , !
#include <stdio.h>
int main(){
const int exam_mark = 80;
const int class = 9;
if(exam_mark>=80 && class == 9){
printf("you are pass in exam");
}else if(exam_mark<30){
printf("you are fail in exam");
}else{
printf("try to best");
};
return 0;
}
switch statement
for implement logic
#include <stdio.h>
int main() {
char operation;
int n1, n2;
printf("Enter an operator (+, -, *, /): ");
scanf("%c", &operation);
printf("Enter two operands: ");
scanf("%lf %lf",&n1, &n2);
switch(operation)
{
case '+':
printf("%.1lf + %.1lf = %.1lf",n1, n2, n1+n2);
break;
case '-':
printf("%.1lf - %.1lf = %.1lf",n1, n2, n1-n2);
break;
case '*':
printf("%.1lf * %.1lf = %.1lf",n1, n2, n1*n2);
break;
case '/':
printf("%.1lf / %.1lf = %.1lf",n1, n2, n1/n2);
break;
// operator doesn't match any case constant +, -, *, /
default:
printf("Error! operator is not correct");
}
return 0;
}
ternary operator
#include <stdio.h>
int main(){
int sum;
scanf("%d",&sum);
sum > 10 ? printf("yes") : printf("no");
return 0;
}
Loop in C programming
#include <stdio.h>
int main(){
for (int i = 0, j=10; i <= j; i++){
printf("i am inviting you\n");
}
};
#include <stdio.h>
int main(){
for (int i = 0, j=10; i <= j; i++,j--){
printf("%d %d\n",i,j);
}
}
#include <stdio.h>
int main(){
for (;;){
printf("infinite loop");// because there is no condition
}
}
#include <stdio.h>
int main(){
int sum=0;
for (int i = 0; i <= 5; i++){
sum+=i;
};
printf("%d",sum);
}
#include <stdio.h>
int main() {
int n = 10;
for (int i = 0; i <= n; i++){
for (int j =1; j <= i; j++){
printf("*");
};
printf("\n");
}
return 0;
}
#include <stdio.h>
int main() {
int n;
scanf("%d",&n);
for (int i = 0; i <= n; i++){
for (int j =1; j <= i; j++){
printf("%d",i);
};
printf("\n");
}
return 0;
}
// output
/*
1
22
333
4444
55555 */
// problem solving --> internet balance calculation
#include <stdio.h>
int main() {
int limit,months;
scanf("%d %d",&limit,&months);
int baki = 0;
for (int i = 0; i < months; i++){
int used;
scanf("%d",&used);
int limit_month = limit + baki;;
baki = limit_month - used;10;
printf("limit = %d, used = %d, baki = %d",limit_month,used,baki);
};
return 0;
}
while loop in C
যদি আমাদের এক কাজ বার বার করতে হয় তখন আমরা while loop ব্যাবহার করব । যতক্ষণ কন্ডিশন মিলে যাবে ততক্ষণ এই লুপের কন্ডিশন কাজ করবে । তখনি ব্যাবহার করব জখন আমরা জানব না যে কতক্ষণ আমাদের লুপ চলবে ।
#include <stdio.h>
int main(){
int i = 1;
while(i<=5){
printf("%d\n", i);
i++;
}
return 0 ;
}
#include <stdio.h>
int main(){
int money = 0;
int target = 100;
while(money<target){
printf("enter money:");
int given;
scanf("%d",&given);
money+=given;
printf("%d",money);
}
return 0 ;
}
// =====================problem solving=========================
// আমরা এমন কিছু ১২৩৪৫৬ ইনপুট দিব এদের যোগফল বের করতে হবে ।
/* স্টেপসঃ
১। একটা ইনপুট নিব ।
২/ সে ইনপুটকে ১০ দ্বারা mod (%) করব। এটা করলে ইনপুটের লাস্ট ডিজিট পেয়ে যাব । এক্ষেত্রে ৬ পাব ।
৩/ ইনপুট কে আবার ১০ দ্বারা ভাগ করব । এটা করার কারণে আমরা লাস্ট ডিজিট বাদে আগের সংখ্যা গুলো পাব । এভাবে লুপ চালালে কিন্তু এক সময় আমরা ০ পেয়ে যাব। এখানে আমাদের লুপ থামাতে হবে ।
৪/ এখন আমরা যোগফল বের করব */
#include <stdio.h>
int main(){
int x;
scanf("%d", &x);
int sum = 0;
while (x>0){
int digit = x%10;
x/=10;
// printf("x= %d\n ,d=%d\n",x,digit);
sum+= digit;
}
printf("sum= %d\n",sum);
return 0 ;
}
Do while loop
statement আগে চেক করবে তারপর কন্ডিশন । do এঁর ষ্টেটমেন্ট শুরুতে একবার এক্সিকিউট হবে । while এঁর ষ্টেটমেন্ট নাও হতে পারে ।
#include <stdio.h>
int main(){
int i = 10 ;
do {
printf("do statement");
} while (i < 5);
return 0;
}
Array in C programming
#include <stdio.h>
int main()
{
int mark[3]; // type name[size];
printf("%d", mark[1]);
return 0;
};
#include <stdio.h>
int main(){
int n = 100; // to store int value i consume 4 bytes
long long a = 100; // to store long long value i consume 8 bytes
char b = 10; // to store char value i consume 1 bytes
int numbers[10]; // so on the above data it will consume 40 bytes
printf("%d\n", sizeof(numbers));
// =============to see array size===============
printf("%d\n", sizeof(numbers) / sizeof(numbers[0]));
return 0;
}
//=====================initialize array data==========================
#include <stdio.h>
int main()
{
int numbers[5] = {1, 2, 3, 4, 5, 6, 7}; // 6 and 7 avoid now this situation.
int numbers[] = {}; // you can store infity numbers in this array
printf("%d\n", sizeof(numbers) / sizeof(numbers[0]));
return 0;
}
// ============ rating calcutation like google play store ==============
#include <stdio.h>
int main()
{
int numbers_of_users;
scanf("%d", &numbers_of_users);
int ratings[numbers_of_users];
for (int i = 0; i < numbers_of_users; i++){
scanf("%d", &ratings[i]);
}
int sum = 0;
for (int i = 0; i < numbers_of_users; i++){
sum += ratings[i];
}
double average = (double)sum / numbers_of_users;
printf("average = %lf\n", average);
int count[6] = {0};
for (size_t i = 0; i < numbers_of_users; i++){
int x = ratings[i];
count[x]++;
}
for (size_t i = 1; i <= 5; i++){
printf("%d -> %d\n", i, count[i]);
}
return 0;
}
/* input: output:
================ =====================
10 average = 1.600000
1 2 3 4 5 1 -> 4
1 2 3 4 5 2 -> 6
3 -> 0
4 -> 0
5 -> 0 */
String in C programming
#include <stdio.h>
int main(){
char st[] = "This is a string"; // string declaration
st[2] = '0'; // আপডেট করার সময় সিঙ্গেল কোটেশনে লেখতে হয় ।
st[3] = '\0';// \0 is a null value. যখনই একটা স্ট্রিং এঁর মাঝে নাল পাবে তখনে স্ট্রিংটাকে শেষ করে দিবে ।
printf("%d\n", sizeof(st) / sizeof(st[0]));// string length
printf("%s", st);// print string value
puts(st);// print out out-put string value
return 0;
}
//=============how to get input as a string=========
#include <stdio.h>
int main(){
char name[100];
printf("enter your name\n");
scanf("%s", name); // এঁর মাধ্যমে ইনপুট নিতে পারি তবে এখানে কিছু ঝামেলা আছে । যেমন white space থাকতে সেখানে স্ট্রিং টাকে শেষ মনে করে নেয়
gets(name);// এঁর মাধ্যমেও ইনপুট নেওয়া যায় । এখানে scanf() এঁর মত সমস্যা নেই । সকল কিছু ইনপুট নিয়ে নিবে যতক্ষণ না পরজন্তু নিউ লাইন না পাবে
puts(st);// print out out-put string value
printf("Hello %s\n", name);
/* এই যে নিয়ম গুলো দেখলাম সেখানে মনে হচ্ছে scanf() এঁর চেয়ে বুঝি gets() ব্যাবহার করা ভালো হবে সেফ হবে আর কি ।
তবে এখানেও কিছু সমস্যা আছে যেমন যত character আমরা ইনপুট হিসেবে নিতে চাচ্ছি তার থেকে বেশি ইনপুট দিলে আমাদের সিস্টেম কাজ করা বন্ধ করে দিবে ক্রাশ
করবে । হ্যাকাররা এগুলো করে থাকে । তবে এঁর একটা বিকল্প পদ্ধতি আছে যার মাধ্যমে আমরা সমস্যার সমাধান করতে পারি । */
fgets(name, 100, stdin); // (where, size, stdin) । এই মেথড টা যত ইনপুট নিতে চাচ্ছি তাই নিবে পড়ের গুলো বাদ দিয়ে দিবে
return 0;
}
#include <stdio.h>
#include <string.h>
int main(){
char name[100] = "rashedul islam";
int length_of_string = strlen(name);
//🤚for get string length;
printf("%d",length_of_string);
return 0 ;
}
copy string value and concat
#include <stdio.h>
#include <string.h>
int main(){
char name[] = "rashedul islam shihab";
char name2[10];
strcpy(name2, name); // এটার সমস্যা হচ্ছে আমাদের name2 তে ১০ ক্যারেক্টারের বেশি নিতে পারবে না । এঁর কারণে অন্য রকম একটা ব্যাবহার করবে । এঁর সমাধান করতে পারি এভাবে ;
strncpy(name2, name, 9); // ৯ দিলাম কারণ শেষে একটা নাল ভেলু থাকে ।
name2[9] = '\0'; // এটা করতেই হবে । শেষে নাল ভেলু আসাইন করতে হবে ।
printf("%s\n", name2);
return 0;
}
// ===============================concat==============================
char char1[100] = "hello";
char char2[100] = "world";
strcat(char1, char2);
strncat(char1, char2, 9);
char1[9] = '\0';
printf("%s\n", char1);
return 0;
//============================compare string==========================
char char1[100] = "hello";
char char2[100] = "hell0";
int result = strcmp(char1, char2);
/*negative = first string smaller
return 0 = both strings are equal
positive = second string is equal*/
printf("%d\n", result);
reversing array
see on google
Function in C programming
#include <stdio.h>
void print_hello(void){
printf("Hello");
};
void print_msg(char msg[]){
printf("Message is %s", msg);
};
int main(){
print_hello();
return 0;
}
/*syntax:
return_type name(){}
*/
//======================return type===============
#include <stdio.h>
int sum(int x, int y){
return ("%d", x + y);
}
int main(){
int a = sum(1, 2);
printf("%d\n", a);
return 0;
}
Pointer in C programming
আমাদের যেমন বাড়ীর এড্রেস আছে । তেমনি আমাদের ডিক্লার করা ভেরিয়েবলেরও তেমন এড্রেস আছে । আর এটাকে পয়েন্টার বলে । আমার %p এঁর মাধ্যমে পয়েন্টার বের করতে পারি । আর যে ভেরিয়েবল এঁর পয়েন্টার দেখতে চাই তার আগে & (address sign )চিহ্ন বসাতে হবে ।
#include <stdio.h>
int main(){
int price = 10;
char name[100] = "rashedul";
printf("%p\n", &name);// 0x16fd67034 । এমন পয়েন্টার ভেলু দেখার জন্য
printf("%lld\n", &name); // 6171291700 .পয়েন্টার নুম্বার ভেলু দেখার জন্য
return 0;
}
//===============declare pointer ==================
/* 1. * sign দিতে হয়
2. veriable নামের আগে p দিয়ে দেই । যাতে চেনা যাই এটা একটা পয়েন্টার । */
#include <stdio.h>
int main(){
int val = 10;
int *pval = &val;
printf("%p\n", *pval);
printf("%d\n", *pval);
val = 100;
*pval = 200;
return 0;
}
/* notes: & (address) দ্বারা ভেলুর এড্রেস নেওয়া যায় । * দ্বারা একটা এড্রেসে কোন ভেলু আছে সেটা বের করা যায় ।
আর যে ভেরিয়েবলের উপর ভিত্ত করে পয়েন্টের ডিক্লার করা হয়েছে । সেটা চেঞ্জ হলে পয়েন্টারের মান ও চেঞ্জ হবে ।
আবার পয়েন্টার চেঞ্জ হলে ভেরিয়েবলও চেঞ্জ হবে । */
Arithmetic Of pointer
পয়েন্টারতো একটা ভেরিএবলের লোকেশন নির্দেশ করে । তাহলে এঁর আবার + , - , * , / হবে কিভাবে । বিষয়টা তেমন না আমাদের অনেক সময় ওই এড্রেস এঁর পড় বা আগের এড্রেসে কি আছে সেটা জানতে হতে পারে । যে জন্য আমাদের এই বিষয়টা জানা দরকার ।
#include <stdio.h>
int main() {
int number = 10;
int *pNumber = &number;
printf("%lld\n", pNumber);
pNumber++;
printf("%lld\n", pNumber); // এটার উত্তর ৪ বেশি আসবে । কারণ একটা int value ৪ বাইট হয়ে থাকে ।
// কত বাইট করে সামনে আগাবে সেটা ডিপেন্ড করে veriable type এঁর উপর । যেমন স্ট্রিং এঁর ক্ষেত্রে ১ বাইট ।
return 0;
};
/* =============problem
আমরা কোণ const variable ডিক্লার করা হলে । পরবর্তীতে আর আসাইন করা যায় না ।
কিন্তু পয়েন্টারের মান পরিবর্তন করা যায় । এটাই আটকাতে চাইলে সেটাকেও const বানাই দিতে পারি
*/
int main(){
const int price = 10;
int *pPrice = &price;
const int *pPrice = &price; // address চেঞ্জ করা যাবে তবে ভেলু চেঞ্জ করা যাবে না ।
int * const pPrice = &price; // এঁর মানে হল এড্রেস চেঞ্জ করা যাবে না । তবে ভেলু চেঞ্জ করা যাবে
// আর দুটাই const করে দিলে দুটাই চেঞ্জ করা যাবে না ।
*pPrice = 100;
printf("%d\n", *pPrice);
return 0;
}
Pass by add and change value
void multiplair = (int* a){
*a *= 2 // pass by address value [pointer] and multiply by 2
}
int main(){
int x = 10;
multiplair(&x); //pass by address
printf("%d", x);
}
// note: এই উদাহরণ থেকে হইত বুঝা পাবে না তবে আমরা তখন একটা Swap function বানাব তখন বেশ কাজে দিবে ।
void swap(int *x ,int *y){
int temp = *x;
*x = *y;
*y = temp;
}
int main(){
int x = 10, y = 20;
swap(&x, &y);
printf("x = %d, y = %d", x , y);
}
selection sort
#include <stdio.h>
void SelSort(int array[],int n);
int main(){
int array[100], n,i;
printf("Enter number of elementsn");
scanf("%d", &n);
printf("Enter %d Numbersn", n);
for(i = 0; i < n; i++)
scanf("%d", &array[i]);
SelSort(array,n);
return 0;
}
void SelSort(int array[], int n){
int i, j, position, swap;
for(i = 0; i < (n - 1); i++){
position=i;
for(j = i + 1; j < n; j++){
if(array[position]>array[j])
position=j;
}
if(position != i){
swap=array[i];
array[i]=array[position];
array[position]=swap;
}
}
printf("Sorted Array:n");
for(i = 0; i < n; i++)
printf("%dn", array[i]);
}
Bubble sort
/* Bubble sort code */
#include <stdio.h>
int main(){
int array[100], n, c, d, swap;
printf("Enter number of elements\n");
scanf("%d", &n);
printf("Enter %d integers\n", n);
for (c = 0; c < n; c++) scanf("%d", &array[c]);
for (c = 0 ; c < n - 1; c++){
for (d = 0 ; d < n - c - 1; d++){
if (array[d] > array[d+1]) { /* For decreasing order use '<' instead of '>' */
swap = array[d];
array[d] = array[d+1];
array[d+1] = swap;
}
}
}
printf("Sorted list in ascending order:\n");
for (c = 0; c < n; c++) printf("%d\n", array[c]);
return 0;
}