上海市高等学校信息技术水平考试 C程序设计(2020C场)全解

4a331e32f1ab47a6851358596273defd.png

A选项:主函数名只能是"main"。

B选项:不同函数分为不同模块,实现不同功能。

C选项:C语言程序编写的程序可以放在多个源程序文件中,使用时需要互相之间的引用。

D选项:不可以,只可以把 int main( ) 作为主函数。

 

a94304b31f1c4988950caeadcc5ec83a.png

标识符命名规则在2020B场有详细讲解,此处略过。

 

478b3d5f6b534b0db4c13cf08cbbc695.png

A、B、C选项:%取余操作符的使用前提是,左右两个操作数都得是整型。A选项的强制类型转换就有问题,应该为(float)x,强制转换的类型在括号内,变量标识符在括号外。因此B选项也就能够排除。而C选项中,x进行强制类型转换以后,就不能满足取余操作符的使用前提,所以错误。

D选项:先把x强制转换为float类型,此时y依然是整型。float型和int型进行运算,编译器会自动往精度更高的类型进行转换,因此y被自动转换为了float类型。结果进行赋值时,x会被自动改为float类型。同时,由于int型和float型在内存中的存储方式不同,所以如果用printf函数打印,会得到奇奇怪怪的结果。

 

52119cd474574e42a279b8e4621204f2.png

啊吧啊吧啊吧(流口水🤤)

 

0d38d02b95ba4687813e3a37e71214eb.png

本题中,a为3,a==1的结果为0(假),因此最后的输出结果为D。

 

39a40135753a4bbe98bc464f272d6c79.png

a、b的初始值都为0,0对任何数取余结果都是0。所以进入if语句以后,整个循环直接结束了,此时b的值依旧为0。

 

060563b01b764c43bf93db834355cf48.png

静态局部变量笔者在计算机2020B场中已有讲解,此处不再详细解释。(文章链接在第二题那)

 

77bed3c6748d480e8c965d038565cf15.png

A选项:3行2列的元素用2行3列的数组存放,包错的。

C选项:d[1][3] = {16,10,4} 这样来初始化数组没问题,但C语言不允许使用变量来进行数组的初始化。(C89标准不允许,C99、C11允许变长数组,所以为了防止编译错误,最好不使用它)

D选项:二维数组进行初始化时,行可以省略,列不可以。

 

a5aff53497fc43e9ac1cf919dd4010f6.png

 

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的数据。

 

a5d34fc1c1cd4cc89e2e6af1282ed9ff.png

让s的next为空(p的next),再让p的next为s。

 

 

f36a2ac97abe4b4283e3f12182600b88.png

第三处可以改成 n!=0 或者 n > 0

 

89c043492b2047498e7a6a6e575b1f3b.png

对文件知识的考查。

 

ab11c930479a4e04a010288a46b62196.png

第一处:宏定义不需要等号

第二处:int male,female; male=female=0; 这样是可以的,但初始化时不允许多段赋值。

第三处:题设中提到了倒数第二位数字,身份证号只有18位数字,数组中[17]代表的是最后一位数字

 

 

2ac78aa524724a09b6bfe8cf49c85777.png

第一处:函数类型被忽略了,返回的是double型数据,因此函数类型为double型。

第二处:1/t最后编译器会默认为整型相除,必须浮点型相除才能得到需要的结果。

第三处:忘记传参数。

 

f79bba4136744bbc9a6fbd8f73abc3ad.png

第一处:结构体类型的声明规则

第二处:i和cnt不能如此初始化

第三处:数组下标从0开始,因此最后一个的下标需要n-1

第四处:字符串与字符串的比较必须使用strcmp函数,原代码只比较了两个字符串的首个字符。

 

2de9775536384290b317be6795e704fa.png

本题与2020B场的垃圾分类编程题代码几乎一模一样,只是将文字改了,因此此处直接跳过。(文章链接在第2题那)

 

fb171824094841ca918097e554bfdb08.png

#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;
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值