全国计算机二级考试笔记

@TOC计算机二级笔记

为了方便大家通过计算机二级考试,我将我的学习记录发布如下,相信可以拯救一些临时抱佛脚的同学。如有错误,欢迎大家指正QQ793832536。【一次性写不完,持续更新中】


1.基础知识篇

第一步,明确你的学习重点
单项选择题:40题,40分(含公共基础知识部分10分)

程序填空题:3空,18分

程序改错题:2个错误,18分

程序设计题:24分
在这里插入图片描述

你需要了解所有的基本数据类型
你需要了解所有的基本数据类型
这张表你必须熟记!!!因为大部分的选择题都是考你运算,而运算符的优先级是最容易出错的地方。
在这里插入图片描述

2.易混知识点

• 函数的返回值不能是整个数组
• fbs函数是指取浮点数的绝对值
• abs函数是指取整数的绝对值
• 使用数组名作为函数实参是,数组名退化为指针,传递给形参的是数组的首地址
• static是静态局部变量,只初始化(赋值为0)1次
• strcmp(a,b)是比较a和bASCII码的大小
• 字符指针变量可以直接使用字符串赋值,而字符数组变量不能直接使用字符串或字符数组赋值。
• >> 右移运算符,各个二进制右移
• ^按位异或
• c语言中“continue”语句的作用是:跳过循环体中剩余的语句并直接到循环末尾结束循环,强行执行下一次循环。continue语句只结束本次循环,而不终止整个循环的执行;break语句则是结束整个循环过程,不再判断执行循环的条件是否成立 。
• 数组作为参数传递时,传递的是该数组中的首元素的地址
• 文件指针类型是一种指针类型,文件指针变量的值是文件所在的地址.

3.指针

基础

指针的本质就是地址!
int a = *p
*p = a
p = &a
int * p = &a

嵌套

int *p表示一个指针型变量【相当于变量a的地址】
int**p表示指针变量的地址

典型例题

设有以下说明和语句: int x[3][4],(* p)[4]; p=a;,则与表达式*(p+2)等价的选项是
A、a[0][2]
B、 * (a+2)[0]
C、 ( * a+2)[0]
D、a[2][0]
【解析】(
p)[4]是指向有4个元素的数组指针,a为二位数组首地址,赋值给数组指针p。题目中表达式* (* p+2)是对数组a第1行第3列元素的引用。a[0][2]是数组第1行第3列元素,与题自中等价,A选项正确。*(a+2)[0]是对数组第3行第1列元素的引用,B选项错误。(*a+2)[0]是对数组第1行第3列元素的引用,C选项错误。a[2][0]是数组第3行第1列元素,D选项错误。

有以下程序
#include <stdio.h>
void swap(int* pa,int*pb)
{
int t;
t=*pa;*pa=*pb;*pb=t;
}
void fun(int *ds,int n){
int i,midx;midx=O;
for(i=1;i<n;i++)
if(ds[i<ds[midx]) midx=i;
swap(ds,ds+ midx);
void main()
{
int data[]={37,31,26,17,61,12},i;for(i=o;i<5;i++)
fun(data+i,6-i);for(i=O;i<6;i++)
printf("%3d",data[i]); printf ("\n");
}
程序的运行结果是()。
【解析】main)函数定义一个整型数组data,它包含6个整型元素第—个for循环调用fun()函数,每次将数组首地址(data+i)和元素个数(6-i)传给凶数fun0),函数fun通过for循环遍历data+i开始的6-i个元素,找出其中的最小值(下标为midx) ,然后再调用swap()函数将data+i指向的元素与下标为midx的元素值进行交换;所以main)函数中第一个for循环执行完毕后,数组data中的元素按照从小到大排序;第二个for循环输出排序后的data数组元素,输出: 12 17 26 31 37 61。

设有定义: int x[2][3];,则以下选项中不能表示数组元素x[0][1]的是 ()。
A、* (* x+1)
B、* (* (x+1))
C、(* x)[1]
D、* (&x[0][0]+1)
[解析]选项A中x等价于x[0], x+1等价于x[0]+1,* (x[0]+1)等价于x[0][1],正确;
选项B中,* (x+1)等价于x[1],* ( * (x+1))等价于x[1][0],错误;选项C中*x等价于x[0], * x[1等价于x[0][1],正确;
选项D中,&x[0][0]等价于x[0],&[o][0j+1等价于x[0]+1, * (x[0]+1)等价于x[0][1],正确;本题答案为B。
选项D中,&x[0][0]等价于x[0],&[o][0j+1等价于x[0]+1, * (x[0]+1)等价于x[0][1],正确;本题答案为B.

有下列程序
#include <stdio.h>
#include <string.h>main( )
{ char v[4][10],*p[4],*t;int ij;
for (i=o; i<4; i++){ pli= v[i;
scanf("%s", p[i]);}
for (i=o; i<3; i++)for (j=i+1; j<4; j++)if (strcmp(pi], p)> o)
{ t = pli]; pi]= pli pi= t; }for (i=0; i<4; i++)
printf("%s ", p[i);
}
程序执行时若输入: Welcome you to Beijing
<回车>,则输出结果是( )。
【解析】main)函数定义一个二维亨符数组v,另外定义一个数组,包含4个亨符指针元素,第一个for循环将数组v对应下标为i的字符串首地址赋给数组p的下标为i的元素,使得p中的4个指针元素分别指向a中的4个亨符串,然后使用scanf)函数,输入4个字符串赋给v中的4个元素,由此可知,数组p的4个指针元素指向该4个字符串;接着在使用两个嵌套的for循环,对v中的4个学符串按照ASCIl码的天小排序,strcmp()函数是将p[i]p[j]两个字符串自左向右逐个字符比较ASCll码,直到出现不同的亨符或遇到’\0’为止,当p[i]>p[j]时,返回正数,所以本题排序后,输出:
Beijing Welcome to you.

40、有下列程序
#include <stdio.h>
#include <string.h>
typedef struct
{
char name[9];
char gender;int score;
} STU;
STU f(STU a)
{STU c={“Sun”, 'f,90};
strcpy(a.name,c.name);
a.gender = c.gender;
a.score = c.score;
return a;
}
main()
{ STU a={“Zhao” , ‘m’,85},b={“Qian”, 'f,95};b=f(a);
printf("%s,%c,%d,%s,%c,%d",
a.name, a.gender, a.score, b.name, b.gender, b.score);
程序执行后的输出结果是() 。
【解析】程序首先使用typedef定义—种新的类型名STU,它包含三个数据成员:亨符数组name,亨符变量gender,整数score; main)函数使用STU定义结构体变量a和b并赋初值;再调用函数f,将a传入;函数f()使用STU定义结构体变量c并赋初值,然后通过逐个引用成员变量将c的各个成员值赋给a,其中使用strcpy进行字符串拷贝;由于形参a是结构体类型,所以实参a未由形参的改变而改变;将改变后的形参a的值作为f)函数的返回值赋给b,所以b的值就是形参a改变后的值;而实参a的值没有改变,f)函数执行完后,main()函数中a的值不变,b的值被修改为f()函数中c的值,printf函数输出的值是a和c。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值