C语言程序求助!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言程序求助!相关的知识,希望对你有一定的参考价值。

#include "stdio.h"
main()
int num_list[]=6,7,8,9,k,j,b,u=0,m=4,w;
w=m-1;
while(u<=w)

j=num_list[u];
k=2;
b=1;
while(k<=j/2&&b)
++k;b=j%k;

if(b)
printf("%d\n",num_list[u]); u++;
else

num_list[u]=num_list[w];
num_list[w]=j; w--;




请问这个程序是如何输出的?

首先看无论while怎么循环k都等于2,b都等于1.
程序开始:w=3进入最外层while循环,j=6,k=2,b=1;
在进入内层循环k<=6/2也就是2<=3为真,逻辑与上b也就是1,结果为真。
k自增为3,b=j%k也就是b=6%3 =0
在进入内层while循环,结果为假,跳过内层循环,进入判断语句。
由于b=0为假,所以执行else,数组list[]=9,7,8,6. w=2.
第2次外循环:
进入外层while. u<=w 也就是0<=2为真
j=9,k=2,b=1.
进入内层循环,k<=j/2&&b 也就是 2<=9/2&&1 结果为真
k自增为3,b=j%k 也就是b=0 在进入内层while结果为假,进入判断语句
此时数组list=8,7,9,6 w自减为1
第3次外循环:
进入外循环判断 0<=1为真
j=8,k=2,b=1 进入内循环while 2<=8/2&&1 为真
k自增为3,b=8%3 b为2,在进入内循环while 3<=4&&2 为真
k自增为4 b=8%4 =0 在进入内循环while 为假---------------------------------注意这里内循环了2次喔!
进入判断语句 此时list=7,8,9,6 w=0
第4次外循环:
进入外判断while 0<=0 为真
j=7,k=2,b=1 进入内循环while 2<=7/2&&1 结果为真。
k自增为3 b=7%3 =1 进入内循环while 3<=3&&1
k自增为4 b为3 内循环为假
进入if语句
输入始终u=0的数组下表=7
是不是这样的?为啥我测试当w为0时,内循环只有1次呢?
参考技术A 为什么有这么纠结的程序,我无聊一个个的数往里面代入..输出是7,
一个个的代的试嘛! 整个大循环运行四次结束,
w=3

u=0;w=3
j=6;
k=2;
b=1;
k=2; 3 b=1;
k=3;b=0;
list[0]=9;
list[3]=6;w=2

u=0.w=2
j=9
k=2
b=1
k=2.4.b=1
3.0. 这里面是小while里的程序
list[0]=8
list[2]=9.w=1

u=0.w=1
j=8
k=2
b=1
k=2.4.b=1
3.2
3.4.2
4.0.
list[0]=7
list[1]=8.w=0

u=0.w=0
j=7
k=2
b=1
k=2.3.b=1
3.1
3.3.1
4.3
k=4.j/2=3.b=3
这里4<3不成立,b=3为真,,,,开始执行if语句了
list[0]=7,u=1 w=0
再u<=w
所以输出了7,程序终止了!~追问

小while里的怎么看不懂,这是怎么运行的,你能耐心的教我吗?
k=2.4.b=1
3.0. 里面小while里程序
list[0]=8
list[2]=9.w=1

本回答被提问者和网友采纳
参考技术B 你这个程序没有输出,因为“b=j%k”始终为0,无法进入"if(b)"语句,因此你在W自减4次后就程序跳出“while(u<=w)”循环,没有结果输出。追问

可是软件运行出来的答案和标准答案是相同的,结果为7,我是不太理解

追答

结果应该会输出 8 和7 把,之前的说法错误。
第一步:u=0,w=3 得到b=6%3=0,无法进入“if(b)” 所以num_list[]={9 ,7,8,6};

第二步:u=0,w=2 得到b=9%3=0,一样无法进入“if(b)" 所以num_list[]=8,7,9,6;
第三步:u=0,w=1 得到b=8%3=2,进入”if(b)" 所以输出num_list[u]=num_list[0]=8; u=1;num_list[]=8,7,9,6;
第四步:u=1,w=1 得到b=8%3=2,进入”if(b)" 所以输出num_list[u]=num_list[1]=7;u=2;num_list[]=8,7,9,6;
第五步:while(2<=1) 不成立。

追问

结果应该是7,

c语言求助

#include "stdio.h"
void main()

loop: //除非选择0,否则重复
printf("================幸运数字================\n");
printf(" 1 --- 分析 2 --- 统计\n");
printf(" 3 --- 分析 4 --- 统计\n");
printf(" 5 --- 分析 6 --- 统计\n");
printf(" 7 --- 分析 0 --- 统计\n\n");
printf("请键入一个数字进行选择=>");
scanf("%c",&num););//这句话好像第二遍操作时没有作用啊,直接打“请输入正确的数字进行选择=>”

while (num!='1' &&num!='2' &&num!='3' &&num!='4' &&num!='5' &&num!='6' &&num!='7' &&num!='0' )

printf("请输入正确的数字进行选择=>");
scanf("%c",&num
switch (num)

case '1': FuncationOne(); break;
case '2': FuncationTwo(); break;
case '3': FuncationThree(); break;
case '4': FuncationFour(); break;
case '5': FuncationFive(); break;
case '6': FuncationSix(); break;
case '7': FuncationSeven(); break;
default: FuncationZero();

goto loop;

还是一样啊

程序有点乱。首先我想说的是,C语言编程尽量不要用LOOP。很容易死循环。有WHILE和FOR还不够你用么?用LOOP时必需有IF判断,你的程序前面写 loop: //除非选择0,否则重复
但你程序结尾的时候是直接GOTO的,所以死循环。

在说为什么没执行第一个scanf的问题。
第一遍执行的时候不管你输入什么,都得以回车结束。所以你这个scanf就是回车。虽然回车能让scanf跳回不过如果你不清空缓存的话回车就被留下来了。

解决方法是加个清空缓存的函数。在scanf后面
fflush(stdin);

采纳吧。
参考技术A 这样就可以了,因为while的条件有问题

#include "stdio.h"
void main()

loop: /* 除非选择0,否则重复 */
printf("================幸运数字================\n");
printf(" 1 --- 分析 2 --- 统计\n");
printf(" 3 --- 分析 4 --- 统计\n");
printf(" 5 --- 分析 6 --- 统计\n");
printf(" 7 --- 分析 0 --- 统计\n\n");
printf("请键入一个数字进行选择=>");
scanf("%c",&num););/* 这句话好像第二遍操作时没有作用啊,直接打“请输入正确的数字进行选择=>” */

while (!(num>='0'&&num<='7') )/*当输入的字符 非1-7时*/

printf("请输入正确的数字进行选择=>");
scanf("%c",&num
switch (num)

case '1': FuncationOne(); break;
case '2': FuncationTwo(); break;
case '3': FuncationThree(); break;
case '4': FuncationFour(); break;
case '5': FuncationFive(); break;
case '6': FuncationSix(); break;
case '7': FuncationSeven(); break;
default: FuncationZero();

goto loop;

以上是关于C语言程序求助!的主要内容,如果未能解决你的问题,请参考以下文章

c语言作业,求助!

C语言程序求助

C语言程序求助!

求助一道C语言设计题目

C语言求助。急急

C语言结构体大小问题求助。