首页 > 系统相关 >Linux C系列学习笔记_第四集

Linux C系列学习笔记_第四集

时间:2024-07-05 08:57:23浏览次数:3  
标签:case 30 int 31 Linux break 系列学习 printf 第四集

局部变量和全局变量可以重名,作用域遵循就近原则

#include <stdio.h>
int a = 10;                     //全局变量a
void fun()
{
    printf("1.%d\n", a);
    int a = 1;
    //a = 1;
    printf("2.%d\n", a);            
}
int main()
{
    int a = 8;                   //局部变量
    //a = 8;   			           //改全局变量的值
    fun();
    printf("3.%d\n", a);
    return 0;
}

输入输出

1.1按字符输入输出

getchar

函数:

int getchar(void);

功能:向终端输入一个字符

参数:无

返回值:终端输入的字符的ASCII码值

int res=getchar();
printf("%d\n",res);

putchar

函数:

int putchar(int c);

功能:终端输出一个字符

参数:字符的ASCII码值

返回值:字符的ASCII码值

putchar没有换行的效果,需要额外添加

  int res=getchar();
    putchar(res);
    int num=putchar('\n');//putchar(10);
    // printf("%d\n",num);

1.2按格式输入输出

printf

#include <stdio.h>

int printf(const char *format, ...);

功能:按指定的格式向终端输出

参数:多个

返回值:正确输出字符个数

格式:

%d                 int

%c                char

%f                 float

%lf                 double

%s                 字符串

%p                 指针

%o                 八进制 %#o

%x                十六进制 %#x

printf("hello\n");
int a=0x123;
printf("%#x\n",a);
int b=456;
printf("a:%d b:%d\n",a,b);

scanf

#include <stdio.h>

int scanf(const char *format, ...);

功能:按指定的格式向终端输入 (输入完毕时以回车结束)

参数:多个

返回值:正确输入的字符个数

第一个字符输入格式错误,直接返回0

scanf格式必须和终端输入格式一一对应,不能加'\n'

变量名前边加&(取地址符),表示取变量的地址

int a=0;
scanf("%d",&a);
printf("a:%d\n",a);
=====================
int a=0,b=0;
scanf("%d %d",&a,&b);
printf("a:%d b:%d\n",a,b);

垃圾字符回收

2.1 通过空格回收

可以回收一个或多个空格 tab 回车

2.2 %*c 抑制符

char c=0,d=0;
scanf("%c%*c%c",&c,&d);
printf("c:%c d:%c\n",c,d);

2.3 getchar

scanf输入结束时,会在终端输入'\n';

解决'\n'对程序造成的影响:

示例程序

#include <stdio.h>
int main()
{
	// int res = getchar();//取第一个字母
	// putchar(res);
	// putchar('\n');
	// printf("ascii=%d\n", res);
	// int num = putchar('\n');//( \n = 10 )putchar(10);
	// printf("%d\n",num);
	char a, b;
	printf("输入两个字母\n");
	scanf("%c %c", &a, &b);
	//scanf("%d%*c%d", &a, &b);
	//scanf("%c", &a);
	//scanf("%c", &b);
	getchar();
	printf("a:%c b:%c\n", a, b);
	printf("输入两个字母\n");
	scanf("%c %c", &a, &b);
	getchar();
	printf("a:%c b:%c\n", a, b);
	return 0;
}

if循环

基本结构:

if(常量值或表达式)
{
	//代码块;
}
=====================
int age=10;
    if(age>18)
    {
        printf("work\n");
    }
========================
if(常量值或表达式)
{
	//代码块1;
}
else
{
	//代码块2;
}
===========================
int age=10;
    if(age>18)
    {
        printf("work\n");
    }
    else
    {
        printf("study\n");
    }

多层分支

if(表达式1)
{
	代码段1;
}
else if(表达式2)
{
}
else
{
}

例题:

终端输入一个年份,判断平年或闰年:

#include <stdio.h>
int main()
{
	int year = -1;
	while (1)
	{
		printf("输入年份,-1退出\n");

		scanf("%d", &year);
		getchar();

		if (year < 0)
			break;
		else if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
		{
			printf("%d 是闰年\n", year);
		}
		else
		{
			printf("%d 不是闰年\n", year);
		}
	}
}

终端输入大写,输出小写;输入小写,输出大写

输入其他报错

#include <stdio.h>
int main()
{
	char c;
	while (1)
	{
		printf("输入一个字母判断其大小写\n");
		scanf("%c", &c);
		getchar();
		printf("%c ", c);
		if (c >= 'A' && c <= 'Z')
		{
			printf("是大写字母\n%c\n", c + 32);
		}
		else if (c >= 'a' && c <= 'z')
		{
			printf("是小写字母\n%c\n", c - 32);
		}
		else
		{
			printf("输入错误\n");
			break;
		}
	}
	return 0;
}

注意:

  1. if后边可以没有else, else前边必须有if
  2. 分支语句代码块只有一句时,可以省略{ }

switch

switch(常量值或表达式)

{

case 常量值1:

代码块1;

break;

case 常量值2:

代码块2;

break;

default:

代码块n;

break;

}

例题:

输入成绩输出等级

100-90: A

89-80: B

79-70: C

<70: 补考

#include <stdio.h>
int main()
{
	int grade = -1;
	while (1)
	{
		printf("输入成绩\n");
		scanf("%d", &grade);
		getchar();
		if (grade < 0 || grade > 100)
			break;
		switch (grade / 10)
		{
		case (10):
		case (9):
			printf("A");
			break;
		case (8):
			printf("B");
			break;
		case (7):
			printf("C");
			break;
		default:
			printf("你无敌了");
			break;
		}
		printf("\n");
	}
	return 0;
}

注意:

  1. case后边的常量值是整型或字符型,不能是浮点型或字符串
  2. case分支遇到break结束; 后边可以没有break,会从符合条件的分支开始一直运行到整个switch语句执行完才结束

练习题:

终端输入一个日期,判断是这一年的第几天

闰年2月29天,平年2月28天

使用case无脑方法:

#include <stdio.h>
int main()
{
	int year, month, day;
	int runnian;
	printf("输入年 月 日\n");
	scanf("%d %d %d", &year, &month, &day);
	getchar();
	if (month > 12 || day > 31)
	{
		printf("输入错误\n");
		return 0;
	}
	if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
		runnian = 1;
	else
		runnian = 0;

	switch (month)
	{
	case (1):
		printf("是一年的第 %d 天\n", day);
		break;
	case (2):
		printf("是一年的第 %d 天\n", day + 31);
		break;
	case (3):
		printf("是一年的第 %d 天\n", day + 31 + 28 + runnian);
		break;
	case (4):
		printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31);
		break;
	case (5):
		printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31 + 30);
		break;
	case (6):
		printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31 + 30 + 31);
		break;
	case (7):
		printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31 + 30 + 31 + 30);
		break;
	case (8):
		printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31 + 30 + 31 + 30 + 31);
		break;
	case (9):
		printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31 + 30 + 31 + 30 + 31 + 31);
		break;
	case (10):
		printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31 + 30 + 31 + 30 + 31 + 31 + 30);
		break;
	case (11):
		printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31);
		break;
	case (12):
		printf("是一年的第 %d 天\n", day + 31 + 28 + runnian + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30);
		break;
	default:
		printf("输入错误");
		break;
	}

	return 0;
}

标签:case,30,int,31,Linux,break,系列学习,printf,第四集
From: https://blog.csdn.net/sjrhsk_hahaha/article/details/140187855

相关文章

  • 常见Linux命令
    1、查看目录:ls常用用法:ls-l:以列表的形式展示;简写ll效果展示:2、终端清屏:clear常用用法:ctr+L:清空屏幕当前的内容,不会重置终端效果展示:使用前使用后3、切换目录:cd常用用法:cd/:切换到根目录cd/xx(目录名):切换到根目录下的xx目录cd..:切换到上一级目录c......
  • Linux常用命令快速回顾
    目录帮助命令软件安装工作目录查看、切换pwd(printworkdirectory)打印当前工作目录cd(changediretory)tree[目录名]——以树状图列出文件目录结构文件/目录创建、删除、查找、查看mkdir创建目录touch 创建文件rm删除文件find[路径]-name'*.py'查找文件......
  • 【Linux】多线程(互斥 && 同步)
    我们在上一节多线程提到没有任何保护措施的抢票是会造成数据不一致的问题的。那我们怎么办?答案就是进行加锁。目录加锁:认识锁和接口:初始化:加锁&&解锁:全局的方式:局部的方式:原理角度理解:实现角度理解:同步:加锁:认识锁和接口:初始化:这个就是我们互斥锁的类型。......
  • 同步、异步、阻塞、非阻塞、Linux五种 I/O 模型,一篇文章搞定
    ● 什么是同步、什么是异步?什么是阻塞、什么非阻塞?我自己的理解,大白话啊,同步和异步指的是函数调用完成任务的程度。一个任务的完成,包括发起、执行和结果返回三个阶段。 同步(synchronize)调用涵盖了这三个阶段。调用结束之后,任务肯定是有结果的,无论成败。 ......
  • linux找回root密码
      linux找回root密码如果您忘记了Linux系统的root密码,并且没有其他方法可以访问系统,您可以按照以下步骤重置root密码:重启您的Linux系统。在启动时,当GRUB菜单出现时,选择要启动的内核版本,然后按下 e 键来编辑启动选项。 找到以 linux 开头的行,通常......
  • Linux磁盘管理
    磁盘管理【1】、Linux常用的分区格式在新增磁盘后要对其进行分区,分区后才可以去存储数据MBR分区格式:比较古老的分区格式,只能划分4个主分区,如果四个分区划分完成后,硬盘空间还有剩余,那剩余的分区也不能够使用。后来新增加扩展分区(容器)功能,可在扩展分区内划分出更多的逻辑分区......
  • Java SSH 客户端 如何删除 linux 机器上的 文件
    在Java中,可以使用SSH客户端库如JSch(JavaSecureChannel)来连接到远程Linux机器并执行命令,包括删除文件。下面是一个使用JSch库的示例,展示如何通过SSH删除远程Linux机器上的文件。步骤:添加JSch库:确保您的项目包含JSch库。如果您使用的是Maven,可以在pom.xml......
  • 欧拉 EulerOS是华为基于CentOS源代码,面向企业应用环境开发的一个商用Linux发行版。
    欧拉EulerOS是华为基于CentOS源代码,面向企业应用环境开发的一个商用Linux发行版。EulerOSEulerOS是华为基于CentOS源代码,面向企业应用环境开发的一个商用Linux发行版。EulerOS开发者华为技术有限公司作業系統家族Unix ,Linux,CentOS運作狀態活跃源码模式开源软件当前版本2.......
  • Linux网络服务面试题
    1、查看一个网络接口的方法有哪些?  ①查看目录/etc/sysconfig/network-scripts/下的网卡对应的配置文件ifcfg-ens33  ②ifconfigens332、如何给一个网络接口设置多个IP地址?  临时配置:ifconfigens33:1IP地址netmask掩码 up  永久配置:在网卡配置文件目录......
  • linux设置环境变量
    linux设置环境变量直接使用目录设置环境变量编辑环境变量文件vim/etc/profile在最下一行添加如下文件:exportPATH=$PATH:/usr/local/consul设置配置立即生效,否则需要重启后生效source/etc/profile使用类似于JAVA_HOME编辑编辑环境变量文件vim/etc/profile......