前言
续接上一篇文章,此篇继续对C语言的基础知识点进行更新。
7. 选择语句
什么是选择?
如果你好好学习,就能月入过万
如果你不好好学习,就只能继承“五毛”家产
用C语言表示:
#include<stdio.h> int main() { printf("好好学习输入>1,不好好学习输入>0:"); int flag; scanf("%d", &flag); if (flag == 1) printf("^。^恭喜你,月入过万"); else printf("|^-^|,努力吧!少年"); return 0; }
8. 循环语句
唧唧复唧唧,日复一日当练习。
循环语句分为三种:
- while语句
- for语句
- do…while语句
唐僧取真经要经历“九九八十一难”,每打怪一次,孙悟空的神力就提高一点,直到结束。接下来用上述三种循环来表示孙悟空的神力总值。
//while语句 #include<stdio.h> int main() { int i = 10;//表示孙悟空初始神力 int j=0;//表示孙悟空总神力 while (j < i+81) j++; printf("%d", j); return 0; } //for语句 #include<stdio.h> int main() { int i = 10; int j; for (j = 0; j < i + 81; j++) ; printf("%d", j); return 0; } //do...while语句 #include<stdio.h> int main() { int i = 10; int j=0; do j++; while (j < i + 81); printf("%d", j); return 0; }
9. 函数
函数是 C 语言中的重要组成部分,它可以将程序分解为模块,提高代码的可读性和可维护性。
函数由函数头和函数体组成,函数头包括函数名、返回值类型和参数列表,函数体包括函数执行的语句块。
9.1 函数的定义
返回值类型 函数名(参数列表)
返回值类型 函数名(参数列表) { // 函数体语句块 }
其中,返回值类型是函数返回值的数据类型,函数名是函数的标识符,用于在程序中调用函数,参数列表是函数接收的参数,多个参数之间用逗号分隔。
例如,下面定义了一个名为 sum 的函数,它的作用是求两个整数的和并返回结果:
int sum(int a, int b) { int c = a + b; return c; }
9.2 函数的调用
在程序中调用函数时,需要提供函数名和实参列表。实参列表是实际传递给函数的参数,其数据类型和数量必须与函数定义时的参数列表一致。
例如,下面调用了 sum 函数,并输出了其返回值:
int a = 1, b = 2; int c = sum(a, b);//调用 printf("sum(%d, %d) = %d\n", a, b, c);
……后面将会对函数做更深的介绍
10. 数组
如何存储多组数据?
10.1 数组定义
C语言中对数组的定义:一组相同类型元素的集合
int arr[5]={1,2,3,4,5};//定义一个整形数组,最多存放5个元素 char arr1[5];//定义字符数组 float arr2[5];//定义浮点类型数组
10.2 数组的下标
C语言规定:数组的每个元素都有一个下标,小标从0开始。
数组可以通过下标来访问单个元素的。
例如:
int arr[5]={1,2,3,4,5};//五个元素,下标范围是0-4
10.3 数组的使用
通过下标,可以对数组中的元素进行提取。
例如:将int arr[5]中的元素依次输出
#include<stdio.h> int main() { int arr[5] = { 1,2,3,4,6 }; for (int i = 0; i < 5; i++) { printf("%d\n", arr[i]); } return 0; }
运行结果:
11. 操作符
- 在C语言中:0表示假,非0表示真
算术操作符
+ - * / %(取余)
移位操作符
>> <<
位操作符
& ^ |
赋值操作符
= += -= *= /= &= ^= |= >>= <<=
int a=0; a=10; a=a+5; a+=5;//两个语句相同 a=a-2; a-=2;//两个语句相同 a=a*3; a*=3;//两个语句相同
单目操作符
! 逻辑反操作 - 负值 + 正值 & 取地址 sizeof 操作数的类型长度(单位:字节) ~ 对一个数的二进制按位取反 -- 前置、后置-- ++ 前置、后置++ * 简洁访问操作符(解引用操作符) (数据类型) 强制类型装换
// ! int main() { int a=1; if(a)//a为真进入 printf("1"); if(!a)//a为假进入 printf("2"); return 0; } //sizeof int main() { int a=1; printf("%d\n",sizeof(a));//4 printf("%d\n",sizeof a);//4 printf("%d\n",sizeof(int));//4 //错误表示:printf("%d\n",sizeof int) return 0; } //++ -- int main() { int a=5; int b=++a; printf("%d %d\n",a,b);//6 6 int c=5; int d=c++; printf("%d %d\n",c,d);//6 5 int e=5; int f=--e; printf("%d %d\n",e,f);//4 4 int p=5; int q=p--; printf("%d %d\n",p,q);//4 5 return 0; } //强制类型转换 int main() { int a=(int)3.1; printf("%d",a);//3 return 0; }
关系操作符
> >= < <= != 用于测试“不相等” == 用于测试“相等”
逻辑操作符
&& 逻辑与-两哥操作数同为真才是真,只要有一个假,则为假 || 逻辑或-两边同为假才是假,只要有一个真,则为真
条件操作符
exp1?exp2:exp3 //exp1为真,执行exp2,为假则执行exp3
逗号表达式
exp1,exp2,exp3,...expn
下标引用、函数调用、结构成员
[] () . ->
//结构体 struct stu { char name[20]; int num; float score; }; int main() { struct stu s1 = { "liming",01,89 }; struct stu s2 = { "lihua",02,96 }; struct stu s3 = { "lili",03,91 }; printf("%s %d %lf", s1.name, s2.num, s3.score);//引用结构体成员 } //liming 2 91.000000
引用结构体成员三种方式:
- 结构体变量名.成员名
- 结构指针变量名->成员名
- (*指针变量名).成员名