1、写出程序输出结果
void main() { char p[10]="abc"; char q[]="xyz"; int i,j; i=0; while(*(p+i)!=' ') i++; //此时i=3 j=0; i++; // i= 4 while(*(q+j)!=' ') { *(p+i)=*(q+j); j++; i++; } printf("%s", p); }
解答:经过代码运行,p所指向的字符串内容为{a,b,c, ,x,y,z, },所以最后运行的结果为输出abc。
或者
void main() { char p[10]="abc"; char q[]="xyz"; int i,j; i=0; while(*(p+i)!=' ') i++; //此时i=3 j=0; i++; // i= 4 while(*(q+j)!=' ') { *(p+i)=*(q+j); j++; } printf("%s", p); }
解答:经过代码运行,p所指向的字符串内容为{a,b,c, ,z, },所以最后运行的结果为输出abc。
2、 写出该代码的功能,并给出改进之处
void main() { int n, x, j, i = 1; float sum = 1, k = -1; printf("Input n and x: "); scanf("%d %d", &n, &x); while (i <= n) { k = -1; for (j = 1; j <= i; j++) { k = -1*k*x; } for (j = 1; j <= i; j++) { k = k/ j; } sum += k; i++; } printf("%f ", sum); }
解答,该代码的功能为求解1+x+x^2/2! +x^3/3! + ... + x^n/n!
该代码可以通过动态规划进行改进,使得时间复杂度下降至O(n),代码如下:
void main() { int n,x,i=1; float sum = 1,k = -1; printf("Input n and x: "); scanf("%d %d", &n, &x); while (i <= n) { k = -1 * k*x / i; sum += k; i++; } printf("%f", sum); }
3、代码for(int i=1;i<n;i++) S;是什么结构?该代码如何使用显示结构表示?
解答:该代码是循环判断选择结构。该代码的显示结构如下:
int i = 1; FOR: if (i<n) goto S0; goto S1; S0: S; i = i+1; goto FOR; S1: ...
4、根据下面的代码,填写表格。内存按2字节编址,整数占2字节,字符占1字节,指针占4字节。每个区域的相对地址都从0开始。
int num=2;//2存储在常量区,num存储在全局区,两个都是整形占2字节。 void main() { char str1[10]={"UESTC"};//"UESTC"和10存储在常量区,各占6和2个字节 char *str2="CHENGDU";//"CHENGDU"存储在常量区,占8各字节,注意’