Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК_ПВМ.doc
Скачиваний:
5094
Добавлен:
21.02.2016
Размер:
2.79 Mб
Скачать

Рекомендуемая литература:

1осн[173-205],2осн[256-290], 5доп[51-54], 7доп[23-28]

Тема 8-9. Составление программ решения задач обработки массивов с использованием указателей.

Форма проведения: Решение задач.

Задание:Реализовать обработку массива с использованием указателей, как указано в варианте. Составить блок-схему алгоритма и написать программу.

Варианты заданий:

  1. Дана целочисленная матрица размера M x N. Найти количество ее строк, все элементы которых различны.

  2. Дана целочисленная матрица размера M x N. Вывести номер ее первой строки, содержащей максимальное количество одинаковых элементов.

  3. Дана квадратная матрица порядка M. Найти суммы элементов ее диагоналей, параллельных главной (начиная с одноэлементной диагонали A[1,M]).

  4. Дана квадратная матрица порядка M. Найти суммы элементов ее диагоналей, параллельных побочной (начиная с одноэлементной диагонали A[1,1]).

  5. Дана квадратная матрица порядка M. Вывести максимальные из элементов каждой ее диагонали, параллельной побочной (начиная с одноэлементной диагонали A[1,1]).

Методические рекомендации по проведению СРСП.

Контрольный пример 1. Даны натуральное число n, действительные числа a1, ..., a2n. Получить a1a2n + a2a2n-1 + … + anan+1.

Контрольный пример 2. Дан одномерный массив. Найти среди элементов массива максимальный и зафиксировать его порядковый номер.

Контрольный пример 3. Дан двумерный массив. Найти минимальный и максимальный элементы массива.

/* пример 1 */

#include <conio.h>

#include <stdio.h>

#define n 4

main ()

{

clrscr();

int a[n],i,s,*ptr;

printf("Input massiv\n");

for (i=0;i<2*n;i++)

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

ptr=a; s=0;

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

s+=*(ptr+i)**(ptr+2*n-1-i);

printf("S = %d\n",s);

getch();

return 0;

}

/* пример 2 */

#include <conio.h>

#include <stdio.h>

#define n 5

main ()

{

clrscr();

int a[n],i,*max,pos;

printf("Input massiv\n");

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

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

max=a; pos=0;

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

if (*(a+i)>*max)

{ max=a+i; pos=i; }

printf("Max = %d raspolojen na %d meste",*max,pos+1);

getch();

return 0; }

/* пример 3 */

#include <stdio.h>

#include <conio.h>

#define n 3

main()

{ int i, j, m1, m2, p1, p2, buf, a[n][n];

int *min, *max,s;

clrscr();

printf("Input matrix %dX%d\n",n,n);

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

for(j=0; j<n; j++)

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

min=*a; m1=m2=p1=p2=0;

printf("Min = %3d m1 = %3d p1 = %3d\n", *min,m1,p1);

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

for(j=0; j<n; j++)

if (*(*(a+i)+j)<*min)

{

*min=*(*(a+i)+j); m1=i; p1=j;

}

printf("Min = %3d m1 = %3d p1 = %3d\n", *min,m1,p1);

max=*a;

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

for(j=0; j<n; j++)

if (*(*(a+i)+j)>*max)

{

*max=*(*(a+i)+j); m2=i; p2=j;

}

printf("Max = %3d m2 = %3d p2 = %3d\n", *max,m2,p2);

getch();

return 0;

}

Рекомендуемая литература.

1осн[273-292],2осн[273-276], 6доп[135-147]

Тема 10-11. Программирование задач обработки символьных и стрковых данных.

Форма проведения: Решение задач.

Задание. Задав с клавиатуры последовательность символов, реализовать обработку ее, как указано в варианте. Исходные данные задать самостоятельно, учитывая специфику конкретного варианта.

Варианты заданий:

  1. Дана строка. Подсчитать количество содержащихся в ней прописных букв.

  2. Дана строка. Преобразовать все строчные латинские буквы в прописные.

  3. Дана строка S, изображающая вещественное число в формате с плавающей точкой, и целое число N (> 0). Вывести набор символов, изображающих первые N цифр дробной части этого вещественного числа (без округления).

  4. Дана строка S и число N. Преобразовать строку S в строку длины N следующим образом: если длина строки S больше N, то отбросить первые символы, если длина строки S меньше N, то в ее начало добавить символы "." (точка).

  5. Даны две строки: S1 и S2. Удалить из строки S1 все подстроки, совпадающие с S2. Если таких подстрок нет, то вывести S1 без изменений.

Методические рекомендации по проведению СРСП.

/* пример 1 */

/* Применение функций isdijit,isalpha,isalnumиisxdijit*/

#include <stdio.h>

#include <ctype.h>

main()

{

printf(“Использование функцииisdijit:\n”);

printf(“%s%s\n”, isdijit(‘8’) ? “8 является ” : “8 не является ”, “цифрой”);

printf(“%s%s\n\n”, isdijit(‘#’) ? “# является ” : “# не является ”, “цифрой”);

printf(“Использование функцииisalpha:\n”);

printf(“%s%s\n”, isalpha(‘A’) ? “Aявляется ” : “Aне является ”, “буквой”);

printf(“%s%s\n”, isalpha(‘b’) ? “bявляется ” : “bне является ”, “буквой”);

printf(“%s%s\n”, isalpha(‘&’) ? “& является ” : “& не является ”, “буквой”);

printf(“%s%s\n\n”, isalpha(‘4’) ? “4 является ” : “4 не является ”, “буквой”);

printf(“Использование функцииisalnum:\n”);

printf(“%s%s\n”, isalnum(‘A’) ? “Aявляется ” : “Aне является ”, “цифрой или буквой”);

printf(“%s%s\n”, isalnum(‘8’) ? “8 является ” : “8 не является ”, “цифрой или буквой”);

printf(“%s%s\n\n”, isalnum(‘#’) ? “# является ” : “# не является ”, “цифрой или буквой”);

printf(“Использование функцииisxdijit:\n”);

printf(“%s%s\n”, isalnum(‘F’) ? “Fявляется ” : “Fне является ”, “шестнадцатеричным числом”);

printf(“%s%s\n”, isalnum(‘J’) ? “Jявляется ” : “Jне является ”, “шестнадцатеричным числом”);

printf(“%s%s\n”, isalnum(‘7’) ? “7 является ” : “7 не является ”, “шестнадцатеричным числом”);

printf(“%s%s\n”, isalnum(‘$’) ? “$ является ” : “$ не является ”, “шестнадцатеричным числом”);

printf(“%s%s\n”, isalnum(‘f’) ? “fявляется ” : “fне является ”, “шестнадцатеричным числом”);

return0; }

/* пример 2 */

/* Применение функций atof,atoi,atol*/

#include <stdio.h>

#include <stdlib.h>

main()

{ double d; int i; long l;

d=atof(“99.0”)

printf(“Использование функцииatof:\n”);

printf(“%s%.3f\n\n”, “Строка \”99.0\” преобразовалась в значение типаdouble”,d);

i=atoi(“2593”)

printf(“Использование функцииatoi:\n”);

printf(“%s%d\n\n”, “Строка \”2593\” преобразовалась в значение типаint”,i);

l=atol(“1000000”)

printf(“Использование функцииatol:\n”);

printf(“%s%ld\n\n”, “Строка \”1000000\” преобразовалась в значение типаlong”,i);

return0; }

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

/* пример 3 */

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <stdlib.h>

main ()

{

char s[] = "You must take this course again";

char *s1, *s2;

int len;

clrscr();

s1 = strtok(s, " ");

len=0;

while (s1!= NULL)

{

if (strlen(s1)>len) {

len=strlen(s1);

strcpy(s2,s1);

}

s1 = strtok(NULL, " ");

}

printf("Long token = %s\n", s2);

getch();

return 0;

}

/* пример 4 */

/* Применение функций strcpy,strncpy*/

#include <stdio.h>

#include <string.h>

main()

{ char x[] = “Happy Birthday to You”;

char y[25], z[15];

printf(“%s%s\n%s%s\n”, “Строка x: ”, x,

“Строка y: ”, strcpy(y,x));

strncpy(z, x, 14);

z[14] = ‘\0’;

printf(“Строка z: %s\n”, z);

return0; }

/* пример 5 */

/* Применение функций strcat,strncat*/

#include <stdio.h>

#include <string.h>

main()

{ char s1[20] = “Happy ”;

char s2[] = “New Year”;

char s3[40] = “”;

printf(“s1 = %s\ns2 = %s\n”, s1, s2);

printf(“strcat(s1, s2) = %s\n”, strcat(s1, s2));

printf(“strncat(s3, s1, 6) = %s\n”,

strncat(s3, s1, 6));

printf(“strcat(s3, s1) = %s\n”, strcat(s3, s1));

return0; }