c语言是结构化的程序语言
顺序结构,选择结构,循环结构
什么是语句?
c语言里面包括五种语句
1表达语句
2函数调用语句
3控制语句(分支语句与循环语句)有九种
(1)条件判断语句 (分支语句)if switch
(2)循环执行语句 do while while for
(3)转向语句 break goto continue return
4复合语句
5空语句
分支语句
if
#include <stdio.h>
int main()
{
if (3 == 3)//结果为真就执行
{
printf("hehe\n");
}
return 0;
}
if else
#include <stdio.h>
int main()
{
int age = 17;
if (age >=18)
{
printf("成年\n");
}
else//不满足上面if就执行下面else
{
printf("未成年\n");
}
return 0;
}
if elseif else
#include <stdio.h>
int main()
{
int age = 17;
if (age >=18)
{
printf("成年\n");
}
else if(age>=30)
{
printf("长大\n");
}
else
{
printf("未成年\n");
}
return 0;
}
注意else跟最近的if匹配
#include <stdio.h>
int main()
{
int age = 17;
if (age ==18)
if(age==17)
printf("成年\n");
else
printf("未成年\n");//该结果是什么都没有因为最下面else跟第二个if匹配
return 0;
}
小练习
//打印1——100的奇数
#include <stdio.h>
int main()
{
int num1;
for (num1 = 0; num1 < 100; num1++)
{
if (num1 % 2 == 1)
printf("%d\n", num1);
}
return 0;
}
风格推荐可以看一下《高质量c++指南》
switch
#include <stdio.h>
int main()
{
int num;
scanf("%d",&num);while(getchar() != '\n');
switch(num)
{
case 1:
{
printf("1 \n");
}break;//没有break就是在满足的case之后全部执行
case 2:
{
printf("2 \n");
}break;
case 3:
{
printf("3 \n");
}break;
case 4:
{
printf("4 \n");
}break;
case 5:
{
printf("5 \n");
}break;
}
return 0;
}
default
可以当选择超出case时的额外结果,有点像else
#include <stdio.h>
int main()
{
int num;
scanf("%d",&num);while(getchar() != '\n');
switch(num)
{
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;
default
printf("输入错误");
break;
}
return 0;
}
循环语句
1.while
while()//判断条件非零为真
{
continue//跳过continue后面的语句回到下一次的判断
break;//永久结束循环
}//循环体
int main()
{
int num = 1;
// while语句 一般用来做死循环
while(1)
{
printf("****************** 1.登录 ******************\n");
printf("****************** 2.注册 ******************\n");
printf("****************** 3.游戏 ******************\n");
printf("****************** 4.退出 ******************\n");
scanf("%d",&num);
if(num == 1)
{
// 登录功能
printf("登录功能\n");
printf("按任意键继续\n");
getchar();
getchar();
// ...
}
if(num == 2)
{
// 注册功能
printf("注册功能\n");
printf("按任意键继续\n");
getchar();
getchar();
// ...
}
if(num == 3)
{
// 游戏功能
printf("游戏功能\n");
printf("按任意键继续\n");
getchar();
getchar();
// ...
}
if(num == 4)
{
// break; // 跳出循环
}
}
return 0;
}
while中有关getchar
int ch = getchar();//getchar获取一个字符,把字符转换成ASCII值存在ch里面
//为什么不用char类型,根据getchar使用手册当getchar获取正确的字符返回正确的字符,当遇到文件末尾或者错误时放回
//EOF:end of file 他的值是-1所以int更好因为char放不下-1;
putchar(ch);//等价于printf("%c",ch);
int ch = 0;
while ((ch = getchar()) != EOF)//为什么会换行当我输入一个字符时也会按下回车,字符与回车都被读到缓冲区里面getchar去读取,
//putchar再打印就会出现换行现象。
putchar(ch);
#include<stdio.h>
int main()
{
char password[20] = { 0 };
printf("请输入密码");
scanf("%s", password);
int ret = getchar();//当我们输入密码后getchar把回车读取存放到ret中
if ('Y' == ret)
printf("yes\n");
else
printf("NO\n");//所以直接执行下一步打印出NO
return 0;
}
解决办法
#include<stdio.h>
int main()
{
char password[20] = { 0 };
printf("请输入密码");
scanf("%s", password);
getchar();//将回车读取走,但是会有其他问题。
int ret = getchar();
if ('Y' == ret)
printf("yes\n");
else
printf("NO\n");
return 0;
}
c语言中在读取键盘数据时,一般是带缓存的数据输入,需要按回车键才能完成该“行”数据的输入确认。
而 scanf()函数对这个回车确认符并不进行处理,回车符会留在输入缓存区中。
因此,在下一个读“字符”操作函数(getchar, scanf("%c"), gets()等)运行时,会读到这个字符。
而在读数值型数据或字符串时,scanf()会从第一个非空白字符(空白字符指:回车,空格,TAB键)开始读取,自动忽略前面的空白字符,而遇到空白字符结束该类型数据的输入。
#include<stdio.h>
int main()
{
char password[20] = { 0 };
printf("请输入密码");
scanf("%s", password);
//getchar();
while ((ch =getchar()) !='\n');
int ret = getchar();
if ('Y' == ret)
printf("yes\n");
else
printf("NO\n");
return 0;
}
只打印数字
#include<stdio.h>
int main()
{
char ch = '\0';//'\0'是字符类型的0
while ((ch = getchar()) != EOF)
{
if (ch < '0' || ch>'9')
continue;
putchar(ch);
}
return 0;
}
小练习将数字73,32,99,97,110,32,100,111,32,105,116,33转化为ascii值
#include<stdio.h>
int main()
{
int arr[] = { 73,32,99,97,110,32,100,111,32,105,116,33 };
int i = 0;
int size = sizeof(arr) / sizeof(arr[0]);
while (i < size)
{
printf("%c", arr[i]);
i++;
}
return 0;
}
2.do while
do
{
循环体
}//先循环后判断
while(表达式)
3.for
for (表达式1;表达式2;表达式3;)//初始化,条件判断,调整比while更集中容易去修改
{
循环体
}//执行顺序是表达式1,表达式2,循环体,表达式3
注意事项
1没有条件初始化,导致嵌套时的问题
#include <stdio.h>
int main()
{
int i =0, j =0;
for(;i<3;i++)
{
for (; j < 3; j++)
{
printf("hehe\n");
}
}
return 0;
}
2在for中进行类型初始化
for(int i =0;i<8;i++)//c99支持有的不支持
3小练习,判断该循环进行多少次
#include <stdio.h>
int main()
{
int i =0, j =0;
for (i = 0, j = 0; j = 0; i++, j++)
j++;
return 0;
}
0次表达式2是对j赋值,0为假,条件结束。