C语言程序设计案例式教程
数据类型与运算符
-
变量的数据类型 :整形变量,实型变量,字符型变量,枚举类型变量; (单引号内只可以存放转义字符、一个字符)
数据类型 所占字符数 char 1个字节 int 4个字节 short 2个字节 枚举类型变量:eg:enum 枚举名{标识符1=整型常量1,标识符2=整型常量 2,…}
-
printf()函数与scanf()函数
(1) 常用printf()函数格式字符用格式字符 含义 注意 %s 输出一个字符串 %c 输出一个字符 ACSLL码大写字母=小写字母+32 %d 以十进制输出一个有符号整型 %u 以十进制输出一个无符号整型 eg:3为整数,3.为小数 %f 以十进制输出一个浮点数 小数类型输出默认小数点后六位
- sizeof运算符可以获取数据字节数 : sizeof(数据类型名称或变量名称)
eg:printf(“int: %d字节\n”,sizeof(int)); - 格式字符串一般形式:[标志][输出最小宽度][.精度][长度]类型
(2) scanf()函数
功能:接收用户输入,也可以通过格式控制字符控制用户输入
接收的是变量的地址 - scanf("%d,%d",&a,&b) 输入数据用逗号隔开
scanf("%d%d",&a,&b) 输入数据用空格隔开
(3)算数运算符优先级
(4)位运算符
(5)关系运算符
(6)三目运算符
表达式1?表达式2:表达式3(若1为真,则为2,否则为3)
条件运算符方向:自右向左
eg:a>b?a:c>d?c:d应理解为a>b?a:(c>d?c:d),这也是三目运算符的嵌套
结构化设计程序
-
if语句
单分支结构:if…
双分支结构:if…else…
多分支结构:if…else if…else… -
switch条件语句(条件语句)
- switch(表达式) - { - case 目标1: - 执行语句 1; - break; - case 目标2: - 执行语句 2; - break; - case 目标n: - 执行语句 n; - break; - default: - 执行语句 n+1; - break; - }
-
break语句(跳转语句)
终止当前循环,执行循环体外的第一条语句 -
continue语句(跳转语句)
中止本次循环,并继续执行下一次循环;
break语句可以用于switch语句,而continnue不可以; -
goto语句(跳转语句)
break语句出现在嵌套循环中的内层循环,只能跳出内层循环;如果想跳出外部循环则需要对外层循环添加标记,然后使用goto语句。 -
while循环语句与 do…while循环语句
循环条件的值非0,循环体就会被执行;循环体执行完毕时会继续判断循环条件,知道循环条件的值为0时,整个循环过程才会结束。 do…while循环语句与之类似。
不同的是,do…while循环体先执行后判断(while先判断后执行)
...
while(1)
{
scanf("%d",&choice);
switch(choice)
{
case 1:
...
break;
case 2:
...
break;
case 3:
exit(0);
break;
}
}
- for循环结构语句
- for(初始化表达式;循环条件;操作表达式)
- {
- …
- } - 随机数(rand()函数,srand()函数)
(1)rand()函数(一次性的)
生成一个无范围限制的随机数,只需使用rand()即可,rand()会返回一个随机数0~RAND_MAX(2147483647)。
生成某个范围的随机数:
范围 | 写法 |
---|---|
0~10 | rand()%10(利用函数对10取余) |
5~25 | rand()%20+5(利用函数对25-5=20取余再加上5) |
(2)srand()
称为随机数生成的初始化器
函数原型:void srand(unsigned int seed);
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
srand((unsigned int)time(NULL));
int b1, b2, i;
b1=b2=0;
for(i=0;i<4;i++)
{
b1=b1+rand()%6+1;
b2=b2+rand()%6+1;
}
if(b1>b2)
printf("b2 go\n");
else if(b1<b2)
printf("b1 go\n");
else
printf("please again\n");
return 0;
}
- 自守数(某个数末尾平方的几位等于该数)
在这里插入代码片
- 回文素数(穷举法)
函数
- 函数的定义
函数包括 | 含义 |
---|---|
返回值类型 | 限定函数返回值的数据类型 |
参数名 | 函数的名称 |
参数类型 | 限定调用函数时传入函数中的数据类型 |
参数 | 接收传入函数中的数据 |
return关键字 | 用于结束函数,将函数的返回值返回函数调用处 |
返回值 | 被return语句返回的值 |
-
函数调用时的数据传递:形式参数,实际参数
-
内存四区:
(1)栈区: 对一个程序来说,栈区是一块连续的内存区域,该区域由编译器自动分配和释放,一般用来存放函数的参数、局部变量等,由于栈顶的地址和栈区的最大容量是由系统预先规定的,因此这块区域的内存大小固定。若申请的内存空间超过栈区的剩余容量,则系统会提示溢出。
(2)堆区:对一个程序来说,堆可以是不连续的内存区域,此段区域可以=由程序开发者自主申请,其使用比较灵活,但缺点是同样需要程序开发人员自主释放,若程序结束时该段空间仍未被释放,就会造成内存泄露,最后由系统回收。
(3)数据区
根据其功能,数据区又可分为静态全局区和常量区两个城。
全局区是用于存储全局变量和静态变量的区域,初始化为非0的全局变量和静态变量在一块区域,该区域称为data段;未初始化或者初始化为0的全局变量和静态变量在相邻的一块区城,该区域称为bss段。该区域在程序结束后由操作系统释放。
常量区用于存储宇符事常量和其他常量,该区域在程序结束后由操作系统释放。
(4)代码区:代码区用于存放函数体的二进制代码。程序中每定义一个函数,代码区都会添加该函数的二进制代码,用于描述如何运行函数。当程序调用函数时,会在代码区寻找该函数的二进制代码并运行。 -
局部变量与全局变量
(1)局部变量:定义在函数内部的变量,变量的作用域仅限于函数内部,函数执行完毕以后这些变量就失去作用。
(2)全局变量:在所有函数(包括主函数)外部定义的变量成为全局变量,他不属于某个函数,而是属于源程序,因此全局变量可以为程序中的所有函数共用,他的有效范围是从定义开始处到源程序结束。
若在同一个文件中,局部变量和全局变量同名,则全局变量会被屏蔽,在程序的局部暂时使用局部变量保存的数据。
int a; //a为全局变量
int main()
{
return 0;
}
- 函数调用
(1)主函数调用普通函数
(2)嵌套调用
主函数可以调用其他普通函