C语言基础语法笔记

C语言基本语句

一、固定格式

#include 
int main ()
{return 0;
}

二、printf 语句

printf("holle world!");
printf("holle world!\n");
printf("holle world!\t");

三、int、float、double、char 型数据

int a = 3;
float b = 3.14;
double c = 3.14;
char d = 'A';
int a = 5, b, c, d, e, f;
b = a + 2; // b = 5 + 2 = 7
c = b - a; // c = 7 - 5 = 2
d = a * c; // d = 5 × 2 = 10
e = a / d; //e = 5 / 10 = 0.5 = 0
f = a % d; //f = 5 % 10 = 5 //取余
double a,b, c, s;
a = 3.67;
b = 5.43;
c = 6.21;
s = ( a + b + c ) / 2;
char a = 'B', b = 'O', c = 'Y';
a = a + 32; // a = 'b' // <=> a += 32
b = b + 32; // b = 'o' // <=> b += 32
c = c + 32; // c = 'y' // <=> c += 32x *= y + 8; // <=> x = x * ( y + 8 )
z %= 3; // <=> z = z % 3

四、用 printf 语句输出 int、float、double、char 型数据

int a = 5, b, c, d, e, f;
b = a + 2;
c = b - a;
d = a * c;
e = a / d;
f = a % d;
printf ("a = %d, b = %d, c = %d\n", a, b, c);
printf ("e = %d, f = %d", e, f);
double a = 3.14;
printf ("%f\n", a);
//输出为3.140000
char a = 'B', b = 'O', c = 'Y';
a = a + 32;
b = b + 32;
c = c + 32;printf ("小写字母依次为%c%c%c\n", a, b, c);
//运行结果为:小写字母依次是boy

五、用 scanf 语句输入 int、float、double、char 型数据

int a, b;
scanf ("%d,%d",&a, &b);
float a, b;
scanf ("%f,%f",&a, &b);
double a, b;
scanf ("%lf,%lf",&a, &b);
char a, b;
scanf ("%c,%c",&a, &b);char a[10];
scanf("%s",a);
printf("%s",a);

六、putchar()语句、getchar()语句

char a, b, c;
a = getchar();
b = getchar();
c = getchar();
a = a + 32;
b = b + 32;
c = c + 32;
putchar(a);
putchar(b);
putchar(c);
putchar(\n);
/*
键入BOY
输出boy
*/

七、e^x、log等数学运算

#include 
函数功能使用方法
abs求整数的绝对值int x;
abs (x);
fabs求x的绝对值double x;
fabs (x);
sin求sinxdouble x;
sin (x);
cos求cosxdouble x;
cos (x);
tan求tanxdouble x;
tan (x);
exp求e^xdouble x;
exp (x);
pow求x^ydouble x;
pow (x);
sqrt求x^(1/2)double x;
sqrt (x);
log求lnxdouble x;
log (x);
log10求lg10double (x);
log10 (x);

三个小知识点

%m.nf

一共输出m位,其中小数点后占n位

若m前有‘-’,则补位空格在数字后面

%e

以科学计数法的形式输出数据

小数点后默认取六位

也可以用 %m.ne 来精确数据

(int)(表达式)

将表达式结果强制转化整型,即抹去表达式结果中的小数点

选择语句

一、if语句

if ()
{}
if ()
{}
else
{}
if ()
{}
else if (){}if ()
{if (){}else{}    
}
else
{}

二、常见表达形式

>    //大于
>=   //大于等于
<    //小于
<=   //小于等于
==   //等于
!=   //不等于&&   //两边均满足,即‘and’
||   //两边满足一个,即‘or’

三、表达式1?表达式2:表达式3;

a > b ? printf ("%f,%f", b, a) : printf ("%f,%f", a, b);

四、switch 语句

char a;
scanf("%d", a)
switch (a) //判断条件可以是字符,也可以是整数
case 'A': printf("该生的分数为85~100\n"); break;
case 'B': printf("该生的分数为70~84\n"); break;
case 'C': printf("该生的分数为60~69\n"); break;
case 'D': printf("该生的分数为<60\n"); break;
default: ("该生的等级输入有误!\n"); break;

循环语句

一、while 语句

while ( n < 6 )
{sum += n;n++;
}

二、用 break 语句提前终止循环

break;

三、用 continue 语句提前结束本次循环

continue;

用 do…while 语句循环

do
{sum += n;n++;
}
while ( n < 6 );

用 for 语句循环

for (n = 0; n < 6; n++)
{sum += n;
}

数组

一、定义一维数组

int a[5] = {1, 2, 3, 4, ,5};
int a[5];
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;

二、定义二维数组

int a[2][3] = {{1, 2, 3},{4, 5, 5}};//等价于:
int a[2][3];
a[0][0] = 1;
a[0][1] = 2;
a[0][2] = 3;
a[1][0] = 4;
a[1][1] = 5;
a[1][2] = 6;
int a[2][3] = {{1, 2, 3},{}};
//等价于:
int a[2][3];
a[0][0] = 1;
a[0][1] = 2;
a[0][2] = 3;
a[1][0] = 0;
a[1][1] = 0;
a[1][2] = 0;

三、定义字符数组

char c[10] = {'I', ' ', 'a', 'm', ' ', 'l', 'u', 'c', 'k', 'y'};
//等价于:
char c[10];
c[0] = 'I';
c[1] = ' ';
c[2] = 'a';
c[3] = 'm';
c[4] = ' ';
c[5] = 'l';
c[6] = 'u';
c[7] = 'c';
c[8] = 'k';
c[9] = 'y';
char c[3][3] = {{' ', '*', ' '},{'*', ' ', '*'},{' ', '*', ' '}};

四、输出字符数组

  1. 挨个输出printf(“%c”, c)
  2. 整体输出printf(“%s”, c)或者 puts(c)
char c[10] = {'I', ' ', 'a', 'm', ' ', 'l', 'u', 'c', 'k', 'y'};
int i;
for (i = 0; i < 10; i++)
{printf("%c",c[i]);
}
char c[3][3] = {{' ', '*', ' '},{'*', ' ', '*'},{' ', '*', ' '}};
int i, j;
for (i = 0; i <= 2; j++)
{for (j = 0; j <= 2; j++)printf("%c", c[i][j]);printf("\n");
}
char c[11] = {'I', ' ', 'a', 'm', ' ', 'l', 'u', 'c', 'k', 'y', '\0'};
puts (c);

五、输入字符数组

  1. 挨个输入单词 scanf (“%s%s···”, c1, c2, ···)
  2. 整句输入 gets(c)

函数

一、调用有参函数

int main ()
{float max (float x, float y);float a[4];int i;float t, u, v;for (i = 0; i <= 3; i++){printf("请输入第%d个数字", i+1);scanf ("%f", &a[i]);}t = max (a[0], a[1]);u = max (a[2], a[3]);v = max (t, u);printf("前面两个数中的最大数为%f\n", t);printf("后年两个数中最大的数为%f\n", u);printf("四个数中的最大数为%f\n", v);return 0;}
float max (float x, float y)
{float max;if (x > y)ma = x;elsema = y;return (ma)
}//升级版
float max (float x, float y)
{return (x > y ? x : y);
}

二、调用无参函数

void a()
{printf("打工人,打工魂,打工都是人上人!")
}
void paixu (int a[], int n)
{int i, j, t;for (i = 0; i < n - 1;i++){for (j = i + 1; j < n; j++){if ( a[i] > a[j]){t = a[i];a[i] = a[j];a[j] = t;}}}
}
int main ()
{int a[10];int i;for (i = 0; i < 10; i++)scanf ("%d", &a[i]);paixu (a, 10);for (i = 0; i < 10; i++)printf ("%d", a[i]);
}

三、函数的嵌套

int main ()
{int max4 (int a, int b, int c, int d);int a, b, c, d;int max;scanf ("%d %d %d %d", &a, &b, &c, &d);max = max4 (a, b, c, d);printf ("最大数为%d\n", max);
}
int max4 (int a, int b, int c, int d)
{int max2 (int x, int y);//声明要使用 max2 函数了return (max2(max2(max2(a, b), c), d))}
int max2 (int x, int y)
{return (x > y ? x : y);
}

四、函数的递归

用递归的方法求 n!

#include 
int main ()
{int jiecheng (int n);int n;printf(":");scanf("%d! = %d", n, jiecheng (n));
}
int jiecheng (int n)
{int jieguo;if ( n == 0 || n == 1)jieguo = 1;elsejieguo = jiecheng (n - 1) * n;return (jieguo);
}

指针

一、指针变量和普通变量

指针 = &变量

*指针 = 指针指定的变量的值

int * p, a = 5;
p = &a;
int * q, b = 10;
q = &b;
int * r;
r = p;
p = q;
q = r;*p = 99;   //b = 99
*q = 100;  //a = 100

二、指针变量与一维数组

指针 = &数组名[某数]

指针 + i = &数组名[某数 + i]

&数组名[某数] <=> 数组名 + 某数

数组名[某数] <=> *(数组名 + 某数)

int *p, *q;
int a[3] = {5, 10, 15};
p = &a[0];
q = &a[1];
*p = *p * 2;
*(q + 1) = *p * 2;

三、指针变量与一维数组相关函数

形参是数组名,实参也是数组名

增加指针变量的方法:

  1. 函数声明:数组名[] → *p
  2. 函数解释:数组名[i] → *(p + i)
  3. 函数使用:数组名 → q (使用前需先关联)

四、指针变量与二维数组

指针 = &数组名 [数a] [数b]

*指针 = 指针指定的变量的值

指针 + i = &(数组名 [数a] [数b]后面第i个元素

&数组名 [数a] [数b] <=> 数组名[数a] + 数b <=> 数组名[0] + a *列数 + b

数组名 [数a] [数b] <=> *(数组名[数a] + 数b)

五、指针变量与二位数组相关函数

形参是数组名,实参是指针变量 → 形参是指针变量,实参是数组名

函数声明:数组名 [] [某数] → *p

函数解释:数组名 [i] [j] → *(p + i * 列数 + i)

函数使用:数组名 → *数组名

六、指针变量指向二维数组的行变量

定义:(*p)[列数]

关联:p = 二维数组名 +某数n

由上面两项可知:*( *(p + i) + j ) = 二维数组名 [n + i] [j]

七、用指向二维数组行变量的指针变量做形参

函数声明:数组名 [] [某数] → (*p)[某数]

函数解释:数组名 [i] [j] → *( *(p + i) +j)

八、指针变量与字符串

指针 = &数组名[某数]

*指针 = 指针指定的变量的值

指针 + i = &数组名[某数 + i]

&数组名[某数] <=> 数组名 + 某数

数组名[某数] <=> *(数组名 + 某数)

九、指针变量与字符串相关函数

形参是数组名,实参也是数组名

增加指针变量的方法:

  1. 函数声明:数组名[] → *p
  2. 函数解释:数组名[i] → *(p + i)
  3. 函数使用:数组名 → q (使用前需先关联)

十、指针变量与函数

int max (int x, int y);int (*p)(int, int);

十一、返回指针值的函数

int main ()
{float *chazhao (float (*hang)[4], int n);float a[3][4] = {{65, 67, 70, 60},{80, 87, 90, 81},{90, 99, 93, 98}};float *p;int xuhao, i;printf("请输入学生的序号:");scanf("%d", &xuhao);printf("第%d名学生的成绩:\n", xuhao);p = chazhao (a, xuhao - 1);for (i = 0; i <= 3; i++)printf("%f\t", *(p + i));printf("\n");return 0;
}float *chazhao (float (*hang)[4], int n)
{int *q;q = (hang + n)[0];return (q);
}
//啊我死了,有毛病啊

十二、指针与一维二维数组的关系

指针 = &值

值 = *指针

简便写法:

​ &a[i] = a +i

​ a[i] = *(a + i)\

p = &a[0][0];
p = a[0] + 0 = a[0] = *(a + 0) = *a;q = &c[1][2];
q = c[1] + 2 = *(c + 1) + 2;

结构体

一、定义结构体

//定义结构体
struct student
{int xuehao;char name[30];char xingbie;float chengji;
};//变量初始化时是赋值
struct student a = {001, "houge", 'M', 99};//单个赋值
a.xuehao = 001;
a.name = "houge";
a.xingbie = "M";
a.chengji = 99;//设置变量的第二种方法
struct student
{int xuehao;char name[30];char xingbie;float chengji;
}a = {001, "houge", 'M', 99};

二、 结构体数组

struct student
{int xuehao;char name[30];char xingbie;float chengji;
}xuesheng[3] = {{001, "houboshi", 99},{002, "shapaozi", 20},{003, "shabulaji", 90}};
//等价于下面的单个变量赋值
xuesheng[0].xuehao = 001;
xuesheng[0].name = "houboshi";
xuesheng[0].chengji = 99;
xuesheng[1].xuehao = 002;
xuesheng[1].name = "shapaozi";
xuesheng[1].chengji = 20;
xuesheng[2].xuehao = 003;
xuesheng[2].name = "shabulaji";
xuesheng[2].chengji = 90;
struct student
{int xuehao;char name[30];float chengji;
}xuesheng[3] = {{001, "houboshi", 99},{002, "shapaozi", 20},{003, "shabulaji", 90}};
int main ()
{struct student linshi;int i, j;for (i = 0; i < 2; i++)for (j = i + 1; j < 3; j++){linshi = xuesheng[i];xuesheng[i] = xuesheng[j];xuesheng[j] = linshi;}printf("排序后的各学生信息如下:\n");for (i = 0; i < 3; i++)printf("%d\t%s\t%c\t%f\n", xuesheng[i].xuehao, xuesheng[i].name, xuesheng[i].chengji);return 0;
}

三、使用结构体变量做函数参数

struct student max(struct student a[])
{float pingjunfen[5];int i, zuigao;for (i = 0; i <= 4; i++)pingjunfen[i] = (a[i].fen1 + a[i].fen2) / 2;for (zuigao = 0, i = 1; i <= 4; i++)if (pingjufen[zuigao] < pingjunfen[i])zuigao = i;return (a[zuigao]);
}

四、结构体变量与指针变量

struct student * p;
p = &xuesheng[0];//因此有以下关联
p + 1 = &xuesheng[1];
p + 2 = &xuesheng[2];
p + i = &xuesheng[i];
p + j = &xuesheng[j];xuesheng[i].chengji <=> (*(p + i)).chengji //记得把 *指针 用括号括起来


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部