↑↑↑

↓↓↓
Флаг России Флаг Великобритании
Баннер Недвижимость в Коста-дель-Соль
🏠 | 💻 PC | Программирование |

C

C Python

Прежде чем начать программировать полезным будет найти и прочитать книгу об операционной системе в которой вы хотите это делать.

Например, полезно знать о системной переменной PATH.

Для новичков вроде меня очень удивительным может показаться преобразование чисел. Предположим вы ввели 9. И хотите чтобы её вам и напечатали. А получаете в ответ 57.

Чтобы разобраться в этом вопросе - нужно открыть таблицу символов ASCII - ссылка и найти в ней 9ку. Ей соответствует 16-тиричное число 39. Чтобы выдать вам результат компьютер преобразует 39 в десятичный вид по формуле x = 3*16 + 9*1 = 57

Читаю книгу Кернигана и Ричи.

Стр. 29

#include<stdio.h>
#define LOWER 0
#define UPPER 300
#define STEP 20
main()
/*Именованные константы*/
{
int fahr, fahr1;
for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)
printf("%5d %10f.1\n", fahr, 5.0/9.0*(fahr-32.0));
}

Если не поставить .0 после 32 мой антивирус avast пишет об угрозе.
Тоже самое происходит и со всеми предыдущими примерами, в которых
используется for

Страница 34, параграф 1.5.3 Подсчёт строк.

if (c == '\n')

а не какой-то загадочный V


Страница 35, упражнение 1.8. Нужно написать программу для подсчёта табуляций, пробелов и новых строк.

Я написал два варианта. Один работает правильно.

#include<stdio.h>
/*подсчет пробелов, табуляци и новых строк входного потока*/
main()
{
int c, nl;
nl = 0;
while ((c=getchar()) !=EOF)
if (c=='\n')
++nl;
else if (c=='\t')
++nl;
else if (c==' ')
++nl;
printf("%d\n", nl);
}


Второй считает всё подряд.



#include<stdio.h>
/*подсчет пробелов, табуляци и новых строк входного потока*/
main()
{
int c, nl;
nl = 0;
while ((c=getchar()) !=EOF)
if (c=='\n','\t',' ')
++nl;
printf("%d\n", nl);
}

Синий говорит, что условие if здесь всегда TRUE.
Последний символ в условии if (c=='\n','\t',' ') рассматривается компиллятором как логический.
В ASCII значение пробела это 20. 20 > 0, всё, что больше нуля считается за TRUE, т.е. любо символ даёт вклад в сумму.
Я проверил, если там поставить просто ноль, то ничего выводится не будет. Ноль это FALSE.

Решения упражнений из книги Б. Кернигана и Д. Ричи
"Язык программирования Си"

Это мои решения, на 99% поэтому они могут быть довольно кривыми.

Нашел сайт, где также выложены решения.

1.15

#include <stdio.h>
float ffahr(int c);

main()
{
int cel,i;

for (i =0;i<20; ++i){
cel = i*10;
printf("%d %f\n", cel, ffahr(cel));
}
return 0;
}

float ffahr(int c)
{
float fahr;

fahr = (9.0/5.0)*c + 32.0;

return fahr;
}

1.17

#include <stdio.h>
#define MAXLINE 1000 /* максимальная длина строки в потоке */

int fgetline(char line[],int maxline);
void copy(char to[], char from[]);
/*вывод самой длинной строки в потоке */
main()
{
int len;/* длина текущей строки */
int max;/* текущая максимальная длина */
char line[MAXLINE]; /* текущая максимальная длина */
char longest [MAXLINE]; /* самая длинная строка из введенных */
char more50 [MAXLINE];
char more51 [MAXLINE];
char more52 [MAXLINE];
char more53 [MAXLINE];
char more54 [MAXLINE];
char more55 [MAXLINE];
char more56 [MAXLINE];
int j,i;
j =0;
max = 0;
while ((len = fgetline(line, MAXLINE)) > 0 ){

/* if (len > max) {
max = len;
copy(longest, line); */

/*if (max > 0) /* была непустая строка */
/*printf("%s", longest);
return 0;*/

if (len >= 5 ) {

copy(more5j, line);
++j;
}
}
printf("%s", more5);

}

/* getline: считывает строку в s, возвращает её длину */
int fgetline(char s[], int lim)
{
int c,i;

for (i = 0; i<lim-1 && (c=getchar()) !=EOF && c!='\n';++i)
s[i] = c;
if (c =='\n'){
s[i] = c;
++i;
}
s[i] = '\0';
return i;

}

/* copy: копирует строку 'from' в 'to'; длина to считается достаточной */

void copy(char to[], char from[])
{
int i;
i=0;
while((to[i] = from[i]) !='\0')
++i;

}

1.18

#include <stdio.h>
#define MAXLINE 1000
int fgetline(char line[], int maxline);
void reverse(char to[], char from[]);

main()
{
int c,i,j,max,len,k;
i=0;
j=2;
char line [MAXLINE];

/*while ((len = fgetline(line, MAXLINE))>1){*/

len = fgetline(line, MAXLINE);
while (line[len-j] ==' ' || line[len-j]=='\t')
++j;
for (k=0;k<=len-j;++k)
printf("%c", line[k]);
printf("%c\n", '\t');
}
/*printf("%c\n", line[len-2]);*/
int fgetline(char s[], int lim)
{
int c, i;
for (i=0; i< lim-1 && (c = getchar()) !=EOF && c !='\n';++i )
s[i] =c;
if (c=='\n'){
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}

1.19

#include <stdio.h>
#define MAXLINE 1000

void reverse(char to[], char from[]);
main()
{
int c,i,j,max;
i=0;
char line [MAXLINE];
char revline [MAXLINE];
while ((c=getchar())!=EOF && c!='\n') {
line[i] = c;
++i;
}
max=i;
for (j=0;j<=max;++j){
revline[j]=line[i];
--i;
}
printf("%s\n",revline);
printf("%s\n",line);
return 0;
}

1.20

#include <stdio.h>
main()
{
int c,i,j;
i=0;
while((c=getchar())!=EOF){
if(c!='\t'&& c!='\n'){
++i;
//printf("%d",i);
if(i==8){
i=0;}
printf("%c",c);
}
if(c=='\t'){
for (j=0;j<8-i;++j){
printf("%c",' ');}
i=0;
}
else if(c=='\n'){
printf("\n","new line");
i=0;}
/*else
printf("%c",c);*/
}
printf("\n");
}

1.22

#include <stdio.h>
#define lim 10
#define maxline 50
main()
{
int c,i,j,start,start2,len,len2,len3;
int line[maxline];
int line2[maxline];
start=0;
len3=0;
for(i=0;i<maxline;++i){
line[i]=('A');
}
i=0;
while((c=getchar())!=EOF && i<maxline){
if(c!='\n'){
line[i]=c;
++i;}
else {;}
}
/* commentr
rii
1234
*/
len=i;
for(start=0;start<(maxline-9);start +=len3){

for(j=(start+9);j>(start+0);--j){
if (line[j]==' '){
len2=j;
j=0;
}
else {
len2= start + 9;
}}
for(i=start;i<=len2;++i)
{
printf("%c",line[i]);
}
printf("\n");
//printf("%d",start);
len3=(len2-start+1);
}

1.23

#include <stdio.h>
#define lim 10
#define maxline 5000
main()
{
int c,i,i1,j,j1,j2,len;
int line[maxline];
int line2[maxline];
len=0;
j=j1=j2=0;
while((c=getchar())!=EOF){
++i;
line[i]=c;
}
for(j=0;j<=i;++j){

if(line[j]=='/'){
j1=j+1;
if(line[j1]=='/'){
for(j=j;j < i && line[j]!='\n';++j)
++len;
}

else if(line[j1]=='*'){
j2=j;

for(j2=j;j2<i;++j2)
{
if(line[j2]!='*'){
++len;
++j;}
else if(line[j2]=='*'){
j1=j2+1;
if(line[j1]!='/'){
++len;
++j;
}
else {
++j;
j2=i;}
}
}
}
else
line2[j-len]=line[j];
}
else
line2[j-len]=line[j];
// dljkflkdjfl;kjsdlkf;klsdjfj;sdljf;klsdjfk;ljsdk;flj;sdlkjfkl;sjdfl;ksjdflk;js;dlkfj;klf9
}

printf("Old");
printf("\n");
for(i1=0;i1<=i;++i1){
printf("%c",line[i1]);
}
printf("\n");

printf("New");

printf("\n");
for(i1=0;i1<=i;++i1){
printf("%c",line2[i1]);
}
printf("\n");

/*
dflkdsjflkj
dsjklfjkd
lkjdlfjk
*/

return 0;
}
//printf("%c", line[j]);
printf("\n");
return 0;
}

1.24

#include<stdio.h>
#define maxline 5000
main()
{
int c,i,j,j1,j2;
int round; //проверка круглых скобок
int fig; //figure
int quad;
int line[maxline];
i=round=fig=quad=0;
while((c=getchar())!=EOF)
{
line[i]=c;
++i;
}

for(j=0;j < i;++j)
{
if(line[j]=='/'){
j1=j+1;
if(line[j1]=='/'){
for(j=j;j < i && line[j]!='\n';++j){
}
}
else if(line[j1]=='*'){
for(j2=j;j2 < i;++j2,++j){

if(line[j]=='*'){
j1=j+1;
if(line[j1]=='/'){
++j;
j2=i;
}
}
}
}
}

else if (line[j]=='('){
++round;
}
else if (line[j]==')'){
--round;
}
else if (line[j]=='{'){
++fig;
}
else if (line[j]=='}'){
--fig;
}
}

if(round == 0){
printf("round ok");
}
else if(round > 0){
printf("round mistake to many (");
}
else if(round < 0){
printf("round mistake not enought (");
}
printf("\n");
if(fig == 0){
printf("fig ok");
} else if(fig > 0){
printf("fig mistake to many {");
}
else if(fig < 0){
printf("fig mistake not enought {");
}
printf("\n");
return 0;
}

2.1

#include <stdio.h>
#include <limits.h>
#include <float.h>

/* Когда прочитал задания слегка выпал в осадок. Как имея знания на уровне первой главы К и Р
(из которой я сделал сам все упражнения) понять каким образом можно обратиться к файлам. Синий
сказал, что заголовочные файлы (на инопланетном - headers) лежат в папке /usr/includes */
int main()
{

return 0;
}




Долго мучался с примером 1.9. Нужно было написать программу, которая выводит то, что вводится с клавиатуры, при этом игнорируя все пробелы, кроме самых первых.

#include<stdio.h>
main()
{
int c, c1;
c1 == 0;
while ((c=getchar()) !=EOF){
if (c==' ')
++c1;
else
c1 = 0;
if (c1 <=1)
putchar(c) ;
else
{
;
c1 = 1;
}
}
}

Вы нашли то, что искали на сайте?

ДА НЕТ

Или оцените по десятибальной шкале

Если сайт не помог, извиняемся за потраченное время - хочу заверить, что мы стараемся не попадать в нерелевантные запросы, но тем не менее не всегда успеваем обновлять ключевые слова. Ну и контролировать поисковую выдачу, конечно, невозможно.

Например: у нас есть статья про аэропорт Хельсинки и про аэропорт Риги но в выдаче по Риге всё равно статья про Хельсинки.

Если статья Вам помогла, нажимайте ДА. Так мы поймём, что переделывать её не нужно.

Занятно наблюдать в вебвизоре, как люди копируют текст, например вежливого отказа в трудоустройстве на английском но игнорируют кнопку ДА.

Сделаем поиск лучше!
Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: