Tag: 循环

k中的k – =(k&( – k))是什么意思?

一个函数来计算我在这个语句中遇到的总和..plz帮助 int get_sum(int x) { int p = 0, k; for (k = x; k > 0; k -= k & -k) p += bit[k]; return p; }

Openmp嵌套循环

只是玩弄openmp。 看看这段代码片段: #pragma omp parallel { for( i =0;i<n;i++) { doing something } } 和 for( i =0;i<n;i++) { #pragma omp parallel { doing something } } 为什么第一个比第二个慢得多(大约5倍)? 从理论上我认为第一个必须更快,因为并行区域只创建一次而不是像第二次那样n次? 谁可以给我解释一下这个? 我想要并行化的代码具有以下结构: for(i=0;i<n;i++) //wont be parallelizable { for(j=i+1;j<n;j++) //will be parallelized { doing sth. } for(j=i+1;j<n;j++) //will be parallelized for(k = i+1;k<n;k++) { doing sth. } […]

为什么我的程序循环次数太多?

我是C的初学者,试图创建一个程序并且我的主要function有问题。 问题: 在询问他们想要输入多少个整数后,例如:4个数字,循环继续5次,基本上接受5个数字。 它也只在第二个数字后打印“Next:”。 在我用于错误检查的while循环中,在用户输入有效方法之后,例如:输入1,它将打印出它是“无效选择”并再次重新询问一次。 码: #include #include #include “a3defs.h” int main() { StackType stk; StackType *stkPtr = &stk; //Will be used to check whether to use recursive or iterative int method = 0; int sum; int *sumPnt = ∑ //Will be used to create array for amount of ints: int numOfIntegers; //Array of ints: […]

生成唯一值

我想创建一个C程序来生成0到999999之间的数字,请记住生成的数字不应该包含任何重复的数字。 例如, “123”是可接受的值,但不是”121″因为重复’1′ 。 我已经找到了其他程序代码来检查整数是否有重复的数字: 检查整数是否有重复数字。 没有字符串方法或数组 检查数字重复数字的最快方法是什么? 然而,如果我要对1,000,000个不同的值进行检查,这些并不能真正解决我的问题并且它们是非常低效的解决方案。 此外,提供的解决方案是int而不是char[]和char * ,我在我的程序中使用它。 以下是我的代码。 正如您所看到的,我处理高达”012″值没有问题,但是3位及以上值的可能性太多而无法列出,而且编码效率太低。 会感激一些帮助。 int i, j; char genNext[7] = “0”; printf(“%s\n”, genNext); // loop through to return next pass in sequence while (1) { for (i = 0; i < sizeof(genNext) / sizeof(char); i++) { if (genNext[i] == '9') { char * thisPass […]

非数字输入导致无限循环

出于某种原因,如果用户输入了错误的数据类型,例如’j’或’%’,循环将停止询问输入,并将一遍又一遍地显示”Enter an integer >” 。 如何让程序处理错误输入? 为什么输入非数值会导致这种奇怪的行为呢? #define SENTINEL 0; int main(void) { int sum = 0; /* The sum of numbers already read */ int current; /* The number just read */ do { printf(“\nEnter an integer > “); scanf(“%d”, &current); if (current > SENTINEL) sum = sum + current; } while (current > […]

循环中的空间位置

根据我的理解,空间位置与附近未来使用的附近记忆有关。 但是我想知道循环是否多次执行,这是否会导致良好的空间局部性? 提前谢谢,对不起,如果我很难理解的话。

在while循环中比较char

只要输入不是x,循环就会继续询问输入,并打印出A或B. int main (void){ char input; while( input != ‘x’){ printf(“Enter Input:”); scanf(“%c”, &input); if (input == ‘a’){ printf(“A \n”); } else{ printf(“B\n”); } } return (0); } 问题是,每次输入输入后,它都会输出输出,并且无论输入a还是b或其他任何内容作为输入,它都会在新行中打印出“输入输入:B”。 谁能告诉我怎样才能解决这个问题,谢谢! 这是发生的事情: 输入输入:a 一个 输入输入:B / 输出后它总是打印这一行,我怎么能摆脱它? / 输入输入:a 一个 输入输入:B 输入输入:b 乙 输入输入:B 输入输入:b

什么时候使用break,并继续用C语言?

什么时候使用break,并继续用C语言? 我可以使用循环和没有循环吗? 如果循环中的条件足以指示是否继续,那么有什么需要使用它们? 使用它们是一个好习惯吗? 提前致谢。

如何遍历由指针创建的字符串

我想要做的是遍历报价直到报价结束/(*报价中没有任何内容)。 我的代码有效吗? char *quote = “To be or not to be, that is the question.”; for (quote = 0; *quote != NULL; quote++){ *quote = tolower(*quote); }

自动assembly循环级别分析

有谁知道任何汇编循环级别分析器? 我一直在使用gprof,但gprof隐藏了循环,它是function级别的分析,但为了优化我的代码,我想要一些东西进入循环级别。 我想让它自动化,只需给我输出像gprof。 我被建议去dtrace但我不知道要开始。 无论如何,任何人都可以指导我吗? 例如 main: pushl %ebp movl %esp, %ebp subl $16, %esp movl $5000000, -4(%ebp) movl $0, -12(%ebp) movl $0, -8(%ebp) jmp .L2 .L3: movl -8(%ebp), %eax addl %eax, -12(%ebp) addl $1, -8(%ebp) .L2: movl -8(%ebp), %eax cmpl -4(%ebp), %eax jl .L3 movl $0, %eax leave ret 例如在gprof中它会说主执行1次而foo执行100次。 但我想知道L2或L3是否执行了1M次,那么我对优化的专注就在这里。 如果我的问题含糊不清,请让我解释一下谢谢