حل تمرین شماره 4 برنامه نویسی به زبان c

سه شنبه, ۱۵ بهمن ۱۳۹۲، ۱۰:۴۰ ب.ظ

      مسئله:برنامه ای بنویسید که معدل n دانش آموز را بخواند و آن معدلی که از لحاظ بزرگی دومین است(ماکزیمم دوم) را نمایش دهد.

#include <stdio.h>
#include <conio.h>

int main()
{
    int n,maxn;
    float x,max;
    //دریافت معدل ها و وارد کردن آن ها در آرایه
    printf("How many std mark(s) you want to enter?");
    scanf("%d",&n);
    float avg[n-1];
    for(int i=0;i<=(n-1);i++)
     scanf("%f",&avg[i]);
    //قرار دادن یک مقدار پیشفرض برای ماکزیمم
    max=avg[0];
    maxn=0;
    //یافتن ماکزیمم اول و ثبت مقدار آن و مکان آن در آرایه
    for(int j=1;j<=(n-1);j++)
    {
            if(max<avg[j])
            {
                          max=avg[j];
                          maxn=j;
            }
    }
    //صفر کردن مقدار ماکزیمم پیدا شده در آرایه
    avg[maxn]=0;
    //قرار دادن یک مقدار پیشفرض برای ماکزیمم دوم
    max=avg[0];
    //یافتن مقدار ماکزیمم دوم و چاپ آن
    for(int j=1;j<=(n-1);j++)
    {
            if(max<avg[j])
             max=avg[j];
    }
    printf("%f",max);
    getch();
    return 0;
}
    

     مکانیسم:روش کار برنامه به این گونه است که تعدادی معدل را از کاربر دریافت می کند و آن ها را در آرایه ای قرار می دهد و سپس با کمک حلقه for مقدار ماکزیمم را به دست می آورد و آن را صفر می کند و دوباره ماکزیمم را به دست می آورد (ماکزیمم دوم پیدا می شود.) و آن را چاپ می کند.

     توضیحات:

  1. در قسمت تعریف آرایه تعداد اعضای آرایه را یکی کمتر از تعداد معدل ها قرار دادیم زیرا 0 هم یکی از خانه های آرایه است.
  2. همچنین در قسمت اول که آرایه با اعداد ورودی پر می شود،در حلقه for طوری شرط و مقدار اولیه را تعریف کردیم که از خانه 0 آرایه استفاده شود.
  3. در قسمت اول که مقداری اولیه برای متغیر max قرار دادیم به این دلیل بود که در قسمت یافتن ماکزیمم مقداری برای مقایسه با سایر مقدار ها موجود باشد.
  4. دومین حلقه for در این برنامه برای پیدا کردن ماکزیمم ایجاد شده و کار خود را از مقایسه خانه 1 آرایه یا مقدار ماکزیمم شروع می کند زیرا که خانه 0 قبلا استفاده شده و به طور پیشفرض ماکزیمم در نظر گرفته شده است.
  5. در قسمت صفر کردن مقدار ماکزیمم یافت شده،انگیزه این است که ماکزیمم از بین برود(چون که دوباره که به دنبال ماکزیمم بگردیم این بار چون ماکزیمم اول نیست ماکزی دوم یافت می شود.).همچنین دوباره مقداری را به عنوان ماکزیمم در نظر می گیریم.

     مسئله (اندکی تغییر یافته) از کتاب "برنامه نویسی به زبان c" - تالیف مهندس جعفر نژاد قمی - صفحه 72 - تمرین1