前言
C语言学习第四天
一、复习
1、指针
int main()
{
double d = 3.14;
double*pd = &d;
*pd = 5.5;
printf("%lf\n",d);
printf("%lf\n",*pd);
//int a = 10;//向内存申请了4个字节的空间
printf("%p\n", &a);//00CFF9B0
//int* p = &a;//p是一个指针变量
此处的*就是个语法形式
printf("%p\n", p);//0055FB08
//*p = 20;// * - 解引用、间接访问操作符
此处的*是个操作符
//printf("a = %d\n", a);//a = 20
return 0;
}
2、结构体
//结构体
//如何描述一本书-描述复杂对象
//复杂对象-结构体- 我们自己创造出来的一种类型
//创建一个结构体类型
struct Book
{
char name[20];//书的名字
short price;//55
};
int main()
{
//利用结构体类型-创建一个该类型的结构体变量
struct Book b1 = { "C语言程序设计",55 };
strcpy(b1.name,"C++");//strcyp-string copy - 字符串拷贝
//- 库函数 - string.h
printf("%s\n", b1.name);
//b1.name = "C++";不可行,因为name是一个地址
//b1.price = 15;price是一个变量
struct Book* pb = &b1;
//利用pb打印书名和价格
//. - 结构体变量.成员
//-> - 结构体指针->成员
/*printf("%s\n",pb->name);
printf("%d\n",pb->price);*/
/*printf("%s\n",(*pb).name);
printf("%d\n",(*pb).price);*/
/*printf("书名:%s\n", b1.name);
printf("价格:%d\n", b1.price);
b1.price = 15;
printf("修改后的价格:%d\n", b1.price);
return 0;*/
}
二、什么是语句
**语句**-由一个分号:隔开的就是一条语句
C语言是一门结构化的程序设计语言
顺序、选择、循环结构
选择结构 - 分支语句、循环结构-循环语句
分支语句 - if、switch
循环语句 - while、for、do while
int main()
{
int a = 0;
;//也是语句-空语句
return 0;
}
三、分支语句
分支语句(选择结构)
语法结构
1、if(表达式)
语句; 如果表达式为真,则语句执行,否则,什么都不执行
2、if(表达式)
语句1;
else
语句2;
3、多分支 - 语句1、语句2、语句3只能被执行1个
if(表达式1)
语句1; 如果表达式1成立,则执行语句1
else if(表达式2)
语句2; 另外如果表达式2成立,则执行语句2
else
语句3; 表达式1、2都不成立,则执行语句3
int main()
{
int age = 10;
if (age < 18)
printf("未成年\n");
else if (age >= 18 && age <= 28)//18<=age<=28
//执行是-> 18<=age为假,则0<=28
printf("青年\n"); //0为假,非0为真
else if (age >= 28 && age <= 50)
printf("壮年\n");
else
printf("老年\n");
第二种写法
if (age < 18)
printf("未成年\n");
else
{
if (age >= 18 && age <= 28)
printf("青年\n");
else if (age >= 28 && age <= 50)
printf("壮年\n");
else
printf("老年\n");
}
/*if (age < 18)
printf("未成年\n");
else
printf("成年\n");*/
/*if (age < 18)
printf("未成年\n");
return 0;*/
return 0;
}
四、if语句
如果条件成立,要执行多条语句,应该使用代码块
int main()
{
int age = 10;
if (age < 18)
{ //一对{}就是一个代码块
printf("未成年\n");
printf("不能谈恋爱\n");
}
return 0;
}
悬空else情况
悬空else - else与最近的未匹配的if匹配(注意大跨号)
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else //else和第二个if匹配
printf("haha\n");
return 0;
}
//两个代码等效
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else //else和第二个if匹配
printf("haha\n");
return 0;
}
//有无else都可行,但不建议这种使用情况
if(condition)
{
return x;
}
return y;
int main()
{
int num = 4;
if (5 == num)
//建议这种写法,就算将==写为=,在编译过程中也会报错
{
printf("hehe\n");
}
//if (num = 5)// = 赋值 == 判断相等
//{
// printf("hehe\n");
//}
//return 0;
}
练习
练习
判读一个数是否为奇数
#include<stdlib.h>
int main()
{
int a = rand();
int b = 0;
b = a % 2;
printf("%d\n", a);
if (b= 1)
{
printf("a为奇数");
}
else
{
printf("a为偶数");
}
return 0;
}
输出1-100之间的奇数
方法一 - for循环
int main()
{
int i;
int j ;
for (i = 1; i <= 100; i++)
{
j = i % 2;
if (1 == j)
{
printf("%d\n", i);
}
}
return 0;
}
方法二 - while循环
int main()
{
int i = 1;
while (i <= 100)
{
if (i % 2 == 1)
printf("%d\n", i);
i++;
}
return 0;
}
方法三 - while循环,不需要判断
int main()
{
int i = 1;
while (i <= 100)
{
printf("%d\n", i);
i += 2;;
}
return 0;
}
五、switch语句
switch语句是一种分支语句。常常用于多分支的情况,允许嵌套使用
switch(整型表达式) - 只能用整型,即int
{
语句项;
break;
}
case 整形常量表达式 : - 只能是整型常量
语句;
方法一
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期1\n");
break;
case 2:
printf("星期2\n");
break;
case 3:
printf("星期3\n");
break;
case 4:
printf("星期4\n");
break;
case 5:
printf("星期5\n");
break;
case 6:
printf("星期6\n");
break;
case 7:
printf("星期7\n");
break;
}
//方法二
if (1 == day)
printf("星期一\n");
else if(2 == day)
printf("星期二\n");
else if(3 == day)
printf("星期三\n");
//从星期一写到星期日
return 0;
}
switch - case
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
if (n == 1)
printf("hehe\n");//switch-case语句可以出现if语句
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default: //处理一些非法输入,比如输入9
printf("输入错误\n");
break;
}
return 0;
}
六、循环语句
循环语句 while\for\do while
while循环语法结构
while(表达式)
循环语句;
int main()
{
while(1) //死循环
printf("hehe\n");
return 0;
}
练习
//练习 打印1-10的数字
int main()
{
int i = 1;
while (i<=10)
{
if (5 == i)
continue;
//continue - 终止循环中本次循环,continue后面的代码不再执行,
//直接跳转到循环的判断部分,进行下一次循环的入口判断
printf("%d ", i);
i++;
}
/*while (i<=10)
{
if (5 == i)
break;
printf("%d ", i);
i++;
}*/
/*printf("%d ", i);
i++;*/ //需要循环十次
return 0;
}
EOF
(1)EOF是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。该宏定义在stdio.h中。
(2)EOF不是特殊字符,而是一个定义在头文件stdio.h的常量,一般等于-1。#define EOF (-1)
(3)除了表示文件结尾,EOF还可以表示标准输入的结尾。但是,标准输入与文件不一样,无法事先知道输入的长度,必须手动输入一个字符,表示到达EOF。
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)// 按Ctrl z停止循环,
// 否则不管按什么键都会接着输出
{
putchar(ch);
}
//int ch = getchar();//接受字符
//putchar(ch); /*和printf作用相同*/
//printf("%c\n",ch);
return 0;
}