کد:
#include <stdio.h>
#include <conio.h>
int main()
{
int studentID[100], i, j, n;
float studentAvg[100], score, sum;
for (i = 0; i < 100; i++)
{
printf("\nPlease enter student ID (0 for finish) :");
scanf("%d", &studentID[i]);
if (studentID[i] == 0)
break;
sum = 0;
for (j = 1; j <= 3; j++)
{
printf(" Please enter score #%d :", j);
scanf("%f", &score);
sum += score;
}
studentAvg[i] = sum / 3;
}
n = i;
for (i = 0; i < n; i++)
{
printf("\nStudent ID = %-10d Average = %-10g Rating = ", studentID[i], studentAvg[i]);
switch ((int)studentAvg[i])
{
case 18:
case 19:
case 20:
printf("Very good");
break;
case 15:
case 16:
case 17:
printf("Good");
break;
default:
printf("Weak");
}
}
printf("\nPress any key to continue.\n");
getch();
return 0;
}
در تعریف متغیر ها studentID آرایه ای است که شماره های دانشجویی را نگهداری می کند، البته دقت کنید
که int برای اعداد خیلی بزرگ و طولانی که در شماره های دانشجویی مرسوم است مناسب نیست.
نوع داده ای long int برای اعداد خیلی بزرگ مناسب تر است.
متغیر i برای حلقه دریافت مشخصات هر دانشجو، اندیس دانشجو در آرایه را مشخص می کند، مثلا دانشجوی
شماره 0 و 1 و 2 و ...
متغیر j برای حلقه ای است که 3 نمره دانشجو را دریافت می کند، چون دریافت نمره ها مشابه هم اند برای
دریافت سه نمره از یک حلقه استفاده شده است.
متغیر n تعداد دانشجو هایی است که مشخصاتشان را دریافت می کنیم.
کد:
int studentID[100], i, j, n;
آرایه studentAvg میانگین نمرات دانشجو ها را ذخیره می کند، از نوع float است چون نمرات و میانگین آنها
اعداد اعشاری هستند با نوع داده int فقط می توانستیم اعداد صحیح بدون اعشار را ذخیره کنیم.
متغیر score یک نمره دانشجو را دریافت می کند، یک متغیر کافی است، چون بعد از جمع زدن نمرات دیگر
نیازی به اطلاعات نمره ها نداریم.
در متغیر sum نمرات یک دانشجو را جمع خواهیم کرد تا بتوانیم میانگین شان را حساب کنیم.
کد:
float studentAvg[100], score, sum;
حلقه اول مشخصات حداکثر 100 دانشجو را دریافت می کند :
کد:
for (i = 0; i < 100; i++)
{
شماره دانشجویی هر دانشجو در اندیس i آرایه studentID ذخیره می شود :
کد:
printf("\nPlease enter student ID (0 for finish) :");
scanf("%d", &studentID[i]);
اگر شماره دانشجویی وارد شده 0 باشد، از حلقه دریافت مشخصات خارج می شویم :
کد:
if (studentID[i] == 0)
break;
پیش از آنکه نمرات یک دانشجو را دریافت کنیم مقدار متغیر sum را صفر می کنیم تا پیش از جمع کردن
نمرات مقداری در آن نباشد. برای دریافت کردن سه نمره از یک حلقه که سه بار اجرا می شود استفاده می کنیم :
کد:
sum = 0;
for (j = 1; j <= 3; j++)
{
داخل حلقه یک نمره را دریافت می کنیم، از متغیر j که شماره نمره است استفاده شده تا پیغام ها متناسب
با شماره نمره باشد، یعنی با هر بار اجرا کردن حلقه در پیغام ها شماره متفاوتی نمایش داده شوند :
کد:
Please enter score #1 :
Please enter score #2 :
Please enter score #3 :
نمره در متغیر score ذخیره می شود :
کد:
printf(" Please enter score #%d :", j);
scanf("%f", &score);
نمره دریافت شده را در متغیر sum با سایر نمرات جمع می کنیم :
زمانی که 3 نمره دریافت شدند، میانگین شان را در آرایه studentAvg برای دانشجوی اندیس i ثبت می کنیم :
کد:
studentAvg[i] = sum / 3;
}
تا پیش از اجرا کردن حلقه اول، مشخص نبود که کاربر مشخصات چند دانشجو را ثبت می کند، اما بعد پایان یافتن آن
تعداد دانشجو ها توسط متغیر i مشخص شده که برای استفاده در متغیر n ذخیره می کنیم (خود متغیر i را برای
حلقه بعدی لازم داریم) :
حلقه بعدی را برای نمایش میانگین نمرات n دانشجو ایجاد می کنیم :
کد:
for (i = 0; i < n; i++)
{
در یک سطر شماره دانشجویی و میانگین نمرات دانشجوی اندیس i را نمایش می دهیم.
قالب های d% یا g% برای نمایش یک مقدار مناسب اند، اما طول مقادیر ثابت نیست، مثلا
میانگین نمره یک دانشجوی 9 است (یک رقمی) و میانگین نمره یک دانشجوی دیگر 18.25 (پنج رقمی)
متغیر بودن طول مقادیر موجب می شود که مقادیر در سطر های متفاوت دقیقا زیر هم و مرتب قرار نگیرند.
با اضافه کردن عبارت 10- در قالب های d% و g% از کامپایلر می خواهیم که با اضافه کردن کاراکتر فاصله
طول همه مقادیر بصورت ثابت 10 کاراکتر باشند.
کد:
printf("\nStudent ID = %-10d Average = %-10g Rating = ", studentID[i], studentAvg[i]);
میانگین نمرات اعداد اعشاری اند (مثلا 14.5) و مجموعه مقادیر قابل قبول به اعداد صحیح 0 الی 20 محدود نیست.
به همین دلیل با switch نمی توانیم همه اعداد اعشاری ممکن را مشخص کنیم. به همین جهت با اضافه کردن
عبارت (int) از کامپایلر می خواهیم که مقدار اعشاری ما را موقتا (داده داخل متغیر اعشاری تغییری نخواهد کرد)
با حذف اعشار به یک عدد صحیح تبدیل کند تا به مجموعه اعداد صحیح محدود شود :
کد:
switch ((int)studentAvg[i])
{
برای اعداد صحیح 18 و 19 و 20 و هر میانگین دیگری که با حذف اعشارشان همین مقادیر باشند پیغام Very good
را نمایش می دهیم :
کد:
case 18:
case 19:
case 20:
printf("Very good");
break;
برای اعداد صحیح 15 و 16 و 17 و هر میانگین دیگری که با حذف اعشارشان همین مقادیر باشند پیغام Good
را نمایش می دهیم :
کد:
case 15:
case 16:
case 17:
printf("Good");
break;
و برای هر مقدار میانگین دیگری بجز مقادیر قبلی پیغام Weak را نمایش می دهیم :
کد:
default:
printf("Weak");
}
پیش از خاتمه دادن به اجرا برنامه با یک پیغام مناسب منتظر فشار دادن یک کلید از سوی کاربر می شویم :
کد:
printf("\nPress any key to continue.\n");
getch();
return 0;
}