- •1. База
- •Определения
- •Циклы
- •Целочисленные типы:
- •Вещественные типы – типы хранения дробной части
- •Квалификаторы
- •Указатели
- •Динамическое выделение памяти
- •Строки
- •Реализация функций
- •Перегрузка функций (только в C++)
- •Выделение памяти в C++
- •Адресная арифметика
- •Структуры
- •Практика
- •Задача #1
- •Задача #2
- •Задача #3
- •Задача #4
- •Задача #5
- •Задача #6
- •Задача #7
Практика
Задача #1
Ввести с клавиатуры строку с пробелами. Программа должна вывести символы в верхнем регистре
#include <stdio.h>
int main() {
int i;
char a[100];
scanf("%99[^\n]s",a); /*безопасный ввод до 99 потому что существует терм. ноль*/
fflush(stdin);
for (i=0;a[i]!=0;i++) /*счетчик считает пока не встретит терминальный ноль*/
{
if ('A'<=a[i] && a[i]<='Z') /*проверка на соответствие верхнему регистру*/
{
printf("%c",a[i]);
}
}
return 0;
}
Задача #2
Заполнить двумерный массив [3][3], в каждой строке найти максимальное и минимальное значения.
#include <stdio.h>
#include <stdlib.h>
int main() {
int a[3][3]; size_t i,j; int max,min;
for(i=0;i<sizeof(a)/sizeof(a[0]);i++) {
for(j=0;j<sizeof(a[0])/sizeof(a[0][0]);j++) {
scanf("%d",&a[i][j]); fflush(stdin);
}
} for(i=0;i<sizeof(a)/sizeof(a[0]);i++) {
max = a[i][0]; min = a[i][0];
for(j=0;j<sizeof(a[0])/sizeof(a[0][0]);j++) {
if (max<a[i][j]) max = a[i][j]; if (min>a[i][j]) min = a[i][j];
} printf("%d\n%d\n",max,min);
}
return 0;
}
Задача #3
Функция принимает массив int, размер массива, два адреса. Подсчитать количество четных и нечетных значений и вернуть их количество через указатели.
#include <stdio.h> #include <stdlib.h>
int chetnechet(int a[],size_t n,int* chet,int* nechet) {
if(n<0) return 2; if(chet==NULL) return 3; if(nechet==NULL) return 4; int x=y=0;
size_t i; for(i=0;i<n;i++) {
if(a[i]%2==0) x++; else y++;
}
*chet=x;
*nechet=y; return 0;
}
int main()
{
int a[10]; size_t n,i;
int chet,nechet; n=sizeof(a)/sizeof(a[0]); for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
chetnechet(a,n,&chet,&nechet); printf("%d\n%d",chet,nechet); return 0;
}
Задача #4
Двумерный динамический массив
#include <stdio.h>
#include <stdlib.h>
int main()
{
int** a;
size_t n,m,i,j; scanf("%zu",&n); fflush(stdin); scanf("%zu",&m); fflush(stdin);
a=(int**)malloc(n*sizeof(a[0])); if(a==NULL) return 1; for(i=0;i<n;i++)
{
a[i]=(int*)malloc(m*sizeof(a[0][0])); if(a[i]==NULL) return 2;
} for(i=0;i<n;i++) {
for(j=0;j<m;j++) {
scanf("%d",&a[i][j]); fflush(stdin);
}
} for(i=0;i<n;i++) {
for(j=0;j<m;j++) {
printf("%d\n",a[i][j]);
}
} for(i=0;i<n;i++) {
free(a[i]);
} free(a); return 0;
}
Задача #5
int example(size_t n,int** a) {
int* b;
if(n==0) return 1; if(a==NULL) return 2;
b=(int*)malloc(n*sizeof(b[0])); if(b==NULL) return 3;
*a=b;
return 0;
}
без промежуточного указателя *b
int example(size_t n,int** a) {
if(n==0) return 1; if(a==NULL) return 2;
*a=(int*)malloc(n*sizeof((*a)[0])); if(*a==NULL) return 3;
return 0;
}
Создание динамического массива в функции. что в мейне писать???
Задача #6
Написать функцию, которая ищет минимум из интового массива, и возвращает это значение через указатель. Аргумента три, сам массив, кол-во элементов, указатель чтоб вернуть значение.
Обязательно проверка.
#include <stdio.h>
#include <stdlib.h>
int getmin(int a[],size_t n,int* min) {
int x; size_t i;
if(n==0) return 2; if(min==NULL) return 3; x=a[0]; for(i=0;i<n;i++)
{
if(x>a[i]) x=a[i];
} *min=x; return 0;
}
