作业帮 > 综合 > 作业

1)有以下程序      #include <stdio.h&g

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/17 05:50:47
1)有以下程序      #include <stdio.h>      main()      {  int  a1,a2; char c1,c2;         scanf(“%d%c%c”,&a1,&c1,&a2,&c2);         printf(%d,%c,%d,%c,a1,c1,a2,c2);      }      若想通过键盘输入,使得a1的值为12,a2的值为34,c1的值为字符a,c2的值为字符b,程序输出的结果是:12,a,34,b则正确的输入格式是(以下︿代表空格,<CR>代表回车)      A)12a34b<CR>                            B)12︿a︿34︿b<CR>      C)12,a,34,b<CR>                         D)12︿a34︿b<CR> 选A,为什么? 2)有以下程序#include <stdio.h>void fun( int *a,int *b){int *c;c=a;a=b;b=c;}main(){int x=3,y-5,*P=&x,*q=&y; fun(p,q);printf(“%d,%d,”,*p,*q);fun(&x,&y);printf(“%d,%d\n”,*p,*q);}程序运行后的输出结果是A)3,5,5,3   B)3,5,3,5   C)5,3,3,5   D)5,3,5,3 选B,为什么? 3)若有以下定义      int x[10],*pt=x;则对x数组元素的正确应用是A)*&x[10]    B)*(x+3)    C)*(pt+10)     D)pt+3 答案是B,为什么C不行? 4)#include <stdio.h>int b=2;int fun(int *k){ b=*k+b;return (b);}main(){ int a[10]={1,2,3,4,5,6,7,8},I;  for(i=2;i<4;i++) {b=fun(&a)+b;printf(“%d”,b);}  printf(“\n”);}程序运行后输出的结果是A)10  12     B)8   10     C)10   28     D)10   16 选C,为什么?
(1)因为scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2);对应的输入格式为:12a34b
整型数据之间的输入用空格隔开 如scanf(“%d%d”,&a,&b):输入格式为:12 34
但若为字符型 不能用空格隔开 如scanf("%c%c",&c,&d);输入格式为:ab 中间不能有空格;若有空格,因为空格也是一个字符,就会被读入.
(2)在函数里,要想真正改变参数的值,必须使用指针.
而函数void fun( int *a,int *b)
{
\x09int *c;
\x09c=a;
\x09a=b;
\x09b=c;
}的功能,只是指针间的交换,并没有涉及其指向的内容.若想真正改变指针p,q指向的值.需改为:
void fun( int *a,int *b)
{
\x09int c;
\x09c=*a;
\x09*a=*b;
\x09*b=c;
}
故答案为3 5 3 5
(3)正确答案是B
A数组越界
B正确
C数组越界(A和C表示都是正确的,只是数组越界)
D题目是关于对X数组元素的应用,pt+3算的是元素的地址,不合题意