c语言 这道题 n

作者&投稿:宣霞 (若有异议请与网页底部的电邮联系)
这道题n是多少呀 C语言~

这是一个简单的约瑟夫环问题。你想问什么?这个程序大概意思是:对N个数。从1开始报数,报到3的时候,把这个数赋值为0,下次在遇到0的时候,直接跳过它,不对它进行计数。

第一轮:n=9,while判断为1,首先执行n--,n变为8;
printf("%d",n--):首先打印8,然后将n-1,n=7;
第二轮:n=7,while判断为1,首先对n-1,n=6;
与第一轮相同,打印出6,然后将n-1,转变为5.
然后下一轮的时候while判断为FALSE,程序执行完毕。

解释得够详细了吧?记得给分啊!

首先看最内部的if语句,它的条件表达式(i % 3)
,含义为当(i % 3) != 0,即当i能整除3时,执行continue语句,跳过本次迭代。当i不能整除3时,执行本次迭代的剩余代码:n++。所以这个if语句:
if (i % 3)
continue;
n++;
可以改写为:
if ((i % 3) == 0)
n++;

再看do-while循环:它的含义是当 !i 的值不是0,也即只要 i 的值是0,就一直执行循环体。但是其实整个程序中,i都取不到0这个值,所以这个do-while循环的循环体只会执行一次,所以可以把这些代码:
do
{
if ((i % 3) == 0)
n++;
}
while (!i);
改写成:
if ((i % 3) == 0)
n++;
区别就是把外面的do-while语句去掉了。

经过两次简化,最终的for循环是
for(i = 2; i < 5; i++)
{
if ((i % 3) == 0)
{
n++;
}

n++;
}

再来分析这个简化的for循环:
首先,单次表达式把i值赋为2,接着进行迭代。
第一次迭代:
i 值为2,n值为0。条件表达式(i < 5)成立,执行中间循环体。
if语句判断i能不能整除3,如果能整除,令n值自增1,这里i值为2,不能整除3,所以n值不会自增,此时n仍然值为0。
if语句结束后,第2个n++;语句令n值自增1,此时n值为1。
末尾循环体i++令i值自增1,i值变为3。
第二次迭代:
i 值为3,n值为1。条件表达式成立,执行中间循环体。
if语句判断i能不能整除3,如果能整除,令n值自增1,这里i值为3,能整除3,所以n值自增1此时n值为2。
if语句结束后,第2个n++;语句令n值自增1,此时n值为3。
末尾循环体i++令i值自增1,i值变为4。
第三次迭代:
i 值为4,n值为3。条件表达式成立,执行中间循环体。
if语句判断i能不能整除3,如果能整除,令n值自增1,这里i值为4,不能整除3,所以n值不变,此时n值仍然为3。
if语句结束后,第2个n++;语句令n值自增1,此时n值为4。
末尾循环体i++令i值自增1,i值变为5。
第四次迭代:
i 值为5,n值为4。条件表达式i<5不成立,不执行中间循环体,直接结束for循环。

最后打印n值为4。


罗田县18451408711: 【急】c语言编程题目:输入n个整数,求这n个整数中的最大数,最小数和偶数平均数,并输出. -
后歪复方: 这个最大数 就第一个数 和第二个数比较 那个大就赋值给max 再与下一个数值比较 最小数同理可得 偶数的话 只要数值对2取余为0的话就是 偶数 每出现一次偶数 就累加起来,也同样计数 最后累加和除以计数的最后值就是偶数平均值

罗田县18451408711: C语言题目求解:输入一个整数n,再输入n个整数,计算并输出这n个数之积,光标换行. -
后歪复方: #includeint main() { int x, n, i = 0; int s = 1; scanf("%d",&n); while(i < n) { scanf("%d",&x); s *= x; i++; } printf("%d\n",s); return 0; }

罗田县18451408711: C语言~这道题选什么?要解释下面程序段的运行结果是 - ---------. int n=0; -
后歪复方: 选C n=4; 相当于是这样 int n=0; while(n++<=2) //先进行n<=2判断,再进行n++自增运算.n=3的时候,n>2,但还是会进行++自增运算,所以为4 { ; //这个分号是while的循环体 } printf("%d",n);

罗田县18451408711: c语言找n!的编程题 -
后歪复方: ylkejia,帮您补全,楼主把最佳答案给他. main() { int a=1,n,i; printf("Enter n...

罗田县18451408711: 这是一个C语言编程题,题目是:输入:一个整数N 输出:将 2 - N 范围内的全部素数输出 你会么?会的话帮我编下吧
后歪复方: .........可以上网找答案,你们老师真奇葩#include<stdio.h>int main(){ int n, i, j, t; printf("please input N:(N>1)"); scanf("%d", &n); if(n<=1) printf("n<=1"); else{ for(i=2;i<=n;i++){ t=1; for(j=2;j<=i/2;j++){ if(i%j==0){ t=0; break; } } if(t==1){ printf("%d ", i); } } } return 0;}

罗田县18451408711: 一道C语言程序的郁闷程序题目是输入n个字符串(n<10),
后歪复方: 呵呵,提问者现在不是要用指针数组来解决问题,而是要用数组指针,作为学习,... int n,i,j; char *temp; temp=(char *)malloc(sizeof(char)*20); printf("输入字符串个数:"...

罗田县18451408711: C语言题目 输入N个整数,求这N个整数中的最大数、最小数和偶数平均数,并输出 -
后歪复方: 将输入的数放在数组A[N]中 Amax = A[0]; Amin = A[0]; Aavr = 0; j = 0; for(i=0;i<N;i++) {if(A[i]>Amax)Amax = A[i];if(A[i]<Amin)Amin = A[i];if((A[i]%2) == 0){Aavr += A[i];j++;}}Aavr = Aavr / j ;Amax为最大数 Amin为最小数 Aavr为偶数的平均数

罗田县18451408711: 问一个对于我很难的C语言题,输入N个数,输出这N个数的平均值.还有一个C语言问题, -
后歪复方: N就是N个数,可以任意取,以下两题以10为例#include <stdio.h>#define N 10 main() { int a[N],i; float ave=0; for(i=0;i<N;i++) { scanf("%d",&a[i]); ave=ave+a[i]; } printf("%0.2f",ave/10); } 用单循环输入数字,并且输入一个,累加一个,最后第...

罗田县18451408711: 是一个C语言编程题:编程对N个整数进行从大到小顺序排列 -
后歪复方: main() {int a[10]={1,3,45,2,5,2,6,12,4,7};//这个是一个数组,也可以自己输入int i,j;print(a);//按照数组顺序打印for(i=0;i<10;i++)for(j=i+1;j<10;j++)//用两个for,冒泡if(a[i]print(a); } print(int *a) { int *p; for(p=a;p printf("%d ",*p); printf("\n"); } swap(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; }

罗田县18451408711: C语言程序题:输入n个整数,求这n个数中的偶数平均值,并输出. -
后歪复方: 编的有点乱: 我是这样编的 N 可以任取 #include <stdio.h> #define N 10 main() { int a[N],i; float ave=0; for(i=0;i<10;i++) { scanf("%d",&a[i]); if(a[i]%2==0) ave=ave+a[i]; } printf("%0.2f",ave/10); }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网