Глава 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);
}