内容发布更新时间 : 2024/12/23 21:30:35星期一 下面是文章的全部内容请认真阅读。
}
void printd(int n) { int i;
if(n<0) { n=-n; putchar('-'); } putchar(n+'0');
if((i=n/10)!=0) printd(i); 倒过来 }
7 运行下面程序,从键盘输入四个字符xyz#,其输出是_xyz##zyx__。
#include
{ void recursion(); recursion(); }
void recursion() { char c;
c=getchar(); putchar(c);
if(c!='#') recursion(); putchar(c); }
8 以下程序的输出结果是_1 3__。
#include
{ if(x/2>0) fun(x/2); printf(\%d \,x); } main()
{ fun(3); printf(\\\n\); }
9 以下程序运行结果是__14_。 为什么???
int a=1; int f(int c)
{ static int a=2; c=c+1;
return (a++)+c; }
main()
{ int i,k=0;
for(i=0;i<2;i++){ int a=3; k+=f(a); } k+=a;
printf(\%d\\n\,k); }
10.以下程序的运行结果是_m=4
k=4 i=5 k=5__。
int k=0;
void fun(int m)
{ m+=k; k+=m; printf(\m=%d\\n k=%d \,m,k++); }
24
main()
{ int i=4;
fun(i++); printf(\i=%d k=%d\\n\,i,k); }
三 程序填空题(每空3分,共30分)
1 一个整数称为完全平方数,是指它的值是另一个整数的平方。例如81是个完全平方数,因为它是9的平方。下列程序是在三位的正整数中寻找符合下列条件的整数:它既是完全平方数,且三位数字中又有两位数字相同:例如144(12*12)、676(26*26)等,程序找出并输出所有满足上述条件的三全数。 程序如下: main()
{ int n,k,a,b,c; for(k=1;;k++)
{ 【1】n=k*k;
if(n<100) 【2】continue ; if(n>999) 【3】break ; a=n/100;
b= 【4】n/10 ; c=n;
if(flag(a,b,c)) printf(\n=%d=%d*%d\\n\,n,k,k); } }
flag 【5】int x,int y,iny z
{ return(!((x-y)*(x-z)*(y-z))); }
x
2 以下程序的功能是应用近似公式计算e的值。其中,函数f1计算每项分子的值,函数f2计算每项分母的值。共取nmax项之和作为e的近似值。
x2x3xnxmax?1e?1?x???????
2!3!n!(max?1)2!xfloat f2(int n)
{ if(n==1) return 1;
else return 【6】n*f2(n-1) ; }
float f1(float x, int n) { int i; float j= 【7】1 ;
for(i=1; 【8】i<=n ;i++) j=j*x; return j; }
#define nmax 20 main()
{ float x,exp=1.0; int n; printf(\Input x value:\); scanf(\%f\,&x);
25
for(n=1;n 指针 一 单项选择题(每题2分,共40分) 1 以下叙述中错误的是__B_。 A 在程序中凡是以“#”开始的语句行都是预处理命令行 B 预处理命令行的最后不能以分号表示结束 C #define MAX是合法的宏定义命令行 D C程序对预处理命令行的处理是在程序执行的过程中进行的 2 若程序中有宏定义行:#define N 100 ,则以下叙述中正确的是_B__。 A 宏定义行中定义了标识符N的值为整数100 B 在编译程序对C源程序进行预处理时用100替换标识符N C 对C源程序进行编译时用100替换标识符N D 在运行时用100替换标识符 3 若有如下宏定义: #define N 2 #define y(n) ((N+1)*n) 则执行下列语句:z=4*(N+y(5));后的结果是_B__。 4*(2+(3*5)) A 语句有错误 B z值为68 C z值为60 D z值为180 4 以下程序运行后的输出结果是_A__。 #define F(X,Y) (X)*(Y) main() { int a=3,b=4; printf(\%d\\n\,F(a++,b++)); } A 12 B 15 C 16 D 20 5 以下程序运行后的输出结果是_C__。 #define f(x) (x*x) main() { int i1,i2; i1=f(8)/f(4); i2=f(4+4)/f(2+2); printf(\%d,%d\\n\,i1,i2); } A 64,28 B 4,4 C 4,3 D 64,64 6 若已定义a为int型变量,则__D_是对指针变量p的正确说明和初始化。 A int p=&a; B int *p=a; C int *p=*a; D int *p=&a; 7 已知下列说明语句: static int a[]={2,4,6,8} static int *p[]={a,a+1,a+2,a+3}; int **q; q=p; 26 则表达式**(q+2)的值是__A_。 A 6 B 2 C 4 D 8 8 下面是一个初始化指针的语句:int *px=&a;,其中指针变量的名字应该_C__。 A *px B a C px D &a 9 若指针px为空指针,则_B__。。 A px指向不定 B px的值为零 C px的目标为零 D px的地址为零 10 对下语句int *px[10];,下面正确的说法是_B__。 A px是一个指针,指向一个数组,数组的元素是整数型。 B px是一个数组,其数组的每一个元素是指向整数的指针。 C A和B均错,但它是C语言的正确语句。 D C语言不允许这样的语句。 11 具有相同基类型的指针变量p和数组y,下列写法中不合法的是__D_。 A p=y B *p=y[i] C p=&y[i] D p=&y 12 已知static int a[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p; , 则表达式 *(p[0]+1)+**(q+2) 的值是_A__。 A 5 B 4 C 6 D 7 13 说明语句int *(*p)();的含义为_D__。 A p是一个指向int型数组的指针 B p是指针变量,它构成了指针数组 C p是一个指向函数的指针,该函数的返回值是一个整型 D p是一个指向函数的指针,该函数的返回值是一个指向整型的指针 14 设有如下程序段 char s[20]=\Beijing\,*p; p=s; 则执行p=s;语句后,以下叙述正确的是_A__。 A 可以用*p表示s[0] B s数组中元素个数和p所指字符串长度相等 C s和p都是指针变量 D 数组s中的内容和指针变量p中的内容相同 15 设int型变量i、n均已定义,指针变量s1、s2各指向一个字符串。在for(i=0;i A *s1++=*s2++; B s1[n-1]=s2[n-1]; C *(s1+n-1)=*(s2+n-1); D *(++s1)=*(++s2); 16 给出下列程序的运行结果__B_。 #include { static char a[]=\language\,b[]=\program\; char *ptr1=a,*ptr2=b; int k; for(k=0;k<7;k++) if(*(ptr1+k)==*(ptr2+k)) printf(\%c\,*(ptr1+k)); } 求出相同的字符 A gae B ga C language D 有语法错误 17 以下程序执行后的输出结果是_A__。 void fun1(char *p) 27