Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты по проге.docx
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
630.61 Кб
Скачать
  1. Есть одномерный массив целых чисел и нужно построить функцию, получающую на вход вещественное число X и возвращающую индекс элемента, который ближе всего к этому числу.

int a[n];

int i;

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

{

a[i] = i + 7 - 1;

}

float x = 7.2;

int min = fabs(a[0]-x);

int fin;

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

{

if ((fabs(a[i] - x)) < min)

{

min = fabs(a[i]-x);

fin = i;

}

}

printf("%d", fin);

system("pause");

  1. Функция strcpy (char *s1, char *s2) , билет 12.

  1. Даны A[n], B[n], x. Написать функцию, которая возвращала бы такие i и j, что A[i]+B[j] было максимально приближенно к x.

#include <math.h> // для функции fabs, возвращающей модуль числа

void func(int N ,float A[N], float B[N], int *i, int *j, float x)

{

int ii,jj;

float a,min;

int *i=0;

int *j=0;

min=fabs(A[0]+B[0]-x);

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

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

if ((a=fabs(A[ii]+B[jj]-x))<min)

{

*i=ii;

*j=jj;

min=a;

}

}

  1. Реализация strcat(); Билет 7.

char *strcat(char *s1, char *s2)

{

Int i=0; char *t = s1;

While (*s1++) s1--;

While (*s1++ = *s2++);

Return t;

}

  1. Билет 5. Функция, выдаёт частное и остаток от деления X на y, нельзя пользоваться / и % .

Void f(int x, int y, int *m, int *k)

{

int q, x, p, y;

q = x; p = 0;

while (q >= y)

{

q = q - y;

p++;

}

*m = p; // частное

*k = q; // остаток

}

p*y + q = const = x

  1. Метод генерации случайной перестановки ( Тасование Фишера-Йетса).(не ок)

void swap(int *c, int y, int t)

{

int tmp = c[y];

c[y] = c[t];

c[t] = c[y];

}

int main()

{

int i, j;

int a[5] = {1, 2, 3, 4, 5 };

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

printf("%d", a[i]);

system("pause");

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

{

j = rand() % 5;

swap(a, j, i);

}

}

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

printf("%d", a[i]);

system("pause");

Cам алгоритм: Для тасования массива a из n элементов (индексы 0..n-1):

для всех i от n − 1 до 1 выполнить

j ← случайное число 0 ≤ ji

обменять местами a[j] и a[i]

function randomPermutation(a:array[1..n] of integer):array[1..n] of integer // n — длина массива

for i = 1 to n

j =

return a

  1. Билет про ЛКГ ,параметры

  1. Построить функцию int digit (long x, int n) возвращающую n-ую цифру справа числа x.

int digit(long x, int n)

{

int l, a;

char buf[100];

char k[1];

ltoa(x,buf,10);

l=strlen(buf);

k[0]=buf[l-n];

a=atoi(k);

return(a);

}

  1. Реализовать функцию int strncmp(char*s1,char*s2,n)

int strncmp(char*s1, char*s2, n)

{ int i=0;

while (*s1++=*s2++ && i<=n && *s1!=NULL && *s2!=NULL) i++

if (*s1==*s2) return(0);

if (*s1>*s2) return (1);

if (*s1<*s2) return(-1);

  1. Реализовать функцию char*strncat(char*s1,char*s2,n)

char*strncat(char*s1, char*s2,n)

{char *sav=s1;

int i=0;

while (*s1) s1++;

while (*s2 && i<=n)

{i++;*s1=*s2;s1++;s2++;}

return(sav);

  1. Реализовать функции int strlen(char *s).

int strlen(char *s)

{

int len=0;

while(*s++) len++;

return( len);

}

  1. Реализовать функцию char*strcpy(char *s1,char*s2)

char*strcpy(char*s1, char*s2)

{

char *sav =s1;

while(*s1++=*s2++);

return(sav);

}

  1. Реализовать функцию char*strcat(char*s1,char s2)

char*strcat(char*s1, char*s2)

{

char *sav =s1;

while(*s1){

s1++;

}

while(*s2){

*s1=*s2;

s1++;

s2++;

}

return(sav);

}

  1. Реализовать функцию char*strchr(char*s,char c)

char *strchr(char*s, char c)

{

while (((*s)!=c) && *s!=’\0’) s++;

if (*s==0) return(0);

return(s);

}

  1. Реализовать функцию char*strncpy(char*s1,char*s2,n)

char*strncpy(char*s1,char*s2, n)

{char *sav=s1;

int i=0;

while (*s2 && i<=n) {*s1=*s2;s1++;s2++;}

return(sav);

Задачи из лекций:

  1. Программа, определяющая размер типов без использования sizeof.

int main()

{

int digit1, digit2;

char maxchar, minchar = 0;

unsigned char maxuchar = -1, minuchar = 1;

int maxint, minint = 1, sizeint = 1, sizeuint = 1, sizeuchar = 1, sizechar = 1, sizeshort = 1, sizelong = 1;

unsigned int maxuint = -1, minuint = 0;

short maxshort, minshort = 0;

long maxlong, minlong = 1;

int a, b;

while (minchar >= 0) minchar++;

maxchar = minchar - 1;

digit1 = (maxchar - minchar) + 1;

while (digit1 % 2 == 0)

{

digit1 = digit1 / 2;

sizechar++;

}

while (minuchar > 0) minuchar++;

maxuchar = minuchar - 1;

digit1 = (maxuchar - minuchar) + 1;

while (digit1 % 2 == 0)

{

digit1 = digit1 / 2;

sizeuchar++;

}

while (minint*2) minint = minint*2;

maxint = minint - 1;

digit1 = (maxint - minint) + 1;

digit2 = 2;

do {

digit2 *= 2;

sizeint++;

} while (digit2 != digit1);

while (minuint *2) minuint = minuint *2;

digit1 = (maxuint - minuint) + 1;

digit2 = 2;

do {

digit2 *= 2;

sizeuint++;

} while (digit2 != digit1);

while (minshort >= 0) minshort ++;

maxshort = minshort - 1;

digit1 = (maxshort - minshort) + 1;

while (digit1 % 2 == 0)

{

digit1 = digit1 / 2;

sizeshort++;

}

while (minlong *2) minlong = minlong*2;

maxlong = minlong -1 ;

digit1 = (maxlong - minlong) + 1;

digit2 = 2;

do

{

digit2 = digit2 * 2;

sizelong++;

} while (digit2 != digit1);

}

  1. Поиск минимума и максимума в массиве.

int a[5] = { 5, 4, 3, 7, 8};

int i = 0;

int max = a[0];

int min = a[0];

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

{

if (a[i]> max) max = a[i];

if (a[i] < min) min = a[i]; }

  1. Дан упорядоченный массив, найти число различных чисел.

int a[7] = {1,3,3,3,5,9,9};

int i;

int count = 0;

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

{

if (a[i + 1] != a[i]) count++;

}

  1. Найти сумму подмассива длиной m

Int arr[N]; int m, sum = 0;

If (m<=N){

For (int j=0; j<=(N-m); j++)

{

For (int i=j; i<m+j; i++) { sum = sum+arr[i];} printf(“Sum #%d %d”, (j+1), sum);

Sum = 0;

}

}

Else printf(“Error: m>N”); }

  1. Проверка на простоту целого х

int simple(int n)

{

if (n == 1) return 1;

for (int i = 2; i <= n / 2; i++)

if (!(n%i)) return 0;

return 1;

}

int main()

{

int n;

printf(" N=");

scanf("%d", &n);

if (n == 2) return -1;

if (simple(n)) return 0;

else return -1; }

  1. N-ю цифру числа справа

int digit(long x, int n)

{

int t;

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

t = x % 10;

x = x / 10;

}

printf("%d", t);

}