| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2172 人关注过本帖
标题:0基础自学C语言,求教次程序执行原理
只看楼主 加入收藏
零基础学安卓
Rank: 1
等 级:新手上路
帖 子:10
专家分:5
注 册:2015-12-23
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
0基础自学C语言,求教次程序执行原理
#include<stdio.h>
int main()
{
    int num1,num2,num3,temp;
    printf("请输入三个整数!\n");
    scanf("%i,%i,%i",&num1,&num2,&num3);
    if(num1<num2){
         temp=num1;
        num1=num2;
        num2=temp;   
    }if(num1<num3){
        temp=num1;
        num1=num3;
        num3=temp;
    }if(num2<num3){
    temp=num2;
        num2=num3;
        num3=temp;
    }
   
    printf("从大到小顺序为:%i %i %i\n",num1,num2,num3);
}//求解此程序为什么会执行从大到小排序?又怎样可以从小到大排序呢?
2016-01-05 17:16
Yuzai酱
Rank: 2
等 级:论坛游民
帖 子:18
专家分:67
注 册:2016-1-4
收藏
得分:0 
回复 楼主 零基础学安卓
#include<stdio.h>

int main(void)
{
    int num1,num2,num3,temp;
    //定义三个int型变量
   
    printf("请输入三个整数并依次用空格隔开,然后按回车键!\n");
   
    scanf("%d %d %d",&num1,&num2,&num3);
    //scanf("%i,%i,%i",&num1,&num2,&num3);
    //看看你的代码,写的不规范,还敲错了
   
    if(num1<num2) //先用num1和num2比较
    {
        temp=num1;
          num1=num2;
          num2=temp;   
    }
    if(num1<num3)//再用num1和num3比较
    {
        temp=num1;
        num1=num3;
        num3=temp;
    }
    if(num2<num3)//最后num2和num3比较
    {
        temp=num2;
        num2=num3;
        num3=temp;
    }
    /*
        至于排序,你用试数法理解
        好比我们输入了三个数:55 99 11。,那么
        num1=55,
        num2=99,
        num3=11,
        还有一个temp,这个temp是什么意思,是“临时”的意思,你可以把它理解为
        一个临时的杯子或容器。
        if(num1(55)<num2(99)) 此时函数为真,什么是真假?非0既真,55是不是比99小,当然是肯定的,所以执行下列大括号内函数
        {temp=num1;
          num1=num2;
          num2=temp;}
          那好,到这里num1和num2的位置已经互换了,怎么互换的,我们前面提到有一个变量“临时”也就是temp
        你可以把num1,num2想象为2杯饮料,num1为可乐吧,num2为雪碧。temp为一个空瓶子,
        if(55<99函数为真执行)
        {
            可乐杯子到给空的杯子: temp=num1;
            雪碧杯子到给可乐杯子(可乐杯子现在是空的): num1=num2;
            空的杯子里的可乐到给雪碧杯子:num2=temp;   
            现在可乐杯子里是雪碧,雪碧杯子里是可乐。
            也就是存储位置没变,但是存储位置上的数据互换了,懂了吗?
        }
    */
    printf("从大到小顺序为:%d %d %d\n",num1,num2,num3);
    //printf("从大到小顺序为:%i %i %i\n",num1,num2,num3);
    //这里你也敲错了,好好看看差别,是%d,不是%i
   
    return 0;
    //结尾也没加return 0 ,记住,新规定main函数的基本书写模式
    /*
    int main(void)
    {
        return 0;
        //一定记住这个renturn 0不能省
    }
    */
}
2016-01-05 19:41
ms268el8
Rank: 4
等 级:业余侠客
威 望:1
帖 子:84
专家分:299
注 册:2015-11-30
收藏
得分:4 
為什麼要這個寫法交換兩個值
我在下面這網頁曾經答過,有空看一下
https://bbs.bccn.net/viewthread.php?tid=459822&page=1#pid2539602

簡單來說,程序流程是
1. 宣告四個變數,三個變數(num)用於儲存使用者輸入的值,一個變數(temp)為暫存變數(什麼是暫存變數看上面網頁)
2. 提示使用者輸入變數,然後接收使用者輸入的變數
3. 比較第一個(num1)和第二個(num2)變數,如果第二個變數大過第一個變數,就交換兩值。所以現在num1大過或等於num2
4. 比較第一個(num1)和第三個(num3)變數,如果第三個變數大過第一個變數,就交換兩值。所以現在num1大過或等於num3。故現在num1為最大值。
5. 比較第二個(num2)和第三個(num3)變數,如果第三個變數大過第二個變數,就交換兩值。因為現在num1為最大值。所以只需比較num2和num3。
現在num1>=num2>=num3,已經排序好了
6. 最後輸出排序後結果


[此贴子已经被作者于2016-1-6 03:49编辑过]

2016-01-05 20:08
心念成
Rank: 2
等 级:论坛游民
帖 子:19
专家分:27
注 册:2015-12-31
收藏
得分:4 
回复 3楼 Yuzai酱
在int main()的括号里,如果我加void的话,在dev里面会出错,这是编译器的问题吧
2016-01-05 21:29
Wolfsin
Rank: 1
等 级:新手上路
帖 子:8
专家分:9
注 册:2016-1-4
收藏
得分:4 
程序代码:
#include<stdio.h>
int main()
{
    int num1,num2,num3,temp;\\定义4个整型(可以理解为整数),在运行时开辟了空间用来放数据
    printf("请输入三个整数!\n");\\在运行时输出了引号里的文字
    scanf("%i,%i,%i",&num1,&num2,&num3);\\让用户输入3个数,每一个%i表示一个数
    if(num1<num2){\\比较这2个数,如果数1小于数2,则执行下面的语句
         temp=num1;\\让temp等于数1
        num1=num2;\\让数1等于数2
        num2=temp;  \\让数2等于数1,进行到这数1和数2互相交换了一下,结果就是原来数1小于数2,运行结束后数2小于数1  
    }if(num1<num3){\\同上一个if的意思相同,只是比较的数不一样了
        temp=num1;
        num1=num3;
        num3=temp;
    }if(num2<num3){\\同上一个if的意思相同,只是比较的数不一样了
    temp=num2;
        num2=num3;
        num3=temp;
    }

 printf("从大到小顺序为:%i %i %i\n",num1,num2,num3);\\输出重新排序的数字

如果想要从小到大,直接把if中的"<"换成">"就行了
程序代码:
#include<stdio.h>
int main()
{
    int num1,num2,num3,temp;\\定义4个整型(可以理解为整数),在运行时开辟了空间用来放数据
    printf("请输入三个整数!\n");\\在运行时输出了引号里的文字
    scanf("%i,%i,%i",&num1,&num2,&num3);\\让用户输入3个数,每一个%i表示一个数
    if(num1>num2){\\比较这2个数,如果数1大于数2,则执行下面的语句
         temp=num1;\\让temp等于数1
        num1=num2;\\让数1等于数2
        num2=temp;  \\让数2等于数1,进行到这数1和数2互相交换了一下,结果就是原来数1小于数2,运行结束后数2小于数1  
    }if(num1>num3){\\同上一个if的意思相同,只是比较的数不一样了
        temp=num1;
        num1=num3;
        num3=temp;
    }if(num2>num3){\\同上一个if的意思相同,只是比较的数不一样了
    temp=num2;
        num2=num3;
        num3=temp;
    }

 printf("从小到大顺序为:%i %i %i\n",num1,num2,num3);\\输出重新排序的数字

努力做到最好!
2016-01-05 21:41
零基础学安卓
Rank: 1
等 级:新手上路
帖 子:10
专家分:5
注 册:2015-12-23
收藏
得分:0 
回复 2楼 zlz66668888
你没理解我的意思。
2016-01-05 22:42
Yuzai酱
Rank: 2
等 级:论坛游民
帖 子:18
专家分:67
注 册:2016-1-4
收藏
得分:4 
回复 5楼 心念成
貌似是,你去下载一个“c-free 5.0”吧,短小精悍,我就用的这个编译器!
2016-01-05 23:02
孤狼A组
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:73
专家分:121
注 册:2015-9-8
收藏
得分:4 
#include<stdio.h>
int main()
{
    int num1,num2,num3,temp;
    printf("请输入三个整数!\n");
    scanf("%i%i%i",&num1,&num2,&num3);//scanf的括号中可以加逗号,但是你在输入数的时候也要用逗号隔开,其他的没什么问题
    if(num1<num2){
         temp=num1;
        num1=num2;
        num2=temp;   
    }if(num1<num3){
        temp=num1;
        num1=num3;
        num3=temp;
    }if(num2<num3){
    temp=num2;
        num2=num3;
        num3=temp;
    }
   
    printf("从大到小顺序为:%i %i %i\n",num1,num2,num3);
}
2016-01-06 21:26
快速回复:0基础自学C语言,求教次程序执行原理
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023996 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved