问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求解析这道c语言例题,被调函数里的循环是什么样的,每次循环的值都有什么变化

发布网友 发布时间:2022-05-20 03:56

我来回答

2个回答

热心网友 时间:2023-10-23 19:24

首先说下fun函数的作用就是处理数组每个相邻的元素不重复,去掉重复的元素。
函数输入一个数组a,这个数组的长度为n,通过循环逐一判断每个元素,是否与前一个元素相等,相等不做任何事情,不相等就把这个不相等的值依然放在这个数组里,用pos作为下标,依次存放,直到遍历每个元素,这样这个新的数组a就没有相邻元素的值重复。

比如数组a中的元素为:2,2,3,3,4,4
循环开始cmp=2,pos=1
第一次循环:取出第一个2与cmp作比较,相等不做任何事。
第二次循环:取出第二个2与cmp比较相等也不做任何事。
第三次循环:取出第一个3与cmp比较不等,那么把3放到pos指定的位置,即第二个2的位置,第二个2为3,再把pos加1,新的cmp=3。
第四次循环:取出第二个3与cmp比较相等,不做任何事。
第五次循环:取出第一个4与cmp比较,不等,那就把4放到数组pos下标的位置,再pos加1,新的cmp=4。
第六次循环:取出第二个4与cmp比较,相等,不做事,并结束循环。
循环结束后函数返回pos值,即新的数组a有效元素长度,元素分别为2,3,4。

注意,这个函数只能处理相邻之间的元素不重复。比如数组a元素为:2,2,3,3,2,2那么输出新的数组a为:2,3,2。追问明白了 谢谢

热心网友 时间:2023-10-23 19:24

这个fun函数实现的功能相当于C++标准库中的unique

#include<stdio.h>
int fun(int a[], int n)    //去重函数
{
    int k = 0, pos = 1;
    int cmp = a[0];//cmp记录的是前一个数的值
    for (k = 0; k < n; k++)    //遍历数组
    {
        //因为a数组是有序的,所以当与cmp不一样时一定是一个新的值
        if (a[k] != cmp)
        {
            a[pos++] = a[k];//将不同的值前移,更新后的数组只存储不同的值
            cmp = a[k];
        }
    }
    return pos;    //返回去重后数组的大小
}
int main(void)
{
    int num[20] = { 2,2,2,3,5,5,5,5,5,6,6,8,10,13,13,14,14,15,15,15 };
    int i = 0, j = 0, n;
    printf("The original data is:");
    for (i = 0; i < 20; i++)
        printf("%d", num[i]);
    printf("\nThe data after changing is:");
    n = fun(num, 20);
    for (j = 0; j < n; j++)
        printf("%d", num[j]);
    printf("\n");
    return 0;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机壁纸花卉红色手机壁纸花卉 辽宁智能五芯防水连接器 军工产品浅谈——航空插头 xp电脑系统修复XP系统怎么恢复出厂设置 ...表编辑器后打不开任何文件,无需重装系统,电脑盲都能用 粼基本信息 粼五笔怎样打? 【微科普】想变成光?先搞清楚光是什么吧! 手机被拉黑后打电话是什么提示? 物流管理专业对数学的要求高么 有关C语言循环结构的几到例题(急) c语言循环问题求解答谢谢 C语言循环题目求解。 C语言循环题目 C语言循环题!编写一个程序,求s=1+(1+2)+(1+2+3)+...+(1+2+3+...+n)。 C语言循环结构习题 C语言循环题 c语言 循环题目 C语言循环题? c语言循环结构例题 广东公务员成绩查询时间? 在第二家公司上班一年了,今天在支付宝里查看电子社保卡发现缴纳记录就到上家,同事都说交五险的? 刚刚从公司辞职,希望之后可以在支付宝里缴纳五险一金,请问要怎么弄,老让我去社保局办理 支付宝能代价北京五险一金吗 五险一一金在支付宝可以改居民社保吗 怎样彻底删除聊天记录聊天记录删除了还能恢复吗微信 宝鸡医保卡换社保卡卡上余额 社保卡上的钱怎么能提现? 社保卡可以取现吗? 宝鸡退体人员医保卡有二个月没有到账,为什么? c语言循环编程题!!!求解答!!! C语言循环程序大题 日本旅游的购物问题 美御宝瓷砖是不是十大品牌系列 有人知道朵拉小羊和御宝羊奶粉哪个好吗? 我小孩喝了御宝羊奶粉肚子疼你能告诉我为什么吗 御宝羊奶是不是含有香精啊 日本七日游多少钱 淘打子账号怎么登陆淘打,怎么授权子账号登录淘打 白酒全年活动方案 为什么戴尔灵越147000(14-7447)是windows7旗舰版系统??是真的吗??? 戴尔灵越14 7447 是win8.1的系统可以换成win7吗 我的是戴尔灵越14-N4030笔记本,每次按F1到F12都要按FN键 我的系统是vista 请问怎么把FN键切换下 戴尔灵越14-5457装什么系统最好? 戴尔灵越14 3467是什么配置? 你好,戴尔inspiron14-3421适合装什么系统? 戴尔笔记本电脑inspiron14-3420有自带系统吗? 电脑Dell 灵越14 M411R-M4100,4G内存,可使用内存2.99g,系统是自带的64位win7,这是怎么回事呀!! 戴尔(DELL) Ins14VR-4516 灵越14英寸笔记本电脑 如何安装Win7 64位系统 求高手 我的笔记本是戴尔 灵越14-N4020的 像重装XP系统 怎么弄