找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2556|回复: 27
收起左侧

关于keil中C语言的();[];{}三种括号的使用

  [复制链接]
ID:668004 发表于 2021-11-10 10:17 | 显示全部楼层 |阅读模式
keil中C语言的();【】;{}三种括号的使用
  1. /*        名称:K1-K4 控制数码管加减演示
  2.         说明:按下K1后加1计数,按下K2后减1计数,按下K3后清零。
  3. */
  4. #include<reg51.h>
  5. #include<intrins.h>
  6. #define uchar unsigned char
  7. #define uint unsigned int
  8. //段码
  9. uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
  10. //待显示的3位缓冲
  11. uchar Num_Buffer[]={0,0,0};
  12. //按键代码,按键计数
  13. uchar Key_Code,Key_Counts=0;
  14. //延时
  15. void DelayMS(uint x)
  16. {
  17.         uchar i;
  18.         while(x--) for(i=0;i<120;i++);
  19. }        
  20. //显示函数
  21. void Show_Counts_ON_DSY()
  22. {
  23.         uchar i,j=0x01;
  24.         Num_Buffer[2]=Key_Counts/100;
  25.         Num_Buffer[1]=Key_Counts/10%10;
  26.         Num_Buffer[0]=Key_Counts%10;
  27.         for(i=0;i<3;i++)
  28.         {
  29.                 j=_cror_(j,1);
  30.                 P0=0xff;
  31.                 P0=DSY_CODE[Num_Buffer[i]];
  32.                 P2=j;
  33.                 DelayMS(1);
  34.         }
  35. }
  36. //主程序
  37. void main()
  38. {
  39.         uchar i;
  40.         P0=0xff;
  41.         P1=0xff;
  42.         P2=0x00;
  43.         Key_Code=0xff;
  44.         while(1)
  45.         {
  46.                 Show_Counts_ON_DSY();
  47.                 P1=0xff;
  48.                 Key_Code=P1;
  49.                 //有键按下时,数码管刷新显示30次,该行代码同时起到延时作用
  50.                 if(Key_Code!=0xff)
  51.                 for(i=0;i<30;i++) Show_Counts_ON_DSY();
  52.                 switch(Key_Code)
  53.                 {
  54.                         case 0xfe: if(Key_Counts<255) Key_Counts++;
  55.                                                 break;
  56.                         case 0xfd: if(Key_Counts>0) Key_Counts--;
  57.                                                 break;
  58.                         case 0xfb: Key_Counts=0;
  59.                 }
  60.                 Key_Code=0xff;
  61.         }
  62. }
复制代码

1.我想知道什么情况下要用空格、逗号?
2.什么情况下用小括号();中括号【】;还有大括号{}?

回复

使用道具 举报

ID:517951 发表于 2021-11-10 13:42 | 显示全部楼层
for() 等条件循环判断语句,用(), 循环体用:
{
}
在c语言中没有中括号【】
回复

使用道具 举报

ID:878061 发表于 2021-11-10 13:51 | 显示全部楼层
一两句话说不清楚,认真看书吧,学习没有捷径
回复

使用道具 举报

ID:892596 发表于 2021-11-10 14:14 | 显示全部楼层
怎么没有中括号,数组下标就是中括号。
回复

使用道具 举报

ID:624769 发表于 2021-11-10 14:19 | 显示全部楼层
简单讲一下,如果看不懂,你只能翻书了。

1, 空格,只是为了好看,没有实际意义,从头到尾没有空格也没有关系,但是,你给一个变量,或者函数,比如变量:abc   当中加一个空格,那么,就会出错。所以不知道加不加空格,可以选择不加。
2,逗号,一般用来分隔同类型的东西,比如两个变量之间,用逗号分隔,如: char  abc,def,hij;  就声明了3个变量。
3,[]  很多人称之为下标,我也不知道该叫啥,用来给数组定位的(声明数组时用来定义数组长度)比如: char abc[16]; 声明数组abc里面有16个内容,  abc[0] = 0x3f;  给abc数组的第0个 赋值 0x3f。
4,{}  用来包含一批代码, 比如 if 的分支, for 的循环, 以及 void 的函数,算是一种封闭的结构吧。
5,() 这一般是用来给函数传参的, 比如: delayms(100);  那么 就是把100这个值 一起 带去执行delayms 这个子函数,起到延时100毫秒的目的,传不同的参,就能得到不同的执行结果。

这样,你能大致了解一下,如果还是不懂,只能去看书了,有些东西,不通过积累没法明白,通过语言能传递的信息毕竟有限。
回复

使用道具 举报

ID:587810 发表于 2021-11-10 14:50 | 显示全部楼层
第二种没用过,第一种用于包含函数,或者运算优先级(),第三种用于包含功能{ }
回复

使用道具 举报

ID:592807 发表于 2021-11-10 15:22 | 显示全部楼层
rayin 发表于 2021-11-10 13:42
for() 等条件循环判断语句,用(), 循环体用:
{
}

他说的应该是数组[]用的中括号
回复

使用道具 举报

ID:824490 发表于 2021-11-10 21:48 | 显示全部楼层
1.我想知道什么情况下要用空格、逗号?
  空格不用说了吧?不同的单词之间都是要用到空格来分开,
逗号常用于并列关系,比如:u8 i,j,k; 等效于 u8 i; u8 j; u8 k;
2.什么情况下用小括号();中括号【】;还有大括号{}?
小括号()用于附带参数,比如:delay_ms(5);
中括号 []   用于数组,比如:u8 seg [10]
花括号{}   用于结构、函数、过程,比如:
void delay_ms(u8 count)
{  
//函数体
}
for(i=0;i<10;i++)
{
//循环体
}
以上只是冰山一角,无法一一说明。只要多看看、多想想,你就能明白。
回复

使用道具 举报

ID:668004 发表于 2021-11-11 17:54 | 显示全部楼层
Num_Buffer[2]=Key_Counts/100;         Num_Buffer[1]=Key_Counts/10%10;         Num_Buffer[0]=Key_Counts%10; 是说除以100取出整数,除以10取出余数,对10取余数?
回复

使用道具 举报

ID:668004 发表于 2021-11-11 18:00 | 显示全部楼层
黄youhui 发表于 2021-11-10 15:22
他说的应该是数组[]用的中括号

对  黄工
回复

使用道具 举报

ID:668004 发表于 2021-11-11 18:02 | 显示全部楼层
188610329 发表于 2021-11-10 14:19
简单讲一下,如果看不懂,你只能翻书了。

1, 空格,只是为了好看,没有实际意义,从头到尾没有空格也没 ...

非常感谢  讲得很好  辛苦了
回复

使用道具 举报

ID:668004 发表于 2021-11-11 18:03 | 显示全部楼层
名字不是重点 发表于 2021-11-10 21:48
1.我想知道什么情况下要用空格、逗号?
  空格不用说了吧?不同的单词之间都是要用到空格来分开,
逗号 ...

非常感谢  有水平 适合做老师
回复

使用道具 举报

ID:668004 发表于 2021-11-11 18:03 | 显示全部楼层
rayin 发表于 2021-11-10 13:42
for() 等条件循环判断语句,用(), 循环体用:
{
}

输入法的原因
回复

使用道具 举报

ID:668004 发表于 2021-11-11 18:04 | 显示全部楼层
huashanhui20 发表于 2021-11-10 13:51
一两句话说不清楚,认真看书吧,学习没有捷径

看出效果不是很好  老是卡住啊
回复

使用道具 举报

ID:668004 发表于 2021-11-11 18:05 | 显示全部楼层
Num_Buffer[2]=Key_Counts/100;         Num_Buffer[1]=Key_Counts/10%10;         Num_Buffer[0]=Key_Counts%10; 是说除以100取出整数,除以10取出余数,对10取余数?
回复

使用道具 举报

ID:624769 发表于 2021-11-11 20:01 | 显示全部楼层
QWE4562012 发表于 2021-11-11 18:05
Num_Buffer[2]=Key_Counts/100;         Num_Buffer[1]=Key_Counts/10%10;         Num_Buffer[0]=Key_Coun ...

168 / 100  = 1
168 /10 % 10  = 6
168 % 10  = 8

把一个十进制数的每个位 都单独取出来,这个应该不光是 单片机,不光是C 语言, 应该是所有的电子信息这块的基础知识了……
回复

使用道具 举报

ID:435676 发表于 2021-11-12 17:44 | 显示全部楼层
条件语句用小括号();一个事件用大括号{}
回复

使用道具 举报

ID:668004 发表于 2021-11-12 18:12 | 显示全部楼层
188610329 发表于 2021-11-11 20:01
168 / 100  = 1
168 /10 % 10  = 6
168 % 10  = 8

如果是1682  那

1682 / 100  = 1
1682 /1000% 100  = 6
1682/1000% 100% 10  = 8
1682 /1000% 100% 10%10  = 2
是否正确
回复

使用道具 举报

ID:668004 发表于 2021-11-12 19:09 | 显示全部楼层
188610329 发表于 2021-11-11 20:01
168 / 100  = 1
168 /10 % 10  = 6
168 % 10  = 8

如果是1682

1682 / 1000  = 1

1682/1000%100 = 6

1682/1000/100%10 = 8


1682%10 = 2




对吗




回复

使用道具 举报

ID:624769 发表于 2021-11-12 21:51 | 显示全部楼层
QWE4562012 发表于 2021-11-12 19:09
如果是1682

1682 / 1000  = 1

1682/1000 = 1                     
1682/100%10 = 6
1682/10%10 = 8
1682 % 10 = 2

完整来讲,其实就是:
1682/1000%10 = 1
1682/100%10 = 6
1682/10%10 = 8
1682/1%10 = 2
只是省略了不必要的计算步骤,

更高位数的自己一次类推吧……
回复

使用道具 举报

ID:668004 发表于 2021-11-18 19:18 | 显示全部楼层
188610329 发表于 2021-11-12 21:51
1682/1000 = 1                     
1682/100%10 = 6
1682/10%10 = 8

有规律不?这样取余数 除以  变化很多的  看不懂  摸不着规律
回复

使用道具 举报

ID:624769 发表于 2021-11-18 19:51 | 显示全部楼层
QWE4562012 发表于 2021-11-18 19:18
有规律不?这样取余数 除以  变化很多的  看不懂  摸不着规律

完整来讲,其实就是:
1682/1000%10 = 1
1682/100%10 = 6
1682/10%10 = 8
1682/1%10 = 2
只是省略了不必要的计算步骤,

更高位数的自己一次类推吧……


我都写成这样了,你还看不明白规律么??
那么,我再加几个空格……

1682   /  1000  %  10 = 1
1682   /  100    %  10 = 6
1682   /  10      %  10 = 8
1682   /  1        %  10 = 2

要是你还是看不懂,我只能去呼叫  yzwzfyz 了,他解释东西似乎有一手。
回复

使用道具 举报

ID:982617 发表于 2021-11-19 18:34 | 显示全部楼层
1、单小括号 ()

①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。

②命令替换。等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些shell不支持,如tcsh。

③用于初始化数组。如:array=(a b c d)

2、双小括号 (( ))

①整数扩展。这种扩展计算是整数型的计算,不支持浮点型。((exp))结构扩展并计算一个算术表达式的值,如果表达式的`结果为0,那么返回的退出状态码为1,或者 是"假",而一个非零值的表达式所返回的退出状态码将为0,或者是"true"。若是逻辑判断,表达式exp为真则为1,假则为0。

②只要括号中的运算符、表达式符合C语言运算规则,都可用在$((exp))中,甚至是三目运算符。作不同进位(如二进制、八进制、十六进制)运算时,输出结果全都自动转化成了十进制。如:echo $((16#5f)) 结果为95 (16进位转十进制)

③单纯用 (( )) 也可重定义变量值,比如 a=5; ((a++)) 可将 $a 重定义为6

④常用于算术运算比较,双括号中的变量可以不使用$符号前缀。括号内支持多个表达式用逗号分开。 只要括号中的表达式符合C语言运算规则,比如可以直接使用for((i=0;i<5;i++)), 如果不使用双括号, 则为for i in `seq 0 4`或者for i in {0..4}。再如可以直接使用if (($i<5)), 如果不使用双括号, 则为if [ $i -lt 5 ]。

下面的程序给多维数组初始化,注意初始化时花括号和小括号的区别

[cpp] view plain

#include

intmain()

{
inta[2][2]={(1,2),(3,4),};//如果把小括号换成花括号,结果就不一样了,小括号(1,2)返回2(3,4)返回4,另外两个元素默认是0

inti,j;

for(i=0;i<2;i++)

{
for(j=0;j<2;j++)

printf("%d",a[i][j]);

printf("

");

}

int*p=a[0];

printf("%d

",p[0]);

return0;

}

/*

运行结果:

24

00

2

*/
回复

使用道具 举报

ID:964308 发表于 2021-11-22 15:03 来自手机 | 显示全部楼层
通常大括号用来放语句,小括号用来放表达式,中括号还没见过
回复

使用道具 举报

ID:964308 发表于 2021-11-22 15:04 来自手机 | 显示全部楼层
对了,数组下标就是中括号
回复

使用道具 举报

ID:983972 发表于 2021-11-24 23:00 | 显示全部楼层
不同的单词之间都是要用到空格来分开, 逗号常用于并列关系。【】,{},()用于附带参数。
回复

使用道具 举报

ID:139866 发表于 2021-12-1 15:56 | 显示全部楼层
如果看不进去书就把书上的代码敲一遍,栗子中给的参数来回换着试试,如果静不下心建议放弃这条路
回复

使用道具 举报

ID:984711 发表于 2021-12-1 18:06 | 显示全部楼层
这个怎么说呢,就是学习多了,你就会自然而然的懂了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表