A选项:主函数名只能是"main"。
B选项:不同函数分为不同模块,实现不同功能。
C选项:C语言程序编写的程序可以放在多个源程序文件中,使用时需要互相之间的引用。
D选项:不可以,只可以把 int main( ) 作为主函数。
标识符命名规则在2020B场有详细讲解,此处略过。
A、B、C选项:%取余操作符的使用前提是,左右两个操作数都得是整型。A选项的强制类型转换就有问题,应该为(float)x,强制转换的类型在括号内,变量标识符在括号外。因此B选项也就能够排除。而C选项中,x进行强制类型转换以后,就不能满足取余操作符的使用前提,所以错误。
D选项:先把x强制转换为float类型,此时y依然是整型。float型和int型进行运算,编译器会自动往精度更高的类型进行转换,因此y被自动转换为了float类型。结果进行赋值时,x会被自动改为float类型。同时,由于int型和float型在内存中的存储方式不同,所以如果用printf函数打印,会得到奇奇怪怪的结果。
啊吧啊吧啊吧(流口水🤤)
本题中,a为3,a==1的结果为0(假),因此最后的输出结果为D。
a、b的初始值都为0,0对任何数取余结果都是0。所以进入if语句以后,整个循环直接结束了,此时b的值依旧为0。
静态局部变量笔者在计算机2020B场中已有讲解,此处不再详细解释。(文章链接在第二题那)
A选项:3行2列的元素用2行3列的数组存放,包错的。
C选项:d[1][3] = {16,10,4} 这样来初始化数组没问题,但C语言不允许使用变量来进行数组的初始化。(C89标准不允许,C99、C11允许变长数组,所以为了防止编译错误,最好不使用它)
D选项:二维数组进行初始化时,行可以省略,列不可以。
B选项、C选项的区别:
初始化时,p指针指向了存放a的空间,q指针指向了存放b的空间;B选项中 * 号是解引用操作符,初始化时的 * 号是声明该变量为指针变量(类似于两个人都叫张三,但是是两个不同的人)。
解引用操作符类似于一个打开按钮。形象地来说,指针就是包装盒,装着数据;解引用操作符就是打开包装盒的这一步操作,然后取得了这块空间所存放的数据。
因此B选项中,就是把 p指针 所指向的存放a的空间数据赋值给了 q指针 所指向的存放b的空间数据。还是以包装盒为例,p包装盒被打开了,然后把其中存放的数据A拿了出来,复制了一份;然后又打开了q包装盒,把复制完的数据A覆盖掉了q包装盒原本存放的数据B,因此此时的 b 变成了10。
而C选项中,只是把q包装盒里的数据B换成了数据A,此处是交换、交换、交换!!!(重要的事情说3遍)不同于覆盖,交换的话数据B本身并没有改变,只是包装盒里放的东西不一样了。
C选项的操作,实际上就是把 q 指针从指向存放B的空间变为了指向存放A的空间,并没有修改a、b的数据。
让s的next为空(p的next),再让p的next为s。
第三处可以改成 n!=0 或者 n > 0
对文件知识的考查。
第一处:宏定义不需要等号
第二处:int male,female; male=female=0; 这样是可以的,但初始化时不允许多段赋值。
第三处:题设中提到了倒数第二位数字,身份证号只有18位数字,数组中[17]代表的是最后一位数字
第一处:函数类型被忽略了,返回的是double型数据,因此函数类型为double型。
第二处:1/t最后编译器会默认为整型相除,必须浮点型相除才能得到需要的结果。
第三处:忘记传参数。
第一处:结构体类型的声明规则
第二处:i和cnt不能如此初始化
第三处:数组下标从0开始,因此最后一个的下标需要n-1
第四处:字符串与字符串的比较必须使用strcmp函数,原代码只比较了两个字符串的首个字符。
本题与2020B场的垃圾分类编程题代码几乎一模一样,只是将文字改了,因此此处直接跳过。(文章链接在第2题那)
#include <stdio.h>
#include <string.h>
int main(void)
{
char ch[100],max;
int i=0;
while((ch[i]=getchar())!='\n')
i++;
max=ch[0];
for(i=1;ch[i]!='\n';i++)
{
if(ch[i]>max)
{
max=ch[i];
}
}
ch[i]=max;
ch[i+1]='\0';
printf("%s",ch);
return 0;
}