#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
double sredn(int i, int M, double **A)
{
double summ = 0;
for (int j = 0; j < M; j++)
{
summ = summ + A[i][j];
}
return summ / M;
}
void readMatrix(int &N, int &M, double** (&A), FILE *dat)
{
fscanf(dat, "%d", &N);
fscanf(dat, "%d", &M);
A = new double*[N];
for (int i = 0; i < N; i++)
{
A[i] = new double[M];
}
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
fscanf(dat, "%lf", &A[i][j]);
}
}
}
void writeMatrix(int N, int M, double **A, FILE *res)
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
fprintf(res, "%6.2lf ", A[i][j]);
}
fprintf(res, "\n");
}
}
void writeMassiv(int N, double *B, FILE *res)
{
for (int i = 0; i < N; i++)
{
fprintf(res, "%6.2lf ", B[i]);
}
}
double massiv(int N, int M, double **A, double *B)
{
for (int i = 0; i < N; i++)
{
B[i] = sredn(i, M, A);
}
return 0;
}
bool summa(int N, int M, double **A)
{
bool sum = false; // Допустим сумма НЕ отрицательна
double summ = 0;
for (int i = 0; i < N; i++)
{
summ = summ + A[i][M - 1];
}
if (summ < 0)
{
sum = true;
}
return sum;
}
int main(int argn, char *argc[])
{
FILE *dat, *res;
dat = fopen("D:\\in.txt", "r");
res = fopen("D:\\out.txt", "w");
int N = 0;
int M = 0;
double **A = nullptr;
readMatrix(N, M, A, dat);
double *B = new double[N];
fprintf(res, "Задана матрица A из %d строк и %d столбцов:\n", N, M);
bool sum = summa(N, M, A);
if (true)
{
fprintf(res, "\nСумма элементов последнего столбца не отрицательна\n");
fprintf(res, "\n");
massiv(N, M, A, B);
writeMassiv(N, B, res);
fprintf(res, "\n");
fprintf(res, "\n");
}
else
{
fprintf(res, "\nСумма элементов последнего столбца отрицательна\n");
fprintf(res, "\n");
writeMatrix(N, M, A, res);
}
fclose(dat);
fclose(res);
for (int i = 0; i < N; i++)
{
delete[] A[i];
}
delete[] A;
delete[] B;
}
3 3
1 2 3
4 5 6
7 8 9
Задана матрица A из 3 строк и 3 столбцов:
Сумма элементов последнего столбца не отрицательна
2.00 5.00 8.00
что С++ и С можно строго разграничивать
1 Scope
1 This document specifies requirements for implementations of the C++ programming language. The first such
requirement is that they implement the language, so this document also defines C++. Other requirements
and relaxations of the first requirement appear at various places within this document.
2 C++ is a general purpose programming language based on the C programming language as described in
ISO/IEC 9899:2011 Programming languages — C (hereinafter referred to as the C standard) . In addition to
the facilities provided by C, C++ provides additional data types, classes, templates, exceptions, namespaces,
operator overloading, function name overloading, references, free store management operators, and additional
library facilities.
видимо нужно ввести с клавиатуры фамилию автора
scanf ("%c", &surname);
У меня при вводе любой фамилии выводится "No"
if (begin->data.surname == surname && begin->data.year > 2000) // false false false false ...
{
year = begin->data.year;
pos = begin;
}
int year
???if (year <= 0 || year >= 2020) puts ("No");
while(begin) //пока в списке есть эл-ты
{
if(begin->data.year > 2000 && !strcmp(begin->data.surname, surname))
{
printf("Title : %s\n", begin->data.title);
}
begin = begin->next;
}
Translation limits
Even though there is no specific limit on the length of identifiers, early compilers had limits on the number of significant initial characters in identifiers and the linkers imposed stricter limits on the names with external linkage. C requires that at least the following limits are supported by any standard-compliant implementation:
однако меня заверили, что и на 10 это возможно
I use mingw to compile userland part and NTDDK + VC6 to build sys driver.
int getline(char line[], int maxline);
#include <stdio.h>
#include <stdlib.h>
void swap(int* a, int* b)
{
int c = *a;
*a = *b;
*b = c;
}
void reverse(int* first, int* last)
{
while((first != last) && (first != --last))
{
swap(first++, last);
}
}
int* reverse_copy(int* first, int size)
{
int* result = (int*)malloc(size * sizeof(int));
for(int i = 0; i < size; ++i)
{
result[i] = first[size - i - 1];
}
return result;
}
int main()
{
int a[] = {0,1,2,3,4,5,6,7,8,9};
reverse(a, &a[10]);
for(int i = 0; i < 10; ++i)
{
printf("%d ", a[i]);
}
printf("\n");
int* b = reverse_copy(a, 10);
for(int i = 0; i < 10; ++i)
{
printf("%d ", b[i]);
}
free(b);
}
OUT:
9 8 7 6 5 4 3 2 1 0
0 1 2 3 4 5 6 7 8 9
pole[m-1][...]
находится мусорfor(int i = 0; i < m-1; i++)
{
for (int j = 0; j < n; j++)
{
fscanf(f, "%d", &pole[i][j]);
printf("%d ", pole[i][j]);
}
printf("\n");
}
for (int i = 0; i < m; i++)//??? i < m-1 ???
{
x = 0;
for (int j = 0; j < n; j++)
{
switch (pole[i][j])
{
case 1:
brick(x, y, DarkGray);
printf("%d %d\n", x, y);
break; //???
case 0:;
//...
}
x += 100;
}
y += 100;
}
3.4 Control Structures
Normally, statements in a program are executed one after the other in the order in which
they’re written. This is called sequential execution. Various C statements we’ll soon discuss
enable you to specify that the next statement to be executed may be other than the
next one in sequence. This is called transfer of control.
...
...
Bohm and Jacopini’s work demonstrated that all programs could be written in terms
of only three control structures, namely the sequence structure, the selection structure
and the repetition structure. The sequence structure is built into C. Unless directed otherwise,
the computer executes C statements one after the other in the order in which
they’re written. The flowchart segment of Fig. 3.1 illustrates C’s sequence structure.
3.5 The if Selection Statement
Selection statements are used to choose among alternative courses of action. For example,
suppose the passing grade on an exam is 60. The pseudocode statement
if (expr) // start of if-statement
{ // start of block
int n = 1; // declaration
printf("%d\n", n); // expression statement
} // end of block, end of if-statement
statement - инструкция
Слово statement обычно переводят на русский термином "оператор". Таким образом, мы и привыкли, что if, while, case и т.п. – это операторы. К сожалению, в С++ этот перевод приводит к трудностям, поскольку имеется термин operator - словом "оператор" естественно было бы переводить его. Из возможных и встречавшихся в русской литературе переводов statement (утверждение, предложение, инструкция) в переводе книжки Струструпа, посвященной третьему стандарту С++, принят термин "инструкция".
expression statement
инструкция-выражение
Инструкция, которая одновременно является и выражением. Примеры: присваивание, вызов функции.
operator - оператор
Встроенная операция языка, такая, как сложение. (Также перегруженная операция, задаваемая функцией-членом класса.-> к подмножеству Си не относится)
#include <stdio.h>
#include <stdlib.h>
int main()
{
char buf[80];
int i = 0;
int a;
char op;
int b;
while((buf[i] = _getch(stdin)) != 13)
{
putchar(buf[i]); ++i;
}
sscanf(&buf, "%i%c%i", &a, &op, &b);
if(op == '*')
printf(" = %i", a * b);
return 0;
}
void swap(int& a, int& b)
{
int c = a;
a = b;
b = c;
}
где можно дополнительно почитать
char first_name[40] - резервируется память для 40 байт.
typedef char * string;
string first_name; - это просто указатель, причем неинициализированный.
scanf("%s %s", first_name, last_name); - это обращение
к неинициализированному указателю (undefined behaviour)
С:\\Projects\\myProject\\Debug\\file.txt == ..\\debug\\file.txt
С:\\Projects\\myProject\\Release\\file.txt == ..\\release\\file.txt
С:\\Projects\\myProject\\Other\\file.txt == ..\\other\\file.txt
С:\\Projects\\myProject\\file.txt == ..\\file.txt
...
fopen("..\\file.txt", "r")
Мне нужно чтобы при передаче файла не нужно было писать какой либо длинный путь, а просто можно было бы передать имя файла.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <direct.h>
char* get_file_path(char* dir, char* fname)
{
dir = _getcwd(dir, MAX_PATH);
strcpy(&dir[strlen(dir)], "\\");
strcpy(&dir[strlen(dir)], fname);
return dir;
}
int main(int argc, char* argv[])
{
/* uncomment
if(argc != 1)
{
printf("error: usage myapp.exe file.txt\n");
return -1;
}
uncomment */
char dir[MAX_PATH];
char* file = "file.txt";//test
char* full_file_name = get_file_path(dir, file);// get_file_path(dir, argv[0])
FILE* fp = fopen(full_file_name, "r");
if(fp)
{
printf("Open\n");
fclose(fp);
}
printf("%s", full_file_name);
free(full_file_name);
return 0;
}