Урок 16
Изучаване на основите на програмирането на C за манекени.
Последни новини
YoungCoder вече е на Stepike. Регистрирайте се: https://vk.cc/75rISy
За да се запишете в курс, трябва да се регистрирате в Stepika: https://vk.cc/75rIC4
Урок 16. Указатели.
Прочетете по-простата версия на този урок "Показатели".
В новата версия:
- Още по-ясно обяснение
- Допълнителни материали
- 10 задачи по програмиране с автоматична проверка на решението
Как да конвертирате число от шестнадесетично в десетично.
Фиг.1 Преобразуване на шестнадесетично число в десетична бройна система |
Преобразуване на число от десетичен в шестнадесетичен.
![]() |
Фиг.2 Превод от 10-ти в шестнадесетичен |
Фиг.3 Пример за представяне на компютърна памет |
![]() |
Фигура 4. Програма, илюстрираща как работи sizeof(). |
![]() |
Фиг.5 Адреси на променливи в паметта |
Фиг.6. Пример за местоположението на променливите в паметта |
![]() |
Фиг.7 Местоположение на масива в паметта |
![]() |
Фиг.9. Използване на указатели за достъп до стойностите на променливите, към които се отнасят |
![]() |
Фиг.10 Нулев указател |
![]() |
Фиг. 11 Прост пъзел. Какво ще изведе представената програма? |
![]() |
Фиг.12 Пример за програма с указатели |
=D От коя точка?
HEX / DEC, веднага скицирах калкулатор. Но започвайки от реда: Указатели. :) Да, не наистина, препрочетох го няколко пъти, нарисувах нещо на лист хартия, стана повече или по-малко ясно какви са, не е ясно "защо?", Е, след като разберем защо, мисля на въпроса "как?" ще бъде по-лесно да отговорите.
Когато прочетох раздела, всичко беше ясно, когато вече го бях чел, стана неразбираемо, но не беше ясно какво точно не беше ясно)))
Какъв обрат. =D
ето как Anons преминават към рекурсия =)
Относно последната задача, правилно ли разбрах, че указателите могат да се използват като вид клипборд?
десетичен към шестнадесетичен
#include "stdio.h" int main() int a,m[100]; scanf("%d", &a); за (int i=0; a>0; i++) m[i]=a%16; a/=16; > for (int i=100; i>=0; i--) if (m[i]==10) printf("A ", m[i]); if (m[i]==11) printf("B ", m[i]); if (m[i]==12) printf("C ", m[i]); if (m[i]==13) printf("D ", m[i]); if (m[i]==14) printf("E ", m[i]); if (m[i]==15) printf("F ", m[i]); if ((m[i] =0)) printf("%d ", m[i]); > printf("\n"); връщане(0); >
#include "stdio.h" #include "string.h" int main () char m[100]; получава (m); int f[100],n=strlen(m); for(int i=0; i='0')&&(m[i] Отговор Изтриване
Вторият код не се копира добре. Сега относно забележката ви. Това се случи поради факта, че когато ще работим с елементите на масив от тип char. Те се съхраняват като числа. Отделно, не помня дали го казах или не, но във втория урок посочих диапазона на този тип данни и там беше в числа. Тук. Добре е, че тибеше забелязано. Това трябва да се подчертае.
Това е калкулатор от десетична до 16-та; Работи, но наистина не разбирам как, Написах го сам, използвайки метода на „научното мушкане“ и самият аз не го разбирам, Четох в интернет как компилаторът разпознава и преобразува отрицателни числа, но не знам формулата за превод.
#include "stdio.h" #include "string.h"
void f_1(int); void f_2(int);
Ох, ох, ох. Какъв страх =))) Първо, моля ви да използвате специална услуга за такива огромни кодове. Подробности тук https://vk.com/away.php?to=http%3A%2F%2Fyoungcoder.blogspot.ru%2F2014%2F02%2Fispolzuem-pastebin.html
Второ, научното мушкане е прекрасно, то е в основата на любопитството. Но все пак трябва да разберете какво пишете. Този въпрос трябва да бъде разгледан подробно.
Сега за програмата. Нека засега се занимаваме с превода в една от посоките. Да приемем, че искаме да преобразуваме число от десетично в шестнадесетично. Как се прави това е описано в началото на урока. Опитайте се да опишете този алгоритъм на ясен език. Ами, например, алгоритъмът на програмата за събиране на две числа: 1. Четене на първото число. 2. Четем второто число. 3. Намерете тяхната сума. 4. Показваме отговора на екрана.