这两天学了c语言的循环语句,有点烧脑,但是感觉的确能提高生产力。
一定要自己敲代码,不然很多问题学不会,比如分号、括号的位置,是大括号还是花括号,还有语句的表达式。
重要的事情说三遍。
!!!一定要自己敲代码!!!
!!!一定要自己敲代码!!!
!!!一定要自己敲代码!!!
1.分支语句
1.1if语句
语法结构:
if(表达式)
语句;
if(表达式)
语句1;
else
语句2;
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
#include <stdio.h>
//代码1
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("未成年\n");
}
}
//代码2
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("未成年\n");
}
else
{
printf("成年\n");
}
//代码3
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("少年\n");
}
else if(age>=18 && age<30)
{
printf("青年\n");
}
else if(age>=30 && age<50)
{
printf("中年\n");
}
else if(age>=50 && age<80)
{
printf("老年\n");
}
else
{
printf("老寿星\n");
}
}
#include <stdio.h>
int main()
{
if(表达式)
{
语句列表1;
}
else
{
语句列表2;
}
return 0;
}
2.2switch语句
switch(整型表达式)
{
语句项;
}
//是一些case语句:
//如下:
case 整形常量表达式:
语句;
#include <stdio.h>
int main()
{
int day = 0;
switch(day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}
#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;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);
return 0;
}
2.循环语句
2.1while循环
//while 语法结构
while(表达式)
循环语句;
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
//break 代码实例
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d ", i);
i = i+1;
}
return 0;
}
//continue 代码实例1
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
printf("%d ", i);
i = i+1;
}
return 0;
}
//continue 代码实例2
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
i = i+1;
if(i == 5)
continue;
printf("%d ", i);
}
return 0;
}
//代码什么意思?
//代码1
#include <stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
putchar(ch);
return 0;
}
这里的代码适当的修改是可以用来清理缓冲区的.
//代码2
#include <stdio.h>
int main()
{
char ch = '\0';
while ((ch = getchar()) != EOF)
{
if (ch < ‘0’ || ch > ‘9’)
continue;
putchar(ch);
}
return 0;
}
//这个代码的作用是:只打印数字字符,跳过其他字符的、
2.2for循环
记住,这里是;
。我每次都会把;
打成,
for(表达式1; 表达式2; 表达式3)
循环语句;
#include <stdio.h>
int main()
{
int i = 0;
//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
int i = 0;
//实现相同的功能,使用while
i=1;//初始化部分
while(i<=10)//判断部分
{
printf("hehe\n");
i = i+1;//调整部分
}
//实现相同的功能,使用while
for(i=1; i<=10; i++)
{
printf("hehe\n");
}
//代码1
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
break;
printf("%d ",i);
}
return 0;
}
//代码2
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;
printf("%d ",i);
}
return 0;
}
int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}
#include <stdio.h>
int main()
{
//代码1
for(;;)
{
printf("hehe\n");
}
//for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问
题。
//代码2
int i = 0;
int j = 0;
//这里打印多少个hehe?
for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
printf("hehe\n");
}
}
//代码3
int i = 0;
int j = 0;
//如果省略掉初始化部分,这里打印多少个hehe?
for(; i<10; i++)
{
for(; j<10; j++)
{
printf("hehe\n");
}
}
//代码4-使用多余一个变量控制循环
int x, y;
for (x = 0, y = 0; x<2 && y<5; ++x, y++)
{
printf("hehe\n");
}
return 0;
}
//请问循环要循环多少次?
#include <stdio.h>
int main()
{
int i = 0;
int k = 0;
for(i =0,k=0; k=0; i++,k++)
k++;
return 0;
}
2.3do...while循环
do
循环语句;
while(表达式);
#include <stdio.h>
int main()
{
int i = 10;
do
{
printf("%d\n", i);
}while(i<10);
return 0;
}
#include <stdio.h>
int main()
{
int i = 10;
do
{
if(5 == i)
break;
printf("%d\n", i);
}while(i<10);
return 0;
}
#include <stdio.h>
int main()
{
int i = 10;
do
{
if(5 == i)
continue;
printf("%d\n", i);
}while(i<10);
return 0;
}
//代码1
//编写代码,演示多个字符从两端移动,向中间汇聚
#include <stdio.h>
int main()
{
char arr1[] = "welcome to bit...";
char arr2[] = "#################";
int left = 0;
int right = strlen(arr1)-1;
printf("%s\n", arr2);
//while循环实现
while(left<=right)
{
Sleep(1000);
arr2[left] = arr1[left];
arr2[right] = arr1[right];
left++;
right--;
printf("%s\n", arr2);
}
//for循环实现
for (left=0, right=strlen(src)-1;
left <= right;
left++, right--)
{
Sleep(1000);
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf( "%s\n", target);
}
retutn 0;
}
//代码2
int main()
{
char psw[10] = "" ;
int i = 0;
int j = 0;
for (i = 0; i < 3 ; ++i)
{
printf( "please input:");
scanf("%s", psw);
if (strcmp(psw, "password" ) == 0)
break;
}
if (i == 3)
printf("exit\n");
else
printf( "log in\n");
}
实现在主函数内:
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int left = 0;
int right = sizeof(arr)/sizeof(arr[0])-1;
int key = 7;
int mid = 0;
while(left<=right)
{
mid = (left+right)/2;
if(arr[mid]>key)
{
right = mid-1;
}
else if(arr[mid] < key)
{
left = mid+1;
}
else
break;
}
if(left <= right)
printf("找到了,下标是%d\n", mid);
else
printf("找不到\n");
}
如果实现一个二分查找函数:
int bin_search(int arr[], int left, int right, int key)
{
int mid = 0;
while(left<=right)
{
mid = (left+right)>>1;
if(arr[mid]>key)
{
right = mid-1;
}
else if(arr[mid] < key)
{
left = mid+1;
}
else
return mid;//找到了,返回下标
}
return -1;//找不到
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
printf("**********************************\n");
printf("*********** 1.play **********\n");
printf("*********** 0.exit **********\n");
printf("**********************************\n");
}
//RAND_MAX--rand函数能返回随机数的最大值。
void game()
{
int random_num = rand()%100+1;
int input = 0;
while(1)
{
printf("请输入猜的数字>:");
scanf("%d", &input);
if(input > random_num)
{
printf("猜大了\n");
}
else if(input < random_num)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned)time(NULL));
do
{
menu();
printf("请选择>:");
scanf("%d", &input);
switch(input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("选择错误,请重新输入!\n");
break;
}
}while(input);
return 0;
}
3.goto语句
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
…
error:
if(disaster)
// 处理错误情况
#include <stdio.h>
int main()
{
char input[10] = {0};
system("shutdown -s -t 60");
again:
printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
scanf("%s", input);
if(0 == strcmp(input, "我是猪"))
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
char input[10] = {0};
system("shutdown -s -t 60");
while(1)
{
printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
scanf("%s", input);
if(0 == strcmp(input, "我是猪"))
{
system("shutdown -a");
break;
}
}
return 0;
}
附:练习代码
//#include<stdio.h>
//
//int main()
//{
// printf("hehe/n");
// return 0;
//}
//#include <stdio.h>
//int main()
//{
// printf("%d\n", sizeof(char));
// printf("%d\n", sizeof(short));
// printf("%d\n", sizeof(int));
// printf("%d\n", sizeof(long));
// printf("%d\n", sizeof(long long));
// printf("%d\n", sizeof(float));
// printf("%d\n", sizeof(double));
// printf("%d\n", sizeof(long double));
// return 0;
//}
//判断一个数是不是奇数
//#define _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>
//
//int main()
//{
// int num = 0;
//
// printf("请任意输入一个整数:\n");
// scanf("%d", &num);//输入一个数
//
// if (0 == num % 2)
// {
// printf("这个数是偶数\n");
// }
// else
// {
// printf("这个数是奇数\n");
// }
// return 0;
//}
//输出1~100之间的奇数
//#include <stdio.h>
// int main()
// {
// int ji_num = 1;
//
// while (ji_num <= 100)
// {
// if (1 == ji_num % 2)
// printf("%d\n", ji_num);
// ji_num++;
//
// }
//
// return 0;
// }
//打印1~10
//#define _CRT_SECURE_NO_WARNINGS
//
//#include <stdio.h>
//
//int main()
//{
// int i = 1;
// while (i<=10)
// {
// printf("%d", i);
// i++;
// }
//
// return 0;
//}
//n的阶乘
//#define _CRT_SECURE_NO_WARNINGS
//#include<stdio.h>
//
//int main()
//{
// int n = 0;
// int n_sum = 1;
// int sum_n_sum = 0;
// int i;
// printf("请输入任意整数,将计算它的阶乘\n");
// scanf("%d", &n);
//
// for (i =1; i <= n; i++)
// {
// n_sum = n_sum * i;
// sum_n_sum = sum_n_sum + n_sum;
// }
// printf("n的阶乘是%d\n", n_sum);//n的阶乘
// printf("n的阶乘之和是%d\n", sum_n_sum);//n的阶乘之和
//
//
// return 0;
//
//}
//打印1~100之间所有3的倍数的数字
//#define _CRT_SECURE_NO_WARNINGS
//#include<stdio.h>
//
//int main()
//{
// int num = 1;
// for(num = 1; num <= 100; num++)
// {
// if (0 == num % 3)
// {
// printf("%d\n", num);
// }
//
//
//
//
// }
//
// return 0;
//}
//十个数里面求最大值
//#include<stdio.h>
//
//int main()
//{
// int arr[] = { 4, 5, 8, 6, 2, 8, 4, 2, 5, 71 };
// int max = arr[0];
// int i = 1;
// int sz = sizeof(arr) / sizeof(arr[0]);
//
// for (i = 1; i <= sz; i++)
// {
// if (arr[i] > max)
// max = arr[i];
// }
// printf("max = %d\n", max);
//
// return 0;
//}
//打印9*9乘法口诀表
//#include<stdio.h>
//
//int main()
//{
// int h = 1;
// //打印9行
// for (h = 1; h <= 9; h++)
// {
// //打印一列
// int l = 1;
// for (l = 1; l <= h; l++)
// {
// printf("%d*%d=%-2d ", l, h, l * h);
// }
// printf("\n");
// }
// return 0;
//}
//猜数字游戏
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
printf("*** 1~100之内猜数字游戏 ***\n");
printf("*** 请输入 ***\n");
printf("*** 1.开始游戏 2.退出游戏 ***\n");
printf("*** ***\n");
}
void game()
{
int random_num = rand() % 100 + 1;
int input = 0;
while (1)
{
printf("请输入你猜的数字>:");
scanf("%d", &input);
if (input > random_num)
{
printf("你猜大了\n");
}
else if (input < random_num)
{
printf("你猜小了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned)time(NULL));
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 2:
break;
default:
printf("输入有误,请重新输入!\n");
break;
}
} while ( 2 != input);
return 0;
}
//#include <stdio.h>
//int main()
//{
// int i = 1;
// do
// {
// printf("%d\n", i);
// i++;
// } while (i<10);//满足条件执行,否则跳出do...while循环
// return 0;
//}
//#define _CRT_SECURE_NO_WARNINGS
//#include <stdio.h>
//#include <stdlib.h>
//#include <time.h>
//void menu()
//{
// printf("**********************************\n");
// printf("*********** 1.play **********\n");
// printf("*********** 0.exit **********\n");
// printf("**********************************\n");
//}
////RAND_MAX--rand函数能返回随机数的最大值。
//void game()
//{
// int random_num = rand() % 100 + 1;
// int input = 0;
// while (1)
// {
// printf("请输入猜的数字>:");
// scanf("%d", &input);
// if (input > random_num)
// {
// printf("猜大了\n");
// }
// else if (input < random_num)
// {
// printf("猜小了\n");
// }
// else
// {
// printf("恭喜你,猜对了\n");
// break;
// }
// }
//}
//int main()
//{
// int input = 0;
// srand((unsigned)time(NULL));
// do
// {
// menu();
// printf("请选择>:");
// scanf("%d", &input);
// switch (input)
// {
// case 1:
// game();
// break;
// case 0:
// break;
// default:
// printf("选择错误,请重新输入!\n");
// break;
// }
// } while (input);
// return 0;
//}