basic C programming notes for personal understanding

basic C programming notes for personal understanding

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, এদের মধ্যে পার্থক্য হচ্ছে /

FLoatDubble
ধারণ ক্ষমতা কমধারণ ক্ষমতা বেশি
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;
}

Did you find this article valuable?

Support Rashedul Islam by becoming a sponsor. Any amount is appreciated!