1、函数fun的功能是计算x^n。
double fun(double x,int n)
{int i; double y=1;
for(i=1;i<=n;i++) y=y*x;
return y;
}
主函数中已经正确定义m、a、b变量并赋值,并调用fun函数计算:
m=a^4+b^4-(a+b)^3。实现这一计算的函数调用语句为______。
答案:1:fun(a,4)+fun(b,4)-fun((a+b),3)
评析:
函数fun的功能是计算x的n次方,所以a的4次方的调用函数应当为fun(a,4),b 的4次方的调用函数应当为
fun(b,4),(a+b)的3次方的调用函数应当为fun((a+b),3),所以,实现m=a^4+b^4-(a+b)^3这一计算的函数调用语句为:
fun(a,4)+fun(b,4)-fun((a+b),3);。
知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用
2、以下sstrcpy()函数实现字符串复制,即将t所指字符串复制到s所指内存空间中,形成一个新字符串s。请填空。
void sstrcpy(char *s,char *t)
{ while(*s++=______);}
main()
{ char str1[100],str2[]="abcdefgh";
sstrcpy(str1,str2);
printf("%s\n",str1);
}
答案:1:*t++
评析:
要使sstrcpy()函数实现字符串复制,必须将t字符串中的每个字符逐个拷到s字符串中,所以可以使用*s=*t;s++;t++。或者可以写成*s++=*t++,本题只有一个空,可以填入*t++。
知识点:知识点/指针/用指针作函数参数
3、以下程序给指针p分配三个double型动态内存单元,请填空。
#include <stdlib.h>
main()
{ double *p;
p=(double*)malloc(______);
p[0]=1.5; p[1]=2.5;p[2]=3.5;
printf("%f%f%f\n",p[0],p[1],p[2]);
}
答案:1:3*sizeof(double)
评析:
malloc(size)在内存的动态存储区中分配一个长度为size的连续空间。此函数的值(即"返回值")是一个指针,它的值是该分配域的起始地址。如果此函数未能成功地执行,则返回值为0。
本题中要求分配三个double型动态内存单元,所以size处应当为
3*sizeof(double)。
知识点:知识点/指针/各类型的指针及指针变量,通过指针引用各类型数据
4、以下程序运行后的输出结果是______。
main()
{ int a,b,c;
a=25;
b=025;
c=0x25;
printf("%d %d %d\n",a,b,c);
}
答案:25 21 37
评析:
本题考查的是格式字符的输出。
变量a、b、c分别为十进制、八进制、十六进制的25,格式字符d所代表的含义是,以带符号的十进制形式输出整数(正数不输出符号),所以本题a=25则输出值为25;b=025转换为10进制:b=2*8+5=16+5=21,则输出的值为21;c=0x25转换为10进制:c=2*16+5=32+5=37,则输出的值为37,而且printf中三个%d之用的是空格,所以输出的几个数字之间也必须是空格。
知识点:知识点/函数/变量的存储类别,变量的作用域和生存期
5、以下程序运行后的输出结果是______。
main ()
{ char a[]="Language",b[]="Programe";
char *p1,*p2; int k;
p1=a; p2=b;
for(k=0;k<=7;k++)
if(*(p1+k)==*(p2+k)) printf("%c",*(p1+k));
}
答案:gae
评析:
本题考查的是字符指针变量与字符数组。
解题过程:
(1)当k=0时,*(p1+0)='L',*(p2+0)='P',L!=P,所以没有输出
(2)当k=1时,*(p1+1)='a',*(p2+1)='r',a!=r,所以没有输出
(3)当k=2时,*(p1+2)='n',*(p2+2)='o',n!=o,所以没有输出
(4)当k=3时,*(p1+3)='g',*(p2+3)='g',g==g,所以输出g
(5)当k=4时,*(p1+4)='u',*(p2+4)='r',u!=r,所以没有输出
(6)当k=5时,*(p1+5)='a',*(p2+5)='a',a==a,所以输出a
(7)当k=6时,*(p1+6)='g',*(p2+6)='m',g!=m,所以没有输出
(8)当k=7时,*(p1+7)='e',*(p2+7)='e',e==e,所以输出e
(9)当k=8时结束循环
(10)输出结果为:gae。
知识点:知识点/数组的定义和引用/字符串与字符数组
6、以下程序通过函数SunFun和f(x),x=0到10,这里f(x)=x^2+1,由F函数实现,请填空。
main()
{ printf("The sun=%d\n",SunFun(10));}
SunFun(int n)
{ int x,s=0;
for(x=0;x<=n;x++)s+F(______);
return s;
}
F(int x)
{ return (______);}
答案:1:x
2:x*x+1
评析:
本题考查的是函数的调用。
解题过程:
(1)f(x)的含义为x的平方加上1
(2)所以F(int x)的返回值应该为x*x+1
(3)SunFun(10)的作用是将0到10之间所有的整数相加求和
(4)所以F()的形式参数为x。
知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用
7、以下程序中,函数SumColumMin的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。请填空。
#define M    2
#define N    4
void SumColumMin(int a[M][N],int *sum)
{ int i,j,k,s=0;
for(i=0;i<N;i++)
{ k=0;
for(j=1;j<M;j++)
if(a[k][i]>a[j][i])k=j;
s+=______ ;
}
______ =s;大一期末c语言必考知识点
}
main()
{ int x[M][N]={3,2,5,1,4,1,8,3},s;
SumColumMin(______);
printf("%d\n",s);
}
答案:1:a[k][i]
2:*sum
3:x,&s
评析:
本题考查的是函数参数的传送。
解题过程:
(1)执行以i为变量的for语句
1)k=0
2)执行以j为变量的for语句
①当j=1
②比较a[0][0]和a[1][0]的大小,如果a[0][0]大于a[1][0]则k=1;如果a[0][0]大于a[1][0]则k=0
③j=2所以结束循环
3)此时a[k][i]就代表第一列中最小的值,要累计所有列中的最小值的和,应该在第一空内填写a[k][i],用变量s累加。
(2)SumColumMin是一个无返回值的函数,其中形式参数*sum是一个指针类型,所以第二空应该填写*sum,用来将该指针变量指向s
(3)当主函数main调用SumColumMin时,需要两个实际参数,一个代表被操作的数组,一个为指向累计和的指针变量,所以第三个空应该为x,&s,分别代表已经被定义的数组x,和整型变量s的地址。
知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用
8、以下程序的输出结果是。
main()
{
int a=0;
a+=(a=8);
printf("%d\n",a);
}
答案:16
评析:
本题的考查点是表达式。
表达式a+=8相当于a=a+8,对表达式逐步求解过程如下:
a+=(a+8)此时,a的值赋值为8,而不再是0;
a+=8
a=a+8
a=16
故本题答案为16。
知识点:知识点/函数/形式参数与实在参数,参数值的传递
9、以下程序的输出结果是______。
#define MAX(x,y) (x)>(y)?(x):(y)
main()
{
int a = 5, b = 2,c = 3, d = 3, t;
t = MAX(a + b, c + d)*10;
printf("%d\n", t);
}
答案:7
评析:
本题的考查点是宏定义。
宏替换后,表达式t = MAX(a + b, c + d)*10即变为:t = (a+b)>(c+d) ? (a+b) : (c + d)*10;
由于(a+b)>(c+d)为真,所以t = (a+b),即为7。
故本题答案为:7。
知识点:知识点/编译预处理/宏定义:不带参数的宏定义;带参数的宏定义
10、函数mycmp(char *s,char *t)的功能是比较字符串s和t的大小,当s等于t时返回0,当s>t返回正值,当s<t时返回负值。请填空。
mycmp( char *s,char *t)
{ while (*s==*t)
{ if (*s=='\0')return 0;
++s;++t;
}
return(______);
}
答案:*s-*t
评析:
本题的考查点是比较字符串的大小。
函数的两个形参是两个字符指针变量,字符串的首地址是指针变量的值,*s和*t表示字符串数组s和t的第一个字符,在while循环中,是通过s和t值的不断变化改变两个串的第一个字符,要返回s和t的第一个不同字符的ASCII码的差值,必须使用"*s-*t"得出。
故本题答案为:*s-*t。
知识点:知识点/函数/库函数的正确调用
11、若给fun函数的形参s传送字符串:" 6354abc",则函数的返回值是
______。(字符串中包括空格)
long fun(char s[ ])
{ long n; int sign;
for (; isspace(*s);s++);
sign=(*s=='-')?-1:1;
if (*s=='+' || *s=='-') s++;
for (n=0;isdigit(*s);s++)
n=10*n+(*s-'0');
return sign*n;
}
答案:6354
评析:
本题的考查点是函数的返回值。
这个函数的目的是提取出由函数的形参传送来的字符串中的数字字符,并通过相应各个字符位置计算出它们数值形式的幂,最后返回字符串中的数字字符的数值形式,所以函数的返回值应当是"6354"。
故本题答案为:6354。
知识点:知识点/函数/函数的正确调用,嵌套调用,递归调用
12、以下程序段的输出结果为______。
char *p;int i,d;
p="PDP1-0";
for(i=0;i<7;i++)
{
d=isdigit(*(p+i) );
if(d!=0)
printf("%c\n",*(p+i) );
}
答案:  1