1、分支语句和循环语句 C语言是一门结构化的程序设计语言 顺序结构 选择结构 循环结构 1.1、分支语句 if语句 #define CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main() { int num = 4; if (5 == num)//常量和变量的比较放在左边比较不会出错 { printf("hehe\n"); } return 0; }

//int main() //{ // int num = 4; // if (num == 5) // printf("hehe\n"); // return 0; //}

//int main() //{ // int num = 4; // if (num = 5) // { // printf("hehe\n"); // return 0; // } //}

//int main() //{ // int a = 1; // int b = 0; // if (a == 1) // { // if (b == 2) // printf("hehe\n"); // } // else // printf("haha\n"); // return 0; //}

//int main() //{ // // /int age = 10; // 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");/ // // /if (age < 18) // printf("未成年\n"); // else // printf("成年\n");/ // /if (age < 18) // printf("未成年\n");/ // return 0; //}

练习 判断一个数是否为奇数 int main() { int x = 2; printf("请输入一个整数"); scanf("%d",&x); if (x%2 == 0) { printf("输入的是偶数"); } else { printf("输入的是奇数"); } }

输出1-100之间的奇数 #define CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main() { int i = 1; while (i < 100) { printf("%d", i); i += 2; } return 0; }

//int main() //{ // int i = 0; // while(i <= 100) // { // if (i % 2 == 1) // printf("%d", i); // i++; // } // //}

switch语句 #define CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main() { int day = 3; /scanf("%d", &day);/ switch (day)//switch是整形表达式-----day必须是整形 { case 1://case是整形常量表达式 printf("星期一\n"); case 2: printf("星期二\n"); case 3: printf("星期三\n"); break; case 4: printf("星期四\n"); case 5: printf("星期五\n"); case 6: printf("星期六\n"); case 7: printf("星期日\n"); } }

//int main() //{ // int day = 0; //// scanf("%d", &day); // if (1 == day) // printf("星期一\n"); // else if (2 == day) // printf("星期二\n"); // else if (3 == day) // printf("星期三\n"); // else if (4 == day) // printf("星期四\n"); // return 0; //}

练习 #define CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

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; default: break; } case 4: m++; break; default: break; } printf("m = %d,n = %d", m, n); return 0; }

1.2、循环语句 while语句 while循环格式 //int main() //{ // int i = 0;//初始化 // // while (i < 10)//判断 // { // // //..... // i++;//调整 // } // return 0; //}

#define CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

//int main() //{ // int i = 1; // while (i<=10) // { // if (i == 5) // continue;//continue再while循环中的作用是:continue是用于终止本次循环的,也就是本次循环中的continue后边的代码不会执行,而是直接逃转到while语句的判断部分,进行下一次循环的入口判断 // printf("%d", i); // i++; // } // return 0; //}

//int main() //{ // int i = 1; // while (i<=10) // { // if (i == 5) // break;//break再while循环中的作用是:其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环,所以:while中的break是用于永久终止循环 // printf("%d", i); // i++; // } // return 0; //}

练习 #define CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main() { int ch = 0; //getchar遇到ctrl+z的时候就会获取到EOF //EOF叫end of file 文件结束标志->本质上的值位-1 while ((ch=getchar())!=EOF) { putchar(ch); } /int ch = getchar();getchar接受一个键盘的字符 putchar(ch);//输出一个字符 printf("%c", ch);/ return 0; }

#define _CRT_SECLRE_NO_WARNINGS 1 //#define _CRT_SECURE_NO_DEPRECATE; //#define _CRT_SECURE_NO_WARNINGS; //#pragma warning(disable:4996);

#include<stdio.h>

int main() { int ch = 0; while ((ch = getchar()) != EOF) { if (ch < '0' || ch>'9'); continue; putchar(ch);//putchar只会输出数字字符 } return 0; }

//int main() //{ // int ret = 0; // int ch = 0; // char password[20] = { 0 }; // printf("请输入密码:>"); // scanf("%s", password);//请输入密码,并存放在password数组中---scanf只会获取空格前的字符 // //缓冲区还剩余一个\n // //读取一下\n // while ((ch = getchar()) != '\n')//是循环判断scanf最后一个是\n // { // ; // } // printf("请确认(Y/N):>"); // ret = getchar();//Y/N // if (ret == 'Y') // { // printf("确认成功\n"); // } // else // { // printf("确认失败\n"); // } // return 0; //}

for循环 for循环格式 for(表达式1,表达式2,表达式3) 循环语句; 表达式1:为初始化部分,用于初始化循环变量的; 表达式2:为条件判断部分,用于判断循环时候终止; 表达式3:位调整部分,用于循环条件的调整;

练习: 使用for循环在屏幕上打印1-10的数字 #define _CRT_SECLRE_NO_WARNINGS 1 //#define _CRT_SECURE_NO_DEPRECATE; //#define _CRT_SECURE_NO_WARNINGS; //#pragma warning(disable:4996);

#include<stdio.h>

//int main() //{ // int i = 0; // for (i = 1; i <= 10; i++) // { // printf("%d\n", i); // } // return 0; //}

int main() { int i = 0; for (i = 1; i <= 10; i++) { printf("%d", i); } return 0; }

#define _CRT_SECLRE_NO_WARNINGS 1 //#define _CRT_SECURE_NO_DEPRECATE; //#define _CRT_SECURE_NO_WARNINGS; //#pragma warning(disable:4996);

#include<stdio.h>

int main() { int i = 0; for (i = 1; i <= 10; i++) { if (i == 5) continue; printf("%d", i); } return 0; }

//int main() //{ // int i = 0; // for (i = 1; i <= 10; i++) // { // if (i == 5) // break; // printf("%d", i); // } // return 0; //}

for循环语句的循环控制变量 一些建议: 1、不可在for循环体内修改循环变量,防止for循环失去控制 2、建议for语句的循环控制变量的取值采用前闭后开区间写法 #define _CRT_SECLRE_NO_WARNINGS 1 //#define _CRT_SECURE_NO_DEPRECATE; //#define _CRT_SECURE_NO_WARNINGS; //#pragma warning(disable:4996);

#include<stdio.h>

int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int i = 0; //10次循环 //10次打印 //10个元素 for (i = 0; i < 10; i++) { printf("%d", arr[i]); } return 0; }

//int main() //{ // int i = 0; // for (i = 0; i <= 10; i++) // { // if (i = 5) // printf("%d", i); // } // return 0; //}

一些for循环的变种 for循环的初始化、调整、判断都可以省略但是:for循环的判断部分如果省略条件就恒为真 #include<stdio.h>

int main() { for (;;) { printf("hehe\n"); } return 0; }

如果不是非常省略,建议不要省略 变种1: #define _CRT_SECLRE_NO_WARNINGS 1 //#define _CRT_SECURE_NO_DEPRECATE; //#define _CRT_SECURE_NO_WARNINGS; //#pragma warning(disable:4996);

#include<stdio.h>

int main() { int i = 0; int j = 0; for (; i < 10; i++) { for (; j < 10; j++); { printf("hehe\n"); } } return 0; }

//int main() //{ // int i = 0; // for (i = 0; i < 10; i++) // { // int j = 0; // for (j = 0; j < 10; j++) // { // printf("hehe\n"); // } // } // return 0; //}

变种2:

面试题: 请问循环要循环多少次? #define _CRT_SECLRE_NO_WARNINGS 1 //#define _CRT_SECURE_NO_DEPRECATE; //#define _CRT_SECURE_NO_WARNINGS; //#pragma warning(disable:4996);

#include<stdio.h>

int main() { int i = 0; int k = 0; for (i = 0, k = 0; k = 0; i++, k++)//k=0是赋值为0,0为假所以条件为假,退出循环 { k++; } return 0; } 0次

do...while()循环 do语句的语法: do 循环语句; while(表达式);

#define _CRT_SECLRE_NO_WARNINGS 1 //#define _CRT_SECURE_NO_DEPRECATE; //#define _CRT_SECURE_NO_WARNINGS; //#pragma warning(disable:4996);

#include<stdio.h>

int main() { int i = 1; do { printf("%d", i); i++; } while (i <= 10); return 0; }

#define _CRT_SECLRE_NO_WARNINGS 1 //#define _CRT_SECURE_NO_DEPRECATE; //#define _CRT_SECURE_NO_WARNINGS; //#pragma warning(disable:4996);

#include<stdio.h>

int main() { int i = 1; do { if (i == 5) continue; /break;/ printf("%d", i); i++; } while (i <= 10); return 0; }

练习: 1、计算n的阶乘 int main() { int i = 0; int n = 0; int ret = 1; scanf("%d", &n);//100的阶乘在一个整形里面就放不下了,这个就会溢出 for (i = 1; i <= n; i++) { ret = ret * i; } printf("ret = %d\n", ret); return 0; } 2、计算1!+2!+3!+......+10! #define _CRT_SECLRE_NO_WARNINGS 1 //#define _CRT_SECURE_NO_DEPRECATE; //#define _CRT_SECURE_NO_WARNINGS; //#pragma warning(disable:4996);

#include<stdio.h>

int main() { int i = 0; int n = 0; int ret = 1; int sum = 0; for (n = 1; n <= 10; n++) { ret = ret * n; //n的阶乘 sum = sum + ret; } printf("sum = %d\n", sum); return 0; }

//int main() //{ // int i = 0; // int n = 0; // /int ret = 1;/ // int sum = 0; // //1+2+6=9 // for (n = 1; n <= 3; n++) // { // int ret = 1; // for (i = 1; i <= n; i++) // { // ret = ret * i; // } // //n的阶乘 // sum = sum + ret; // } // printf("sum = %d\n", sum); // return 0; //} 3、在一个有序的数组中查询具体的某个数字n,编写int binsearch(int x, int v[], int n);功能:在v[0]<=v[1]<=v[2]<=......v[n-1]的数组中查找x ---------二分查找--------- #define _CRT_SECLRE_NO_WARNINGS 1 //#define _CRT_SECURE_NO_DEPRECATE; //#define _CRT_SECURE_NO_WARNINGS; //#pragma warning(disable:4996);

#include<stdio.h>

int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int k = 7;

int se = sizeof(arr) / sizeof(arr[0]);
int left = 0;//坐下标
int right = se - 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;

}

//int main() //{ // int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; // int k = 7; // //写一个代码,在arr数组中(有序的)中找到7 // int i = 0; // int se = sizeof(arr) / sizeof(arr[0]); // for (i = 0; i < se; i++) // { // if (k == arr[i]) // { // printf("找到了,下表是:%d\n", i); // break; // } // } // if (i == se) // printf("找不到\n"); // return 0; //} 4、编写代码,演示多个字符从两端移动,向中间汇聚。 #define _CRT_SECLRE_NO_WARNINGS 1

#include<stdio.h> #include <string.h>//strlen函数的头文件 #include <windows.h>//Sleep头文件 #include <stdlib.h>//system头文件

int main() { char arr1[] = "welcome to bit!!!!!!"; char arr2[] = "####################"; int left = 0; //int right = sizeof(arr1)/sizeof(arr2[0]-2); int right = strlen(arr1) - 1;//strlen求字符串长度的

while (left <= right)
{
	arr2[left] = arr1[left];
	arr2[right] = arr1[right];
	printf("%s\n", arr2);
	//休息一秒
	Sleep(500);
	system("cls");//system是执行系统命令的一个函数-cls-清空屏幕
	left++;
	right--;
}
printf("welcome to bit!!!!!!");
return 0;

} 5、编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次输入错误,则退出程序) #define _CRT_SECLRE_NO_WARNINGS 1

#include<stdio.h> #include <string.h>//strlen函数的头文件、strcmp函数的头文件 #include <windows.h>//Sleep头文件 #include <stdlib.h>//system头文件

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("密码正确");
		break;
	}
}
if (i == 3)
{
	printf("密码输入错误");
}
return 0;

}