C语言控制语句与案例

控制语句与案例

1. 选择结构

1.1 if 语句

if 语句用于根据条件执行不同的代码块。最基本的语法形式如下:

// 单分支
if (条件) {
    // 条件为真时执行的代码
}

// 双分支
if (条件) {
    // 条件为真时执行的代码
} else {
    // 条件为假时执行的代码
}

// 多分支
if (条件1) {
    // 条件1为真时执行的代码
} else if (条件2) {
    // 条件2为真时执行的代码
} else {
    // 所有条件为假时执行的代码
}

1.2 switch 语句

switch 语句用于多分支选择,适合针对某个变量的不同值进行判断:

switch (表达式) {
    case 常量1:
        语句1;
        break;
    case 常量2:
        语句2;
        break;
    default:
        默认语句;
}

2. 循环结构

2.1 while 循环

当条件为真时重复执行代码块:

while (条件) {
    // 循环体
}

2.2 do-while 循环

至少执行一次循环体,然后再判断条件:

do {
    // 循环体
} while (条件);

2.3 for 循环

适用于明确循环次数的场合:

for (初始化; 条件; 更新) {
    // 循环体
}

3. 跳转语句

3.1 break

用于跳出当前循环或 switch 语句:

while (1) {
    if (条件)
        break;    // 满足条件时跳出循环
}

3.2 continue

跳过当前循环的剩余语句,直接进入下一次循环:

for (int i = 0; i < 10; i++) {
    if (i == 5)
        continue;    // 跳过 i=5 时的循环体
    printf("%d ", i);
}

3.3 goto

实现程序的无条件跳转:

goto 标号;
...
标号: 语句;

4. 注意事项

  1. if 语句的条件表达式结果为 0 时判定为假,非 0 时判定为真
  2. switch 语句中必须使用 break 避免执行后续 case
  3. 循环体内要有改变循环条件的语句,防止死循环
  4. 应谨慎使用 goto 语句,它可能导致程序结构混乱

5. 案例

image-20241207213027599

5.1 猜拳游戏

编写一个猜拳游戏程序,要求如下:

  1. 玩家可以输入 0(石头)、1(剪刀)、2(布) 来进行选择
  2. 电脑随机生成 0-2 的数字作为选择
  3. 显示双方的选择内容
  4. 判断胜负并输出结果
  5. 按回车键继续新一轮游戏
  6. 输入无效数字时结束游戏

image-20241207213052306

5.2 空心矩形

编写一个程序,根据用户输入打印空心矩形:

  1. 提示用户输入两个整数 m 和 n,分别表示行数和列数
  2. 打印一个 m×n 的空心矩形
  3. 矩形边框用 * 表示,内部用空格表示

image-20241207213143283

5.3 九九乘法表

编写一个程序,打印九九乘法表:

  1. 按照标准格式打印九九乘法表
  2. 每个算式使用格式:j x i = 结果
  3. 算式之间用 | 分隔
  4. 每行显示到对角线位置

image-20241207213201581

5.4 倒序九九乘法表

编写一个程序,倒序打印九九乘法表:

  1. 从9开始倒序打印九九乘法表
  2. 每个算式使用格式:i x j = 结果
  3. 算式之间用 | 分隔
  4. 每行显示到对角线位置

image-20241207213218777

5.5 五子棋棋盘

编写一个程序,打印五子棋棋盘:

  1. 棋盘大小为15×15
  2. 显示行号(1-15)和列号(1-15)
  3. 行号占2位,右对齐
  4. 列号占4位,左对齐
  5. 使用 + 和 - 表示棋盘交叉线
  6. 使用 | 表示棋盘竖线

image-20241207213242455

5.6 案例源码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 15

void guessWinner();
void printRectangle();
void printMultiplicationTable();
void printReverseMultiplicationTable();
void printBoard();

int main(int argc, char *argv[]) 
{	
	int choice;
	srand(time(NULL));	

while(1)
{
	printf("请选择功能:\n");
    printf("1 - 猜拳游戏\n");
    printf("2 - 打印空心矩形\n");
    printf("3 - 打印九九乘法表\n");
    printf("4 - 倒序打印九九乘法表\n");
    printf("5 - 按行倒序打印九九乘法表\n");
    printf("0 - 退出\n");
    printf("请输入你的选择: ");
    scanf("%d", &choice);
    
	if(choice == 0)
    {
    	printf("感谢您的使用,再见!");
    	break;
	}
    switch(choice)
	{
		case 1:
			guessWinner();
			break;
		case 2:
			printRectangle();
			break;
		case 3:
			printMultiplicationTable();
			break;
		case 4:
			printReverseMultiplicationTable();
			break;
		case 5:
			printBoard();
			break;
		default :
			printf("输入无效!请重新输入!\n");
	}
}    
	return 0;
}

void guessWinner()
{
	int player;
	int computer;
	while(1)
	{
		
		printf("游戏:猜拳\n");
    	printf("0 - 石头\n1 - 剪刀\n2 - 布\n");
    
		printf("请输入你的选择: \n");
   		scanf("%d", &player);

	    if (player < 0 || player > 2) 
		{
       		 printf("无效的选择!\n");
       		 return;
    	} 
	
    	computer = rand() % 3;
    
   		printf("你选了: \n");
   		if(player == 0) printf("石头\n");
        if(player == 1) printf("剪刀\n");
        if(player == 2) printf("布\n");
   		
    	printf("计算机选了: \n");
    	if(computer == 0) printf("石头\n");
        if(computer == 1) printf("剪刀\n");
        if(computer == 2) printf("布\n");
    
		if(player == computer)
		{
			printf("平局!\n");
		}
		else if((player == 0 && computer == 1) || (player == 1 && computer == 2) || (player == 2 && computer == 0))
		{
			printf("恭喜!你赢了!\n");
		}
		else
		{
			printf("对不起!你输了!\n");
		}
		printf("\n按 Enter 键继续...");
		getchar(); 
		getchar();
		
		system("cls");
	}	
	
}

void printRectangle()
{
	int m,n;
	int i,j;
	
	printf("请输入两个整数:\n");
	scanf("%d%d",&m,&n);
	
	for(i = 0; i < m; i++)
	{
		for(j = 0; j < n; j++)
		{
			if(i == 0 || i == m - 1 || j == 0 || j == n -1)
			{
				printf("*");
			}else
			{
				printf(" ");
			}
		}
		 printf("\n");
	}
}

void printMultiplicationTable()
{
	int i;
	int j;
	for(i = 1; i < 10; i++)
	{
		for(j = 1; j <= i; j++)
		{
			printf("%d x %d = %-2d  |",j,i, i * j);
		}
		printf("\n");
	}
	printf("\n\n");
}

void printReverseMultiplicationTable()
{
	int i;
	int j;
	for(i = 9; i >0; i--)
	{
		for(j = i;j >= 1; j--)
		{
			printf("%d x %d = %-2d  |",i ,j, i * j);
		}
		printf("\n");
	}
}

void printBoard() {
    int i, j;
    
    // 打印列号
    printf("   "); // 为行号预留空间
    for(i = 1; i <= SIZE; i++) {
        printf("%-4d", i);  // 固定使用4个字符的宽度,左对齐
    }
    printf("\n");
    
    // 打印行号和棋盘内容
    for(i = 1; i <=SIZE; i++) {
        printf("%-2d ", i);
        for(j = 1; j < SIZE; j++) {
            printf("+---");
        }
        printf("+\n");
        
        if(i < SIZE) {
            printf("   ");
            for(j = 1; j < SIZE; j++) {
                printf("|   ");
            }
            printf("|\n");
        }
    }
}
  // 打印行号和棋盘内容
    for(i = 1; i <=SIZE; i++) {
        printf("%-2d ", i);
        for(j = 1; j < SIZE; j++) {
            printf("+---");
        }
        printf("+\n");
        
        if(i < SIZE) {
            printf("   ");
            for(j = 1; j < SIZE; j++) {
                printf("|   ");
            }
            printf("|\n");
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/932176.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【分子材料发现】——GAP:催化过程中吸附构型的多模态语言和图学习(数据集处理详解)(二)

Multimodal Language and Graph Learning of Adsorption Configuration in Catalysis https://arxiv.org/abs/2401.07408Paper Data: https://doi.org/10.6084/m9.figshare.27208356.v2 1 Dataset CatBERTa训练的文本字符串输入来源于Open Catalyst 2020 &#xff08;OC20…

SpringBoot自动配置底层核心源码

SpringBoot底层核心源码 一、工程创建二、进一步改造三、自动配置 探究SpringBoot的自动配置原理&#xff0c;我们可以自己写一个启动类的注解。 一、工程创建 首先创建一个工程&#xff0c;工程目录如下&#xff1a; 自定义一个启动函数&#xff1a; package org.springboo…

【Springboot3+vue3】从零到一搭建Springboot3+vue3前后端分离项目之后端环境搭建

【Springboot3vue3】从零到一搭建Springboot3vue3前后端分离项目&#xff0c;整合knef4j和mybaits实现基础用户信息管理 后端环境搭建1.1 环境准备1.2 数据库表准备1.3 SpringBoot3项目创建1.4 MySql环境整合&#xff0c;使用druid连接池1.5 整合mybatis-plus1.5.1 引入mybatie…

【书生大模型实战营】Linux 基础知识-L0G1000

前言&#xff1a;书生大模型实战营是上海人工智能实验室开展的大模型系列实践活动&#xff0c;提供免费算力平台&#xff0c;学员通过闯关式任务&#xff0c;可获得免费算力和存储&#xff0c;助力项目实践。本期是第4期&#xff0c;时间从十一月份开始&#xff0c;持续到十二月…

JS进阶DAY3|事件(二)事件流

目录 一、事件流说明 1.1 事件流概念 1.2 事件捕获阶段 1.3 事件冒泡阶段 二、事件传播的两个阶段说明 2.1 事件捕获 2.2 事件冒泡 3.3 示例代码 三、阻止冒泡 四、事件解绑 4.1 removeEventListener方法 4.2 使用 DOM0 级事件属性 4.3 使用一次性事件监听器 一、…

【AI工具】强大的AI编辑器Cursor详细使用教程

目录 一、下载安装与注册 二、内置模型与配置 三、常用快捷键 四、项目开发与问答 五、注意事项与技巧 参考资料 近日&#xff0c;由四名麻省理工学院&#xff08;MIT&#xff09;本科生共同创立的Anysphere公司宣布&#xff0c;其开发的AI代码编辑器Cursor在成立短短两年…

【AWR软件】AWR 软件添加电磁结构

文章目录 前言步骤 前言 微波虚拟 实验 步骤 project -> add em struture -> new em structure 输入名称&#xff0c;create. 添加端口&#xff1a;add edge port

uni-app登录界面样式

非常简洁的登录、注册界面模板&#xff0c;使用uni-app编写&#xff0c;直接复制粘贴即可&#xff0c;无任何引用&#xff0c;全部公开。 废话不多说&#xff0c;代码如下&#xff1a; login.vue文件 <template><view class"screen"><view class"…

普通算法——一维前缀和

一维前缀和 题目链接&#xff1a;https://www.acwing.com/problem/content/797/ 题目描述&#xff1a; 输入一个长度为 n 的整数序列。接下来再输入 m 个询问&#xff0c;每个询问输入一对 l,r。对于每个询问&#xff0c;输出原序列中从第 l 个数到第 r 个数的和。 **什么是…

小程序项目的基本组成结构

分类介绍 项目根目录下的文件及文件夹 pages文件夹 用来存放所有小程序的页面&#xff0c;其中每个页面都由4个基本文件组成&#xff0c;它们分别是&#xff1a; .js文件&#xff1a;页面的脚本文件&#xff0c;用于存放页面的数据、事件处理函数等 .json文件&#xff1a;…

【Go 基础】并发相关

并发相关 CAS CAS算法&#xff08;Compare And Swap&#xff09;&#xff0c;是原⼦操作的⼀种,&#xff0c;CAS 算法是⼀种有名的⽆锁算法。⽆锁编程&#xff0c;即不使⽤锁的情况下实现多线程之间的变量同步。可⽤于在多线程编程中实现不被打断的数据交换操作&#xff0c;从…

【H2O2|全栈】Node.js与MySQL连接

目录 前言 开篇语 准备工作 初始配置 创建连接池 操作数据库 封装方法 结束语 前言 开篇语 本节讲解如何使用Node.js实现与MySQL数据库的连接&#xff0c;并将该过程进行函数封装。 与基础部分的语法相比&#xff0c;ES6的语法进行了一些更加严谨的约束和优化&#…

基于人工智能的新中高考综合解决方案

1. 引言 近年来&#xff0c;随着人工智能技术的飞速发展&#xff0c;教育领域也迎来了深刻的变革。针对新中高考改革的需求&#xff0c;本解决方案集成了科大讯飞在人工智能领域的核心技术&#xff0c;旨在通过智能化手段提升教育教学效率与质量&#xff0c;助力学生全面发展。…

【Linux基础】yum 与 vim 的操作

目录 Linux 应用商店——yum yum和yum源是什么 关于镜像的简单理解 yum 的基本操作 yum的安装 yum install 命令 yum查看软件包 yum list 命令 yum的卸载 yum remove 命令 关于 rzsz 软件 安装 rzsz 软件&#xff1a; rz 命令 sz 命令 yum 源拓展 Linux 编辑器…

Elasticsearch数据迁移(快照)

1. 数据条件 一台原始es服务器&#xff08;192.168.xx.xx&#xff09;&#xff0c;数据迁移后的目标服务器&#xff08;10.2.xx.xx&#xff09;。 2台服务器所处环境&#xff1a; centos7操作系统&#xff0c; elasticsearch-7.3.0。 2. 为原始es服务器数据创建快照 修改elas…

【MySQL】数据类型的注意点和应用

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

首次打开韦东山提供的Ubuntu-18.04镜像后,该做哪些事?

目录 01-测试有无网络02-配置最基本的嵌入式开发环境(安装tftp-nfs等)03-缩短关机强制结束进行时间04-关闭软件的自动更新05-未完待续... 01-测试有无网络 ping www.baidu.com 02-配置最基本的嵌入式开发环境(安装tftp-nfs等) 需要安装 tftp&#xff0c;nfs&#xff0c;vim …

2030. gitLab A仓同步到B仓

文章目录 1 A 仓库备份 到 B 仓库2 B 仓库修改main分支的权限 1 A 仓库备份 到 B 仓库 #!/bin/bash# 定义变量 REPO_DIR"/home/xhome/opt/git_sync/zz_xx_xx" # 替换为你的本地库A的实际路径 REMOTE_ORIGIN"http://192.168.1.66:8181/zzkj_software/zz_xx_xx.…

Python与C++混合编程的优化策略与实践

在现代软件开发中&#xff0c;混合编程已成为一种普遍的开发模式。这种模式能够充分发挥不同编程语言的优势&#xff0c;实现性能与开发效率的最佳平衡。本文将深入探讨Python和C混合编程的策略与实践经验。 混合编程就像建造一座现代化的大厦&#xff0c;C就像大厦的钢筋混凝…

【kettle】mysql数据抽取至kafka/消费kafka数据存入mysql

目录 一、mysql数据抽取至kafka1、表输入2、json output3、kafka producer4、启动转换&#xff0c;查看是否可以消费 二、消费kafka数据存入mysql1、Kafka consumer2、Get records from stream3、字段选择4、JSON input5、表输出 一、mysql数据抽取至kafka 1、表输入 点击新建…