注册 登录
编程论坛 C语言论坛

读程序题看不懂

PGLWGES 发布于 2020-12-15 17:38, 1511 次点击
#include<stdio.h>
int a = 1;
int main()
{
    int sub(int a);
    int a;
    for (a = 1;a < 10;a++)
    {
        sub(a++);
        printf("%d", a);
    }
    return 0;
}
int sub(int a)
{
    a = a * a;
    return a;
}
最后输出为什么是2 4 6 8 10?
不是调用函数求平方吗?
3 回复
#2
风过无痕19892020-12-15 19:01
回复 楼主 PGLWGES
第1次循环:a = 1, a = a * a = 1 * 1 = 1,返回后自增 1 ,输出 a = 2;
第2次循环:a = 3, a = a * a = 3 * 3 = 9,返回后自增 1 ,输出 a = 4;
第3次循环:a = 5, a = a * a = 5 * 5 = 25,返回后自增 1 ,输出 a = 6;
第4次循环:a = 7, a = a * a = 7 * 7 = 49,返回后自增 1 ,输出 a = 8;
第5次循环:a = 9, a = a * a = 9 * 9 = 81,返回后自增 1 ,输出 a = 10;
至此,a = 10 已经大于循环设定的条件 a < 10,循环结束。为什么没有输出 1,9,25,49,81 呢?原因是函数里的变量虽然与主程序里的变量是同名同姓,但它们却不是同一个变量!!!我将程序稍加改改,就看明白了
程序代码:

#include<stdio.h>
int a = 1;
int main()
{
    int sub(int c);        // 定义函数(注意:形参变了)
    int a, b;
    for (a = 1;a < 10;a++) // 循环9次
    {
        b = sub(a++);          // 以整型变量每次自增方式调用函数
        printf("%d  %d", a,b); // 输出
    }
    return 0;
}
int sub(int c)             // 定义函数体(注意:形参变了)
{
    c = c * c;             // 求得平方值,再赋给整型变量 c
    return c;              // 返回 c
}
#3
apull2020-12-15 19:22
sub返回的值没有赋值给a,sub做了无用功,没啥用。
sub的时候a+1,循环里a+1,因此是输出偶数
#4
PGLWGES2020-12-17 19:54
懂了懂了,谢谢
1