鱼C论坛

 找回密码
 立即注册
查看: 1532|回复: 2

为什么这个代码在运行时y在数组中的值没有变化

[复制链接]
发表于 2023-12-8 19:57:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main(){
                int x,y,x2,y2,g,k,a=0;
                int tu[100][100]={0};
                scanf("%d %d %d %d",&x,&y,&g,&k);
                x2=x;
                y2=y;
                for(y;y<=y2+k;y++){
                        printf("%d\n",y);
                        for(x;x<=x2+g;x++){
                                tu[y][x]=a+1;
                                printf("x = %d,y =%d,tu=%d   ",x,y,tu[y][x]);
                        }
                }
                return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-12-8 19:58:22 | 显示全部楼层
这个问题出现的原因是你在循环内部使用了变量y作为循环变量,导致循环结束后y的值不会有任何改变。同时,你可能需要重新考虑使用数组的方式来存储tu的值。

下面是一个修改后的代码示例:
  1. #include <stdio.h>
  2. int main() {
  3.     int x, y, g, k;
  4.     int tu[100][100] = {0}; // 假设tu的最大大小为100x100
  5.     scanf("%d %d %d %d", &x, &y, &g, &k);
  6.     for (int i = 0; i < g; i++) {
  7.         for (int j = 0; j < k; j++) {
  8.             tu[x + i][y + j] = 1; // 将tu[x][y]到tu[x+g-1][y+k-1]的元素设置为1
  9.         }
  10.     }
  11.     // 输出tu的值
  12.     for (int i = 0; i < 10; i++) { // 假设打印10行
  13.         for (int j = 0; j < 10; j++) { // 假设打印10列
  14.             printf("%d ", tu[i][j]);
  15.         }
  16.         printf("\n");
  17.     }
  18.     return 0;
  19. }
复制代码

请注意,示例代码只演示了如何将tu数组中指定范围内的元素设置为1,并未显示完整的tu数组。您可以根据实际需求修改代码,输出更多或其他位置的元素。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-8 21:08:00 | 显示全部楼层
问题出在第十行代码,我们可以知道,在一次内循环(你设置的第二次for循环)后,我们的x的值就已经和x2+g相等了,那么在进入第二次外循环时,再进入内循环时,系统判定x == x2+g+1(x大于x2+g了),那么就不再进入循环了,所以不会再继续打印,就导致程序运行时只有一行,并且y的值不在变化,(因为只有继续打印后面的行,才会显示出你想看到的y的变化,实际上,我们可以看到,y最后的值就是y2+k+1,这点你应该清楚)

改进代码:
  1. #include<stdio.h>
  2. int main(){
  3.                 int x,y,x2,y2,g,k,a=0;
  4.                 int tu[100][100]={0};
  5.                 scanf("%d %d %d %d",&x,&y,&g,&k);
  6.                 x2=x;
  7.                 y2=y;
  8.                 for(y;y<=y2+k;y++){
  9.                         printf("%d\n",y);
  10.                         x = x2;//这里是唯一的修改。
  11.                         for(x;x<=x2+g;x++){
  12.                                 tu[y][x]=a+1;
  13.                                 printf("x = %d,y =%d,tu=%d   ",x,y,tu[y][x]);
  14.                         }
  15.                 }
  16.                 return 0;
  17. }
复制代码


运行示例:
  1. 5
  2. 5
  3. 5
  4. 5
  5. 5
  6. x = 5,y =5,tu=1   x = 6,y =5,tu=1   x = 7,y =5,tu=1   x = 8,y =5,tu=1   x = 9,y =5,tu=1   x = 10,y =5,tu=1   6
  7. x = 5,y =6,tu=1   x = 6,y =6,tu=1   x = 7,y =6,tu=1   x = 8,y =6,tu=1   x = 9,y =6,tu=1   x = 10,y =6,tu=1   7
  8. x = 5,y =7,tu=1   x = 6,y =7,tu=1   x = 7,y =7,tu=1   x = 8,y =7,tu=1   x = 9,y =7,tu=1   x = 10,y =7,tu=1   8
  9. x = 5,y =8,tu=1   x = 6,y =8,tu=1   x = 7,y =8,tu=1   x = 8,y =8,tu=1   x = 9,y =8,tu=1   x = 10,y =8,tu=1   9
  10. x = 5,y =9,tu=1   x = 6,y =9,tu=1   x = 7,y =9,tu=1   x = 8,y =9,tu=1   x = 9,y =9,tu=1   x = 10,y =9,tu=1   10
  11. x = 5,y =10,tu=1   x = 6,y =10,tu=1   x = 7,y =10,tu=1   x = 8,y =10,tu=1   x = 9,y =10,tu=1   x = 10,y =10,tu=1
复制代码


我们会发现程序运行后打印的东西很不整洁,同时,原代码也不容易理解你的意图,可以有以下改进:
  1. #include<stdio.h>
  2. int main(){
  3.         //定义loop_x和loop_y分别表示x和y循环自增的次数
  4.     int x,y,loop_x,loop_y,a=0;
  5.     //i和j用于循环过程的进行
  6.         int i,j;           
  7.         int tu[100][100]={0};
  8.         //temp记录x的初始值
  9.         int temp;
  10.        
  11.     scanf("%d %d %d %d",&x,&y,&loop_x,&loop_y);
  12.     temp = x;

  13.     for(i = 0;i <= loop_y;i ++,y ++){
  14.             x = temp;
  15.         for(j = 0;j <= loop_x;j ++,x ++){
  16.             tu[y][x]=a+1;
  17.             printf("x = %3d,y =%3d,tu=%3d   ",x,y,tu[y][x]);
  18.         }
  19.         printf("————%d\n\n",y);//想让y的值出现在每行的后面应该放在内循环的下面
  20.     }
  21.     return 0;
  22. }
复制代码


运行示例:
  1. 5
  2. 5
  3. 5
  4. 5
  5. x =   5,y =  5,tu=  1   x =   6,y =  5,tu=  1   x =   7,y =  5,tu=  1   x =   8,y =  5,tu=  1   x =   9,y =  5,tu=  1   x =  10,y =  5,tu=  1   ————5

  6. x =   5,y =  6,tu=  1   x =   6,y =  6,tu=  1   x =   7,y =  6,tu=  1   x =   8,y =  6,tu=  1   x =   9,y =  6,tu=  1   x =  10,y =  6,tu=  1   ————6

  7. x =   5,y =  7,tu=  1   x =   6,y =  7,tu=  1   x =   7,y =  7,tu=  1   x =   8,y =  7,tu=  1   x =   9,y =  7,tu=  1   x =  10,y =  7,tu=  1   ————7

  8. x =   5,y =  8,tu=  1   x =   6,y =  8,tu=  1   x =   7,y =  8,tu=  1   x =   8,y =  8,tu=  1   x =   9,y =  8,tu=  1   x =  10,y =  8,tu=  1   ————8

  9. x =   5,y =  9,tu=  1   x =   6,y =  9,tu=  1   x =   7,y =  9,tu=  1   x =   8,y =  9,tu=  1   x =   9,y =  9,tu=  1   x =  10,y =  9,tu=  1   ————9

  10. x =   5,y = 10,tu=  1   x =   6,y = 10,tu=  1   x =   7,y = 10,tu=  1   x =   8,y = 10,tu=  1   x =   9,y = 10,tu=  1   x =  10,y = 10,tu=  1   ————10
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-26 13:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表