Смекни!
smekni.com

Для углубленного изучения языка программирования Си необходимо изучить литературу, приведенную ниже.


Литература:

1. Уэйт М., Прата С., Мартин Д. Язык Си. Руководство для начинающих. - М.: Мир, 1988.- 512 с.

2. Страуструп Б. Язык программирования СИ++. - М.: Радио и связь,1991.­352с.

3. Бруно Бабэ Просто и ясно о BORLAND С++.-М.:БИНОМ,1995.-400с. 4.Бочков С.О., Субботин Д.М. Язык программирования Си для персонального компьютера. -М.: Радио и связь,1990.-384с.

5. Ричард Вайнер, Льюс Пинсон С++ изнутри. - Киев: ДиаСофт,1993.-304с.

6. Лукас П. С++ под рукой. - Киев:ДиаСофт, 1993.-176с.

7. Стефан Дьюхарст, Кэти Старк Программирование на С++.- Киев: ДиаСофт, 1993.-272с.

8. Белецкий Я. Турбо Си++: Новая разработка. - М.: Машиностроение, 1994. -400с.

9. Том Сван. Программирование для WINDOWS в BORLAND C++.-М.:БИНОМ, 1995.-400с

10. Шилд Г. Программирование на С и С++ для WINDOWS 95.-К.:Торгово- издательское бюро BHV, 1996.-400с.

11. Круглински Дэвид. Основы Visual C++.-М.:Русская Редакция ТОО Channel Trading Ltd, 1997.-696с.

12. Шилдт Герберт. MFC: основы программирования. - К.: Издательская группа BHV, 1997.-560с.

13. Д. Кнут. Искусство программирования для ЭВМ. Т. 3. Сортировка и поиск. - М.: Мир, 1978.

14. Б. Керниган, Д. Ритчи. Язык программирования Си. - М.: Финансы и статистика, 1992.

15. Р.Андерсон. Доказательство правильности программ. М.: Мир, 1984.

16. Шилд Герберт. Самоучитель С++.-BHV.-С.-Петербург.,1997.-512с.

17. ШамисВ.А. Borland C++ Builder. Программирование на С+ без проблем М.: Нолидж, 1997.-266с.

18. Елманова Н.З., Кошель С.П. Введение в BorlandC++ Builder.-М.: Диалог. - МИФИ, 1997.-272с.

19. Рейсдорф К. Освой самостоятельно BorlandC++Builder. М.: БИНОМ, 1998.-702с.

20. Рамодин Д. Создание приложений в среде BorlandC++Builder, Мир ПК №10,11,12-1997г.

21. Калверт Чарльз C++Builder. Энциклопедия пользователя.

22.Оузьер Д., Гробман С., Батсон С. Delphi2. Освой самостоятельно.- М.:Восточная Книжная Компания,1997.-624с.

23. Пирогов В.Ю. Программирование на языке ассемблера для операционных систем MSDOSи Windows, 1999, -550c.

24. Калверт Чарльз и др. BorlandC++Builder 3.Самоучитель.-К:ДиаСофт, 1999.-272с.

25. Московские олимпиады по программированию,М.-1988.-208с.


ПРИЛОЖЕНИЕ N1

Задача N1.

Определить, какая из точек плоскости A(x1,y1), B(x2,y2), C(x3,y3)

расположена ближе к началу координат.

#include<stdio.h>

#include<conio.h>

#include<math.h>

int main(void)

{

char *n[30];

int x1,y1,x2,y2,x3,y3,p1,p2,p3,k;

clrscr();

printf("Введите координаты первой точки&bsol;n");

printf("x1=",&x1);

scanf("%d",&x1);

printf("y1=",&y1);

scanf("%d",&y1);

printf("Введите координаты второй точки&bsol;n");

printf("x2=",x2);

scanf("%d",&x2);

printf("y2=",y2);

scanf("%d",&y2);

printf("Введите координаты третьей точки&bsol;n");

printf("x3=",x3);

scanf("%d",&x3);

printf("y3=",y3);

scanf("%d",&y3);

p1=sqrt(x1*x1+y1*y1);

p2=sqrt(x2*x2+y2*y2);

p3=sqrt(x3*x3+y3*y3);

k=p1; *n="первая";

if(k>p2) { k=p2;*n="вторая"; }

if(k>p3) { k=p3;*n="третья"; }

printf("%s точка ближе всех к началу координат &bsol;n",*n);

getch();

return(0);

}

Задача N2.

Можно ли раменять 25 рублей 9 купюрами достоинством в 1, 3 и 5

рублей?

#include<stdio.h>

int main(void)

{

int x,y,s,z;

s=0;

for(x=1;x<=10;x++)

{

for(y=1;y<=10;y++)

{

for(z=1;z<=10;z++)

{

if (( x+3*y+5*z==25) & (x+y+z==9))

{

printf("Можно %d-1p, %d-3p, %d-5p&bsol;n",x,y,z);

s=1;

}

}

}

}

if (s==0) {

printf("25 рублей нельзя разменять 9 купюрами в 1р,3p,5p");}

return(0);

}

Задача N3.

Определить в одномерном числовом массиве число соседств из двух чисел разного знака.

#include<stdio.h>

int main(void)

{

int i,j,s,n,a[10];

printf("Введитеэл-тымассива &bsol;n");

for (i=1;i<=10;++i)

scanf("%d",&a[i]);

s=0;

for (i=1;i<=9;++i)

{

if (a[i]* a[i+1]<0) s=s+1;

}

printf ("Число эл-тов разного знака =%d &bsol;n",s);

}

Задача N4.

Определить, является ли одномерный числовой массив упорядоченным по убыванию.

#include<stdio.h>

#include<dos.h>

int main(void)

{

int i,j=0,n=10,s=0;

int a[10];

printf("Введите элементы массива&bsol;n");

for (i=1;i<=n;++i)

{scanf("%d",&a[i]);}

for (i=1;i<=n-1;++i)

{

if (a[i]<a[i+1]) s=1;}

if (s==1) {printf ("Массив не упорядочен по убыванию &bsol;n");}

else {printf ("Массив упорядочен по убыванию &bsol;n");}

}

Задача N5.

Найти сумму чисел, обратных квадратам первых 100 натуральных чисел.

#include<stdio.h>

#include<dos.h>

int main(void)

{

float i,s=0;

printf ("-----------------------------&bsol;n");

for (i=1;i<=100;i++)

{ s=s+1/(i*i);}

printf ("Суммачиселравна %f&bsol;n",s);

delay(5000);

}

Задача N6.

Дана точка А с координатами x,y. Определить в каком квадранте

координатной оси она расположена.

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

int main(void)

{

char xs[10],ys[10];

int x,y;

clrscr();

printf ("Введитекоординатыт.А &bsol;n");

gets(xs); gets(ys);

x=atoi(xs); y=atoi(ys);

if (x==0) printf ("Точка на оси Х&bsol;n");

if (y==0) printf ("Точка на оси Y&bsol;n");

if (x>0 && y>0) printf ("Точка А в 1-й четверти &bsol;n");

if (x<0 && y>0) printf ("Точка А в 2-й четверти &bsol;n");

if (x<0 && y<0) printf ("Точка А в 3-й четверти &bsol;n");

if (x>0 && y<0) printf ("Точка А в 4-й четверти &bsol;n");

getch();

}

Задача N7.

Вы забрели в сад, в котором три калитки и решили пройти через них не пропустив ни одной.

Набрав некоторое количество яблок, вы отдали половину всех яблок и еще поляблока человеку у первой калитки, половину того что осталось и еще поляблока человеку у второй калитки, а половину всех оставшихся яблок и еще поляблока человеку у третей калитки и при этом не разрезали ни одного яблока.

Сколько яблок вы должны набрать в саду чтоб вынести X яблок?

#include<stdio.h>

int main(void)

{

int k,n,i,x;

printf("&bsol;n Задачапрояблоки .&bsol;n");

printf("Введите количество яблок,которое нужно вынести&bsol;n");

scanf("%d",&k);

n=k;

for (i=1;i<=3;i++)

{

x=2*k+1;

k=x;

}

printf("%d нужновзять&bsol;n",k);

return(0);

}

Задача N8.

Написать программу вычисления числа сочетаний из m по n(формула m!&bsol;n!*(m-n)! при m>=n).

#include<stdio.h>

int main(void)

{

int i,m,n;

float f1=1,f2=1,f3=1,c;

printf ("Введите m: ");

scanf ("%d",&m);

for (i=1;i<=m;++i) { f1=f1*i; }

printf ("Введите n: ");

scanf ("%d",&n);

for (i=1;i<=n;++i) { f2=f2*i; }

if (m>=n)

{ for (i=1;i<=m-n;++i) { f3=f3*i; }

c=f1/(f2*f3);

printf ("c=%f &bsol;n",c); }

else printf (" m должно быть больше, либо равно n! &bsol;n");

}

Задача N9.

Слова и фразы, переходящие в себя при "аккустическом" отображении называются палиндромами.

Написать программу определяющую является слово палиндром или нет.

#include<stdio.h>

#include<conio.h>

#include<string.h>

int main(void)

{

char A[80],B[80];

int i,L;

clrscr();

printf ("Введитеслово A: "); scanf ("%s",&A);

L=strlen(A);

for (i=0;i<=L;++i) B[i]=A[L-i-1];

B[L]='&bsol;0';

i=strcmpi(A,B);

if (i==0)

printf ("Слово-полиндром &bsol;n");

else printf ("Слово-не полиндром &bsol;n");

getch();

}

Задача N10.

Определить находится ли точка M(x,y) внутри верхней части единичного круга с центром в начале координат.

#include<stdio.h>

int main(void)

{

float x,y,z;

printf("Введитекоординатыточки&bsol;n");

scanf("%f",&x);

scanf("%f",&y);

z=x*x+y*y;

printf("%f %f&bsol;n",z,y);

if ((z<=1)&&(y>0))

printf("Точка принадлежит верхней части единичного круга&bsol;n");

else

printf("Точка не принадлежит верхней части единичного круга&bsol;n");

return(0);

}

Задача N11.

Составить программу для решения квадратного уравнения

Ax^2+Bx+C=0.

#include<stdio.h>

#include<math.h>

#include<dos.h>

int main(void)

{ int i,d,a,b,c;

float x1,x2;

printf("&bsol;n Решение квадратного уравнения&bsol;n");

printf("Ведите коэффициенты уравнения a,b,c&bsol;n");

printf("a=");scanf("%d",&a);

printf("b=");scanf("%d",&b);

printf("c="); scanf("%d",&c);

d=b*b-4*a*c;

printf("d=%d&bsol;n",d);

if(d<0) printf("корнейнет&bsol;n");

else

{

if(d>0)

{ x1=(-b+sqrt(d))/2*a;

x2=(-b-sqrt(d))/2*a;

printf("корниуравнения x1=%f x2=%f&bsol;n",x1,x2);}

else

{ x1=(-b)/(2*a);

printf("кореньуравнения x1=%f &bsol;n",x1);

}

}

delay(5000);

return(0);

}

Задача N12.

Составить программу, позволяющую узнать войдет ли открытка размерами A,B в конверт размерами X,Y.

#include<stdio.h>

#include<dos.h>

int main()

{ int t,a,b,x,y;

printf("Введите размер a открытки :&bsol;n");

scanf("%d",&a);

printf("Введите размер b открытки:&bsol;n");

scanf("%d",&b);

printf("Введите размер x конверта :&bsol;n");

scanf("%d",&x);

printf("Введите размер y конверта :&bsol;n");

scanf("%d",&y);

if(b>a) {t=a;a=b;b=t;}

if(y>x) {t=x;x=y;y=t;}

if ((x>=a) &(y>=b))

printf("Открытка войдет в конверт .&bsol;n");

else

printf("Открытка не войдет в конверт .&bsol;n");

delay(3500);

return 0;

}

Задача N13.

Существует ли четырехзначное натуральное число, куб суммы цифр которого равен ему самому?

#include <stdio.h>

#include <math.h>

#include<conio.h>

int main(void)

{

int j1,j2,j3,j4;

float p,t,q=3;

for(j1=1;j1<=9;j1++)

{

for(j2=1;j2<=9;j2++)

{

for(j3=1;j3<=9;j3++)

{

for(j4=1;j4<=9;j4++)

{

p=(j1*1000+j2*100+j3*10+j4);

t=pow((j1+j2+j3+j4),q);

if (p==t)

{

printf("Четырехзначное число, равное кубу суммы своих цифр&bsol;n");

printf("%f&bsol;n",p);

}

}

}

}

}

getch();

return(0);

}

Задача N14.

Пара носков стоит 1.05 руб. связка -12 пар стоит 10.25 руб. а коробка - 12 связок стоит 114 руб. Составить программу, которая по числу N пар носков вычисляет числа n1, n2, n3 коробок, связок и пар носков, которые следует купить.

Пояснение - вместо 11 пар носков покупать связку - это дешевле.

Оптимальная покупка без излишков находится следующим образом:

n1=n&bsol;144 : m=n-n1*144

n2=m&bsol;12 : n3=m-n2*12

Удешевить ее можно лишь двумя способами - либо взять лишнюю связку и не брать пар, либо лишнюю коробку и не брать ни связок, ни пар. Если n3*1.05>10.25, то надо взять лишнюю связку:

n2=n2+1 : n3=0

Если для получившейся покупки (старой или изменившейся) бу-

дет n2*10.25+n3*1,05>114.00, то надо сделать

n1=n1+1 : n2=0 : n3=0


Это решение пригодно для любых цен (при которых коробка дешевле, чем 12 связок, а связка - чем 12 пар).

#include <stdio.h>

int main(void)

{

int n1,n2,n3,n,m;

scanf("%d",&n);

n1=n/144;

m=n%144;

n2=m/12;

n3=m%12;

if (n3*105>1025) {n2++;n3=0;}

if (n2*1025+n3*105>11400){n1++;n2=n3=0;}

printf("Для покупки %d пар надо купить %d кор.,%d св.%d пар &bsol;n",n,n1,n2,n3);

}

Задача N15.

Имеется k селений. Если в селении i расположить пункт скорой помощи, то поездка по вызову в селение j займет время a[i,i]+a[i,j], где 1<=i,j<k,i не равно j. Найти номер селения i, поездка от которого в самое отдаленное(по времени) селение занимала бы минимальное время. Массив a[1:k,1:k] задан, в нем все a[i,j]>0;и a[i,j] м.б. не равно a[j,i].