5.2 填空题
(372) 设已定义char s[] = "\"Name\\Address\"\n";则字符串s所占的字节数是_______。
(373) 若有定义语句:char s[100],d[100]; int j=0, i=0;且s中已赋字符串,请填空以实现字符串拷贝。(注:不得使用逗号表达式)
while([i])
{
d[j] = _________;
j++;
}
d[j]=0;
(374) 若想通过以下输入语句使a中存放字符串"1234",b中存放字符"5",则输入数据的形式应该是________。
Char a[10],b;
Scanf("a=%sb=%c", a, %b);
(375) 对于以下递归函数f,调用 f (3) 的返回值是_____。
f(int n)
{
return((n>0) ? 2*f(n-1)+f(n-2) : -1);
}
(376) 以下函数调用语句中含有___个实参。
func((exp1,exp2),(exp3,exp4,exp5));
(377) 下面程序的功能是在一个字符数组中查找一个指定的字符,若数组中含有该字符则输出该字符在数组中第一次出现的位置(下标值);否则输出-1。请完成下面程序。
#include
#include
main()
{
char c='a',t[50];
int n,k,j;
gets(t);
n = _______;
for (k=0;k {
if((_______){j=k;break;}
else j-=1;
printf("%d", j);
}
}
(378) 下面程序的功能是在三个字符串中找出最小的。请填空。
#include
#inculde
main()
{
char s[20],str[3][20];
int i;
for (i=0; i<3; i++) gets(str[i]);
strcpy(s, _______);
if (strcmp(str[2],s)<0) strcpy(s,str[2]);
printf("%s\n", ________);
}
(379) 下面程序段的运行结果是___
char ch[] = "600";
int a, s=0;
for (a=0; ch[a]>='0' && ch[a]<='9'; a++)
{
s=10*s+ch[a]-'0';
}
printf("%d",s);
(380) 下列程序段的输出结果____。
int m;
int f(int x)
{
static int k = 0;
x-=k++;
return x;
}
m = f(f(3));
printf("%d ", m);
(381) 下列程序段的输出是_____。
# include
int f(int m)
{
static int k=0;
int s=0;
for(; k<=m; k++) s++;
return s;
}
void main( )
{ int s1, s2;
s1 = f(5);
s2 = f(3);
printf("%d %sn", s1, s2);
}
(382) 补充下面程序:
函数
void f(char s[ ], char t[ ])
{
int k=0;
while (s[k] = t[k])
k++;
}
等价于:
void f(char *s, char *t)
{
while (_____);
}
(383) 下程序段的输出是_____。
#include
void fun()
{
static int a = 5;
a++;
printf("a=%d\n", a);
}
main()
{
for (int i=0; i<2; i++)
fun();
}
5.3 问答与设计
(384) 指出下面的函数的错误。
int square(volatile int *ptr)
{
return *ptr * *ptr;
}
(385) 什么是递归(recursion)?怎样使用递归?
(386) 什么时候说明函数?
(387) 为什么要说明函数原型?
(388) 一个函数可以有多少个参数?
(389) 什么是内部函数?
(390) 如果一个函数没有返回值,是否需要加入return语句?
(391) 说明为什么要禁止函数直接或间接调用自己?
(392) exit()和return有什么不同?
(393) 怎样把数组作为参数传递给函数?
(394) 在程序退出main()函数之后,还有可能执行一部分代码吗?
(395) 什么时候用一条switch语句比用多条if语句更好?
(396) switch语句必须包含default分支吗?
(397) switch语句的最后一个分支可以不要break语句吗?
(398) 空循环(null loops)和无穷循环(infinite loops)有什么区别?
(399) continue和break有什么区别?
(400) 什么是重复处理(iterative processing)?
(401) 在C语言中表示真和假的最好方法是什么?
(402) 请修改以下代码:
include studio.h
main{}
/* this program prints the number of weeks in a year. /*
(
int s
s:=52;
print(There are s weeks in a year");
(403) 函数名可以作实参吗?如果可以,请举例说明;如果不可以,请说明原因。
(404) 如何定义和说明可变参数的函数?
(405) 如将求3次方函数a=pow(a,3.0);改为a=a*a*a;能够优化代码,说明原因。
(406) 写函数htoi( s ),把由十六进制数字组成的字符串(前面可能包含0 x或0 X)转换成等价的整数值。字符串中允许的数字为: 0 ~ 9,a ~ f、以及A ~ F。
(407) 重写squeeze(s1, s2)函数,把字符串s1中与字符串s2中字符匹配的各个字符都删除掉。
(408) 编写函数any(s1, s2),它把字符串s2中任一字符在字符串s1中的第一次出现的位置作为结果返回。如果s1中没有包含s2中的字符,那么返回-1。
(409) 编写一个函数setbits(x, p, n, y),返回对x做如下处理得到的值: x从第p位开始的n位被置为y的最右边n位的值,其余各位保持不变。
(410) 编写一个函数invert(x, p, n),返回对x做如下处理得到的值: x从第p位开始的n位被求反(即,1变成0,0变成1),其余各位保持不变。
(411) 编写一个函数rightrot (x, n),返回将x向右循环移动n位所得到的值。
(412) 在求反码时,表达式x &= ( x - 1 )用于把x最右边的值为1的位删除掉。请解释一下这样做的道理。用这一方法重写b i t c o u n t函数,使之执行得更快一点。
(413) 使用条件表达式重写用于将大写字母转换成小写字母的函数low e r。
(414) 编写函数escape (s, t),将字符串t拷贝到字符串s中,并在拷贝过程中将诸如换行符与制表符等等字符转换成诸如\ n与\ t等换码序列。使用s w i t c h语句。再编写一个具有相反功能的函数,在拷贝过程中将换码序列转换成实际字符。
(415) 写函数expand(s1, s2),将字符串s 1中诸如a-z一类的速记等号在字符串s 2中扩展成等价的完整列表a b c..x y z。允许处理大小写字母和数字,并可以处理诸如a - b - c与a - z 0 - 9与- a -z等情况。正确安排好前导与尾随的"-"
(416) 修改i t o a函数使之改为接收三个变元。第三个变元是最小域宽。为了保证转换得的数(即字符串表示的数)有足够的宽度,在必要时应在数的左边补上一定的空格。
(417) 编写一个函数ungets(s),用于把整个字符串推回到输入中。ungets函数要使用buf与bufp吗?它可否仅使用ungetch函数?
(418) 定义宏swap(t, x, y),用于交换t类型的两个变元(使用分程序结构)。
(419) 请比较一下值调用与引用调用的相同点和不同点。
(420) 在函数调用时,实参与形参有哪几种对应关系?
(421) 用递归方法求N的阶乘。
(422) 对于以下递归函数f,计算f(3)的值。
int f(int k)
{
return(k<0 ? (k*=2): f(k-2)+k);
}
(423) 请编写函数 sum(number),返回正整数number的各位数字之和(number是长整型)。如sum(654321)=21 。
阅读(1557) | 评论(0) | 转发(0) |