WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     | 1 |   ...   | 11 | 12 ||

scanf("%d.%d.%d", &dd2, &mm2, &yy2);

if (yy1 > yy2) i = 1;

else if (yy1 < yy2) i = 2;

else // когда года равны if (mm1 > mm2) i = 1;

else if (mm1 < mm2) i = 2;

else // когда равны года и месяцы if (dd1 > dd2) i = 1;

else if (dd1 < dd2) i = 2;

else // даты совпадают i = 0;

if (i == 1) printf("Первая дата более поздняя\n");

else if (i == 2) printf("Вторая дата более поздняя\n");

else printf("Даты совпадают\n");

} Используя цикл, напишите код, в котором пользователю предлагается вводить данные до тех пор, пока он не сделает это корректно, т.е. пока все указанные в scanf() переменные не получат свои значения. Протестируйте программу. Что вы наблюдаете и почему Как можно решить проблему #include main () { int a, n;

float b;

char str[20];

do { printf("Enter a integer, a float, a string: ");

n = scanf("%d%f%s", &a, &b, str);

if (n != 3) { scanf("%*s%*s%*s");

} } while (n != 3);

printf("Integer: %d, float: %.3f, string: %s\n", a, b, str);

} Урок 10. Псевдослучайные числа Выведите на экран ряд случайных чисел, принадлежащих диапазону от -128 до включительно.

#include #include #include main () { int i;

srand(time(NULL));

for (i = 1; i <= 100; i++) { printf("%10d", rand() % (127 - (-128) + 1) + (-128));

if (i % 5 == 0) printf("\n");

} } Заполните массив случайными числами в диапазоне от 0.51 до 1.00. Выведите значение элементов массива на экран.

#include #include #include main () { int i, r;

srand(time(NULL));

for (i = 1; i <= 50; i++) { printf("%10.2f", (float) rand() / RAND_MAX * (1 - 0.51) + 0.51);

if (i % 5 == 0) printf("\n");

} } Урок 11. Особенности массивов при работе с указателями Напишите программу, в которой объявлен массив вещественных чисел из десяти элементов.

Присвойте указателю адрес четвертого элемента, затем, используя цикл, выведите на экран адреса 4, 5 и 6-ого элементов массива.

#include #define N main () { float arr[N] = {1.0, 0.9, 0.5, 0.6, 0.7, 1.1, 0.7, 0.4, 1.2, 0.9};

float *p;

int i;

p = arr+3;

for (i=0; i<3; i++) printf("%.1f\n", p[i]);

} Урок 12. Массивы и функции Напишите программу, в которой из функции main() в другую функцию передаются два массива: "заполненный" и "пустой". В теле этой функции элементам "пустого" массива должны присваиваться значения, так или иначе преобразованные из значений элементов "заполненного" массива, который не должен изменяться.

#include #define N void arr_change(const int a[], int b[]);

main () { int arr[N] = {2,3,4,5,12,13,14,15,22,23};

int arr1[N], i;

arr_change (arr, arr1);

for (i=0; i

printf("\n");

} void arr_change(const int m1[], int m2[]) { int i;

for(i=0; i

} Урок 13. Особенности работы со строками Объявите в программе три массива символов. Данные для двух из них получите с помощью вызовов функции gets(). Третий массив должен содержать результат конкатенации (соединения) двух введенных строк. Напишите функцию, которая выполняет конкатенацию строк.

void concat (const char *, const char *, char *);

main () { char str0[50], str1[50], str2[100];

gets(str0);

gets(str1);

concat(str0, str1, str2);

puts(str2);

} void concat (const char *s0, const char *s1, char *s) { int i, j;

for (i=0; s0[i]!='\0'; i++) s[i] = s0[i];

for (j=0; s1[j]!='\0'; j++,i++) s[i] = s1[j];

s[i] = '\0';

} Урок 19. Препроцессор языка C Напишите программу, содержащую пару макросов: один вычисляет сумму элементов массива, другой выводит элементы массива на экран.

#include #define N #define PN(m) for(i=0; i

int i;

int sum=0;

SUM(arr,sum);

printf("%d\n", sum);

PN(arr);

} Напишите программу, содержащую макросы с аргументами, вычисляющие площади различных геометрических фигур (например, квадрата, прямоугольника, окружности).

#include #define SQ(a) (a) * (a) #define REC(a,b) (a) * (b) #define CIR(r) 3.14 * (r) * (r) main () { printf("%d\n", SQ(67));

printf("%d\n", REC(8,9));

printf("%.2f\n", CIR(5));

} Урок 20. Многофайловые программы Создайте две глобальные переменные в одном файле. В другом файле напишите функцию, которая меняет их значение.

Файл main.c:

#include int a = 0;

char b = 'x';

void changing(void);

main() { printf("%d %c\n", a, b);

changing();

printf("%d %c\n", a, b);

} Файл change.c:

void changing() { extern a;

extern b;

a = 20;

b = 'r';

} Урок 22. Проверочная работа 5. Переделайте условное выражение из 4-го задания в макрос.

#include #define ABS(x) (x > 0) x : -x main() { int a, b;

scanf("%d", &a);

b = ABS(a);

printf("%d\n", b);

} 7. Запрограммируйте вывод на экран символов так, как показано на рисунке. Используйте циклы for, а также если необходимо функцию strcat().

#include #include main() { short i, j, k;

char str[50];

str[0] = '\0';

for (i=1; i<=5; i++) { for (j=1; j<=3; j++) { for (k=0; k

printf("%-25s", str);

str[0] = '\0';

} printf("\n");

} } 8. Напишите программу, которая определяет в процентном соотношении количество гласных и согласных букв в текстовом файле. Имя файла передается в программу через командную строку.

#include #include main (int argc, char *argv[]) { FILE *f;

char ch;

char vowels[] = "aeiouyAEIOUY";

char cons[] = "bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ";

unsigned v=0, c=0;

f = fopen(argv[1], "r");

if (f == NULL) { puts("Не удалось прочитать файл");

return 1;

} while ((ch = getc(f)) != EOF) { if (strchr(vowels, ch) != NULL) v++;

else if (strchr(cons, ch) != NULL) c++;

} fclose(f);

printf("Гласные: %.2f%%\nСогласные: %.2f%%\n", ((float)v/(v+c))*100, ((float)c/(v+c))*100);

} 11. Напишите программу, в которой массив заполняется случайными буквами английского алфавита; значения элементов массива в символьном представлении выводятся на экран.

#include #include #define N main () { char arr[N], i;

srand(time(NULL));

for (i=0; i

printf("%c ", arr[i]);

} printf("\n");

} 12. Напишите функцию, которая принимает указатели на два массива. Функция должна заполнять один массив 25-ю случайными четными числами, а другой — 25 нечетными.

Продемонстрируйте ее работу.

#include #include #define N void arrs_make(int even[], int odd[]);

void arr_print(int *arr, int n);

main () { int arr1[N], arr2[N];

arrs_make(arr1, arr2);

arr_print(arr1, N);

printf("\n");

arr_print(arr2, N);

printf("\n");

} void arrs_make(int *even, int *odd) { int i,j,k;

srand(time(NULL));

for (j=0, k=0; j

if (i%2 == 0 && j < N) { even[j] = i;

j++;

} else if (k < N) { odd[k] = i;

k++;

} } } void arr_print(int *arr, int n) { int i;

for (i=0; i

} 13. Пользователь вводит две строки, каждая строка состоит из двух слов, разделенных пробелом. Требуется сравнить строки лексикографически, начиная со второго слова (т.е. после пробела). Напишите программу, выполняющую описанную задачу.

#include #define N main () { char strA[N], strB[N];

char *a, *b;

gets(strA);

gets(strB);

a = strchr(strA,' ');

b = strchr(strB,' ');

if (a != NULL && b != NULL) if (strcmp(a, b) == 0) puts ("Yes");

} 14. Пользователь вводит адреса сайтов и их ТИЦ. Данные о каждом сайте сохраняются в элементе динамической структуры. По команде пользователя данные записываются в файл, при этом память, выделенная под динамическую структуру, высвобождается.

Далее пользователь может снова начать вводить информацию о сайтах, либо завершить выполнение программы.

#include #include #include struct site { char address[25];

unsigned index;

struct site *next;

};

struct site *add_site(struct site *, char *adds, int tic); // присоединение элемента к голове, возврат адреса головы void save(struct site *); // сохранение стека main() { char adds[25];

unsigned tic;

struct site *head; // адрес, указывающий на голову стека while (1) { head = NULL;

while (1) { printf("Адрес сайта (s - stop): ");

scanf("%s", adds);

if (strcmp(adds,"s") == 0) break;

printf("Тиц %s: ", adds);

scanf("%u", &tic);

head = add_site(head,adds,tic);

} printf("\n");

save(head);

free(head);

printf("Продолжить (y - yes): ");

scanf("%s",adds);

if (strcmp(adds,"y") != 0) break;

} } struct site *add_site(struct site *head, char *ch, int tic) { struct site *element; // указатель на новую структуру element = (struct site *)malloc(sizeof(struct site)); // выделяем память element->next = head;

strcpy(element->address, ch);

element->index = tic;

return element;

} void save(struct site *p){ FILE *f;

f = fopen("sites.txt","a");

while (p != NULL) { // пока не конец стека fprintf(f,"%s - %u\n", p->address, p->index);

p = p->next; // продвижение по списку } fclose(f);

}

Pages:     | 1 |   ...   | 11 | 12 ||










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.