Первая лаба
This commit is contained in:
52
fib.c
Normal file
52
fib.c
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
int fib(int n) {
|
||||||
|
if (n < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (n == 0) return 0;
|
||||||
|
if (n == 1) return 1;
|
||||||
|
|
||||||
|
int a = 0;
|
||||||
|
int b = 1;
|
||||||
|
int c;
|
||||||
|
|
||||||
|
for (int i = 2; i <= n; i++) {
|
||||||
|
if (b > INT_MAX - a) {
|
||||||
|
return INT_MIN;
|
||||||
|
}
|
||||||
|
c = a + b;
|
||||||
|
a = b;
|
||||||
|
b = c;
|
||||||
|
}
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
int n;
|
||||||
|
printf("Введите целое неотрицательное n: ");
|
||||||
|
if (scanf("%d", &n) != 1) {
|
||||||
|
fprintf(stderr, "Ошибка ввода: ожидалось целое число.\n");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int result = fib(n);
|
||||||
|
|
||||||
|
if (n < 0) {
|
||||||
|
fprintf(stderr, "Ошибка: n должно быть неотрицательным.\n");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result == INT_MIN) {
|
||||||
|
fprintf(stderr, "Ошибка: переполнение при вычислении fib(%d). "
|
||||||
|
"Значение фибоначчи слишком велико для типа int.\n", n);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("fib(%d) = %d\n", n, result);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
7
hello.c
Normal file
7
hello.c
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
printf("Hello World!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
51
myatoi.c
Normal file
51
myatoi.c
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
int myatoi(char *instr) {
|
||||||
|
if (instr == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (isspace((unsigned char)*instr)) {
|
||||||
|
instr++;
|
||||||
|
}
|
||||||
|
|
||||||
|
int sign = 1;
|
||||||
|
if (*instr == '+') {
|
||||||
|
instr++;
|
||||||
|
} else if (*instr == '-') {
|
||||||
|
sign = -1;
|
||||||
|
instr++;
|
||||||
|
}
|
||||||
|
|
||||||
|
long result = 0;
|
||||||
|
while (*instr >= '0' && *instr <= '9') {
|
||||||
|
int digit = *instr - '0';
|
||||||
|
|
||||||
|
if (sign > 0) {
|
||||||
|
if (result > (LONG_MAX - digit) / 10) {
|
||||||
|
return INT_MAX;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (-result < (LONG_MIN + digit) / 10) {
|
||||||
|
return INT_MIN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result = result * 10 + digit;
|
||||||
|
instr++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (int)(result * sign);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
printf("myatoi(\"1\") = %d\n", myatoi("1"));
|
||||||
|
printf("myatoi(\"42\") = %d\n", myatoi("42"));
|
||||||
|
printf("myatoi(\"-105\") = %d\n", myatoi("-105"));
|
||||||
|
printf("myatoi(\" -12abc34\") = %d\n", myatoi(" -12abc34"));
|
||||||
|
printf("myatoi(\"9999999999999\") = %d (overflow)\n", myatoi("9999999999999"));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
56
mystr_idx.c
Normal file
56
mystr_idx.c
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int mystr_idx(char *str, char *substr) {
|
||||||
|
if (str == NULL || substr == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*substr == '\0'){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int i=0;
|
||||||
|
while (str[i] != '\0') {
|
||||||
|
int j = 0;
|
||||||
|
int temp_i = i;
|
||||||
|
|
||||||
|
while (substr[j] != '\0' && str[temp_i] != '\0' && str[temp_i] == substr[j]) {
|
||||||
|
temp_i++;
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr[j] == '\0') {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_mystr_idx() {
|
||||||
|
printf("mystr_idx(\"helloworld\", \"world\") = %d (ожидается: 5)\n",
|
||||||
|
mystr_idx("helloworld", "world"));
|
||||||
|
printf("mystr_idx(\"helloworld\", \"helloworld\") = %d (ожидается: 0)\n",
|
||||||
|
mystr_idx("helloworld", "helloworld"));
|
||||||
|
printf("mystr_idx(\"helloworld\", \"foo\") = %d (ожидается: -1)\n",
|
||||||
|
mystr_idx("helloworld", "foo"));
|
||||||
|
printf("mystr_idx(\"helloworld\", \"hello\") = %d (ожидается: 0)\n",
|
||||||
|
mystr_idx("helloworld", "hello"));
|
||||||
|
printf("mystr_idx(\"helloworld\", \"low\") = %d (ожидается: 3)\n",
|
||||||
|
mystr_idx("helloworld", "low"));
|
||||||
|
printf("mystr_idx(\"abcabc\", \"abc\") = %d (ожидается: 0)\n",
|
||||||
|
mystr_idx("abcabc", "abc"));
|
||||||
|
printf("mystr_idx(\"\", \"test\") = %d (ожидается: -1)\n",
|
||||||
|
mystr_idx("", "test"));
|
||||||
|
printf("mystr_idx(\"test\", \"\") = %d (ожидается: 0)\n",
|
||||||
|
mystr_idx("test", ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
test_mystr_idx();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
24
mystrlen.c
Normal file
24
mystrlen.c
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int mystrlen(const char *s) {
|
||||||
|
return strlen(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
char str[200];
|
||||||
|
|
||||||
|
printf("Введите строку: ");
|
||||||
|
|
||||||
|
fgets(str, sizeof(str), stdin);
|
||||||
|
|
||||||
|
size_t len = strlen(str);
|
||||||
|
if (len > 0 && str[len-1] == '\n') {
|
||||||
|
str[len-1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
int length = mystrlen(str);
|
||||||
|
printf("Длина строки: %d\n", length);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
47
sumArray.c
Normal file
47
sumArray.c
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int sumArray(int arr[], int size) {
|
||||||
|
int sum = 0;
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
sum += arr[i];
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
|
||||||
|
|
||||||
|
int myArray[100];
|
||||||
|
int i;
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
printf("Введите числа, для остановки введите число 0:\n");
|
||||||
|
|
||||||
|
for(i = 0; i < 100; i++) {
|
||||||
|
|
||||||
|
scanf("%d", &myArray[i]);
|
||||||
|
if(myArray[i] == 0){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
count++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Введённые числа:\n");
|
||||||
|
for (i =0; i < count; i++) {
|
||||||
|
printf("%d ", myArray[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
if (count < 100 && myArray[count] == 0) {
|
||||||
|
printf("Ввод остановлен по команде пользователя (0)\n");
|
||||||
|
}
|
||||||
|
printf("Всего введено чисел: %d\n", count);
|
||||||
|
|
||||||
|
int total = sumArray(myArray, count);
|
||||||
|
|
||||||
|
printf("Сумма элементов массива: %d\n", total);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user