حسین خسروی

وبلاگ دانشگاهی حسین خسروی، عضو هیات علمی دانشگاه صنعتی شاهرود

حسین خسروی

وبلاگ دانشگاهی حسین خسروی، عضو هیات علمی دانشگاه صنعتی شاهرود

حسین خسروی

باتوجه به محدودیتهای صفحه شخصی موجود در سایت دانشگاه، این بلاگ را راه اندازی کردم.
اطلاعیه های مربوط به دروسی که تدریس می کنم و تمرینها در این وبلاگ قرار خواهد گرفت.
برای آگاهی از مطالب مربوط به هر درس، در قاب زیر (طبقه بندی موضوعی) روی نام درس کلیک کنید.

پیوندهای روزانه

۹ مطلب با موضوع «برنامه نویسی C :: مثالهای C» ثبت شده است

  • ۰
  • ۰

این ویدیو توضیحات مثال قبلی است که متاسفانه کیفیت صدای آن در برخی لحظات خوب نیست. برخی فریمها هم ناقص ضبط شده اند.

  • حسین خسروی
  • ۰
  • ۰

این مثال دو بخش دارد، یکی ایجاد پایگاه داده از اطلاعات کتابها و نوشتن آنها در فایل باینری book_data.db و بخش دوم شامل خواندن اطلاعات از همین فایل و نمایش آنها. ویدیوی ضبط شده مربوط به این مثال در پست بعدی منتشر می شود.


#include "stdafx.h"
#include <iostream>

struct BookInfo
{
	char name[30];
	char author[30];
	int  nPage;
	float price;
	int year;
};

void CreateDatabase()
{
	printf("To start, enter number of books you want to store in the database\n");
	int n = 0;
	scanf_s("%d", &n);
	printf("Please enter Book information for %d books as follows\n", n);
	printf("Name, Author, Pages, Price, Year of Publication\n");

	BookInfo *books = new BookInfo[n];
	for (int i = 0; i < n; i++)
	{
		std::cin.ignore();
		printf("\n#%d Name: ", i + 1);
		gets_s(books[i].name, 30);
		printf("\n#%d Author: ", i + 1);
		gets_s(books[i].author, 30);
		printf("\n#%d Pages: ", i + 1);
		scanf_s("%d", &books[i].nPage);
		printf("\n#%d Price: ", i + 1);
		scanf_s("%f", &books[i].price);
		printf("\n#%d Year: ", i + 1);
		scanf_s("%d", &books[i].year);
	}
	FILE* fp = 0;
	fopen_s(&fp, "book_data.db", "wb");
	if (!fp)
	{
		printf("File can't be oppened.\n");
		return;
	}

	fwrite(books, sizeof(BookInfo), n, fp);
	fclose(fp);

	printf("Data saved successfully\n");
}

void ReadDatabase()
{
	int n = 2;

	BookInfo *books = new BookInfo[n];

	FILE* fp = 0;
	fopen_s(&fp, "book_data.db", "rb");
	if (!fp)
	{
		printf("File can't be oppened.\n");
		return;
	}

	fread(books, sizeof(BookInfo), n, fp);
	for (int i = 0; i < n; i++)
	{
		printf("\n#%d Name: %s", i + 1, books[i].name);

		printf("\n#%d Author: %s", i + 1, books[i].author);

		printf("\n#%d Pages: %d", i + 1, books[i].nPage);

		printf("\n#%d Price: %.1f", i + 1, books[i].price);

		printf("\n#%d Year: %d", i + 1, books[i].year);

		printf("\n--------------------------------------------");
	}

	fclose(fp);
	delete[] books;
}

int main()
{
	printf("Welcome to Book Database Application:\n");
	bool create_data = false; //change to false for read mode

	if (create_data)
		CreateDatabase();
	else
		ReadDatabase();

	getchar();
    return 0;
}
  • حسین خسروی
  • ۰
  • ۰

در این مثال نحوه ایجاد فایل باینری و توابع نوشتن و خواندن (fread, fwrite) توضیح داده شده و یک فایل حاوی صد عدد اعشاری به دو صورت باینری و متنی ساخته شده و مقایسه می شوند:


  • حسین خسروی
  • ۰
  • ۰

در این مثال نحوه ایجاد فایل متنی، نوشتن در و خواندن از آن را خواهید دید. دو نوع فایل اسکی و یونیکد بررسی می شود:


  • حسین خسروی
  • ۰
  • ۰

مثالهایی از تابع که در کلاس بیان شد را از این آدرس دانلود کنید.

موارد مطرح شده: بررسی چند مثال ساده از توابع شامل محاسبه بیشینه، کمینه و میانگین یک آرایه. همچنین پیاده سازی تابع فاکتوریل و دنباله فیبوناچی با استفاده از توابع بازگشتی و غیربازگشتی. نحوه ایجاد کتابخانه با استفاده از فایلهای header و cpp

ویدیوی ضبط شده در کلاس به دلیل تنظیم نامناسب میکروفون، کیفیت صدای مناسبی ندارد اما به کارتان می آید:


  • حسین خسروی
  • ۰
  • ۰

تفکیک یک رشته محاسباتی به چند بخش

مثالی که در کلاس مطرح شد جهت تسهیل حل تمرین سری سوم (بخش ج). در این مثال نحوه تفکیک یک رشته محاسباتی به دو بخش عددی نشان داده می شود:



#include "stdafx.h"
#include <iostream>

//Shahrood University of Technology
//C Programming
//Hossein Khosravi - http://Khosravi.blog.ir

using namespace std;
int main()
{
	char str[100] = "1625-4520";
	//str[4] = 0;
	//cout << str;
	char* p1 = strstr(str, "-");
	char s1[10] = { 0 }, s2[10] = { 0 };
	int n1 = 0, n2 = 0;
	if (p1 == NULL)
		cout << "operator - not found";
	else {
		cout << "operator - is located on index " << p1 - str;
		strncpy_s(s1, 10, str, p1 - str);
		strcpy_s(s2, 10, p1 + 1);
		n1 = atoi(s1); //convert first part to integer
		n2 = atoi(s2); //convert second part to integer
	}
	//char* p = str + 5;
	//cout << p;

	getchar();
    return 0;
}
  • حسین خسروی
  • ۰
  • ۰

مثال دریافت n عدد اعشاری به کمک اشاره گر، مرتب سازی حبابی آنها و نمایش خروجی:


#include "stdafx.h"
#include <iostream>

int main()
{
	/*int x = 10, y = 21;
	float z = (float)y / x; //remove (float) and see the results 
	x = (int)z;
	printf("z = %.f", z);*/
	unsigned long N = 0;
	printf("Please enter N:\n");
GET_N:
	scanf_s("%ld", &N);
	if (N < 1)
	{
		printf("Invalid size, try again\n");
		goto GET_N;
	}
	printf("\nEnter %d Numbers: ", N);
	double* data = new double[N];

	memset(data, 0, N * sizeof(double));
	for (int i = 0; i < N; i++)
		scanf_s("%lf", &data[i]);
	
	for (int i = 0; i < N; i++)
	{
		for (int j = i + 1; j < N; j++)
		{
			if (data[j] > data[i])
			{
				double t = data[i];
				data[i] = data[j];
				data[j] = t;
			}
		}
	}

	printf("Sorted output:\n");
	for (int i = 0; i < N; i++)
		printf("%.2lf, ", data[i]);
	
	std::cin.ignore();
	getchar();
	return 0;
}
  • حسین خسروی
  • ۰
  • ۰

مثال مطرح شده در کلاس برای کار با رشته ها:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

using namespace std;

int main()
{
    //khosravi.blog.ir
    char s1[20] = "";
    char s2[20] = "";
    char s3[40] = "";

    printf("\nPlease enter 2 strings less than 20 characters\n");
    scanf("%s", s1);
    scanf("%s", s2);

    if(strcmp(s1, s2) == 0)
        printf("\nTwo strings are equal");
    else
        printf("\nTwo strings are not equal");

    strcpy(s3, s1);
    strcat(s3, " ");
    strcat(s3, s2);

    printf("\ns3 = %s", s3);
    getchar();
    return 0;
}
  • حسین خسروی
  • ۰
  • ۰
اولین گام در هر موضوع جدیدی، معمولا سخت ترین گام است و گامهای بعدی با توجه به اینکه ترس ما از موضوع ریخته است، دشواری ندارد.
برای شروع برنامه نویسی C، چند مثال از مثالهای که در کلاس مطرح شد، در اینجا قرار می دهم که روی رایانه خودتان تست کنید و برای نوشتن تمرینها آمادگی داشته باشید:

مثال 1: برنامه سلام دنیا

#include <stdio.h>
int main()
{
   // printf() displays the string inside quotation
   printf("Hello, World!");
   return 0;
}

خروجی مثال سلام دنیا

Hello, World!

مثال 2: بررسی زوج و فرد بودن عدد ورودی

#include <stdio.h>
int main()
{
    int number;

    printf("Enter an integer: ");
    scanf("%d", &number);

    // True if the number is perfectly divisible by 2
    if(number % 2 == 0)
        printf("%d is even.", number);
    else
        printf("%d is odd.", number);

    return 0;
}

خروجی مثال زوج و فرد

Enter an integer: -7
-7 is odd.

مثال 3: جابجا کردن مقدار دو متغیر با استفاده از متغیر کمکی

توضیح: این مثال برای جابجایی دو عدد اعشاری (double) نوشته شده است. برای دریافت اعداد اعشاری از lf% استفاده می کنیم. اگر بخواهید برنامه را برای اعداد صحیح بنویسید، به جای double از int و به جای lf% از d% استفاده کنید.

Swaping Number
#include <stdio.h>
int main()
{
      double firstNumber, secondNumber, temporaryVariable;

      printf("Enter first number: ");
      scanf("%lf", &firstNumber);

      printf("Enter second number: ");
      scanf("%lf",&secondNumber);

      // Value of firstNumber is assigned to temporaryVariable
      temporaryVariable = firstNumber;

      // Value of secondNumber is assigned to firstNumber
      firstNumber = secondNumber;

      // Value of temporaryVariable (which contains the initial value of firstNumber) is assigned to secondNumber
      secondNumber = temporaryVariable;

      printf("\nAfter swapping, firstNumber = %.2lf\n", firstNumber);
      printf("After swapping, secondNumber = %.2lf", secondNumber);

      return 0;
}

خروجی مثال جابجایی دو عدد

Enter first number: 1.20
Enter second number: 2.45

After swapping, firstNumber = 2.45
After swapping, secondNumber = 1.20
مثالها از سایت مثالهای C برداشته شده است و می توانید مثالهای بیشتری را آنجا مطالعه کنید.
  • حسین خسروی