若有说明: int *p,m = 5, n; 以下正确的程序段是()。A.p = &n; scanf ("%d",&p);B.p = &n; scanf ("%d",*p);C.scanf ("%d", &n); *p = n;D.p = &n; *p = m;

题目

若有说明: int *p,m = 5, n; 以下正确的程序段是()。

A.p = &n; scanf ("%d",&p);

B.p = &n; scanf ("%d",*p);

C.scanf ("%d", &n); *p = n;

D.p = &n; *p = m;


相似考题
参考答案和解析
D
更多“若有说明: int *p,m = 5, n; 以下正确的程序段是()。A.p = n; scanf ("%d",p);B.p = n; scanf ("%d",*p);C.scanf ("%d", n); *p = n;D.p = n; *p = m;”相关问题
  • 第1题:

    有以下程序:inlucdemain()D)2 3 3{int n,*P=NULL;*p=&n;printf("input n:");scanf("%d

    有以下程序: #inlucde<stdio.h> main()D)2 3 3 {int n,*P=NULL; *p=&n; printf("input n:");scanf("%d",&p);printf("output n:");printf("%d\n",p); } 该程序试图通过指针P为变量n读入数据并输出,但程序有多处错误,以下语句正确的是( )。

    A.int n,*P=NULL;

    B.*P=&n;

    C.scanf(“%d",&p)

    D.printf("%d\n",p);


    正确答案:A

  • 第2题:

    若有说明:int *p,m=5,n;,以下正确的程序段是

    A.p=&n;scanf("%d",&p);

    B.p=&n;scanf("%d",*p)

    C.scanf("%d",&n);*p=n;

    D.p=&n;*p=m;


    正确答案:D
    解析:&是求址运算符,"*"是指变量说明符。选项A)、B)应改为scanf("%d",p);选项C)中指针变量p未指向一确定的内存单元,不能为其赋值,并且这样做很危险,建议不使用。

  • 第3题:

    计算即付年金现值时,应采用的公式是( )。

    A.P=A(P/A,i,n)

    B.P=A[(P/A,i,n+1)-1]

    C.P=A(P/A,i,n-1)

    D.P=A[(P/A,i,n-1)+1]


    正确答案:D
    解析:即付年金现值=A[(P/A,i,n-1)+1]=A(P/A,i,n)(1+i)

  • 第4题:

    若有定义int *p,n;则通过语句scanf能够正确读入数据的程序段是( )。

    A.p=&n;scanf("%d",&p);

    B.p=&n;scanf("%d",*p);

    C.scanf("%d",n);

    D.p=&n;scanf("%d",p);


    正确答案:D
    解析:通过定义int*p,p是一个整型指针,p=&n是使p指向变量n,而p是一个指针,输入时不需再用地址运算符。

  • 第5题:

    若有说明:int *p,m=5,n;以下正确的程序段是( )。

    A.p=&n;scanf("%d",&p);

    B.p=&n;scanf("%d",*p)

    C.scanf("%d",&n);*p=6;

    D.p=&n;*p=m;


    正确答案:D
    解析:“&”是求址运算符,“*”是指针变量说明符。选项A),B)应改为scanf("%d",p);选项C)中指针变量p未指向一确定的内存单元,不能为其赋值,这样做很危险,建议不使用。

  • 第6题:

    下列递延年金的计算式中正确的是( )。

    A.P=A×(P/A,i,n)×(P/F,i,m)

    B.P=AX(F/A,i,n)×(P/F,i,m)

    C.P=A×E(P/A,i,m+n)-(P/A,i,m)]

    D.P=A×(F/A,i,n)×(P/F,i,n+m)


    正确答案:ACD
    递延年金有三种计算方法:
    第一种方法:P=A×(P/A,i,n)×(P/F,i,m);
    第二种方法:P=A×[(P/A,i,m+n)-(P/A,i,m)];
    第三种方法:P=A×(F/A,i,n)×(P/F,i,n+m)。

  • 第7题:

    阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    【说明】

    有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。

    【函数】

    main()

    {

    int number[20],n,m,i;

    printf("the total numbers is:");

    scanf("%d",&n);

    printf("back m:");

    scanf("%d",&m);

    for(i=0;i<=n-1;i)

    scanf("%d,",&number[i]);

    (1);

    for(i=0;i<=n-1;i)

    printf("%d,",number[i]);

    }

    move(array,n,m)

    int n,m,array[20];

    {

    int *p,array_end;

    array_end=(2);

    for(p=array[n-1];(3);p--)

    *p=(4);

    *array=array_end;

    m--;

    if(m>0) (5);

    }


    正确答案:(1)move(numbernm) (2)*(array[n-1]) (3)p>array (4)*(p-1) (5)move(arraynm)
    (1)move(number,n,m) (2)*(array[n-1]) (3)p>array (4)*(p-1) (5)move(array,n,m) 解析:本题考查数字顺序移动和数组的相关知识。
    从数据结构的角度出发,数字在数组中顺序移动,就是将数字一个一个往后搬,例如,将n-1位置的数字移到n位置,然后再把n-2位置的数字移到n-1位置,其实这是一个简单的数字移动。我们只需要取出第n个位置的数字并保存在一个临时变量中,然后,其他的就按顺序依次移动即可,直到一次整体移动完成,我们再从临时变量中取回数字并将其放在数组的第一个位置中。重复这个过程m次,整个数组就往后移动了m个位置。
    首先,我们来看一下主函数,在主函数里面声明了一个容量为20的整型数组 number[20]和其余3个整型变量,数组用来存储我们输入的待处理的数,而变量m、n分别用于存放我们要移动位置的个数和输入整数的个数。第一个循环语句用于n个整数的输入,第二个循环语句用于n个整数的输出,在这中间应该还有一个处理来完成将n个整数顺序向后移m个位置,并让最后m个数变成最前面的m个数这个功能,从下面的程序段我们知道,这里是调用函数muve(number,n,m)来完成的。因此,第(1)空填 move(nurnber,n,m),在调用时我们需要注意参数的传递。
    再来看move(array,n,m)函数,在此函数中,同样声明了一个容量为20的整型数组和 2个整型变量,另外还声明了一个指针变量p。由*array=array_end,结合第(2)空来看,这里是把数组中最后位置的数取出存放在array_end变量当中。因此,第(2)空应填 *(array[n-1])。
    第(3)空是常见的在循环语句中表示判断的语句,由于“p=array[n-1]”把数组最末的地址赋给了指针p,只要p的值大于数组的起始地址循环就可以继续,因此,第(3)空应填p>array。
    第(4)空要完成的任务是将数字后移,因此,第(4)空为*p-1。从程序来分析,数组每移动完成一次,m的值就减一,而现在只有移动m次的功能没有实现,因此,只要m值大于0,就调用函数自身来实现再次移动。因此,第(5)空填写move(array,n,m)进行递归调用。

  • 第8题:

    有以下程序#include <stdio.h>main { int n,*p=NULL; *p=&n; printf("Input n:"); scanf("%d",&p); printf("output n:"); printf("%d\n",p);}该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是A.int n,*p=NULL; B.*p=&n; C.scanf("%d",&p) D.printf("%d\n",p);


    正确答案:A
    在C语言中存在直接存取和间接存取两种访问内存数据的方法。前者利用变量名隐式地访问内存:首先定义变量,然后由编译系统完成从变量名到内存地址的映射工作,用户通过变量名访问内存空间,变量地址对用户完全透明。后者则通过指针显式地访问内存:用户直接使用变量的地址,或者将变量的地址值储存于特殊的变量中,然后通过此特殊的变量获取地址值访问内存。
    为了更好地使用指针变量,C语言提供了获取变量地址和通过地址访问变量的运算符“&”和“*”。
    (1)取地址运算符“&”的使用格式为:&变量名,如&a表示变量a在内存中的地址。本运算符实现从变量到地址的转化。
    (2)指针运算符“*”的使用格式为:*指针变量名,如*p表示指针变量p所指向的变量的值。本运算符实现从地址到变量的转化。
    在本题中,程序的作用已经给出,下面分别分析各选项中的语句。在选项A中,定义了一个整型变量n和一个整型指针变量p,并使其指向一个空,即不指向任何变量,该语句是正确的语句;在选项B中,由于*p表示值,而&n表示地址,它们之间进行赋值操作明显是错误的;在选项C中,由于p是指针变量,没有&p表示方法,因此错误;在D选项中,输出的是p指针所指向的地址,而不是p指针所指向的变量值,不符合题目的要求。

  • 第9题:

    有以下程序段: int n=0,p; do{scanf(“%d”,&p);n++;}while(p!=12345&&n<3); 此处do-while循环的结束条件是

    A.p的值不等于12345并且n的值小于3

    B.p的值等于12345并且n的值大于等于3

    C.p的值不等于12345或者n的值小于3

    D.p的值等于12345或者n的值大于等于3


    正确答案:D
    解析:do-while循环结构中循环执行条件的判断,使用do-while语句必须注意以下几点:
      1)先执行语句,后判断表达式。所以,无论一开始表达式的值为“真”还是“假”,循环体中的语句至少执行一次,这一点与while不同。
      2)如果do-while语句循环体部分是由多个语句组成,则必须用花括号括起来,使其形成复合语句。
      3)C语言中的do-while语句是在表达式“真”时重复执行循环体。在本题中,循环执行判断条件为while后面括号里的表达式即p!=12345&&n3(意思为P不等于12345且 n小于3)是否为“真”,由此可得循环结束的条件为:p大于12345或者P小于12345又或者n大于等于3。选项A的意思是:p的值不等于12345并且n小于3和while后面括号里的表达式等价是循环执行的条件而不是循环结束的条件;选项B的意思是:p的值等于 12345并且n的值大于3,不是循环结束的条件一个子集;选项C的意思是:p的值不等于 12345或者n的值小于3前一半是结束条件的子集,后一部分不是结束条件;选项D描述的意思是:p的值等于12345或者n的值大于等于3是结束条件的子集。

  • 第10题:

    有以下程序: main() { int m, n, p; scanf("m=% dn=% dp=% d", &m, &n, &p); printf("% d % d % d\n", m, n, p); } 若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是______。

    A.m=123n=456p=789

    B.m=123 n=456 p=789

    C.m=123,n=456,p=789

    D.123 456 789


    正确答案:A
    解析:输入变量的值的时候,输入的格式要和输入语句中那些控制格式字符串的格式一致。

  • 第11题:

    若有以下定义和语句 struct a{ int n,m;}; struct a st[3]={{2,3},{4,5},{6,7}}; struct a*p=st;则以下错误的引用是A.(p++)->n; B.st[0].n; C.(*p).n; D.P=&st.m,


    正确答案:D
    题目中给出了一个结构体,结构体类型名为 struct  a。该结构体成员列表包括两个整型变量。随后定义了一个结构体数组st[3],该数组的大小为3,同时定义了一个结构体指针p,指向数组st。
    选项A为(p++)->n,是指先将p的指针执行++操作,指向st[1],然后得到该结构体变量中的值n。
    选项B为st[0].n,这个是标准的结构体数组变量引用,得到结构体数组变量st[0]中的值n。
    选项C为(*p).n,该表达式与p->n是等价的,得到当前指针所指结构体变量中的值n。
    选项D为p=&st.m,该选项是错误的。若p是一个定义过的指向结构体变量的指针,则用它指向结构体变量的某一个成员,编译时将指出地址的类型不匹配。

  • 第12题:

    若有以下定义和语句 struct a { int n,m;}; struct a st[3]={{1,20},{2,19},{3,21}}; struct a*p=st; 则以下错误的引用是

    A.(p++)->n;

    B.st[0].n;

    C.(*p).n;

    D.p=&st.m;


    正确答案:D
    解析:可以用以下三种形式来引用结构体变量中的成员:结构体变量名.成员名、指针变量名->成员名和(*指针变量名).成员名。选项D)中“&st.m”取的是结构体中成员的地址而不是结构的地址。

  • 第13题:

    若有说明:int * p,m=51; n;,以下正确的程序段是()

    A.p=&m; scanf("%d",&p)

    B.p=&n; scanf("%d",&P)

    C.scanf("%d",&p) p=&n;

    D.p=&n; p=&m;


    正确答案:D

  • 第14题:

    若说明int *p,n;则通过语句scanf能够正确读入数据的程序段是

    A.p=&n;scanf("%d",&p);

    B.p=&n;scanf("%d",*p);

    C.scanf("%d",n);

    D.p=&n;scanf("%d",p);


    正确答案:D

  • 第15题:

    对前m期没有收付款项,后"期每期未有相等金额的系列收付款项的递延年金而言,其现值计算公式有( )。

    A.P=A×(P/A,i,n)×(P/F,i,m)

    B.P=A×(F/A,i,n)×(P/F,i,m+n)

    C.P=A×(P/A,i,n)×(P/A,i,m)

    D.P=A×[(P/A,i,m+n)-(P/F,i,m)]


    正确答案:AB
    解析:递延年金现值的计算有三种方法,第一种方法先求出递延期末的现值,然后再将此现值调整到第一期期初:P=A×(P/A,i,n)×(P/F,i,m),即选项A的表达式;第二种方法先求出(m+n)期的年金现值,再扣除递延期(m)的年金现值,即P=A×[(P/A,i,m+n)-(P/A,i,m)];第三种方法先求出递延年金的终值,再将其折算为现值,F=A×(F/A,i,n)×(P/F,i,m+n),即选项B的表达式。

  • 第16题:

    如果递延期为m,递延年金的计算公式为( )。

    A.P=A×(PVAr,m, n-PVAr,m)

    B.P=A×(PVAr,m, n-PVAr,n)

    C.P=A×PVAr,n×PVr,m

    D.P=A×PVAr,n×PVr,n


    正确答案:AC
    这是递延年金的计算公式,注意m是递延期。 

  • 第17题:

    若有说明:int*p,m=5,n;,以下正确的程序段是( )。

    A.p=&m; scanf("%d",&p)

    B.p=&n; scanf("%d",&p)

    C.scsnf("%d",&p) p=&n;

    D.p=&n; p=&m;


    正确答案:D
    解析:p为指针型变量,在输入函数的地址列表中不用&,当给指针变量赋值时是取变量的地址赋给指针变量,&为取地址运算符,因此只有选项D正确。

  • 第18题:

    有下列程序: main() {int m,n,p; scanf("m=%dn=%dp=%d",&m,&n,&p); printf("%d%d%d\n",m,n,p); } 若想从键盘上输入数据,使变量m中的值为123,n中的值为456,P中的值为789, 则正确的输入是( )。

    A.m=123n=456p=789

    B.m=123 n=456 p=789

    C.m=123,n=456,p=789

    D.123 456 789


    正确答案:A
    解析:scanf()函数中格式控制字符串是为了输入数据用的,无论其中有什么字符,在输入数据时,按照一一对应的位置原样输入这些字符。

  • 第19题:

    有以下程序 main () int m,n,p; scanf ( "m=%dn=%dp=%d" , &m, &n, &p); printf("%d %d %d\n", m, n, p); 若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,

    A.m=123n=456p=789

    B.m=123 n=456 p=789

    C.m=123,n=456,p=789

    D.123 456 789


    正确答案:A
    解析:本题考查的是标准输入函数scanf()的运用。scanf函数的第一个参数是格式控制串,若在格式控制串中插入了格式控制符以外的其他字符,则在输入数据时要在对应的位置原样输入这些字符才能正确输入。所以本题若想使变量m的值为123、n为456、p为789,则应该输入的字符串为:用这三个数据按m、n、p出现在scanf()函数中的位置顺序替换掉scanf()函数格式控制串中的格式控制符后所得到的格式控制串,即“m=123n=456p=789”。所以,4个选项中选项A符合题意。

  • 第20题:

    若有说明:int * p,m=51; n;,以下正确的程序段是( )

    A.p=&m; scanf("%d",&p)

    B.p=&n; scanf("%d",&P)

    C.scanf("%d",&p) p=&n;

    D.p=&n; p=&m;


    正确答案:D

  • 第21题:

    有以下程序: main() {int m,n,p; scanf("m=%dn=%dp=%d",&m,&n,&p); printf("%d%d%\n",m,n,p); } 若想从键盘上输入数据,使变量m中的值为123,n中的值为456;p中的值为789,则正确的输入是 ______ 。

    A.m=123 n=456p=789

    B.m=123 n=456 p=789

    C.m=123,n=456,p=789

    D.123 456 789


    正确答案:A
    解析:根据本题的数据输入形式“scanf("m=%dn=%dp=%d",&m,&n,&p);”说明在输入数据时,必须输入“m=”、“n=”、“p”字符,且中间不能含有空格。

  • 第22题:

    有以下程序 main() { int m,n,p; scanf("m=% dn=% dp=%d",&m,&n,&p); printp("%d %d %d d\n",m,n,p); } 若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是______。

    A.m=123n=456p=789

    B.m=123 n=456 p=789

    C.m=123,n--456,p=789

    D.123 456 789


    正确答案:A

  • 第23题:

    有以下程序: main() { int m,n,P; scanf("m=%dn=%dp=%d",&m,&n,&p); printf("%d%d%d\n",m,n,p); } 若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则王确的输入是( )。

    A.m=123n=456p=789

    B.m=123 n=456 p=789

    C.m=123,n=456,P=789

    D.123 456 789


    正确答案:A
    解析:本题的考点是关于C语言的输入语句scanf的通配符。C语言规定:scanf中的双引号中的输入格式(就是俗称的通配符)决定了输入的格式。要输入123给m,456给n,789给p,由scanf的输入格式:“m=%dn=%dp=%d”决定了输入必须的格式是:m=123n=456p=789。

  • 第24题:

    某建设项目现金流量图见图4-3,基准折现率为i,则该项目在k时点的现值P的表达式正确的有( )。


    A.P=A(P/A,i,n-m+1)(P/F,i,m-k-1)
    B.P=A(P/A,i,n-m+1)(P/F,i,n-k)
    C.P=A(F/A,i,n-m+1)(P/F,i,m-k-1)
    D.P=A(F/A,i,n-m+1)(P/F,i,n-k)
    E.P=A(P/A,i,n-k)-A(P/A,i,m-k-1)

    答案:A,D,E
    解析:
    2020版教材P163
    本题中,将已知的年金折算为一点有三种方法:一种是将年金往前折算,折算到m-1年末,然后再一起往k点折算;此时共有n-(m-1)个年金,从m-1到k共计息(m-1-k)次,因此P=A(P/A,i,n-m+1)(P/F,i,m-k-1)。第二种方法是将年金往后折算,折算到第n年末。然后再一起往k点折算;从n到k共计息(n-k)次。因此P=A(F/A,i,n-m+1)(P/F,i,n-k)。第三种方法如图4-4所示,在k+1与m-1增加一个等额年金A,再减去等额年金A。则k+1到n年有等额现金流入,k+1到m-1年有等额现金流出,因此P为两个年金现值的差。