c语言取最小值赋值给t,C语言中*s++ = *t++ 是怎么一种赋值过程

0318385114cb60bb53b3075eebcb2fbc.png

浮云间

首先是*s=*t;然后判断整个表达式的值是否为真,即*s!=0满足,则继续循环,否则终止不论循环继续与否,接下来要执行s+=1;t+=1;//s先自增还是t先自增在这里是无关紧要的=================================回答评论中补充的问题,程序怎么读优先级表我就不贴了,百度一大堆,核心是你要理解下面流程中的5.2编译器解析到*,判断为指针运算符号,需要一个标示符或者表达式解析到s,是一个合法的标示符,继续搜索是否有更高优先级的运算符继续解析到++,由于*与++是同一优先级,结合性为右到左,所以等同于*(s++)然后是=,判断为赋值运算符,优先级比++低,因此前面的部分可以直接进行计算那么*(s++)怎么计算?拆解成expr1=s++;expr2=*expr1;首先是expr1=s++,后置++的含义是先使用变量/表达式的值、再自增,表达式s++的计算结果就是s的值,计算完毕后,s自增1,也就是说假如s=1,那么s++这个表达式的计算结果就是1,expr1=1,计算完毕后,s的值自增1变为2,但不影响之前已经计算完毕的表达式然后计算expr2=*expr1,按照上面所举的例子,此时s=2,expr2=*1然后继续=的计算,由于赋值运算符是双目运算,需要一个右目表达式,继续解析后面*的优先级比=高,因此先计算*t++,原理同上然后计算赋值表达式的值,没错!赋值表达式也是表达式,它也有计算结果,它的计算结果就是右边表达式计算结果,表达式a=b的值就是b计算完毕后,执行while的功能,判断表达式计算结果是否为真,也就是是否非0略

#include<stdio.h> #include <stdbool.h> int findsec(int arr[],int n,int *f,int *s,int *sx){ int c = 0; for(int i = 1;i<n;i++){ if(arr[i]>*f){ *s = *f; *f = arr[i]; *sx +=1; c+=1; break;} else if(arr[i]<*f){ *s = arr[i]; *sx +=1; c+=1; break; } c+=1;} return c;} int findthd(int arr[],int n,int *f,int *s,int *t,int n1,int *sx,int *tx){ int c = n1; for(int i = c+1;i<n;i++){ if(arr[i]>*f){ *t = *s; *s = *f; *f = arr[i]; *sx+=1; *tx+=1; c+=1; break;} else if(*s<arr[i]&&arr[i]<*f){ *t = *s; *s = arr[i]; *sx+=1; *tx+=1; c+=1; break; } else if(*s>arr[i]){ *t = arr[i]; *tx+=1; c+=1; break;} c+=1;} return c;} void findlast(int arr[],int n,int *f,int *s,int *t,int n2,int *sx,int *tx){ for(int i = n2+1;i<n;i++){ if(arr[i]>*f){ *t = *s; *s = *f; *f = arr[i]; *sx+=1; *tx+=1;} else if(*s<arr[i]&&arr[i]<*f){ *t = *s; *s = arr[i]; *sx+=1; *tx+=1; } else if(*s>arr[i]&&arr[i]>*t){ *t = arr[i]; *tx+=1;}}} int main(void){ int sx = 0;//计算交换次数,以确认是否全相同 int tx = 0; char *str; gets(str); int n = sizeof(str); int array[n-1]; for(int i = 0;i<n-1;i++){ int a = str[i]-48; array[i] = a;} if(n<=2){ int num =array[0]; for(int i = 0;i<n;i++){ if(array[i]>num){ num = array[i];}} printf("第三大的数是%d\n",num);} else{ int first,second,third; first = array[0]; int n1 =findsec(array,n,&first,&second,&sx); int n2 = findthd(array,n,&first,&second,&third,n1,&sx,&tx); findlast(array,n,&first,&second,&third,n2,&sx,&tx); if(*sx==0){ printf("第三大的数是%d\n",first);} else if(*tx==0){ printf("第三大的数是%d\n",first);} printf("第三大的数是%d\n",third); } return 0;}
最新发布
09-21
void lable_centroid_union_gai0812(const boolean_T BWp[16384], unsigned short B[16384], unsigned short xcentroid[64] unsigned short y_centroid[64] uns igned short *labelsn, unsigned short area[64] unsigned short ave gray[647) { int kk ; signed char b_BWp[16900]; int tt; unsigned short tmp[16900]; int label ; int num; unsigned short link [500]; unsigned short C[10]; unsigned short areal[100]; int sumx[100] ; int sumy [100] ; int sumgray [100] ; int i;int j; unsigned short t[4]; int k boolean T exitgl; int w ;int b_w;int mm ;boolean_T exitg2; boolean_T guard1 =false ;boolean_T guard2 =false; int jj ; for (kk=0;kk< 130;kk++){ b_BWp[130*kk]=0; } memset (&b_BWp[1],0, sizeof(signed char)<< 7); for (kk = 0;kk < 128;kk++) { for (tt = 0;tt < 128;tt++) { b_BWp[(tt + 130*(kk +1)) +1] =(signed char)BWp[tt +(kk << 7)]; } } memset (&b_BWp [16771],0, sizeof(signed char) << 7) ; for (kk = 0;kk < 130;kk++) { b_BWp[129 +130 * kk] =0; } memset (&tmp[0], 0,16900U * sizeof(unsigned short)); label = 0 ; for (kk = 0; kk < 500; kk++){ link[kk] = 128; } for (kk = 0;kk < 10;kk++) { C[kk] =128 ; } for (kk = 0; kk< 100;kk++) {area1[kk] =0;sumx [kk] =0; sumy [kk] = 0; sumgray[kk] = 0; } num=4 ; for(i= 0;i< 128;i++){ for (j=0;j< 128;j++){ if (b_BWp[(i +130 * (j+1))+1] ==1){ if((b_BWp[(i +130 * (j+1))+1] != b_BWp[i + 130 *j)&& (b_BWp[(i +130* (j+1))+1]!=b_BWp[i + 130 *(j+1))&& (b_BWp[(i +130* (j+1))+1]!= b_BWp[i + 130 *(j+2))&& (b_BWp[(i +130* (j+1))+1]!=b_BWp[(i + 130 *j)+1)){ tmp[(i+130 *(1+j))+1] = label+ 1; area1[label] =1;sumx [label]=(2+j)–1; sumy [label]=(2+j)–1; sumgray [label] =B[i+(j<<7)]; Iabel++ ; } else { t[0]=tmp(i+130 * j)+1]; t[1] = tmp[i+130 *j]; t[2] =tmp[i+130 *(1+j)]; t[3] = tmp[i+130 * (2+j)]; insert_sort( t, num ); k=0;exitg1= false; while ((!exitg1) && (k<4)) { /*寻找周围四个像素非零的最小值赋值给标签图像 */ if (t[k] !=0.0) { tmp[(i +130* (1+ j)) +1] = t[k]; area1[t[k] -1]++; sumx[t[k] -1] = (sumx[t[k] -1] + (2+ i)) -1; sumy[t[k] -1] = (sumy[t[k] -1] + (2+ j)) -1; sumgray[t[k] -1] += B[i + (j<<7)]; for (w =0; w <=3- k; w++) { b_w = k + w; tt =0; kk =0; mm =0; exitg2= false; while ((!exitg2) && (mm<4)) { guard1= false; guard2= false; if (t[mm] !=0.0) { if (t[mm] < link[(t[b_w] +100* tt) -1]) { C[kk] = t[mm]; guard2= true; } else if(t[mm] == link[(t[b_w] + 1 0 0 * t t) - 1]){ exitg2=true; }else { C[kk]=link[(t[b_w]+100∗tt)−1]; guard2= true; } else { guard1= true; } if(guard2){ kk++ ;tt++; guard1 = true ; } if (guard1) { mm++; } } while (kk+ 1< 10) { C[kk] = link[(t[b_w] + 100 *tt)–1]; kk++; tt++ ; } for(kk = 0; kk<10;kk++){ link[(t[b_w] + 100 * kk) –1] = C[kk]; } } exitg1=true; } else{ k++; } } } } } } jj=0; for (kk=0; kk< label; kk++) { if ((link[kk] !=128) && (link[kk] !=1+ kk)) { area1[link[kk] -1] += area1[link[100+ kk] -1]; sumx[link[kk] -1] += sumx[link[100+ kk] -1]; sumy[link[kk] -1] += sumy[link[100+ kk] -1]; sumgray[link[kk] -1] += sumgray[link[100+ kk] -1]; area1[link[100+ kk] -1] =0; sumx[link[100+ kk] -1] =0; sumy[link[100+ kk] -1] =0; sumgray[link[100+ kk] -1] =0; jj++; } } * labelsn = ((label +1) -1) - jj; tt = -1; for (kk=0; kk<64; kk++) { x_centroid[kk] =0;y_centroid[kk] =0; ave_gray[kk] =0; area[kk] =0; } for (kk =0; kk< label; kk++) { if ((1+ kk< label +1) && (area1[kk] !=0)) { tt++;x_centroid[tt] = rt_roundd_snf((float)(sumx[kk])/ area1[kk]); y_centroid[tt] = rt_roundd_snf((float)(sumy[kk])/ area1[kk]); ave_gray[tt] = rt_roundd_snf((float) sumgray[kk] / area1[kk]); area[tt] = area1[kk]; } } } 把以上代码注释写出来,我已经有输入B和BWp的值了,我想知道其他的值,比如xy坐标,连通域个数,面积,平均灰度,用的是c语言代码,帮我编写代码把他们输出出来
05-20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值