تمرینات فصل سوم زبان C:
شنبه, مرداد ۵, ۱۳۸۷ ۹:۴۹
در این پست تمرینات فصل سوم کتاب برنامه نویسی به زبان C نوشته مهندس عین اله جعفرنژادقمی بهمراه حل آن قرار دارد.
۱ـ برنامهای بنویسید که شماره دانشجویی و معدل تعداد n دانشجو را از ورودی خوانده، دانشجویی را که دومین معدل را از نظر بزرگی دارد پیدا کند و به خروجی ببرد؟
جواب: ابتدا باید بدانیم که در این برنامه اگر تعداد دانشجوها از ۲ کمتر باشد نمیتوانیم دومین معدل را محاسبه کنیم، پس برنامه پیغام Error را چاپ کرده و خارج میشود.
n : تعداد دانشجوها
i : ّشمارنده
id-max1 : شماره دانشجویی دانشجو با بالاترین معدل
id-max2 : شماره دانشجویی دانشجو با دومین معدل از نظر بزرگی
ave-max1 : بالاترین معدل
ave-max2 : دومین معدل از نظر بزرگی
id : شماره دانشجویی گرفته شده از ورودی
ave : معدل گرفته شده از ورودی
#include≤stdio.h>
#include≤conio.h>
int main()
{
int n, i=0, id_max1, id_max2, id;
float ave_max1, ave_max2, ave;
clrscr();
printf(“Please enter number of student: “);
scanf(“%d”,&n);
if(n<2)
{
printf(“n Error”);
return 0;
}
printf(“n Please enter %d id: “,i+1);
scanf(“%d”,&id);
printf(“n Please enter %d average: “,i+1);
scanf(“%f”,&ave);
id_max1=id;
id_max2=id;
ave_max1=ave;
ave_max2=ave;
i++;
printf(“n Please enter %d id: “,i+1);
scanf(“%d”,&id);
printf(“n Please enter %d average: “,i+1);
scanf(“%f”,&ave);
if(ave>ave_max1)
{
ave_max1=ave;
id_max1=id;
}
else
{
ave_max2=ave;
id_max2=id;
}
i++;
for(i=3 ; i<=n ; i++)
{
printf(“n Please enter %d id: “,i);
scanf(“%d”,&id);
printf(“n Please enter %d average: “,i);
scanf(“%f”,&ave);
if(ave>=ave_max1)
{
ave_max2=ave_max1;
id_max2=id_max1;
ave_max1=ave;
id_max1=id;
}
else if(ave>=ave_max2)
{
ave_max2=ave;
id_max2=id;
}
}
printf(“n the average is: %.2f , the id is: %d”,ave_max2, id_max2);
getch();
return 0;
}
۲ـ برنامهای بنویسید که اعدادی را از ورودی خوانده تشخیص دهد که آیا اعداد مورد نظر، کامل هستند یا خیر، عددی کامل است که مجموع مقسوم علیههای آن (به جز خودش) با آن عدد برابر باشد. پس از بررسی هر عدد، برنامه باید از کاربر سوال کند که میخواهد بکارش ادامه دهد یا خیر؟
جواب: در این مسئله چون تعداد اعداد مشخص نشده است پس باید در هر مرحله از کاربر سوال شود که برای تشخیص عدد دیگری را در نظر دارد یا نه و بر اساس پاسخ کاربر مراحل مورد نظر اجرا شود.
n : عدد مورد نظر
i : ّشمارنده
s : شماره دانشجویی دانشجو با بالاترین معدل
sum : مجموع مقسوم علیهها
r : باقیمانده تقسیم
#include≤stdio.h>
#include≤conio.h>
int main()
{
int n, i, sum, r;
char s=‘y’;
clrscr();
while(s==‘y’)
{
sum=0;
printf(“n Please enter your number: “);
scanf(“%d”,&n);
for(i=1 ; i
{
r=n%i;
if(r==0)
sum=sum+i;
}
if(sum==n)
printf(“n %d is perfect number “,n);
else
printf(“n %d is not perfect number “,n);
printf(“n do you have another number?(y/n): “);
s=getche();
}
getch();
return 0;
}
۳ـ برنامهای بنویسید که خروجی زیر را در صفحه نمایش تولید کند.
*
**
***
****
*****
******
جواب: این مسئله از طریق دو حلقه for تو در تو حل میشود. حلقهی اول برای مشخص کردن شمارهی سطرها و حلقهی دوم برای مشخص کردن تعداد ستارهها در هر سطر که در این مسئله برابر همان شماره سطر میباشد.
i : شمارنده حلقه اول
j : ّشمارنده حلقه دوم
#include≤stdio.h>
#include≤conio.h>
int main()
{
int i, j;
clrscr();
for(i=1 ; i<=6 ; i++)
{
printf(“n”);
for(j=1 ; j<=i ; j++)
printf(“*”);
}
getch();
return 0;
}
۴ـ برنامهای بنویسید که کاراکتری را که نشان دهنده رنگی است از ورودی خوانده، به شما بگوید که چه رنگی را میخواهد انتخاب کند. مثلا اگر کاربر حرف ‘r’ را وارد کرد برنامه به او بگوید که دوست دارد رنگ قرمز را انتخاب کند. برای تمام موارد، حروف کوچک و بزرگ کنترل شود، مثلا ‘r’ و ‘R’ برای رنگ قرمز.
جواب:
s : کاراکتر مشخص کننده یک رنگ
s فقط میتواند معرف رنگ قرمز، سبز، سفید، مشکی و زرد باشد و رنگهای دیگر در برنامه تعریف نشده هستند.
#include≤stdio.h>
#include≤conio.h>
int main()
{
char s;
clrscr();
for(;;)
{
printf(“n please enter first character of color: “);
s = getche();
if(s==‘r’||s==‘R’)
printf(“n your color is Red”);
else if(s==‘g’||s==‘G’)
printf(“n your color is Green”);
else if(s==‘w’||s==‘W’)
printf(“n your color is White”);
else if(s==‘b’||s==‘B’)
printf(“n your color is Black”);
else if(s==‘y’||s==‘Y’)
printf(“n your color is Yellow”);
else
printf(“n your selected no color”);
}
getch();
return 0;
}
۵ـ برنامهای بنویسید که تعداد n جمله از سری فیبوناجی را تولید کند.
سری فیبوناجی= ۱ ۱ ۲ ۳ ۵ ۸ ۱۳ …
جواب:
i : شمارنده حلقه
n : تعداد جملات
fi : جملهی شماره i از سری فیبوناجی
temp : متغیر کمکی
#include≤stdio.h>
#include≤conio.h>
int main()
{
int i, n, f1=1 , f2=1 , temp;
clrscr();
scanf(“%d”,&n);
for(i=1 ; i<=n ; i++)
{
printf(“%d “,f1);
temp = f2;
f2 = f1+f2;
f1 = temp;
}
getch();
return 0;
}
۶ـ برنامهای بنویسید که دو عدد صحیح مثبت را از ورودی خوانده، آنها را به روش تفریق بر هم، تقسیم کند؟
جواب:
x : عدد اول
y : عدد دوم
i : ّشمارنده و بعد از اجرای برنامه i برابر است با خارج قسمت تقسیم
temp : متغیر کمکی
#include≤stdio.h>
#include≤conio.h>
int main()
{
int i=1, x, y, temp;
clrscr();
printf(“n please enter number(x,y);n”);
scanf(“%d%d”,&x,&y);
temp = x;
while(x>y)
{
x = x-y;
i++;
}
printf(“n %d / %d = %d”,temp,y,i);
getch();
return 0;
}
۷ـ برنامهای بنویسید که شماره کارمندی و حقوق تعدادی از کارکنان مؤسسهای را دریافت کرده، بر اساس تعرفه زیر، مالیات حقوق آنها را محاسبه کند و به خروجی ببرد. سپس مشخص کند بیشترین دریافتی مربوط به کدام کارمند است؟
از مالیات معاف <400,000 حقوق
۱۰ درصد نسبت به مازاد <500,000 حقوق ۴۰۰,۰۰۱<
15 درصد نسبت به مازاد <700,000 حقوق ۵۰۰,۰۰۱<
17 درصد نسبت به مازاد حقوق ۷۰۰۰,۰۰۰<
جواب:
n: تعداد کارکنان
i: شمارنده
id: شماره کارمندی
s: حقوق هر کارمند
mal: مالیات مربوط به هر کارمند
max: بالاترین دستمزد
idmax: شماره کارمندی که بالاترین حقوق را دارد
#include≤stdio.h>
#include≤conio.h>
int main()
{
int id, idmax, n, i;
float s, mal, max=0.0;
clrscr();
printf(“n please enter number(n): “);
scanf(“%d”,&n);
for(i=1 ; i<=n ; i++)
{
printf(“n please enter %d ID: “,i);
scanf(“%d”,&id);
printf(“n please enter %d salary: “,i);
scanf(“%f”,&s);
if(s<=400000)
mal = 0.0;
else if(s>400000 && s<=500000)
mal = 0.1*s;
else if(s>500000 && s<=700000)
mal = 0.15*s;
else if(s>700000)
mal = 0.17*s;
printf(” maliat is: %1.2fn”,mal);
if(s>max)
{
max=s;
idmax=id;
}
}
printf(“n the MAX is: %f and ID is: %d”,max , idmax);
getch();
return 0;
}
۸ـ خروجی دستورات زیر را بنویسید.
x = 5;
while(–x>0)
printf(“%۳d”,x);
جواب:
ابتدا در دستور - – x یک واحد از x کم شده و بعد مقایسه انجام میشود. در دستور printf ، %۳d نشاندهندهی آن است که طول میدان ۳ میباشد و چون اعداد تک رقمی هستند و طول آنها از میدان کمتر است پس اعداد در سمت راست قرار گرفته و دو واجد قبل از آنها خالی میماند.
خروجی برنامه : _ _ ۴ _ _ ۳ _ _ ۲ _ _ ۱
۹ـ دستورات زیر را با for بنویسید.
int i=1;
while(i<=10)
{
if(i<5 && i!=2)>
printf(“%c”,x);
i++
}
جواب:
int i;
for(i=1 ; i<=10 ; i++)
{
if(i<5 && i!=2)>
printf(“%c”,x);
}
۱۰ـ برنامهای بنویسید که حاصل عبارت زیر را محاسبه کند (n<10).
1 + 1/2! + 1/3! + … + ۱/n!
جواب:
i: شمارندهی حلقهی بیرونی
j: شمارنده حلقه داخلی
n: تعداد کل جملات
s: مجموع کل جملات
fac: حاصل فاکتوریل موجود در کسر هر جمله
برای تعریف متغیر fac از long int استفاده میکنیم چون حاصل فاکتوریل اعداد بزرگ طول زیادی دارند.
#include≤stdio.h>
#include≤conio.h>
int main()
{
int n, i, j;
float sum=1.0;
long int fac;
clrscr();
printf(“n please enter number<_x0031_0: _x0022__x003c_ _x002f_SPAN>);
scanf(“%d”,&n);
printf(“n 1″);
for(i=2 ; i<=n ; i++)
{
printf(“+1/%d!”,i);
fac = 1;
for(j=1 ; j<=i ; j++)
fac = fac*j;
sum = sum + 1.0/fac;
}
printf(“= %f”,sum);
getch();
return 0;
}
۱۱ـ برنامهای بنویسید که عددی را در مبنای a گرفته، آنرا به مبنای b ببرد.
جواب:
برای حل این مسئله ابتدا باید عدد در مبنای a را به عددی در مبنای ۱۰ تبدیل کنیم، برای این امر ابتدا عدد در مبنای a را به ۱۰ تقسیم میکنیم تا اولین رقم سمت راست عدد در مبنای a بدست آید (باقیمانده تقسیم) و بعد از آن را در a به توان صفر (i) ضرب میکنیم و بعد خارج قسمت تقسیم را دوباره بر ۱۰ تقسیم میکنیم تا رقم دوم نیز بدست آید یک واحد به i اضافه میکنیم و بعد رقم را در a به توان i ضرب میکنیم، آنقدر این کار را ادامه میدهیم تا خارج قسمت صفر شود. این روش برای تبدیل یک عدد مبنای a به عدد مبنای ۱۰ در ریاضی بکار میرود و بعد از آن عدد مبنای ۱۰ را به عدد مبنای b تبدیل میکنیم. برای این تبدیل عدد را به b تقسیم کرده و باقیمانده را در ۱۰ به توان صفر (i) ضرب میکنیم سپس خارج قسمت این تقسیم را نیز دوباره به b تقسیم کرده و باقیمانده را در ۱۰ به توان i+1 ضرب میکنیم، این کار را آنقدر تکرار میکنیم تا خارج قسمت صفر شود این روش برای تبدیل عدد در مبنای ۱۰ به عدد در مبنای b در ریاضیات بکار میرود.
a: مبنای عدد اول
b: مبنای عدد دوم
na: عدد در مبنای a
nb: عدد در مبنای b
n10: عدد در مبنای ۱۰
#include≤stdio.h>
#include≤conio.h>
#include≤math.h>
int main()
{
long int a, b, na, nb, n10, i;
clrscr();
printf(“n please enter na: “);
scanf(“%ld”,&na);
printf(“n please enter a: “);
scanf(“%ld”,&a);
printf(“n please enter b: “);
scanf(“%ld”,&b);
n10 = 0;
i = 0;
while(na>0)
{
n10 = n10 + ((na%10)*pow(a,i));
na = na / 10;
i++;
}
nb = 0;
i = 0;
while(n10>0)
{
nb = nb + ((n10%b)*pow(10,i));
n10 = n10 / b;
i++;
}
printf(“n nb is : %ld”, nb);
getch();
return 0;
}
۱۲ـ برنامهای بنویسید که عددی از ۱ تا ۷ را از ورودی خوانده، روزی از هفته که معادل با آن است در خروجی چاپ کند (با switch).
جواب:
day: شماره مورد نظر
#include≤stdio.h>
#include≤conio.h>
int main()
{
int day;
clrscr();
for(;;)
{
printf(“n please enter number of day(1….7): “);
scanf(“%d”,&day);
switch(day)
{
case 1:
printf(“**Saturday**”);
break;
case 2:
printf(“**Sunday**”);
break;
case 3:
printf(“**Monday**”);
break;
case 4:
printf(“**Tuseday**”);
break;
case 5:
printf(“**Wednesday**”);
break;
case 6:
printf(“**Thursday**”);
break;
case 7:
printf(“**Friday**”);
break;
default:
printf(“n your number is False, please try again…”);
break;
}
}
getch();
return 0;
}
۱۳ـ برنامهای بنویسید که سال تولد کاربر و سال فعلی را از ورودی خوانده، مشخص کند که او چند سال، چند ماه، چند روز، چند ساعت، چند دقیقه و چند ثانیه عمر کرده است.
جواب:
هر سال ۱۲ ماه است، هر ماه ۳۰ روز، هر روز ۲۴ ساعت، هر ساعت ۶۰ دقیقه و هر دقیقه ۶۰ ثانیه است.
y1: سال تولد کاربر
y2: سال فعلی
y: تعداد سالهای محاسبه شده
m: تعداد ماههای محاسبه شده
d: تعداد روز محاسبه شده
h: تعداد ساعت محاسبه شده
mn: تعداد دقیقه محاسبه شده
s: تعداد ثانیه محاسبه شده
#include≤stdio.h>
#include≤conio.h>
int main()
{
int y1, y2, y, m;
long int d, h, mn, s;
clrscr();
printf(“n your enter year of your brithday: “);
scanf(“%d”,&y1);
printf(“n your enter this year: “);
scanf(“%d”,&y2);
y = y2 – y1;
m = y * 12;
d = m * 30;
h = d * 24;
mn = h * 60;
s = mn * 60;
printf(“n your age is %d years and %d months and %ld days and %ld hours and %ld minutes and %ld seconds “,y,m,d,h,mn,s);
getch();
return 0;
}
۱۴ـ برنامهای بنویسید که ضرایب معادله درجه دوم را از ورودی گرفته، معادله را حل کند.
جواب:
معادله درجه دوم : ax2 + bx + c = 0
#include≤stdio.h>
#include≤conio.h>
#include≤math.h>
int main()
{
float a, b, c, D, x1, x2;
clrscr();
printf(“n please enter a,b,c:n”);
scanf(“%f%f%f”,&a,&b,&c);
D = b * b – 4 * a * c;
if (D<0)
printf(“n Error because the answer is not Real”);
else
{
x1 = (-b+sqrt(D))/(2*a);
x2 = (-b-sqrt(D))/(2*a);
printf(“n a is: %f, b is: %f, c is: %f >>> x1 is: %f , x2 is: %f”,a,b,c,x1,x2);
}
getch();
return 0;
}
۱۵ـ برنامهای بنویسید که با استفاده از حلقههای تو در تو خروجی زیر را تولید کند.
$$$$$$
$$$$$$
$$$$$$
$$$$$$
جواب:
در این مسئله به دو حلقه تو در تو نیازمندیم، حلقهی بیرونی مشخص کننده سطرهای خروجی و حلقهی داخلی مشخص کنندهی تعداد $ها در هر سطر میباشد.
i: شمارنده حلقهی خارجی
j: شمارنده حلقهی داخلی
#include≤stdio.h>
#include≤conio.h>
int main()
{
int i, j;
clrscr();
for(i=1;i<=4;i++)
{
printf(“n”);
for(j=1;j<=6;j++)
printf(“$”);
}
getch();
return 0;
}
۱۶ـ برنامهای بنویسید که دو مقدار اعشاری را از ورودی خوانده و تفاضل حاصلضرب و حاصل تقسیم آنها را محاسبه کرده و به خروجی ببرد. برنامه وقتی خاتمه مییابد که هر دو عدد اعشاری صفر باشند.
جواب:
x: عدد اعشاری اول
y: عدد اعشاری دوم
m: ضرب دو عدد اعشاری
n: تقسیم دو عدد اعشاری
s: m-n
#include≤stdio.h>
#include≤conio.h>
int main()
{
float x, y, m, n, s;
clrscr();
for(;;)
{
printf(“n 2 float number:(you can select 0 and 0 for Quitn”);
scanf(“%f%f”,&x,&y);
if(x==0 && y==0)
break;
else
{
m = x * y;
n = x / y;
s = m – n;
printf(“n (%f*%f) – (%f/%f) = %f”,x,y,x,y,s);
}
}
getch();
return 0;
}
۱۷ـ برنامهای بنویسید که یک عدد اعشاری مثل ۶۴۳٫۲۱ را خوانده، وارون آن را بیابد. وارون این عدد ۱۲٫۳۴۶ است.
جواب:
#include≤stdio.h>
#include≤conio.h>
#include≤math.h>
int main()
{
double j, x, xx, a;
long int i;
clrscr();
printf(“n enter float number: “);
scanf(“%lf”,&x);
a = 0;
i = -1;
xx = x;
while (floor(xx)>0)
{
a+=(((long int)floor(xx)%10)*pow(10,i));
xx/=10;
i–;
}
i = 0;
j = (long int)x;
while (x!=j)
{
x=x*10;
a+=(((long int)floor(x)%10)*pow(10,i));
i++;
j=(long int)x;
}
printf(“n number is %f”,a);
getch();
return 0;
}
۱۸ـ برنامهای بنویسید که یک عدد اعشاری را از ورودی خوانده، هر یک از قسمتهای صحیح و اعشاری آنرا به صورت یک عدد صحیح به خروجی ببرد. به عنوان مثال، عدد ۱۳٫۴۲ به صورت دو عدد صحیح ۱۳ و ۴۲ به خروجی ببرد.
جواب:
#include≤stdio.h>
#include≤conio.h>
#include≤math.h>
int main()
{
float x, r;
int m;
clrscr();
printf(“n enter a float number: “);
scanf(“%f”,&x);
m = (int)x;
r = x – m;
printf(“n %f = %d + %f”,x,m,r);
while (r – floor(r) != 0)
r = 10 * r;
printf(“n %1.0f”,r);
getch();
return 0;
}
نکته:
در حل دو مسئله آخر از تابعی به نام تابع floor() استفاده کردیم. این تابع بزرگترین مقدار صحیح کوچکتر یا مساوی یک عدد را که به صورت double نمایش داده میشود محاسبه میکند و الگوی آن به صورت زیر است:
Double floor (double num)
اگر مقدار ۱٫۰۲ به عنوان آرگومان تابع باشد نتیجه حاصل برابر با ۱٫۰ و اگر عدد -۱٫۲۰ به عنوان آرگومان تابع باشد نتیجهی حاصل برابر با -۱٫۰ خواهد بود. دستور زیر عدد ۱۰ را به عنوان نتیجه عمل چاپ میکند:
printf(“%f”,floor(10.9));
این تابع جزء توابع ریاضی میباشد بنابراین برای استفاده از این تابع و توابع ریاضی دیگر باید فایل سرآیند تعریف شود.
arash گفته است :
آذر ۵م, ۱۳۸۷ در ۱۱:۲۱ ق.ظ
سلام.دستتون درد نکنه واقعا گل کاشتین.از اینکه به درخواست های ما توجه میکنید از شما ممنونم.اگه میشه جواب فصل های دیگه رو هم بزارید
محسن گفته است :
دی ۲م, ۱۳۸۷ در ۹:۱۶ ب.ظ
با سلام
لطفا جواب فصل ۵ کتاب برنامه نویسی به زبان c عین الله جعفرنژاد قمی رو برام بزارید ممنون میشم.
Amin RA گفته است :
دی ۱۲م, ۱۳۸۷ در ۱۱:۰۹ ق.ظ
با عرض سلام و خسته نباشید
و تشکر برای ارسال این پست.
لطفا فصول دیگر را در این بخش قرار داده تا دعای خیرمان همیشه پشتیبان راهتان باشد.امید است روزگار خوب و مفیدی در زندگانی داشته باشید.
متشکریم ( جمعی از دانشجویان رشته کامپیوتر )
همتا گفته است :
دی ۱۴م, ۱۳۸۷ در ۲:۵۸ ب.ظ
اگر میشود تمرینات فصلها ی بعد را در سایت قراردهید با تشکرفراوان…….
pooria گفته است :
بهمن ۲۱م, ۱۳۸۷ در ۷:۲۰ ب.ظ
اگر میشود تمرینات فصلها ی بعد را در سایت قراردهید ممنون می شم
somayeh گفته است :
فروردین ۱۲م, ۱۳۸۸ در ۵:۰۴ ب.ظ
سلام بابا دمتون گرم.همیشه از این کارا بکنید.اگه میشه جواب فصل های بعدی رو هم بنویسید
milad گفته است :
فروردین ۲۵م, ۱۳۸۸ در ۵:۲۷ ب.ظ
بسیار عالی توپ اصلا ترکوندین وای وای خیلی عالیه هیچ سایتی تمرینای c رو حل نکرده دمتون گرم
اگه میشه فصلای بعد هم بزارین
uitea گفته است :
اردیبهشت ۲۱م, ۱۳۸۸ در ۱۰:۲۴ ب.ظ
با سلام و خسته نباشید
از سه فصل اول که خیلی استفاده کردیم.با تشکر
در صورت امکان (هرچه سریعتر بهتر ) بقیه فصول را نیز بگذارید
از وبلاگ ما هم دیدن کنید
با تشکر
سحر گفته است :
آبان ۴م, ۱۳۸۸ در ۶:۱۳ ق.ظ
سلام .
میشه خواهش کنم جواب تمرین های دیگر فصل ها هم در اختیارمون بذارید ؟
شبنم گفته است :
آبان ۵م, ۱۳۸۸ در ۱۲:۲۲ ب.ظ
سلام خیلی ممنون واقعا مفید بود مرسیییییییی
farshad گفته است :
آبان ۱۷م, ۱۳۸۸ در ۱۱:۲۰ ب.ظ
آقا واقعا دستت درد نکنه خدا هر چی می خوای بهت بده
فقط یک سوال در سوال ۳ چطوری میشه ستاره ها با همون تعداد ولی وسط قرار بگیرند (وقتی چاپ میشه وسط باشه)اگه جواب بدید واقعا مدیونتونم
سعید صالحی گفته است :
آذر ۱م, ۱۳۸۸ در ۷:۰۹ ق.ظ
با سلام خدمت این دوست عزیز که زحمت کشیدن و برنامه های فصل سه رو گذاشتن واقعاً دستت درد نکنه چون که مارا نجات دادی یه استادی داریم که باید برنامه را می نوشتیم نمی دونید الان چقدر خوشحالم
واقعا نمی دونم چطوری ازت تشکر کنم
از این پست ها باز ها بزار
مرسی
کاوه گفته است :
آذر ۲۳م, ۱۳۸۸ در ۷:۳۴ ق.ظ
خیلی با حال تشریف دارید دمتون گرم
gol گفته است :
آذر ۲۸م, ۱۳۸۸ در ۱:۱۶ ق.ظ
با تشکر از شما و وب جالبتون.