Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

软件:12周理论作业 #44

Open
ghostbody opened this issue Dec 7, 2015 · 15 comments
Open

软件:12周理论作业 #44

ghostbody opened this issue Dec 7, 2015 · 15 comments

Comments

@ghostbody
Copy link
Collaborator

一共4个文件,几百题。

现在题库中共563题。同学们可完成每一类别题目中的三分之一。多做不限。

文件在群共享和FTP的Resource文件夹均有。

DDL:

2015年12月30日 18:00
2015年12月30日 21:00

命名:

13331314_叶嘉祺_理论题.pdf

要求,对每道题写简单的解释,并且理解。

@most-cute-fangfang
Copy link

TA大大,Sicily上的1002那道序列题,我的做法是把序列写成一个函数,存到以1开始的数组里,然后输入的数字与小于等于它的数相比较,如果有相同的就输出[ ]里面的数字。但是我调用函数的时候,要跟里面的数列比较,编译说没有声明数组名s[ ].....我好方....

@ghostbody
Copy link
Collaborator Author

@most-cute-fangfang 不明白你说啥?

@JerryChan31
Copy link

@ghostbody 写成什么形式?…pdf还是md?

@ghostbody
Copy link
Collaborator Author

@JerryChan31 看要求 ╮(╯▽╰)╭

@JerryChan31
Copy link

@ghostbody 请教一个理论题的问题:
#include <stdio.h>
void main()
{
1 < 2 ? return 1 : return 2;
}
这里编译器编译提示
[Error] expected expression before 'return'
return左边为什么还要有表达式?…
还有return到底是个什么东西?…上网查查不到…

@ghostbody
Copy link
Collaborator Author

@JerryChan31 1. void main是没有返回值的。2. 你要理解这个三目运算的意思,是前面的表达式为真执行return1,若为假执行后面的表达式。

也就是:

if(1 < 2) {
  return 1;
} else {
  return 2;
}

@Icenowy
Copy link

Icenowy commented Dec 23, 2015

另外有一点,C标准要求main返回值类型为int。void main是国内部分教科书的错误写法,由于某些技术原因在x86平台上不会出错,但是影响程序可移植性。

(事实上按照C标准编译器可以在这里报错,如果它严格检查标准

  • 发送自我的Sony Xperia™智能手机

---- JerryChan31编写 ----

@ghostbody 请教一个理论题的问题:
#include <stdio.h>
void main()
{
1 < 2 ? return 1 : return 2;
}
这里编译器编译提示
[Error] expected expression before 'return'
return左边为什么还要有表达式?…
还有return到底是个什么东西?…上网查查不到…


Reply to this email directly or view it on GitHub:
#44 (comment)

@JerryChan31
Copy link

@ghostbody 也是理论题里的一个问题。
#include <stdio.h>
#include<string.h>
#pragma warning(disable:4996)
int main()
{
char *str = "hello, world!!\n";
char strc[] = "good morning\n";
strcpy(strc, str);
printf("%s\n", strc);
return 0;
}
这个程序为什么执行strcpy以后strc的数组不会越界?就算把strc初始化改成“g”也正常输出…
然而在百度上找到这个……
image

@ghostbody
Copy link
Collaborator Author

@JerryChan31 越界了啦,没报错而已。

@JerryChan31
Copy link

@ghostbody 咦但是它可以输出正确答案

@MarshallW906
Copy link

@JerryChan31 gcc里对于字符串越界的处理似乎就是这样……
比如

char s[5] = "hahahaahahahahah";
printf("%s", s);

这样不会报错,不会RE,它自己给你扩充了空间
具体为何我也不清楚

@ghostbody
Copy link
Collaborator Author

@MarshallW906 后面会出乱码,编译器也会警告你。 gcc 4.9.1

@zichang06
Copy link

TA大大,请问这题怎么求解?
而且改为

int *ptr = (int *)100;

的话,答案就是8...
嘤嘤,求解释~~~

@zichang06
Copy link

所以ptr指向十六进制0000 0064(十进制表示为100)的这个地址?
咳咳,好晕呀~~

@zichang06
Copy link

  1. Which of the following declaration throw run-time error?
    a) int *_c = &c;
    b) int *_c = &_c;
    c) int *_c = **c;
    d) None of the mentioned
    View Answer
    Answer:d

还有这题,给跪了。虽然我连题目看的都不太懂,但是除了B,我的编译器一直报错。ORZ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants