现在是c语言各部分详细的教程,一些基础的内容我在c语言概要里讲的已经比较清楚了,所以直接从分支和循环开始讲起
c语言结构:
1. 顺序结构
2. 选择结构
3. 循环结构
选择结构:
分支语句与循环语句:
c语言中由一个分号隔开的,就是一个语句
分支语句(选择结构)
if语句结构:
1.if(表达式)
语句; //表达式为真,执行语句
2.if(表达式)
语句1;
else
语句2 ; //表达式为真,语句1,假,语句2
3.多分支
.if(表达式1)
语句1;
else if(表达式2)
语句2 ;
else
语句3 ; //1真1,2真2,都假3
例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int age;
printf("please input your age\n");
scanf("%d", &age);
if (age < 18)
printf("未成年\n");
else if (age >= 18 && age < 28)//&&为“和”
printf("青年\n");
else if (age >= 28 && age < 50)
printf("壮年\n");
else if (age >= 50 && age < 90)
printf("老年\n");
else
printf("老不死\n");
return 0;
}
这里提一下常见的悬空else问题
这里有这样一个问题
该代码会输出什么?
其实else与其最近的if匹配
第一个if就没进去(判定为错误),所以不会打印任何东西
利用if语句时一定要注意这个问题
同时写条件时注意:一个=为赋值,两个==为判断相等。
这也是新手们常犯的一个错误
switch语句
(只能定义整型)
实现多分支项目
case决定入口,break决定出口
如:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int day;
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("星期日\n");
break;
}
return 0;
}
中间不打break会一直向下运行
可以: case 1:
case 2:
case 3:
case 4:
case 5:
printf(“工作日\n”);
break;
最好在最后的case加入break
加default以防止case外的事件发生
下面看一道例题:
可以自己思考一下m,n的输出是多少
m=5 n=3
while循环
条件为真->执行–回到条件–条件为真…………条件为假–结束
可在while 中用if……break
如:
while(i<=10)
{
if(i==5) ;
break;
printf("%d",1):
i++;
}
只能输出1234 遇到break就跳出 continue可结束当前循环,回到条件
getchar-输入一个字符并返回(待输入)
putchar-输出
例:
int ch =0;
while ((ch=getchar())!=EOF)
{
putchar(ch);
}
如果输入EOF的话可以想一想会不会输出EOF
你可能会认为while循环进不去,从而什么都输出不出来
其实计算机是一个个识别的,先E再O再F,单个字符肯定不等于EOF字符串
所以会进入循环,并输出EOF
(EOF–end of file文件结束标志)
接下来再讲一道颇有难度的例题
getchat和scanf为输入函数
接受数据放在输入缓冲区中
getchar得到缓冲区剩的回车(\n)去到else输出失败
可在请确认上一行加一个getchar()取走回车
但若输入密码为12345 asdf则又失败
因为第一个getchar只读到空格
所以加入循环来代替上述getchar即可
int ch
while((ch=getchar())!=‘\n’)//一直拿到回车
{
..........(上述题中的代码)
}
(这道题对初学者来讲较有难度,这里放出来是为了让大家体会计算机思维,如果仔细看完解释还是不懂可以在评论区中提出来你的问题)
for循环
(用的最多)
语法:
for(表达式1;表达式2;表达式3)
循环语句;
*
表达式1–初始化循环变量(初始化部分)
*
表达式2–判断循环什么时候终止(条件判断部分)
*
表达式3–循环条件的调整(调整部分)
若循环过于复杂,while循环的初始化,判断,调整三部分距离太远,不方便, 故采用for循环
eg:用for循环打印1-10
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d", i);
}
return 0;
}
for循环示意图:
注:1.不可在for循环内改变变量,放在for循环失去控制(尤其注意判断相等与赋值的区别)
2.建议for循环控制变量取值采用“前闭后开区间”写法(前等后不等)----更有意义
3.for循环的判断条件部分若被省略,条件恒为真,循环不会停!(建议不要随便省略)初始化省略后默认从0开始
do…while循环
例:
int i=1
do
{
printf("%d",1);
i++;
}
while(i<=10);//适用范围
retrun 0;
过程如图
接下来会布置几道利用循环的练习题,答案也一并放出,新手建议先自己写一下再看看与答案的区别
练习
1.计算n的阶乘(不考虑溢出)
2.在有序数组中查找某个具体的数字n,编写int binsearch(int x,int v[],int n);功能:在v[0]<=v[1]<=v[2]<=…<=v[n-1]的数组中查找x。
3.编写代码演示多个字符从两边汇聚到中间
4.模拟用户登录,输入密码,最多输入三次
答案
1.
- 简单版:
#include<stdio.h>
int main()
{
int arr[] = {
1,2,3,4,5,6,7,8,9,10 };
int k = 7;
//写一个代码,在arr数组(有序的)中找到7
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
if (k == arr[i])
{
printf("找到了,下标是;%d\n", i);
break;
}
}
if (i == sz)
printf("找不到\n");
return 0;
}
- 折半(二分)查找算法
最多找log2n次
#include<stdio.h>
int main()
{
int arr[] = {
1,2,3,4,5,6,7,8,9,10 };
int k = 7;
int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
int left = 0;//定义左下标
int right = sz - 1;//定义右下标
while (left<=right)
{
int mid = (left + right) / 2;
if (arr[mid] > k)
{
right = mid - 1;
}
else if (arr[mid] < k)
{
left = mid + 1;
}
else
{
printf("找到了,下标是:%d\n", mid);
break;
}
}
if(left>right)
{
printf("找不到\n");
}
return 0;
}
3,
#include<stdio.h>
#include<string.h>
#include<CoreWindow.h>//sleep 的声明
#include<stdlib.h>//system的声明
int main()
{
char arr1[] = "welcome to china!!!!!";
char arr2[] = "#####################";
int left = 0;
//int right = sizeof(arr1) / sizeof(arr1[0]) - 2;//算上\0所以减2
int right = strlen(arr1) - 1;//strlen为计算数组中元素个数的函数,更简便
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);//间隔1000毫秒
system("cls");//执行系统命令的一个函数-cls-清空屏幕"cls"
left++;
right--;
}
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>//strcmp的库函数
int main()
{
int i = 0;
char password[20] = {
0 };
for (i = 0; i < 3; i++)
{
printf("请输入你的密码");
scanf("%s", password);//输入字符串
if (strcmp(password , "123456")==0)//等号不能用来判断两个字符串是否相等,应用“strcmp”函数来判断
{
printf("登陆成功\n");
break;
}
else
{
printf("密码错误\n");
}
}
if (i == 3)
printf("三次密码均错误,请退出");
return 0;
}
觉得有帮助的同学可以点一个小小的赞支持一下~~