分支语句
1.if语句
//多分支
if(表达式1)
语句1;
else if (表达式2)
语句2;
else
语句3;
注意:如果程序里有多个if,想清楚else跟哪个if对应
左边的程序else对应错误,无法打印任何东西。右边正确
2.switch语句:实现多分支的情况
int day = 0;
scanf("%d", &day);
switch (day)//()内一定得是整型变量
{
case 1://case 整型常量表达式:
printf("星期1\n");
break;//停止循环(不一定句句后面加,如果上方程序都是一个意思的话,case后再加break)
case 2:
printf("星期2\n");
break;
case 3:
printf("星期3\n");
break;
以此类推
3.default语句:如果表达的值跟case标签的值都不匹配,可用default
格式:default:
printf("输入错误\n");
break;//在每个switch语句里都放一条default子句是个好习惯,注意在后面加个break
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:m++;
case 2:n++;
case 3:
switch (n)//switch可以嵌套
{case 1:n++;
case 2:m++; n++; break;
}
case 4:m++;
break;
default:
break;
}
printf("m=%d,n=%d", m, n);
return 0;
问m=?n=?
答案m=5 n=3
case 2:n++;//此时n=2
case 3:
switch (n)//这个(n)代表从case n开始,n=2则从case 2开始
{case 1:n++;
case 2:m++; n++; break;
循环语句
1.while循环
while (表达式)//表达式若为数字,如果为真则循环执行 注:0为假,非0为真
int i = 1;
while (i <= 10) {
printf("%d ", i);
i++;
}
return 0;
int i = 0;
while(i<=10){
i++;
if (i == 5)
continue;//本次循环中continue后面的代码不会执行,而是直接跳转到while语句判断部分
printf("%d ", i);
}
return 0;//打印出来的是
补充getchar
int ch = getchar();//getchar获取一个字符
putchar(ch);//输出这个字符
printf("%c\n", ch);//结果与putchar相同
int ch = 0;
while ((ch = getchar()) != EOF)//EOF为end of file结束文件
{
putchar(ch);
如何终止循环:可以按CTRL+Z
int main()
{
int ret = 0;
int ch = 0;
char password[20] = { 0 };//
printf("请输入密码");
scanf("%s", password);//输入密码并存放在password数组中
while ((ch = getchar() )!= '\n')//输入后的回车相当于\n(根据ASCⅡ码,\n = 10),
//用这个getchar先吸收掉\n,密码中若有出现空格类字符会占据缓冲区,用getchar吸出
{
;
}
printf("确认密码(Y/N):>");
ret = getchar();
if (ret == 'Y')
printf("确认成功\n");
if (ret == 'N')
printf("失败咯\n");
return 0;
}
2.for循环
for(表达式1;表达式2;表达式3)
循环语句;
表达式1为初始化部分,用来初始化变量。
表达式2为条件判断部分,用于判断循环时候终止。
表达式3为调整部分,用于循环部分的调整
优势(相比于while循环)
while循环中,三个部分中间间隔可能过长,会出现漏掉或者书写不清楚的情况
int i=0;//初始化
while(i<10)//条件
i++;//调整
for循环中把以上三个部分放在一起(以下是输入1到10之间的数字)
int main()
{
int i = 0;
for (i = 1; i <10; i++)
{
printf("%d ", i);
}
return 0;
}
再举个例子
int main()
{
int i = 0;
for (i = 1; i <=10; i++)
{
if (i == 5)
continue;//5的时候不打印,跳过5打印5后面的数字
printf("%d ", i);
}
return 0;//打印结果为1到10
}
int main()
{
int i = 1;
while (i <= 10)//1
{
if (i == 5)//2
continue;
printf("%d ", i);
i++;/*当i=5时,这一步骤无法被执行,陷入死循环(在1和2之间反复循环),这也是while的一个弊端,三部分太散容易犯错*/
}
return 0;//打印结果为1到4
}
注意:(1).不可在for循环里改变循环变量,防止for循环失去控制
(2).建议采用前闭后开的写法
for (i = 1; i <10; i++)
(3)for循环的初始化,调整,判断都可以省略,但如果被省略,那判断就是恒为真,造成死循环
3.do while循环
int i = 1;
do
{
printf("%d ", i);
i++;
} while (i <= 10);
return 0;
1.int main()
{
int ret = 1;
int i = 0;
int n = 0;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
ret = ret * i;
}
printf("ret=%d\n", ret);
return 0;
}
2.int main()
{
int ret = 1;
int n = 0;
int sum = 0;
for (n = 1; n <= 10; n++)
{
ret = ret * n;
sum = sum + ret;
}
printf("sum=%d\n", sum);
return 0;
}
3.第一种方法:硬着头皮找,可能要找n次
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10};
int k = 7;//写一个代码在有序数组中找到7
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);/*sizeof(arr)是求arr这个数组有多少字节的(总),sizeof(arr[0])则是求下标为0的那个成员有多少字节(个体),sizeof(arr)/sizeof(arr[0]) 可得为求出数组成员的个数*/
for (i = 0; i <sz; i++)
{
if (k == arr[i])
{
printf("找到了,下标是:%d/n", i);
break;
}
}
if (i == sz)
printf("找不到");
return 0;
第二种方法:折半查找算法,即二分查找算法
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;
int left = 0;//左下标
int sz = sizeof(arr) / sizeof(arr[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("找不到");
return 0;
4.#include<stdio.h>
#include<string.h>
#include<windows.h>//Sleep函数引用的库函数
#include<stdlib.h>//system函数
//welcome to xxx...
//#################
//w###############.
//we#############..
//.....
//welcome to xxx...
int main()
{
char arr1[] = "welcome to xxx...";
char arr2[] = "#################";
int left = 0;
//int right = sizeof(arr1) / sizeof(arr1[0])-2;
//char arr[]="abc";
//[a b c \0(字符串结尾标志)]
// 0 1 2 3
//最后一个.的位置对应c,所以得-2
int right = strlen(arr1)-1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
//休息一秒
Sleep(1000);
system("cls");//system是执行系统命令的一个函数,cls为清空屏幕
left++;
right--;
}
return 0;
}
5.#include<stdio.h>
#include<string.h>
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(string compare)
{
printf("登录成功\n");
break;
}
else
{
printf("密码错误\n");
}
}
if (i == 3)
printf("三次密码均错误,请退出\n");
return 0;
}