写在前面
前面两天介绍了C语言编程需要用到的工具,以及C语言基本常识,今天开始进入到C语言比较重要的部分,详情请看文章介绍。
目录
1、变量
变量的介绍
概念
变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,而通过变量名可以访问到变量(值)。
变量在程序运行过程中会发生变化
格式:
存储类型 | 数据类型 | 变量名 |
auto | int | a |
存储类型:决定变量存储的位置数据类型:决定变量开辟空间大小
数据类型 | 字节大小 | 取值范围(了解) | |
char | 字符型 | 1 | -128~127 |
int | 整型 | 4 | |
short | 短整型 | 2 | |
long | 长整型 | 32位:4;64位:8 | |
float | 单精度浮点型 | 4 | 有效位数:6-7位 |
double | 双精度浮点型 | 8 | 15-16位 |
printf("%d\n",sizeof(char));
1字节=8位 0-255 256 0111 1111 -128~127
局部变量和全局变量的区别:
局部变量 | 全局变量 | |
定义位置 | 函数体内部 | 函数体外部 |
初值 | 未初始化时,值为随机值 | 未初始化时,值为0 |
存储位置 | 栈区 | 全局区 |
生命周期 | 同当前函数体共存亡 | 同整个程序共存亡 |
作用域 | 函数内部 | 整个程序 |
32位:4G
64位:2^64 2^48
2、常量
程序运行过程中不会发生变化
2.1整形常量
2.2字符常量
字符型用' '包裹,表示一个字符
字符串用" "包裹
"hello"---->'h' 'e' 'l' 'l' 'o' '\0' \0字符串结束标志
2.3浮点型常量
float double
2.4表示常量
#define 宏名 常量值或表达式或函数
宏名一般大写,为了和普通变量区分开
特点:只是单纯的替换,不进行运算(原样替换,换完后再计算)
#define N 2
#define M N+3
#define NUM N+M/2+1 //2+2+3/2+1
void main()
{
int a = NUM;
printf("%d\n",a); // 6
}
练习
以下程序的输出结果是()
#include
#define M 5
#definr N M+M
main()
{
int k;
k = N * N * 5;
printf("%d\n",k);
}
A.500 B.125 C.55 D.100
答案:C
结合三目运算求最大值:
#include<stdio.h>
#define NUM a>b?a:b
int main(int argc, char const *argv[])
{
int a = 5;
int b = 8;
printf("%d\n",NUM);
}
宏函数(仅做了解):
#include<stdio.h>
#define NUM(a,b) a>b?a:b
int main(int argc, char const *argv[])
{
printf("%d\n",NUM(5,8));
printf("%d\n",NUM(77,99));
return 0;
}
3.变量常量
3.1按字符输入输出
getchar
int getchar(void)
功能:终端输入字符
参数:无
返回值:字符的ASCII码值
char a;
int res = getchar();
printf("%d\n",res);
putchar
int putchar(int c);
功能:终端输出字符
参数:字符的ASCII码值
返回值:字符的ASCII码值
char a;
int res = getchar();
putchar(res);
putchar('\n');
3.2按格式输入输出
printf
int printf(const char *format, ...);
功能:按格式终端输出
参数:多个
返回值:输出字符个数
格式:
%d int
%c char
%f float
%lf double
%s 字符串
%p 指针
%o 八进制
%x 十六进制 %#x
%m.n m位宽 .n保留小数位数
int a1 = 2;
int a2 = 22;
int a3 = 222;
printf("%3d\n",a1);
printf("%3d\n",a2);
printf("%3d\n",a3);
scanf
int scanf(const char *format, ...);
功能:按格式终端输入
参数:多个
返回值:正确输入字符的个数 开始位置输入错误,返回0
int a,b;
scanf("%d %d",&a,&b);
printf("a:%d b:%d\n",a,b);
4.垃圾字符回收
4.1通过空格回收一个或多个空格
char a = 0,b = 0;
scanf("%c %c",&a,&b);
printf("a:%c b:%c\n",a,b);
4.2%*c *抑制符
回收任意一个字符
char a = 0,b = 0;
scanf("%c%*c%c",&a,&b);
printf("a:%c b:%c\n",a,b);
4.3getchar回收
while(1)
{
char a;
scanf("%c",&a);
printf("a:%c\n",a);
getchar();
}
5.分支结构
基本格式:
if(表达式1)
{
语句块1;
}else
{
语句块2;
}
执行顺序:表达式一成立,则执行语句块一,否则执行语句块二
============================
int age=22;
if(age>18)
{
printf("work\n");
}else
{
printf("study\n");
}
多层分支:
if(表达式1)
{
语句块1;
}
else if(表达式2)
{
语句块2;
}
else
{
语句块3;
}
==============
int age=22;
// 0-18 18-30 30-65 65-
if(age>=0&&age<18)
{
printf("weichengnian\n");
}else if(age<=30)
{
printf("qing\n");
}else if(age<=65)
{
printf("zhong\n");
}else
{
printf("lao\n");
}
嵌套结构:
if(表达式1)
{
if(biaodashi 2)
{
语句块1;
}
}
==========================
if(age<0||age>200)
{
printf("error\n");
}else
{
}
注意:1.if后边可以没有else ,else前边必须有if
2.分支语句只有一行代码时,可以省略{}
switch
格式:
switch(变量名或表达式)
{
case 常量1:
语句块1;
break;
case 常量2:
语句块2;
break;
default:
语句块3:
break;
}
例如:
int a=33;
switch (a/10)
{
case 1:
printf("11111\n");
break;
case 3:
printf("333333\n");
break;
case 5:
printf("55555\n");
break;
default:
printf("error\n");
break;
}
注意:
1.case常量一般是整型或字符
2.case后边可以没有break,程序会从符合条件的分支开始继续向下执行,直到遇见break为止,或执行到分支结束
6.循环结构
格式:
for(表达式1;表达式2;表达式3)
{
语句块;
}
表达式1:循环变量赋初值
表达式2:终止条件
表达式3:增值或减值
执行顺序:先执行表达式1,再判断表达式2是否成立
成立:执行语句块;再执行表达式3,判断判断表达式2是否成立。。。
不成立:退出循环
int i;
for(i=0;i<5;i++)
{
printf("%d\n",i);//0 1 2 3 4
}
printf("i=%d\n",i);//i=5
变形:
int i=1;
for(;i<5;i++)
{
printf("%d\n",i);
}
============================
int i=1;
for(;i<5;)
{
printf("%d\n",i);
i++;
}
=============================
死循环:
for(int i=1;i>0;i++) for(;;);
for(int i=5;i>0;i-=2)
{
printf("%d\n",i);
}
水仙花数
学习C语言大多绕不开水仙花数,水仙花数是指一个三位数,它的每个位上的数字的立方和等于它本身。例如:153 = 1^3 + 5^3 + 3^3。下面是一个C语言程序,用于找出100-999之间的所有水仙花数:
#include <stdio.h>
int main() {
int i, a, b, c; // 定义三个整数变量a、b、c,分别表示百位、十位和个位数字
printf("100-999之间的水仙花数有:
");
for (i = 100; i <= 999; i++) {
a = i / 100; // 计算百位数
b = (i % 100) / 10; // 计算十位数
c = i % 10; // 计算个位数
if (i == a * a * a + b * b * b + c * c * c) { // 判断是否为水仙花数
printf("%d
", i); // 输出水仙花数
}
}
return 0;
}
代码解析:
- 引入头文件
stdio.h
,用于输入输出。- 定义
main
函数,程序的入口。- 定义三个整数变量
a
、b
、c
,分别表示百位、十位和个位数字。- 使用
for
循环遍历100到999之间的所有整数。- 计算每个整数的百位、十位和个位数。
- 判断当前整数是否为水仙花数,即百位、十位和个位数字的立方和是否等于该整数本身。
- 如果满足条件,输出该整数。
就写到这,今天有点累,也不整理放一些修饰词增加大家的可读性了,有不懂的大家直接CSDN搜索(我是菜菜),哈哈哈哈晚安。