下面的应该怎么做,有解析就更好啦

img


我觉得是只循环一次,不知道是对还是错,m=10只会出现一次吧

死循环
循环条件 m=10 使用的是赋值运算符 =,因此会将变量 m 的值设为 10,而不是进行相等判断。

非零就就为真,所以循环条件始终成立,也就是说这是一个无限循环

不执行吧. while里面需要的是布尔值 m=10是一个赋值表达式 个人见解

m = 1,该值没有意义,只是定义了变量数据类型

while (m = 10) ,注意,这里的运算符是 = ,而不是比较运算符 == ,所以, m = 10 , while (m) ,时,是将 m 转成逻辑值

那么,根据语言不同,结果不同,例如 js 之类的,就是选 C ,无限循环了

c 语言的话,应该是也选 C

应该是选c吧!while里面这个条件是一个赋值语句,并不是false或者0,所以会一直执行下去吧!

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7674110
  • 你也可以参考下这篇文章:编一程序,将字符串的第m个字符开始的全部字符复制到另 一个字符串中。要求在主函数中输入字符串及m值并输出结果, 在被调用函数中完成复制。
  • 除此之外, 这篇博客: C语言谭浩强第三版第十章例题及课后题:指针中的 10.4(20)有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • // 5:27 - 5:47
    /*
    8  
    12 43 65 67 8 2 7 11
    4
    */
    
    #include<stdio.h>
    
    void initial(int num[], int n);
    void show(int num[], int n);
    void move(int num[], int n, int m);
    
    void move(int num[], int n, int m){
    	int tmp[m];
    	int *p;
    	int *q;
    	
    	for(p = num+n-m, q = tmp; p < num+n; p++, q++){
    		*q = *p;
    	} 
    	printf("这%d个数为:",m);
    	show(tmp, m);
    	
    	//前面的数往后移
    	for(p = num; p < num+n-m; p++){
    		*(p+m) = *p;
    	}
    	//把后面的移到前面
    	for(p = num, q = tmp; p < num+m; p++, q++){
    		*p = *q;
    	}
    }
    
    void show(int num[], int n){
    	int i;
    	
    	for(i = 0; i < n; i++){
    		printf("%d ", num[i]);
    	}
    	printf("\n");	
    }
    
    void initial(int num[], int n){
    	int i;
    	
    	for(i = 0; i < n; i++){
    		scanf("%d", &num[i]);
    	}
    } 
    
    void main(void){
    	int num[100];
    	int n;
    	int m;
    	
    	printf("请输入要输入整数的个数(不超过100):");
    	scanf("%d", &n);
    	printf("请输入这%d个整数:", n);
    	initial(num, n);
    	printf("请输入要移动的个数:");
    	scanf("%d", &m);
    	
    	move(num, n, m);
    	printf("移动后数组的值为:");
    	show(num, n); 
    	
    }