
我收回以下的话,因为我看到了“键盘上的灵魂”等人的回答。之所以说这些是因为以前有次在知道里回答问题结果提问者选了一个最错的答案,让我很气愤。。
''''我本来不想回答,因为在知道上回答问题太亏了,我重视的不是积分,
''''而是中选率。回答这样的问题很多人都是看了答案以后一知半解,
''''随便选一个就通过了。根本不管我的答案是真正正确的。
一、t1~t5 没有经过声明,在vb中默认是可以使用的,只要你的代码最上面没有“option explicit”声明。而关于数据类型,几位都没有说出来,其实这却是根本所在:没有声明的变量类型是Variant类型。
但是不声明在编程语言里是不规范的。
这个类型叫做“变体”,就相当于是其他语言里面的object类型。他可以接受任何类型的赋值。如:
dim a as integer,b as string,v as variant 'v可以不声明
v=a
v=b
都可以。
而t1 = (s1 + s2 + s3 + s4 + s5 >= 450)
其实是
t1的值此时是什么呢?
我们知道 if a>0 then 这句中,a>0所产生的结果是 true或false,也就是Boolean类型。所以当 >、>=、<、<=、=(作为比较是否相等的时候) 作为值赋给变量的时候,它是作为Boolean类型的。
而t1是variant类型,可以兼容Boolean型,因此直接作为Boolean型来用。
如果用整形来存储boolean型,vb自动将true转换为-1,而false转换为0。
说的多了点,但是了解这些才能更好的学习编程。
再多说一句:true之所以转换为-1,是为了做or或and运算,vb的本意是用这两个运算符做位运算,但是实际人们都用来做逻辑运算,-1转换为16进制是FFFF FFFF,而0转换是0000 0000,正好满足or和and的位 *** 作和逻辑 *** 作的一致性。
二、我不知道你的程序是哪里里来的,我要告诉你一点,你的程序是错的!
有没有人注意到,dim s1 as string 这句话。后来有一句:t1=(s1+s2++s5>=450)我知道你的本意是要判断总成绩大于450分,但是你前面定义的是string类型的数据,string类型的+运算符是连接符,因此如果s1~s5分别为1分到5分,那么s1+s2++s5就等于“12345”,12345当然会大于450,但是总分才15分,显然逻辑上是错误的。
数据类型真的很重要的。
应该改为 dim s1 as single,s2 as single
解释你的问题:
if t1 or t2 or t3 then p="" else p=""
这句话,显然是将 t1,t2,t3 三个变量作为Boolean类型进行判断。
t1,t2,t3三个值只要有一个是 True 就满足条件。or 运算符就是只要有一个为true结果就是true
p=这句话就是一个字符串连接 *** 作。
str()函数是将数字转换为字符串,没什么难的,“&”是字符串的标准连接符,与“+”的区别是
3+4=7 ,而 "3"+"4"="34","3"+4="34" 更正见下
3&4="34","3"&"4"="34","3"&4="34"
你自己体会一下就明白了。
Chr(13)是一个回车,就是换一行显示。可以写成VbNewLine。
p= & p 的意思是在p的前面添加其他字符串
两个语句的自然语言意义是:
如果 t1 ,t2 ,t3 之中有一个条件满足,则令 p 等于“可以获奖”否则 p 等于“不能获奖”
然后在 p 的前面添加得分列表和一个换行符。
p最终变成了“
32,4,32,53,89
不能获奖
”
看不懂没关系,以后慢慢会懂的。不过你应该能知道谁回答的正确。
楼下的谢谢,我知道是有区别的,在内存中的存储和基本用法是一样的。所以一直当作一样的来说。实质上vb6-没有继承,所以在逻辑上的关系是不一样的。vbnet就把基本的variant改成了object了。
-----------------------------------------------------------------------
再更正一下:上面标记的地方我说错了一点,就是 "3"+4 应该等于 7 !当时没有确认一下,对不起,在此谢罪,各位中秋快乐
已经是第二次了,最初,我输入了很多文字,结果多按了一下ESC,就全都没有了。。。刚才点了个优化大师上的链接,d出个网页,把这个页面给覆盖了。输入的东西又没了。。
再写一次。。
我自己试过的:输入“1,2,3,4,5”这五个成绩,得出的结果是可以得奖,所以是错误的。
vb里面的加号对变体对象是一个相当头疼的运算符。
它遵循下面几个规则:
1如果两边都是字符串,他就做连接 *** 作,"3"+"4"="34"
2如果两边都是数值,就做算数 *** 作,3+4=7
3如果一边是数值一边是字符串,则:
如果字符串可以转为数值,则取算数 *** 作。"3"+4=7
否则提示出错:3+"k"错误:类型不匹配,要进行连接请使用 & 运算符。
而"&"运算符则遵循:
1运算符两边任何值都转换为字符串。
2当数字转换为字符串的时候是默认调用format(i)进行转换的。
而且当数字赋值给字符串变量时,自动转换为字符串,所取转换函数为format(i)。可见你的代码:
dim s1 as string
s1=val(input) '假设这里输入一个"3"
s1的结果就是 s1=format(val("3")) ,经过两次转换之后,s1的值为"3",是字符串类型。
由上面加号的规则,就是连接 *** 作。
由此可见,数值类型的选择更为重要:
1只要确定你的变量取值,一定要用确切的类型。
2定义时要注意,dim i,j,k as integer,的结果不是你想象的那样,三个类型都是integer型,而是只有k是integer型,而i和j是variant型。正确的应该是dim i as integer,j as integer,k as integer。
3variant可以用来代表字符串,数字,数组,对象……任何类型,但是处理起来最麻烦,尽量不要使用,不过也很难避免,比如split函数和把数组作为参数传递的时候,用variant很方便。
4基本数值类型转换要用标准转换函数好一些:cstr,cint,cdbl,cbool,clng,cbyte……因为这些函数的数据类型比较确定。
多说两句,比较format(3)和str(3)和cstr(3)三个转换为字符串的函数:
format(3)和CStr(3)得到的结果都是"3"
str(3)得到的结果是" 3",数字前面有空格,并不是永远会有空格,只是因为前面省略了正号"+",如果是负数就没有空格了,就是"-3"
format(3,"00")的结果是"30",这就是用format的优势。
日期也可以用format来格式化
format(now,"yyyy年代MM月分dd太阳,HH点了mm分钟ss秒针")就可以以固定的格式输出。
注意有两个比较特殊的字符
回车符和回车换行符
'\xd'这是个转义字符
其中的x表示他是一个16进制数
16进制的d就是10进制的13
也就是 '\r' 字符,也就是回车符(注意跟'\n'这个回车换行符比较)
输入这个字符后,光标会跳到本行首,注意是本行首位,好了
看你的代码
#include<stdioh>
void main()
{
printf("%c",'a'); //先输入字符a
printf("%c",'\xd'); //跳到这行首
printf("%c",'b'); //再输出字符b,覆盖了最开始输出的a字符,所以最后只输出 字符b
}
第二段代码:
#include<stdioh>
void main()
{
printf("%c",'a'); //先输出a
printf("%c",'c'); //再输出c
printf("%c",'\xd'); //跳到行首
printf("%c",'b'); //输出b,覆盖了第一句的a,所以输出 bc
}
你可以使用下面的JS代码来实现在控制台打印数字,每行15个数字,共2行:
```
// 定义要打印的数字
var nums = "012345678901234";
// 按照每行15个数字进行分割,并打印出来
consolelog(numsslice(0, 15));
consolelog(numsslice(15, 30));
```
解释一下代码:首先,我们定义了一个变量`nums`存储要打印的数字,这里我定义了一个长度为30的字符串,包含了0-9的数字。然后,我们使用`slice()`方法将这个字符串按照每行15个数字进行分割,并使用`consolelog()`方法在控制台上打印出来,第一行打印前15个数字,第二行打印后15个数字。
如果你想在小程序中打印数字,可以将`consolelog()`方法替换为`wxshowToast()`或者`wxshowModal()`方法,将数字显示在d窗中。
for(i=1;i<=20;i++)是循环,开始时,先赋值1给i,然后判断是否满足i<=20,满足后,运行花括号里的代码。运行完后,再i++(i变量自增1,即i = i + 1 ,也就是i=2了),再判断是否满足i<=20,满足后,运行花括号里的代码。运行完后,再i++,再判断是否满足i<=20,直到条件不满足i<=20,就运行 system("PAUSE");了
%121d %d是以整形为输出,它对应变量是f2,在% 和d之间加了121,就是格式输出,输出为占121个字符,
printf("\n"); 直接打印个回车,就是换行
f1=f1+f2; f1和f2是两个定义了的变量,赋值的方向是从右向左,不像数学运算的1+1=2是从左向右
即先把f1和f2变量的值(刚才赋值了)相加,再把结果赋值给f1,覆盖了原来的值
再一次f1=f1+f2;同样道理。。。至于为什么再加这一句,就看设计这程序想要干什么
以上就是关于还是一段vb小程序请求解释,望行家指点.全部的内容,包括:还是一段vb小程序请求解释,望行家指点.、关于C语言中的换行符和回车符、微信小程序如何打印数字两行每行15个数字js等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)