Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование,Лесовская.Список задач.1 подгр....doc
Скачиваний:
7
Добавлен:
12.07.2019
Размер:
1.84 Mб
Скачать

39

- -

Глава 2 ПростЫе конструкции

Данный раздел включает работу с текстовой информацией, одномерными массивами и матрицами, а также другие за­дачи, требующие составления алгоритма решения и его записи с использованием основных конструкций языка. Каждый студент должен решить 10 задач, три из которых (по указанию преподавателя) отладить на ЭВМ.

Номер первой задачи:

НПЗ = (7*N)%127, где N - порядковый номер студента.

Номера следующих задач:

НiЗ = (НПЗ+i)%127+1, где i=0,...,8.

Примеры решения задач Задача a

Дано натуральное число N. Определить его первую и последнюю цифры.

#include <stdio.h>

#include <conio.h>

void main()

{ long n, m;

int cp;

clrscr(); // очищаем экран

m1:

printf("\n Введите натуральное число : ");

scanf("%ld", &n);

m=n; cp=m%10;

while(m>9) m/=10;

printf("\n В числе %ld первая цифра - %ld, а последняя - %d", n, m, cp);

printf("\n Продолжим? Да - введи 7 : ");

scanf("%d", &cp);

if(cp==7) goto m1;

}

Задача b

Распечатать те элементы массива S, индексы которых являются степенями двойки.

#include <stdio.h>

#include <conio.h>

#include <malloc.h>

void main()

{ int i, n, *s;

m1: clrscr();

printf("\n Введите размер массива (лучше меньше 360) : ");

scanf("%d", &n);

s=(int*)malloc(n*sizeof(int)); // выделяем память

puts("\n\t Исходный массив ");

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

{

s[i]=i // значения элементов массива равны своим индексам!

if(i!=0&&i%19==0) putchar('\n');

printf("%4d", s[i]);

}

printf("\n Требуемые элементы массива : ");

for(i=1; i<n; printf("%d ", s[i]), i*=2);

free(s); // освобождаем память

printf("\n Продолжим? Да - введи 7 : ");

scanf("%d", &i);

if(i==7) goto m1;

}

Задача c

Сформировать матрицу A(10, 10) следующего вида:

.

#include <stdio.h>

#define N 10

void main()

{

static int a[N][N]; // статический массив инициализируется нулями

int i, j;

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

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

if(i>=j) a[i][j]=i-j+1; // условие попадания под главную диагональ

// печать матрицы

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

{

for(j=0; j<N; j++) printf("%3d", a[i][j]);

putchar('\n');

}

}

Можно уменьшить количество повторений цикла и избавиться от проверок в операторе IF, если фрагмент заполнения матрицы записать следующим образом:

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

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

a[i][j]=i-j+1;

Задача d

Распечатать введенную строку символов, удалив '*' и удвоив 'A'.

#include <stdio.h>

void main()

{

int i, k=0;

char str[80], ch;

puts("Введите строку символов");

while((ch=getchar())!='\n')

{

if(ch!='*') continue;

if(ch=='A' || ch=='a')

str[k++]=ch;

str[k++]=ch;

}

// печатаем сформированный выходной массив

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

putchar(str[i]);

}

В данном варианте программы в основном цикле ввода одновременно формируется выходной массив str[]. Можно вообще обой­тись без массива, если в цикле WHILE сразу осуществлять вывод нужных символов

while((ch=getchar())!='\n')

{

if(ch=='*') continue;

if(ch=='a' || ch=='A') putchar(ch);

putchar(ch);

}