[c++]牛客刷题记录2.18
1.c++标签使用
#include<iostream> using namespace std; int main() { http://www.csdn.net cout<<"hello world!"<<endl; return 0; }
这里运行不会报错,http:作为标签label的使用,可以实验goto http;跳转到这里,进行cout语句。
1 //例子
2 for(int i = 0; i <= 100; i++) 3 { 4 cout < <"Hello:" < <i < <endl; 5 if(i == 4) 6 { 7 goto case; 8 } 9 } 10 11 //中间可以有很多代码 12 13 case: cout < <"Case" < <endl; //这是一个标签 14 15 输出结果: 16 Hello 1 17 Hello 2 18 Hello 3 19 Hello 4 20 Case
来源参考:http://blog.csdn.net/szchtx/article/details/21647159
2.scanf的引用要求和数组的地址
有定义语句:
int
b;
char
c[10];
则正确的输入语句是______。 B
scanf("%d%s",&b,&c);
scanf("%d%s",&b,c);
scanf("%d%s",b,c);
scanf("%d%s",b,&c);
解释:scanf需要引入变量地址,变量b的变量地址为&b(取址符+变量),而c[10]是数组,因此c就是数组的地址。
如果引用c就是对c起一个别名,c内存储的地址还是数组的首地址。
A也可以,但是优先选B。
3.CPU Cache预读效率
x是一个行列数均为1000二维数组,下面代码效率执行最高的是(D)
for(int j=0;j<1000;j++) for(int i=0;i<1000;i++) x[i][j]+=x[j][i];
for(int i=0;i<1000;i++) for(int j=0;j<1000;j++) x[i][j]+=x[j][i];
for(int i=0;i<1000;j++) for(int j=0;j<1000;j++) x[j][i]+=x[j][i];
for(int i=0;i<1000;i++) for(int j=0;j<1000;j++) x[i][j]+=x[i][j];
解释:因为cache会预读当前页的后几页,如果命中,就会继续预读后面的页面,加快速度。
因为数组的预读是逐行预读的,所以D的情况最快,而其他几个选项有跳列的情况。
来源:http://blog.sina.com.cn/s/blog_6237dcca0100ffxu.html