当前位置:首页 > 2008年春c语言试题答案
(15) 程序运行时,输入1+2*10-10/2=,输出 (15) 。 A、10 B、16 C、15 D、25 (16) 程序运行时,输入1+3*5/2-7=,输出 (16) 。 A、3 B、1 C、-2 D、-3
本题的关键在于要按照程序流程逐步计算,不要看到输入的形式来计算。
试题5(每小题3分,共12分)
阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。【程序】
#include
{ int k = 0, number = 0; char str[MAXLEN];
while((str[k] = getchar()) != '#') k++;
str[k] = '\\0';
for (k=0; str[k] != '\\0'; k++)
if (str[k]>='0' && str[k]<='9' || str[k]=='A' str[k]=='B')
if(str[k] >= '0'&&str[k] <= '9')
number = number * 12 + str[k] - '0'; else if(str[k] == 'A'||str[k] == 'B')
number = number * 12 + str[k] -'A' + 10; else; /* 第15行 */ else break; /* 第16行 */ printf(\}
(17) 程序运行时,输入10#,输出 (17) 。 A、16 B、10
C、12 D、1
第1次:number = number * 12 + str[k] - '0'; number=0*12+1-‘0’=1
第2次:number = number * 12 + str[k] - '0'; number=1*12+0-‘0’=12
(18) 程序运行时,输入1a0#,输出 (18) 。 A、264 B、10 C、1 D、12
第1次:number = number * 12 + str[k] - '0'; number=0*12+1-‘0’=1
||
第2次没有执行。
(19) 将第16行改为“;”后,程序运行时,输入A*0#,输出 (19) 。 A、0 B、120 C、10 D、12
第1次:number = number * 12 + str[k] -'A' + 10; number=0*12+A-‘A’+10=10
第2次没有执行。
第3次:number = number * 12 + str[k] - '0'; number=10*12+0-‘0’=120
(20) 将第16行改为“else break;”后,删除第15行,程序运行时,输入1b0#,输出 (20) 。
A、10 B、12 C、276 D、1
第1次:number = number * 12 + str[k] - '0'; number=0*12+1-‘0’=1
第2次没有执行。
第3次:number = number * 12 + str[k] - '0'; number=1*12+0-‘0’=12
试题6(每小题3分,共12分)
#include
#include
main( )
{ char *s[2] = {\ while(*s[1] != '\\0'){
printf(\strlen(s[1])-1); s[1]++; } }
(21) 程序运行时,第1行输出 (21) 。
A、**** B、*** C、** D、*
S是一个指针数组。
S[0]指向字符数组”****”,也就是说,
[*] [*] [*] [*] [\\0] ↑ s0
S1指向字符数组”****”,也就是说,
[*] [*] [*] [*] [\\0] ↑ s1
strlen(s[1])计算指针s的长度。
循环第一次时,*s[1]=*, *s[1] != '\\0'为真。 strlen(s[1])=4 strlen(s[1])-1=3
s[0]+strlen(s[1])-1=s[0]+3
这时,s[0]的指针变化为(向后移动指针3位): [*] [*] [*] [*] [\\0]
↑ s0 所以输出的结果是*
(22) 程序运行时,第2行输出 (22) 。
A、**** B、***
C、** D、*
循环第2次时,*s[1]=*, *s[1] != '\\0'为真。
strlen(s[1])=3 (注意:s[1]++;使s[1]的指针后移一位,所以长度减少) strlen(s[1])-1=2
s[0]+strlen(s[1])-1=s[0]+2
这时,s[0]的指针变化为(向后移动指针2位): [*] [*] [*] [*] [\\0]
↑ s0 所以输出的结果是**
(23) 程序运行时,第3行输出 (23) 。
A、**** B、*** C、** D、*
循环第3次时,*s[1]=*, *s[1] != '\\0'为真。
strlen(s[1])=2(注意:s[1]++;使s[1]的指针后移一位,所以长度减少) strlen(s[1])-1=1
s[0]+strlen(s[1])-1=s[0]+1
这时,s[0]的指针变化为(向后移动指针1位): [*] [*] [*] [*] [\\0]
↑ s0 所以输出的结果是***
(24) 程序运行时,第4行输出 (24) 。
A、**** B、*** C、** D、* 同理。
试题7 程序设计题
1) 定义函数fact(n)计算n的阶乘: n! = 1 * 2 * ?? * n,函数返回值类型是double。 2) 定义函数cal(m, n)计算累加和:s??k?m?(m?1)?……?n,函数返回值类型是
k?mndouble。
3) 定义函数main(),输入正整数n,计算并输出下列算式的值。该算式中,每一项的分
子是累加和,要求调用函数cal(m,n)计算?k;每一项的分母是阶乘,要求调用函
k?mn数fact(n)计算n!。 y?1?1?21?2?31?2?……?n ??……?2!3!n!
#include
double fact(int n) /*计算n!*/ {
int k;
double result=1; for (k=1;k<=n;k++) result*=k; return result; }
double cal(int m, int n)/*计算出从m开始累加到n, 计算?k*/
k?mn{
double result=0.0; int k=0;
for(k=m;k<=n;k++)
result=result+k; return result; }
void main() {
int n;
double y=0.0;
scanf(”%d”,&n); for(k=1;k<=n;k++)
{
y=y+1.0*cal(1,k)/fact(k);/* 注意这里的1.0*/ }
printf(”y=%lf\\n”,y);
}
共分享92篇相关文档