分值和循环语句,if,for,while,do while。。。。。goto语句

分支语句

  1. if语句
  2. switch语句

循环语句

  1. while语句
  2. for语句
  3. do while语句

goto语句

1.if语句

语法结构: if(表达式)
    语句;
    
     if(表达式)
    语句1;
     else
    语句2;
    
     //多分支     if(表达式1)
    语句1; else if(表达式2)
    语句2; else
    语句3;

举例:

//分支语句,选择语句
int main() {
	int age = 20;
		if (age >= 18)
			printf("成年\n");

//if   else
	if (age >= 18)
		printf("成年\n");
	else
		printf("未成年\n");


//多分支
	if (age < 18)
		printf("未成年\n");
	else if (age >= 18 && age < 30)
		printf("青年\n");
	else if (age >= 30 && age < 55)
		printf("中年\n");
	else
		printf("老年\n");
	return 0;
}

悬空else

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0; }

这个运行结果是多少???
在这里插入图片描述
上面代码不打印,因为else是和距离它最近的if语句进行匹配;当a不满足条件直接return 0了;

适当的使用{}可以使代码的逻辑更加清楚。
代码风格很重要

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
   {
        if(b == 2)
       {
            printf("hehe\n");
       }
   }
    else
   {
         printf("haha\n");
   }       
    return 0; }

在这里插入图片描述

当加上{}时候,很容易看出代码输出的什么,因此代码风格很重要。

if书写形式对比

//代码1
if (condition) {
    return x; }
return y;
//代码2
if(condition) {
    return x; }
else
{
    return y; }
//代码3
int num = 1;
if(num == 5) {
    printf("hehe\n");
}
//代码4
int num = 1;
if(5 == num) {
    printf("hehe\n");
}

代码2和代码4更好,逻辑更加清晰,不容易出错。

判断奇数

  1. 判断一个数是否为奇数
int main() {
	int a = 0;
	scanf("%d", &a);
	if (a % 2 != 0) {
		printf("a是奇数\n");
	}
	else {
		printf("a不是奇数\n");
	}
	return 0;
}
  1. 输出1-100之间的奇数
 int main() {
	int i = 1;
	//方法1
	while (i <= 100) {
		if (i % 2 == 1)
			printf("%d ", i);
		i++;
	}

//方法2
	while (i <= 100) {
		printf("%d ", i);
		i += 2;
	}
	return 0;
}

2.switch语句

switch(整型表达式) {
语句项; }

语句项:

//是一些case语句:
//如下:
case 整形常量表达式:
语句;

输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日

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;

	default:
		printf("error");
		break;
	}
}

在这里插入图片描述

当输入1-7以外的其他数字则执行default语句,输出error
在这里插入图片描述

switch语句中的break

在switch语句中,我们没法直接实现分支,搭配break使用才能实现真正的分支。

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

	default:
		printf("error");
		
	}

}

当我们不加break时候,它不会实现真分支,比如我们输入3,它直接会进入case3打印,然后case3后面的case也都会打印;加上break后,它只会执行对应的case,执行完后break,就跳出
加上

练习

  1. 当输入1-5任意一个数输出weekday,输入6-7任意一个数输出weekenday,输入其他数提示“输入错误,请输入1-7之间的整数”
 int main() {
	int day = 0;
	scanf("%d", &day);
	switch (day)//表达式必须是整形表达式
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("weekday\n");
		break;
	case 6:
	case 7:
		printf("weekenday\n"); break;
	default:
		printf("输入错误,请输入1-7之间的整数\n");
		break;
	}

}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

3.while循环

语法结构

//while 语法结构
while(表达式)
 循环语句;

while循环打印1-10的数字

#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
 {
 printf("%d ", i);
 i = i+1;
 }
 return 0; }

while中的break和continue

下面代码输出什么,break应用

int main() {//只打印 1,2,3,4,不打印5
	int i = 1;
	while (i <= 10)
	{
		if (5 == i)
			break;//while中的break是终止循环的

		printf("%d ", i);
		i++;
	}
	return 0;
}

在这里插入图片描述

下面代码输出什么,continue应用

int main() {
	int i = 1;
	while (i <= 10)
	{
		if (5 == i)
			continue;//跳过本次循环continue后面的代码,直接去while循环判断部分

		printf("%d ", i);
		i++;
	}
	return 0;
}

在这里插入图片描述

总结

  1. while中的break用于永久终止循环的,程序直接执行完成退出
  2. while中的continue,跳过本次循环continue后面的代码,直接去while循环判断部分,程序在执行,还没结束

4.for循环

语法

for(表达式1;表达式2;表达式3)
循环语句;

表达式1
表达式1为初始化部分,用于初始化循环变量的。
表达式2
表达式2为条件判断部分,用于判断循环时候终止。
表达式3
表达式3为调整部分,用于循环条件的调整。

使用for循环 在屏幕上打印1-10的数字。

#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; }

现在我们对比一下for循环和while循环。

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");
}

可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹。
for循环使用的频率也最高。

break和continue在for循环中

break:

int main() {
	int i = 0;
	for (i = 1; i <= 10; i++) {
		if (5 == i)
			break;
			//continue;

		printf("%d ", i);
	}
	return 0;
 }

在这里插入图片描述

continue:

int main() {
	int i = 0;
	for (i = 1; i <= 10; i++) {
		if (5 == i)
			//break;
			continue;

		printf("%d ", i);
	}
	return 0;
 }

在这里插入图片描述
总结: for循环中break直接直接退出程序执行,continue是跳过次次循环continue后面的语句,进行下一次循环

一些for循环的变种

#include <stdio.h>
int main()
{
 //变种1
 for(;;)
 {
 printf("hehe\n");
 }

 //变种2
 int x, y;
    for (x = 0, y = 0; x<2 && y<5; ++x, y++)
   {
        printf("hehe\n");
   }
 return 0; }

变种一是死循环,注意:

  1. for初始化、判断、调整都可以省略
  2. 判断省略意味着判断条件恒为真
  3. 建议不要轻易省略

一道笔试题:

//请问循环要循环多少次?
#include <stdio.h>
int main()
{
 int i = 0;
 int k = 0;
 for(i =0,k=0; k=0; i++,k++)
        k++;
 return 0; }

在这里插入图片描述
循环一次都没执行。

5do…while()循环

循环至少执行一次

语法

do
循环语句;
while(表达式);

do while循环中的break和continue

break:

int main() {
	int i = 1;

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

在这里插入图片描述
continue:

int main() {
	int i = 1;

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

在这里插入图片描述
死循环

6 练习

  1. 计算 n的阶乘。
int main() {
	int i = 1;
	int a = 1;
	scanf("%d", &i);
	do {
		a = a * i;
		i--;
	} while (i > 0);
	printf("%d\n", a);
	return 0;
}

在这里插入图片描述
2. 计算 1!+2!+3!+……+10!

//方法一:
int main() {
	int n = 1;
	int i = 1;
	int j = 1;
	int sum = 0;
	scanf("%d", &n);
	for (i = 1;i<= n ; i++ ) {
		int ret = 1;
		for (j = 1; j <= i; j++) {
			ret = ret * j;
		}
		sum = sum + ret;
	}
	printf("%d\n", sum);
	return 0;
}
//方法二
int main() {
	int n = 1;
	int ret = 1;
	int sum = 0;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		ret = ret * i;
		sum = sum + ret;
	}
	printf("%d\n", sum);
	return 0;
}

在这里插入图片描述
3. 在一个有序数组中查找具体的某个数字n。

在有序数组中找数字7.

int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	//查找7
	int sz = sizeof(arr) / sizeof(int);
	int i = 0;
	int flag = 0;//表示未找到
	for (i = 0; i < sz; i++) {
		if (7 == arr[i]) {
			flag = 1;
			break;
		}
	}
	if (flag == 1)
		printf("找到了,下标是:%d\n", i);
	else
		printf("未找到\n");

	return 0;
}
//折半查找(二分查找)。数据必须有序
int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	//查找7
	int k = 7;
	int sz = sizeof(arr) / sizeof(int);
	int left = 0;
	int right = sz - 1;
	int mid = 0;
	int flag = 0;//未找到标志	


	while (left <= right) {
		//求中间元素下表
		mid = (left + right) / 2;
		if (arr[mid] < k) {
			left = mid + 1;
		}
		else if (arr[mid] > k) {
			right = mid - 1;
		}
		else {
			flag = 1;
			break;
		}
	}

	if (flag == 1) 
		printf("找到了,下标是:%d\n", mid);
	else 
		printf("未找到\n");
	
		return 0;

}

在这里插入图片描述

  1. 编写代码,演示多个字符从两端移动,向中间汇聚。
#include<string.h>
#include<Windows.h>
int main() {
	char arr1[] = "welcome to bit!!!!!";
	char arr2[] = "                    ";
	int left = 0;
	int right = strlen(arr2) - 1;

	printf("%s\n", arr2);
	while (left<right) {
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		Sleep(100);
		system("cls");//清空屏幕
		left++;
		right--;
		printf("%s\n", arr2);
	}

	return 0;
}
  1. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则
    提示登录成,如果三次均输入错误,则退出程序。
#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) {//2个字符串比较不能使用==,应该是strcmp()
			printf("登录成功\n");
			break;
		}
		else {
			printf("密码错误\n");
		}
	}
	if (i == 3)
		printf("三次密码输入错误,退出登录\n");
	
	return 0;
}
  1. 猜数字游戏实现
#include<stdlib.h>
#include<time.h>
void menu() {
	printf("******************\n");
	printf("****** 1.play ****\n");
	printf("****** 0.exit ****\n");
	printf("******************\n");
}

//123  十进制
//0x123  十六进制
//0123   八进制
//RAND_MAX

//时间
//时间戳
//c语言如何获得时间戳
//time()函数

//time_t
void game() {
	int guess = 0;
	//1.生成随机数
	int ret = rand() % 100+1;//0-99  +1 ---1-->100
	//printf("%d\n", ret);//生成的随机数不可见
	//2.猜数字

	while(1)
	{
		printf("请猜数字:>");
		scanf("%d", &guess);
		if (guess < ret) 
		{
			printf("猜小了\n");
		} 
		else if (guess > ret) 
		{
			printf("猜大了\n");
		}
		else 
		{
			printf("恭喜你猜对了\n");
			break;
		}
	}
	
}
	//1.shenggrg	
int main() {
	int input = 0;

	//设置随机数的生成起点,函数不应该频繁调用
	srand((unsigned)time(NULL));
	do {
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input) {
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择\n");

		}
	} while (input);
	return 0;
}

goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环。
这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。
下面是使用goto语句的一个例子:

//goto 语句

//关机程序
//只要程序运行起来,电脑就倒计时1分钟
//1分钟内只要输入“取消”,就取消关机

//shutdown -s -t 60  60s后关机
//shutdown -a  取消关机


#include<stdlib.h>
#include<string.h>
int main() 
{
	char input[20] = { 0 };
	//倒计时关机
	system("shutdown -s -t 500");

again:
	printf("500s后关机,输入取消,就取消关机\n");
	scanf("%s", input);

	//判断输入是否是“取消”
	if (strcmp(input, "取消") == 0)//两个字符串比较不能使用等号
	{
		system("shutdown -a");
	}
	else
	{
		goto again;
	}
	return 0;

}

while循环:

#include<stdlib.h>
#include<string.h>
int main()
{
	char input[20] = { 0 };
	//倒计时关机
	system("shutdown -s -t 500");

	while (1)
	{
		printf("500s后关机,输入取消,就取消关机\n");
		scanf("%s", input);

		//判断输入是否是“取消”
		if (strcmp(input, "取消") == 0)//两个字符串比较不能使用等号
		{
			system("shutdown -a");
			break;
		}
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值