当前位置: 首页 > news >正文

C语言的一些小知识(四)

一、认识scanf()输入

当你运行下面这段程序后输入55566 7777abc,i,j,name会返回什么结果呢?

int i;
float j;
char name[20];
scanf("%2d%f%s",&i,&j,name);

在C语言中,`scanf`函数用于从标准输入(通常是键盘)读取格式化的输入。`scanf`函数的格式字符串决定了如何解析输入。

这里的`scanf`格式字符串是`"%2d%f%s"`,它的含义如下:

- `%2d`:读取一个最多两位的整数。如果输入的数字超过两位,它只会读取前两位。
- `%f`:读取一个浮点数。
- `%s`:读取一个字符串,直到遇到空白字符(如空格、制表符或换行符)。

当你运行这段程序并输入`55566 7777abc`时,`scanf`会按照上述规则解析输入:

1. `%2d`会读取前两个数字`55`,因此`i`的值将是`55`。
2. `%f`会读取接下来的浮点数`566`,因此`j`的值将是`566.0`(因为`scanf`读取浮点数时会忽略前面的整数部分,只读取小数点后的数字,如果没有小数点,则默认为`0.0`)。
3. `%s`会读取剩余的字符串`7777abc`,直到遇到下一个空白字符。由于输入中没有更多的空白字符,`name`将包含整个字符串`"7777abc"`。

因此,程序运行后,`i`的值将是`55`,`j`的值将是`66.0`,`name`将包含字符串`"7777abc"`。

下面再举一个例子:

#include <stdio.h>int main() {
int i,a=123;
scanf("%2d",&i);
printf("i=%2d\n",i);
printf("a=%2d\n",a);return 0;
}
123123
i=12
a=123
请按任意键继续. . .

二、fun( ( expl,exp2 ), ( exp1,exp2,exp3));含有的实参个数

在C语言中,函数调用时,实参的个数是由逗号分隔的表达式的数量决定的。在给定的函数调用语句中:

fun( ( expl,exp2 ), ( exp1,exp2,exp3));

首先,我们来看括号内的表达式:

1. `(exp1,exp2)`:这是一个逗号表达式,它将执行两个表达式 `exp1` 和 `exp2`,但结果会是 `exp2` 的值。因此,这个表达式作为一个整体,只算作一个实参。
2. `(exp1,exp2,exp3)`:同样,这也是一个逗号表达式,它将执行三个表达式 `exp1`、`exp2` 和 `exp3`,但结果会是 `exp3` 的值。因此,这个表达式作为一个整体,也只算作一个实参。

所以,尽管在每个逗号表达式中有多个子表达式,但整个逗号表达式只算作一个实参。因此,这个函数调用语句中总共有两个实参。

三、你知道typedef int T[10];的含义吗?

下面我给你一段程序,你能写出与上述定义完全等价的说明语句吗?

typedef int T[10];
T a[20];

以下是对这段代码的分析:

1.typedef int T[10];`这行代码定义了一个新的类型别名`T`,`T`代表一个包含 10 个`int`类型元素的数组类型。

2. T a[20];这里声明了一个名为`a`的变量,它是一个包含 20 个元素的数组,而每个元素的类型是`T`,即包含 10 个`int`类型元素的数组。 所以,最终`a`是一个二维数组,有 20 行,每行有 10 个`int`类型的元素。例如,可以通过`a[i][j]`的方式访问其中的元素,其中`0 <= i < 20`,`0 <= j < 10`。

现在你会了吗?下面公布答案:

int a[20][10];

四、你了解结构体类型吗?

ST是结构体变量吗?struct ST 是结构体变量吗?NEW是啥?这三者有啥区别?

typedef struct ST{long a;int b;char c[2];
} NEW;

ST” 是一个结构体标签名,当使用 “struct ST” 这种形式时,可以声明该结构体类型的变量。例如 “struct ST myStruct;”。

NEW” 是通过 “typedef” 关键字为结构体 “struct ST{ long a; int b; char c[2]; }” 定义的一个别名。使用 “NEW” 可以更简洁地声明该结构体类型的变量,比如 “NEW myStruct;”。

五、自增/减运算符必须用于整形变量?

下面是将整型、浮点型和字符型变量的自增/减运算合并在一个C语言程序中的示例:

#include <stdio.h>int main() {int a = 5; // 定义一个整型变量afloat b = 5.5; // 定义一个浮点型变量bchar c = 'A'; // 定义一个字符型变量c// 打印原始值printf("原始值: a = %d, b = %f, c = %c (ASCII: %d)\n", a, b, c, c);// 使用前置自增运算符++a;++b;++c;printf("前置自增: a = %d, b = %f, c = %c (ASCII: %d)\n", a, b, c, c);// 使用后置自增运算符a++;b++;c++;printf("后置自增: a = %d, b = %f, c = %c (ASCII: %d)\n", a, b, c, c);// 使用前置自减运算符--a;--b;--c;printf("前置自减: a = %d, b = %f, c = %c (ASCII: %d)\n", a, b, c, c);// 使用后置自减运算符a--;b--;c--;printf("后置自减: a = %d, b = %f, c = %c (ASCII: %d)\n", a, b, c, c);return 0;
}

程序输出示例:

原始值: a = 5, b = 5.500000, c = A (ASCII: 65)
前置自增: a = 6, b = 6.500000, c = B (ASCII: 66)
后置自增: a = 7, b = 7.500000, c = C (ASCII: 67)
前置自减: a = 6, b = 6.500000, c = B (ASCII: 66)
后置自减: a = 5, b = 5.500000, c = A (ASCII: 65)

这个程序首先定义了三个变量:一个整型变量a,一个浮点型变量b,和一个字符型变量c。然后,它使用自增和自减运算符来修改这些变量的值,并在每次操作后打印出变量的当前值和类型。这样的程序可以帮助理解不同数据类型在使用自增/减运算符时的行为。


http://www.mrgr.cn/news/32956.html

相关文章:

  • Keithley吉时利2612B数字源表
  • Leetcode:118. 杨辉三角——Java数学法求解
  • 使用windows批处理,解决多个svn库提交和更新的需求
  • Ubuntu配置阿里云docker apt源
  • 探索Python的HTTP利器:Requests库的神秘面纱
  • 网络安全web基础_HTML基础(扫盲篇)
  • 跨游戏引擎的H5渲染解决方案(腾讯)
  • 美学心得(第二百六十七集) 罗国正
  • 数据结构之顺序表
  • 【数学二】无穷小量定义、性质、比较
  • Java异常架构与异常关键字
  • MySQL基础基础篇 - SQL
  • python有main函数吗
  • C++ 单例模式
  • 如何有效检测住宅IP真伪?
  • 互斥锁和自旋锁
  • 【优选算法之双指针】No.2--- 经典双指针算法(下)
  • 简单多状态dp第二弹 leetcode -删除并获得点数 -粉刷房子
  • 【Linux课程学习】make/Makefile:Linux项目自动化构建工具
  • 【Godot4.3】胶囊形的偏移获取法
  • java实现LRU 缓存
  • [python]从零开始的PySide安装配置教程
  • 操作系统篇
  • Vue.js与Flask后端配合
  • linux网络编程5
  • Dell R720 使用 ESXI 系统直通 p40 等显存大于16g 的显卡使用 EFI 引导无法打开虚拟机。