目录
一、分支(选择)语句
1、if...else语句
语法:
if(表达式) 语句; if(表达式) 语句1; else 语句2; //多分支 if(表达式1) 语句1; else if(表达式2) 语句2; else 语句3;
例:
int main()
{
int age=0;
scanf("%d\n",age);
if(age<18)
printf("少年\n");
else if(age>=18&&age<26)
printf("青年\n");
else if(age>=26&&age<40)
printf("中年\n");
else if(age>=40&&age<60)
printf("壮年\n");
else
printf("老年\n");
}
悬空else语句
#include<stdio.h.
int main()
{
int a=0;
int b=2;
if(a==1)
if(b==2)
printf("hhhh\n");
else
printf("hhhhhhhh\n");
return 0;
}
//最后什么都不打印,因为else和最近的if匹配
//不要这么写代码 !!!!
2、switch语句
switch语句常常用于多分支的情况。·
●语法:
switch(整型表达式) { 语句项; } //语句项 case 整型常量表达式: 语句;
●switch语句允许嵌套使用
●break语句:跳出循环
●default语句:默认选项
例:
int main()
{
int day=0;
scanf("%d",&day);
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;
}
//根据逻辑需求来写break
int main()
{
int day=0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
}
return 0;
}
二、循环语句
1、while语句
●语法:
while(表达式) 循环语句;
●break语句:
用于永久的终止循环
●continue语句:
跳过本次循环continue后面的代码,直接去判断部分,看是否进行下一次循环
例:
//例1:打印数字1~10
int main()
{
int i=1;
while(i<=10)
{
printf("%d ",i);
i++;
}
return 0;
}
//例2
int main()
{
int ch=0;
while((ch=getchar())!=EOF) //当输入的字符不等于EOF(文件结束标志)时进入循环。结束循环可以ctrl+z
{
putchar(ch); //输出字符
}
return 0;
}
2、for语句
●语法:
for(表达式1;表达式2;表达式3) 循环语句;
表达式1为初始化部分,用于初始化循环变量。可以省略。
表达式2为条件判断部分,用于判断循环什么时候终止。判断部分恒为真会陷入死循环。
表达式3为调整部分,用于循环条件的调整。可以省略。
●循环控制变量
不可在for循环体内修改循环变量,防止for循环失去控制。建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
例:
int main()
{
int i=0;
for(i=1;i<=10;i++)
{
printf("%d",i);
}
return 0;
}
//变种1
int main()
{
int x,y;
for(x=0,y=0;x<2&&y<5;++x,y++)
{
printf("hhhhhh\n");
}
return 0;
}
//笔试例题:循环进行了几次?
int main()
{
int i=0;
int k=0;
for(i=0,k=0;k=0;i++,k++) //判断部分为k=0,即恒为假,因此循环0次。
{
k++;
}
return 0;
}
3、do...while语句
●语法:
do 循环语句; while(表达式);
●特点:循环至少执行一次
例:
int main()
{
int i=1;
do
{
printf("%d ",i);
i++;
}while(i<=10);
return 0;
}
三、循环练习
1、计算n的阶乘
int main()
{
int sum=1;
for(int i=1;i<=10;i++)
{
sum*=i;
}
printf("%d\n",sum);
return 0;
}
2、计算1!+2!+3!+...+10!
int main()
{
int allsum=0,sum=1;
for(int i=1;i<=10;i++)
{
sum=1;
for(int j=1;j<=i;j++)
{
sum*=j;
}
allsum+=sum;
}
return 0;
}
//函数实现
int F(int n)
{
int sum=1;
for(int i=1;i<=n;i++)
{
sum*=i;
}
}
int main()
{
int allsum=0;
for(int j=1;j<=10;j++)
{
allsum+=F(j);
}
printf("%d",allsum);
return 0;
}
//
3、在一个有序数组中查找具体的某个数字n
编写int binsearch(int x,int v[],int n);功能时在v[0]<=v[1]<=c[2]<=...<=v[n-1]的数组中查找x
int binsearch(int k,int v[],int n)
{
if(k>v[n]||k<v[0]) return -1;
for(int i=0;i<=n;i++)
{
if(v[i]==k) return i;
}
return -1;
}
int main()
{
int x,v[]={1,2,3,4,5,6,7,8,9};
printf("%d",binsearch(7,v,9));
return 0;
}
//二分查找法
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9};
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)
{
left=mid+1;
}
else if(arr[mid]>k)
{
right= mid-1;
}
else
{
printf("找到了,下标是:%d\n",mid);
break;
}
}
if(left>right)
{
printf("找不到\n");
}
return 0;
}
4、演示多个字符从两端移动,向中间汇聚
//welcome to bit!!!
//w###############!
//we#############!!
//wel###########!!!
//...
//welcome to bit!!!
//需要每次从【welcome to bit!!!】两端取出一个字符
#include<string.h>
//#include<windows.h>
int main()
{
char arr1[]="welcome to bit!!!";
char arr2[]="#################";
int left=0;
int right=strlen(arr1)-1;
while(left<=right)
{
arr2[left]=arr1[left];
arr2[right]=arr1[right];
printf("%s\n",arr2);
//sleep(1000); //可以实现动态效果
//system("cls");
left++;
right--;
}
return 0;
}
5、模拟用户登录
编写代码实现模拟用户登陆情景,并且只能登陆三次(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次均输入错误,则退出程序)。
#include<string.h>
int main()
{
int i=0;
char pasword[20]={0};
for(i=0;i<3;i++)
{
printf("请输入密码:");
scanf("%s\n",&password);
//if(password=="123456") //错误写法,两个字符串的比较应该用strcmp()函数
if(strcmp(password,"123456")==0)
{
printf("输入正确,欢迎登陆!\n");
break;
}
else
printf("输入错误!")
}
if(i==3)
{
printf("你的输入错误次数已经超过3次,请退出程序!");
}
return 0;
}
6、猜数字游戏
游戏会自动产生一个1~100之间的随机数,我们需要猜数字。如果猜对了,就会恭喜你,游戏结束;如果猜错了,会告诉你猜大了还是猜小了,继续猜测,直到猜对。游戏可以一直玩,除非退出游戏。
void menu()
{
printf("**********************\n");
printf("***** 1.play *****\n");
printf("***** 0.exit *****\n");
printf("**********************\n");
}
//猜数字游戏的实现
void game()
{
//生成随机数
int ret=rand()%100+1;
//printf("%d\n",ret);
//猜数字
int guess;
while(1)
{
printf("请猜数字:");
scanf("%d",&guess);
if(ret>guess)
{
printf("猜小了\n");
}
else if(guess>ret)
{
printf("猜大了\n");
}
else
{
printf("恭喜你猜对了!\n");
break;
}
}
}
int main()
{
int input=0;
srand((unsigned int)time(NULL));
do
{
menu(); //打印菜单
printf("请选择:");
scanf("%d",&input);
switch(input)
{
case 0:
printf("退出游戏!\n");
break;
case 1:
game();
break;
default:
printf("选择错误,请选择0或1!\n");
break;
}
}while(input);
return 0;
}