Начальные сведения.
Содержание курса: Си, офисные приложения, VBA.
Структура курса: 54 лекции, 84 лабораторные (8 ЛР), 36 УВП (3 ЛР).
Литература (Common), о конспекте, контрольные работы.
Знание Паскаля и основ алгоритмизации.
Создан Денисом Ричи для создания UNIX на ЭВМ DEC PDP–11.
Занимает промежуточное положение между языками высокого и низкого уровня.
Структура программы на примере.
Задача.
Подсчитать количество отрицательных и сумму положительных чисел, введенных с клавиатуры.
Окончание ввода – число 0.
uses crt;
var
a,k,s: integer; {Нету различия между a и A}
begin
clrscr;
s:=0;
k:=0;
writeln(‘Введите последовательность чисел’);
writeln(‘Окончание ввода – число 0’);
readln(a);
while a <> 0 do begin
if a<0 then
k:=k+1
else
s:=s+a;
readln(a);
end;
writeln(‘Количество отрицательных чисел : ’, k:6);
writeln(‘Сумма положительных чисел : ’, s:6);
end.
#include<stdio.h>
#include<conio.h>
void main(void) {
int a,k,s; /* Есть различие между a и A */
clrscr();
s=0;
k=0;
printf(“Введите последовательность чисел\n”);
printf(“Окончание ввода – число 0\n”);
scanf(“%d”, &a);
while(a != 0) {
if(a<0)
k=k+1;
else
s=s+a;
scanf(“%d”, &a);
}
printf(“Количество отрицательных чисел : %6d\n”, k);
printf(“Сумма положительных чисел : %6d\n”, s);
}
Описание переменной, имя переменной
int a,k=0,s=0; //определение и инициализация одновременно
Числовые типы
int, long, char – целые типы
signed, unsigned
Суффиксы и префиксы констант: 0х, 0, l, u
’c’, ’\0ooo’, ’\xhh’, ’\n’, ’\t’, ’\\’, ’\”’ , ’\’’
Вещественные типы: float, double, long double; константы (f, l)
Строковые литералы: “xxxxxxxxxxx”.
Элементарный ввод/вывод
printf(s, v1, v2, …, vn);
scanf(s, &v1, &v2, …, &vn);
Операции и выражения
Арифметические: +, –, *, %, /
Поразрядные: &, |, ~, ^, >>, <<
Логические: &&, ||, !
Отношения: <, >, <=, >=, ==, !=
Истина – ненулевое значение, ложь – 0.
Результат логического выражения: 0 или 1.
a=b>c; a=(b>c)*3 //0 или 3;
while(a) while(!a) while(a=0) //ошибка!!!
while((c=getchar())!=EOF)
Инкремент, декремент: ++, –– (префиксная и постфиксная формы)
a==b++ && a>c //нет гарантии, что выполнится b++
Условия: выражение? выражение_истина: выражение_ложь
Присваивание: =, v1=v2=...=vn (справа налево), var op= выражение
Операция sizeof: sizeof(тип), sizeof(переменная)
Приведение типа: (тип) выражение
Операция запятая
#include<stdio.h>
#include<conio.h>
void main(void) {
int a,k=0,s=0;
clrscr();
printf(“Введите последовательность чисел\n”
“Окончание ввода – число 0\n”);
while(scanf(“%d”, &a), a)
if(a<0)
k++;
else
s+=a;
printf(“Количество отрицательных чисел : %6d\n”
“Сумма положительных чисел : %6d\n”, k, s);
}
Операторы управления вычислительным процессом
if(выражение)
оператор1;
else
оператор2;
switch(выражение) {
case const1: оператор1; [break;]
. . .
case constn: операторn; [break;]
[default: операторn+1;]
}
Задача. Сколько дней в месяце?
int y, m, d;
scanf(“%d%d”, &y, &m);
switch(m) {
case 2: d= 28+ !(y&3); break;
case 4:
case 6:
case 9:
case 11: d= 30; break;
default: d= 31;
}
while(выражение)
оператор;
do
оператор;
while(выражение);
for(выражение1; выражение2; выражение3)
оператор;
Операторы break, continue, goto.
Бесконечный цикл while(1) оператор; for(;;) оператор;
Задача. Подсчитать сумму последовательности из n чисел, введенных с клавиатуры. Дополнительное условие окончания ввода – число 0 в последовательности.
#include<stdio.h> void main(void) { int a, s=0, n; scanf(“%d”, &n); while(scanf(“%d”, &a), a) { s+=a; if(--n) break; } printf(“Сумма чисел : %6d\n”, s); } |
#include<stdio.h> void main(void) { int a, s=0, n, i; scanf(“%d”, &n); for(i=0; i<n; i++) { scanf(“%d”, &a); if(!a) break; s+=a; } printf(“Сумма чисел : %6d\n”, s); } |
#include<stdio.h> void main(void) { int a, s=0, n; for(scanf(“%d”, &n); scanf(“%d”, &a), n-- && a; s+=a); printf(“Сумма чисел : %6d\n”, s); } |
Задача. Подсчитать количество пробелов среди символов, введенных с клавиатуры.
#include<stdio.h>
void main(void) {
int c, n=0;
while((c=getchar())!=EOF)
if(c==’ ‘)
n++;
printf(“n=: %d\n”, n);
}
Задача. Записать число в обратном порядке цифр. (сначала по паскалевски)
#include<stdio.h>
void main(void){
long unsigned x,y=0;
scanf("%lu",&x);
while(x){ //while(x>0)
(y*=10)+=x%10; //y=y*10+x%10;
x/=10;
}
printf("y=%lu\n",y);
}
Задача. Удалить старший разряд числа. (сначала по паскалевски).
#include<stdio.h>
void main(void){
long unsigned x,y=0,p=1;
scanf("%lu",&x);
while(x>9){
y+=(x%10*p);
x/=10;
p*=10;
}
printf("y=%lu\n",y);
}
Задача. Подсчитать exp(x) с точностью до eps.
Лаб. 1в
#include<stdio.h>
#include<math.h>
void main(void){
float a,b,u,x,f,h;
float absx, ln2rev=1./log(2), pi=4*atan(1); //или =acos(-1)
int n,odz;
scanf("%f%f%f%d",&a,&b,&u,&n);
if(n<2)n=10;
if(a==b){
a-=0.5; b+=0.5;
} else if(a>b){
x=a; a=b; b=x;
}
h=(b-a)/(n-1);
for(x=a;x<b+0.5*h;x+=h){
odz=1;
absx=fabs(x);
if(absx>=5 && absx<=10)
if(x*0.5-floor(x*0.5)==0.5)odz=0; //fmod(x,2)==1
else f=tan(0.5*pi*x);
else if(absx<=2)
if(x==-u || fabs(u*x)>1)odz=0;
else f=asin(u*x)+pow(0.3,x)/(x+u);
else
if(u*x<=0)odz=0;
else f=ln2rev*log(u*x);
printf("|%10.4f |",x);
if(!odz)
printf(" не определена! |\n");
else
printf("%16.4f |\n",f);
}
}
Строки
char error[10]; char *no_error;
error=”error”; no_error=”no_error”;
char spring[][8]={"март", "апрель", "май"}; //+4 константы
char *Spring[]={"март", "апрель", "май"}; //+1 константа
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.