请帮我分析一下下面这两个C语言的题目,谢谢!
6、给定程序中,函数fun的功能是:对形参s所指字符串中下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中,形成一个新串...
6、给定程序中,函数fun的功能是:对形参s所指字符串中下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中,形成一个新串。
例如,形参s所指的字符串为:baawrskjghzlicda,执行后p所指字符数组中的字符串应为:aachjlsw。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
void fun(char *s, char *p)
{ int i, j, n, x, t;
n=0;
for(i=0; s[i]!='\0'; i++) n++;
for(i=1; i<n-2; i=i+2) {
/**********found**********/
___1___;
/**********found**********/
for(j=___2___+2 ; j<n; j=j+2)
if(s[t]>s[j]) t=j;
if(t!=i)
{ x=s[i]; s[i]=s[t]; s[t]=x; }
}
for(i=1,j=0; i<n; i=i+2, j++) p[j]=s[i];
/**********found**********/
p[j]=___3___;
}
main()
{ char s[80]="baawrskjghzlicda", p[50];
printf("\nThe original string is : %s\n",s);
fun(s,p);
printf("\nThe result is : %s\n",p);
}
答案: 6、(1)t=i(2)i(3)0
2。15. 有以下程序
main()
{ unsigned int a;
int b=-1;
a=b;
printf("%u",a);
}
程序运行后的输出结果是______。
A)-1 B)65535 C)32767 D)-32768 展开
例如,形参s所指的字符串为:baawrskjghzlicda,执行后p所指字符数组中的字符串应为:aachjlsw。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
void fun(char *s, char *p)
{ int i, j, n, x, t;
n=0;
for(i=0; s[i]!='\0'; i++) n++;
for(i=1; i<n-2; i=i+2) {
/**********found**********/
___1___;
/**********found**********/
for(j=___2___+2 ; j<n; j=j+2)
if(s[t]>s[j]) t=j;
if(t!=i)
{ x=s[i]; s[i]=s[t]; s[t]=x; }
}
for(i=1,j=0; i<n; i=i+2, j++) p[j]=s[i];
/**********found**********/
p[j]=___3___;
}
main()
{ char s[80]="baawrskjghzlicda", p[50];
printf("\nThe original string is : %s\n",s);
fun(s,p);
printf("\nThe result is : %s\n",p);
}
答案: 6、(1)t=i(2)i(3)0
2。15. 有以下程序
main()
{ unsigned int a;
int b=-1;
a=b;
printf("%u",a);
}
程序运行后的输出结果是______。
A)-1 B)65535 C)32767 D)-32768 展开
展开全部
题1:
第一个for,用n记录了串的长度;接下来两个for就用的是冒泡排序法,t=i是为了记录下下标为奇数的字符位置,下来的让j=i+2,比较s[t]>s[j],成立就交换数值(小的放后面,大的放前面),这样两重循环ok了;再把s串的奇数位的字符赋值给p串就ok了,p[j]='\0'串的结束标志
题2:
计算机存贮负数是采取它的反码,正数的就不变,这样-1赋值给b,其实b存的就是-1的反码,而unsigned int计算机分配给它的位数肯定大于int的位数,这样a就应该是65535了···
望采纳!谢谢···
第一个for,用n记录了串的长度;接下来两个for就用的是冒泡排序法,t=i是为了记录下下标为奇数的字符位置,下来的让j=i+2,比较s[t]>s[j],成立就交换数值(小的放后面,大的放前面),这样两重循环ok了;再把s串的奇数位的字符赋值给p串就ok了,p[j]='\0'串的结束标志
题2:
计算机存贮负数是采取它的反码,正数的就不变,这样-1赋值给b,其实b存的就是-1的反码,而unsigned int计算机分配给它的位数肯定大于int的位数,这样a就应该是65535了···
望采纳!谢谢···
展开全部
1:t=i;
2:i
3:'\0'
分析:首先t=i;只是一个标识,记录当前 作为比较的目标;
j=i+2;说明 从后一个对象开始进行循环,直至最后,因为上面的i的值是小于n-2的,所以保证最后一个i值一定有可比对象。
当完成排序,之后将奇数对象进行赋值,之后要加个结束符号。
好完成。
第2题
unsigned 值必须为正数 不同的编译器 答案应该不一样。
应该是B 来着。
2:i
3:'\0'
分析:首先t=i;只是一个标识,记录当前 作为比较的目标;
j=i+2;说明 从后一个对象开始进行循环,直至最后,因为上面的i的值是小于n-2的,所以保证最后一个i值一定有可比对象。
当完成排序,之后将奇数对象进行赋值,之后要加个结束符号。
好完成。
第2题
unsigned 值必须为正数 不同的编译器 答案应该不一样。
应该是B 来着。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序有错误。
----------------------
MAIN: MOV SP, #SP
MOV 30H, #08H
MOV P1, #FFH
MOV P0, FFH ---估计应该是带#的
CLR TR0
TO: MOV TMOD, #01H
MOV TH0, #3CH
MOV TL0, #0B0H
SETB TR0
T1: MOV 30H, #50
M8: CJNE 30H, #00H, M8 --非法指令,可以用CJNE A, #......
CJNE 31H, 08H, M7 --非法指令,也以用CJNE Rn, #......
MOV P1, FFH --估计应该是带#的,#0FFH
MOV P0, FFH
DEC 31H
SJMP T1
M7: CJNE 31H, 07H, M6 ---非法
………… ---下面的雷同,大约有将近二分之一的非法指令。
…………
=======================
中断服务程序
***************************************
INT1: PUSH 30H ---INT1,不能当标号吧?
PUSH 31H ;保护现场
CLR TR0
MOV TMOD, #01H
MOV TH0, #3CH
MOV TL0, #0B0H
DEC 30H ---这里减一,白忙
POP 31H
POP 30H ---恢复现场,刚才白减了
SETB TR0
RETI
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
----------------------
MAIN: MOV SP, #SP
MOV 30H, #08H
MOV P1, #FFH
MOV P0, FFH ---估计应该是带#的
CLR TR0
TO: MOV TMOD, #01H
MOV TH0, #3CH
MOV TL0, #0B0H
SETB TR0
T1: MOV 30H, #50
M8: CJNE 30H, #00H, M8 --非法指令,可以用CJNE A, #......
CJNE 31H, 08H, M7 --非法指令,也以用CJNE Rn, #......
MOV P1, FFH --估计应该是带#的,#0FFH
MOV P0, FFH
DEC 31H
SJMP T1
M7: CJNE 31H, 07H, M6 ---非法
………… ---下面的雷同,大约有将近二分之一的非法指令。
…………
=======================
中断服务程序
***************************************
INT1: PUSH 30H ---INT1,不能当标号吧?
PUSH 31H ;保护现场
CLR TR0
MOV TMOD, #01H
MOV TH0, #3CH
MOV TL0, #0B0H
DEC 30H ---这里减一,白忙
POP 31H
POP 30H ---恢复现场,刚才白减了
SETB TR0
RETI
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询