首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载 | ||
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试 MPA考试 | 中科院 |
||
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT 新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语 |
||
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证 华为认证 | Java认证 |
||
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格 报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师 人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平 驾驶员 | 网络编辑 |
||
卫生资格 | 执业医师 | 执业药师 | 执业护士 | ||
会计从业资格考试(会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师 注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师 |
||
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师 质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师 设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师 城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师 |
||
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏 |
9.1 单项选择题
1.在下列代码中,正确的C代码是( )
①# define MYNAME="ABC"
②# include string.h
③ for(i=0;i<10; i++);
④ struct int stu { int name };
【解】①是关于宏定义的,在宏的定义形式中,宏名与字符列之间至少有一个空白符,并在宏名希望代表的字符序列之间也不能有任何非空格类字符,若有也被当作是字符序列的一部分。有了宏定义,以后程序中若要有宏名后的字符序列就可简写成宏名。选择①在宏名之后紧接字符=。②是关于包含命令的,在上述包含命令的格式中,被包含文件应放在一对尖括号之间,或一对双引号之间,不可在文件名字符列的首末没有这种符号。③是for语句,for语句的循环体可以用空语句,从语言的句法规则来说,该语句是正确的。但通常循环是为了完成某种重复计算操作,单一地让一个变量循环增1到某个值,程序员是不会编写这种代码的。④是想定义结构类型,定义结构时,struct后接结构类型名,不可在结构名之前插入某些其它类型符。正确解答是③。
2.在下列代码中,正确的C代码是( )
①# define PI=3.14159
② include"stdio.h"
③ for(i=0,i<10, i++) a++;
④static struct { int i;} b ={2};
【解】①定定义时,宏名与被定义的字符列之间不可以插入等号等其它字符。选择答案②是包含文件预处理,所有的预处理命令都应由字符# 开始于新的一行。③在写for语句时,其中的三个表达式必须用字符";"分隔。④在定义结构变量时,结构的类型名可以省缺,并可为结构变量赋初值。为结构变量赋初值,必须顺序给出各成分的初值,并将初值写在一对花括号中。这里给出的结构变量定义的代码是正确的。正确解答是④。
3.在下列代码中,错误的C代码是( )
①# define PI 3.14159
②# include"stdio.h";
③ if(2);
④ for(;;) if(1) break;
【解】①是正确的宏定义。②的文件包含预处理命令行不可以有多余的分号字符。③是if语句,虽没有任何意义,但就句法来说是正确的。④是for语句,其成分语句是if语句,从for语句来说,是一个无穷循环的控制结构,但它的成分语句因条件成立,执行break语句,立即退出循环。同样虽也是一条没有任何意义的语句,但从句法规则来说,也是正确的。正确解答是②。
4.设有以下定义,则执行语句"z=2*(N+Y(5+1));"后,z的值为( )
# define N 3
# define Y(n)((N+l)*n)
①出错 ②42 ③48 ④54
【解】在新的宏定义中,可以使用前面已定义的宏名。另外,宏调用是这样被替换展开的,分别用宏调用中的实在参数字符序列替换定定义字符序列中对应所有出现的形式参数。而宏定义字符序列中的不是形式参数的其他字符则保留。这样形成的字符序列,即为宏调用的展开替换结果。所以代码"z=2*(N+Y(5+1));"被替换成:
z=2*(3+((3+1)*5+1));
执行该代码,将使Z的值为48。解答为③。
5.以下程序中的for循环执行的次数是( )
# include
# define N 2
# define M N+1
# define NUM(M+l)* M/2
main()
{ int i, n=0;
for( i= l; i<=NUM;i++) { n++; printf("%d",n); }
printf("\n");
}
①5 ②6 ③8 ④9
【解】代码NUM被替换成(2+1+1)*2+1/2,所以其值是8。所以程序中的脸循环执行的次数是8次。正确解答是③。
9.2 填充题
1.设有定义"# define F(N) 2*N",则表达式 F(2+)的值是_____。
【解】F(N)被定义成2*N,表达式F(2+3)被替换成2*2+3,其值是7。
2.设有下列程序:
# include
main(int argc,int *argv[])
{ while( --argc> 0) printf("%s",argv[argc]);
printf("\n");
}
假定上述程序编译连接成目标程序名为p.exe,如果输入如下的命令:
P 123 AAA BBB ↓(其中的↓表示回车)
则输出结果是_____。
【解】程序启动时,参数argc的值是4,由于循环条件是一即组>0,是先减1后判大于0,循环共进行三次,顺序输出argv[3],argv[2]和argv[1],即输出BBBAAAl23。
9.3 程序分析题
1.阅读下面程序,写出程序运行结果。
# define PR(ar) printf("%d,", ar)
main()
{ int j,a[] ={1,3,5,7, 9,11,15}, * p= a+5;
for(j=3; j; j--)
switch(j) { case 1:
case 2: PR( * p++); break;
case 3: PR(*(--p));
}
printf("\n");
}
【解】程序的宏定义PR以d格式输出参数的值和远号字符。程序给数组a 赋初值,并由指针p指向元素a[5]。程序让j从3减至1,共循环三次。当j是3时,让p减1,并输出p所指元素的值9;当 j是2和1时,输出p所指的数组元素的值,并让p增1,顺序输出9和11。所以
程序输出:
9,9,11
2.设下面的程序经编译连接后生成的目标程序名为: ABC.EXE,写出输入以下命令行后的输出:
ABC FILE1 FILE2 ↓(其中的↓表示回车)
# include
main( int argc, char *argv[])
{ int i;
printf("%d \n",argc);
for(i=O;i
}
【解】程序首先输出参数argv的值3,然后循环三次,顺序输出ABC、FILE1和FILE2,并回车:
3
ABC FILE1 FILE2
3.读程序,写功能。
# include
# include
main(int argc, char *argv[])
{ FILE *fl,*f2;
char ch;
if(argc< 3)
{ printf("Parameters missing! \n");exit(0); }
if(((f1 =fopen(argv[1],"r"))== NULL) ||
((f2=fopen(argv[2],"w"))== NULL))
{ printf("Can not open file! \n"); exit(0); }
while(!feof(f1)) fputc(fgetc(f1),f2);
fclose(f1);
fclose(f2);
}
【解】程序在argc小于3时,报告出错信息结束。当argc大于2时,以程序启动时的第一和第二参数为文件名打开文件,井用循环将第一参数的文件内容复制到第二参数的文件。
更多软考资料请访问:考试吧软件水平考试栏目
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |