c语言解题

2024-12-27 14:05:18
推荐回答(5个)
回答1:

答案:B
输入aaaa bbbb后数据被送到输入缓冲区,scanf以空格区分两个字符串,所以aaaa和bbbb分别被s1和s2得到,scanf不读取回车键,此时程序执行由gets继续从刚才的缓冲区读数据,此时只剩下一个回车键了,回车键被gets得到但是同时被抛弃,所以s3为空,接着执行gets(s4)此时缓冲区已空,程序停止等待标准输入,再输入cccc dddd后,回车键前面的内容被gets放进s4中,回车键又被丢弃,之后就是一连串的输出。
另外,似乎B选项也有些问题,因为puts(s3)时,因为s3为空所以应该什么都不输出的,但是puts函数有个特点就是,会在每次输出之后添加一个换行,所以第三行应该是一个空行,而s4="cccc dddd"所以,会被输出到一行的,所以正确的答案应该是:
aaaa
bbbb
cccc dddd
下面是在VC中运行的截图:

回答2:

答案如下,请参考。另外给一点意见,以后提问时最好整理一下排版,这样回答人可以更快的提供答案而不必浪费时间在整理问题上,而且清晰的题目会让人愿意回答,更加提高了您的问题解决效率,谢谢!

⒈ 以下说法正确的是 B 。
(a) C语言程序总是从第一个定义的函数开始执行。 //错,总是从main开始执行的
(b) C语言程序总是从main()函数开始执行 。
(c) 在C语言程序中,要调用的函数必须在main()函数中定义。//错,可以在任何地方定义,只要main函数调用前有函数申明即可
(d) C语言程序中的main函数必须放在程序的开始部分。//错,放在哪都行

⒉以下对枚举类型的定义中正确的是 D 。
(a) enum a {”one”;”two”;”three”}; //错,枚举不可用双引号,是整型不是字符串,切里面应该是逗号不是分号
(b)enum a={one,two,three}; //错,定义枚举名后不能加等号,这不是变量
(c) enum a={”one”,”two”,”three”}; //错,不可用双引号
(d)enum a {one=9,two=-1,three};

⒊ 以下选项中属于C语言数据类型的是 C 。//这ABD三个都是不知所云。。。随便扯的,只有C才是一种数据类型
(a) 复数型
(b) 逻辑型
(c) 双精度型
(d)集合型

⒋ 在调用函数时,如果实参是数组名,它与对应形参之间的数据传递是 C 。
(a) 单向值传递。 //数组名可以看作是指针,所以进行传递的是地址,而不是值,ABD都不正确
(b) 由实参传给形参,再由形参传给实参。
(c) 地址传递。
(d) 传递方式由用户指定。

⒌ 以下只有在使用时才为该类型变量分配空间的类别是 A 。
(a) auto和register //auto存放在栈内存,register存放在寄存器内存,一旦不使用便释放
(b) auto和static //static和extern是不会释放的,空间一直保存到程序结束
(c) register和static
(d) extern和register

⒍ 有函数定义:char *fun(char *p) {return p;},该函数的返回值是 B 。//形参p中的地址虽然不可改变,但是可以返回
(a)无确切的值
(b)形参p中存放的地址值
(c)一个临时存储单元的地址
(d)形参p自身的地址值

⒎ 在C程序的开发过程中,最终形成的可执行文件的扩展名是 D 。//这个不用多说了,exe执行程序
(a) .C
(b) .OBJ
(c) .BAK
(d).EXE

⒏若有以下说明语句,则下列叙述中正确的是 B 。
typedef struct{ int n; char ch[8];} PER;
(a) PER是结构体变量名 //这句话定义了一个结构体类型,名为PER,他不是变量,跟int相似,是一种类型,ACD错
(b) PER是结构体类型名
(c) typedef struct是结构体类型
(d) struct是结构体类型名

⒐ 整型变量x和y的值相同,且为非零,则以下选项中结果为零的表达式是 D 。
(a) x||y //取逻辑或,结果为1
(b) a|y //取位或,结果肯定还是自己
(c) x&y //取位与,结果也是自己
(d) x∧y //只有取异或,相同的位变成0,因为全部的位都相同,结果为0

⒑ 以下有关宏命令的叙述不正确的是 A 。
(a) 宏名必须用大写字母表示 // 用小写字母当然可以
(b) 宏名无类型
(c) 宏替换只是字符替换
(d) 宏替换不占用运行时间

回答3:

#include

void
main()
{
int
array[10];
int
*p,*p1;
void
swap(int
*p_1,int
*p_2);
for(p=array;p<=array+9;p++)
scanf("%d",p);
for(p=array;p<=array+9;p++)
for(p1=p;p1<=array+9;p1++)
if(*p<=*p1)
swap(p,p1);//你原先传递过去的是数值,所以主函数中的P对应的值还是不变的,你得把地址穿过去才行~
for(p=array;p<=array+9;p++)
printf("%d",*p);
system("pause");
}
void
swap(int
*p_1,int
*p_2)
{
int
temp;
temp=*p_1;
*p_1=*p_2;
*p_2=temp;
}

回答4:

b
c
c
c
a
d
d
b
d
d

我的基础知识也不过硬,改我就不给你改了

回答5:

1B