函数-习题错误更改

错误表达---形参可以是常量,变量或表达式。

        关于形参

  1. 形参只能是变量,在被定义的函数中,必须指定形参的类型。

  2. 没有确定的值

  3. 形参变量在未出现函数调用时,并不占用内存,只在调用时才占用。调用结束后,将释放内存。

        关于实参

  1. 实参可以是常量、变量、表达式、函数等

  2. 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。

  3. 开辟内存存储数据

错误表达---函数调用可以作为一个函数的形参

        返回值存在寄存器中, 没有地址, 不能作为形参,但可以作为实参。

函数之间的数据传递方式

        函数调用中发生的数据传送是单向的。 即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

C语言头文件<>和""的区别

        1.头文件#include <> :表示引用标准库头文件,编译器会从系统配置的库环境中去寻找

        2.头文件#include " ":一般表示用户自己定义使用的头文件,编译器默认会从当前文件夹中寻找,如果找不到,则到系统默认库环境中去寻找。

关于宏定义

        一般来说,宏定义(# define)是相当于字符替换,在代码预编译时就进行替换,编译时候所有宏定义的代码改变为被替换的代码,不限制任何代码,任何字符都可以进行宏定义,宏定义可以写在程序中的任何位置,它的作用范围从定义触到文件尾,在这些范围内都可以用宏名进行替换,宏是针对预处理器的任务;

        宏名一般用大写字母表示,以示与变量区别。但这并非规定;宏定义不是C语句,所以不能在行尾加分号,否则,宏展开时,会将分号作为字符串的一个字符,用于替换宏名。

        宏定义不占用运行时间,只占用编译时间。

        代码错误问题

        ①若有宏定义#define MOD(x,y) x%y ,下面程序段的结果是()。 int z,a=15; float b=100; z=MOD(b,a); printf("%d",z++);

        A.11

        B.10

        C.6

        D.语法错误

        选D,语法错误,z=b%a,C语言中运算符%要求两端的运算对象的数据类型必须为整数,由于B是浮点数,因此表达式是不合法的

        ②以下程序的运行结果是( )

  #include <stdio.h>
      #define MIN(x,y) (x)>(y) ? (x) : (y)
      int main()
      {
            int i=10,j=15,k;
            k=10*MIN(i,j);
            printf("%d\n",k);
            return 0;
      }

A.  10             B.  15            C.  100            D.  150

        选A,将k=10*MIN(i,j)展开得k=10*(i)>(j),根据运算符优先级,先计算10*(i),将变量值带入上式后变为k=100>(15)?(10):(15),则k=10 。

③在任何情况下计算平方数都不会引起二义性的宏定义是( )

        A.  define POWER(x) x*x

        B.  define POWER(x) (x)*(x)

        C.  define POWER(x) (x*x)

        D.  define POWER(x) ((x)*(x))

        选D,在进行带参数的宏定义时,要确保运算过程没有二义性,应对被替换字符串中的每个形参都加上括号,因此应选D

④以下程序的运行结果是

#define ADD(x) x+x
main( )
{ int m=1,n=2,k=3;
int sum=ADD(m+n)*k;
printf(“sum=%d”,sum); }

A) sum=9 B) sum=10 C) sum=12 D) sum=18

        选c,展开后为 sum = m+n + m+n *k,1+2+1+2*3=10

若有宏定义如下:

#include <stdio.h>
#define X 5
#define Y X+1
#define Z Y*X/2
int main()
{
    int a=Y;
    printf("%d   ",Z);
    printf("%d\n",--a);
    return 0;

}

A.7 6

B.12 6

C.12 5

D.7 5

        选D,X+1*X/2 = 5+1*5/2 =5+2.5 转换为整型为7,a--为5;

fun(int a,int b,int c)
{c=a*b;}
int main(void)
{int c;
fun(2,3,c);
printf("%d\n",c);
return 0;
}

        输出结果为:A.0       B.1       C.6       D.无法确定

       选D, 因为fun中的c不是main中的c, 当fun函数return后,fun中的c生命就结束了,而main中的c依然还是一个没有初始化的变量,所以是一个不确定的值

分析以下程序的运行结果( )

        把x和y传给函数func。所以实参是x和y,形参是a和b。虽然在fun函数中进行了a,b值的交换,
但是a,b仅仅是fun函数的内部变量,他们的值的变化不影响main函数中的x,y的值,所以x,y还是10,20。

#include<stdio.h>
func(int a ,int b)
{
int temp=a;
a=b;b=temp;
}
main()
{
int x,y;
x=10;y=20;
func(x,y);
printf("%d,%d\n",x,y);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值