C语言程序设计复习大纲
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
物理与机电学院自动化系自动化本科1班
《C语言程序设计》复习大纲
复习目标:(1)掌握C的基本语法结构;(2)掌握基本的程序设计算法和技巧;(3)具备初步的高级语言程序设计能力
基本考试题型:(1)单选题;(2)判断题;(3)阅读程序写结果;(4)程序填空(5)编程题。
程序设计语言(C)的基本要素:
1、数据类型与表达式:
①、基本数据类型(主要是int、float、double、char)的常量和变量的说明方式,定义于基本数据类型之上的各种运算。
重点是以下运算及表达式::算术运算(含自增和自减操作)、逻辑运算、关系运算、位运算、条件运算、赋值运算。
②、含混合运算的表达式中各种运算的优先级及结合方向。
2、语句结构:
①、赋值的方法
②、逻辑判断的控制
·双路选择语句(if语句):if语句的形式,if语句的嵌套
·多路选择语句--分情语句(switch语句):分支语句的形式、语义、分支表
达式的类型要求、分支语句中的break.
③、循环语句
·指定次数的循环(for循环)、do循环、do-while循环的形式和使用
·循环结束条件
·循环控制变量的使用
·指定次数循环的提前结束方法
3、子程序结构---函数
①、C程序的总体结构
②、函数的定义、调用形式
③、函数参数的形式和传递方式
④、函数的嵌套调用和递归调用
⑤、全局变量和局部变量的区分和作用。
变量的作用域和生命期。
注意static对全局变量和局部变量的不同作用。
4、构造类型及类型定义
①、定义新类型名(typedef)
②、指针类型的定义和使用
③、数组
·一维/多维数组类型的定义,数组元素的引用和数组变量的初始化方式。
字符串的定义、结构和使用。
注意:字符串结束标志和内存占用、’\X’的含义和内存占用(X指n、t、代码值等。
④、结构
·结构类型的定义、元素的引用和结构变量的初始化。
共享存储型的结构类型(共用体)的定义和特点。
⑤、构造类型及指针类型等的混合使用:
·指针数组、结构数组、结构指针、结构中含指针和数组。
·一维链表的遍历
⑥、复杂指针类型的说明(declaration)
5、数据的输入/输出
①、基本类型数据的输入/输出方法。
重点是printf/scanf、fgetc/fputc、sprintf/sscanf、fprintf/fscanf、fgets/fputs等输入/输出函数
②、文件:
·文件的含义和定义方式
·文件的打开与关闭方式
·文件的基本读/写操作
·文件中数据的定位
·文件状态的检测(文件结束、读/写出错等)
·文本文件与二进制文件的区别和一般的文本文件读/写程序结构
6、其它
①、命令行参数(argc, argv)的说明,含义和使用
②、编译预处理
了解编译预处理的含义及宏定义(含宏函数)、文件包含等的使用方法。
注意:宏函数的正确定义和使用。
一些基本数据结构和算法
1、基本的排序算法:如选择排序、交换排序
2、基本的遍历算法(针对不同数据结构):
·一维/多维数组的遍历
·一维链表的遍历
·文件的遍历
3、基本的查找算法:
·无序数据序列的查找(见“基本遍历方法”)
·有序数据序列的查找:(基于数组的)二分查找
4、简单的数值计算方法:如无限级数的近似计算、单调函数的二分法求根、积分的近似计算。
须重点注意的疑难问题:
1、递归:递归函数值的计算
2、运算优先级
3、正确理解指针类型:指针的递增/递减、二维数组、数组指针、*(A+I)≡A[I]
4、命令行参数的说明和使用
5、文件的使用(开、闭、读、写)
附一:
2009(2)自动化本C语言期末复习题
一、单选题
1.算法具有五个特性,以下选项中不属于算法特性的是__________。
B
A)有穷性B)简洁性C)可行性D)确定性
2.C语言中最简单的数据类型包括__________。
B
A) 整型、实型、逻辑型 B) 整型、实型、字符型
C) 整型、字符型、逻辑型 D) 整型、实型、逻辑型、字符型
3.结构化程序由三种基本结构组成,三种基本结构组成的算法_________。
A
A)可以完成任何复杂的任务B)只能完成部分复杂的任务
C)只能完成符合结构化的任务 D)只能完成一些简单的任务
4.用C语言编写的代码程序__________。
B
A)可立即执行B)是一个源程序
C)经过编译即可执行 D)经过编译解释才能执行
5.以下叙述中正确的是__________。
C
A)用C语言实现的算法必须要有输入和输出操作
B)用C语言实现的算法可以没有输出但必须要有输入
C)用C程序实现的算法可以没有输入但必须要有输出
D)用C程序实现的算法可以既没有输入也没有输出
6.以下叙述中正确的是__________。
D
A)预处理命令行必须位于源文件的开头
B)在源文件的一行上可以有多条预处理命令
C)宏名必须用大写字母表示
D)宏替换不占用程序的运行时间
7.以下不能定义为用户标识符是__________。
D
A)Main B)_0 C)_int D)sizeof
8.以下选项中,不能作为合法常量的是__________。
B
(A)1.234e04 (B)1.234e0.4 (C)1.234e+4 (D)1.234e0
9.下列选项中,不能用作标识符的是__________。
D
A)_1234_ B)_1_2 C)int_2_ D)2_int_
10.C语言中,运算对象必须是整型的运算符是__________。
A
A) % B) / C) %和/ D) *
11.不合法的八进制数是__________。
B
A) 0 B) 028 C) 077 D)01
12.若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的
表达式为__________。
D
A) a<>0 B) !a C) a=0 D) a
13.在以下运算符中,优先级最高的运算符是__________B
A) ? : B) ++ C) && D) +=
14.在C语言中,逻辑值“真”用__________表示。
D
A) true B) 大于0的数C) 非0的整数D) 非0的数
15.在C语言的if语句中,用作判断的表达式为__________D
A)关系表达式 B)逻辑表达式C)算术表达式D)任意表达式
16.要给int型变量a,b,c输入数据,以下语句正确的是__________。
D
A) read(a,b,c); B) scanf(“%d%d%d”,a,b,c);
C) scanf(“%D%D%D”,&a,%b,%c); D) scanf(“%d%d%d”,&a,&b,&c);
17.有以下语句:int b;char c[10];,则正确的输入语句是__________。
B
A)scanf("%d%s",&b,&c); B) scanf("%d%s",&b,c);
c)scanf("%d%s",b,c); D)scanf("%d%s",b,&c);
18.为表示关系x≤y≤z,正确的C语言表达式是__________。
A
A) (x<=y)&&(y<=z) B) (x<=y)AND(y<=z)
C) (x<=y<=z) D) (x<=y)&(y<=z)
19.表达式__________是满足:当c的值为1、3、5三个数时值为“真”,否则值为
“假”的表达式D
A) (c=1)||(c=3)||(c=5) B) (c!=1)&&(c!=3)&&(c!=5)
C) (c==1)&&(c==3)&&(c==5) D) (c==1)||(c==3)||(c==5)
20.若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<10的是____。
C
A)abs(x-y)<10 B)x-y>-10&& x-y<10
C)!(x-y)<-10||!(y-x)>10 D)(x-y)*(x-y)<100
21.若变量已定义,要求完成求5!的计算,不能完成此操作的程序段是_ __。
B
A)for(i=1,p=1;i<=5;i++) p*=i;
B)for(i=1;i<=5;i++){ p=1; p*=i;}
C)i=1;p=1;while(i<=5){p*=i; i++;}
D)i=1;p=1;do{p*=i; i++; }while(i<=5);
22.在C语言中,while语句中的条件为__________时,结束该循环。
A
A) 0 B) 1 C) true D) 非0
23.若k为整型,以下while循环__________次。
C
int k=10;
while (k=0) k=k-1;
A) 10次B) 无限循环 C) 一次不执行D) 执行一次
24.以下能正确定义一维数组的选项是__________。
B
A)int a[5]={0,1,2,3,4,5}; B)char a[]={0,1,2,3,4,5};
C)char a={'A','B','C'}; D)int a[5]="0123";
25.已有定义:char a[]="xyz",b[]={'x','y','z'};,以下叙述中正确的是__________。
C
A)数组a和b的长度相同B)a数组长度小于b数组长度
C)a数组长度大于b数组长度 D)上述说法都不对
二、是非题
1.在C程序中,语句之间必须要用分号“;”分隔。
T
2.在C程序中所用的变量必须先定义后使用。
T
3.C程序中的注释部分可有可无,通常可以省略。
T
4.在C程序中,A和a是两个不同的变量。
T
5.在C程序中,无论是整数还是实数,都能准确无误的表示。
F
6.在C程序中,赋值运算符的优先级最低。
T
7.表达式i++与++i在任何场合功能完全相同。
F
8.a和b是同类型变量,执行语句a=b后b中的值将放入a中,b中的值将丢失。
F
9.函数中的局部变量与全局变量同名时,局部变量优先,全局变量暂时不起作用。
T
10.输入数值数据时,整型变量只能输入整型值;实型变量只能输入实型值。
F
三、程序阅读题
1.以下程序运行时若从键盘输入:10 20 30<回车>.输出结果是______
#include <stdio.h>
main()
{
int i=0,j=0,k=0;
scanf("%d%*d%d",&i,&j,&k);printf("%d % d %d\n",i,j,k);
}
答案:10 30 0
2.以下程序运行后的输出结果是____
#define S(x) 4*x*x+1
main()
{
int i=6,j=8;
printf("%d\n",S(i+j));
}
答案:81
3.以下程序运行后的输出结果是____
main()
{
int a,b,c;
a=10;b=20;c=(a%b<1)||(a/b>1);
printf("%d %d %d\n",a,b,c);
}
答案:10 20 0
4.已知字符A的ASCII代码值为65,以下程序运行时若从键盘输入:B33<回车>.则
输出结果是_____
#include <stdio.h>
main()
{char a,b;
a=getchar();scanf("%d",&b);
a=a-'A'+'0';b=b*2;
printf("%c %c\n",a,b);
}
答案:1 B
以下程序运行后的输出结果是______
void swap(int x,int y)
{ int t;
t=x;x=y;y=t;printf("%d %d ",x,y);
}
main()
{ int a=3,b=4;
swap(a,b);printf("%d %d\n",a,b);
}
答案:4 3 3 4
四.程序填空
5 方阵的主对角线元素之和,在_____处填空完成该程序.
1、以下程序求5
#include <stdio.h>
main()
{ int a[5][5],i,j,ss=0;
printf(“按行输入数据:”);
for(i=0;i<5;i++)
for(j=0; j<5 ;j++)
scanf(“%d”,&a[i][j]);
for(i=0;i<5;i++)
ss=_____a[i][i]_________;
printf(“sum=%d\n”,s s);
}
2、设有30名学生,每个学生包括:学号,姓名,二门课的成绩,总分。
将学生的学号、姓
名、二门课的成绩由键盘输入,程序求出总分,存入数组。
输出所有学生的学号、姓名和
总分。
#include <stdio.h>
#define N 30
struct st{ int no;
char name[20];
float s1;
float s2;
float total;
};
void main()
{ struct st s[N];
int i;
for(i=0; i<N;i++)
{scanf(“%d%s%f%f”,&s[i].no,s[i].name,&s[i].s1,&s[i].s2);
s[i].total= s[i].s1 + s[i].s2 ;
}
for(i=0; i<N ;i++)
{printf(“%d%s%f\n”,s[i].no,s[i].name,s[i].total);
}
2、以下程序求:sum=1/2+1/4+1/6+1/8+…….前10项之和并输出和。
填空完成该程序。
#include <stdio.h>
main ( )
{ float f1,sum=0.0;
int n;
f1= 2
for(n=1;n<10;n++)
{sum+=1/f1; f1= f1+2;}
printf(“sum=%f\n”, sum) ;
}
五.编程题
1.编一程序,输入一整数并判断是否素数,用输入零来结束输入,并输出判断结果。
如:输入“13”,则输出“13是素数”。
(假设编程环境支持中文,下同。
)
答案:略
2.编写程序,判断输入的年号year是否闰年。
判断闰年的条件是:
1)公元年数如能被4整除,而不能被100整除,则是闰年;
2)公元年数能被400整除也是闰年。
如:输入”2006”,则输出”2006年不是闰年”。
答案:略
3.编写程序,输入10个整数,用改进的冒泡排序算法排序后从小到大输出。
答案:参考课本例题
***课本习题5.6 5.8 6.10 6.11 7.4 7.5
附二
2009年4月C语言二级笔试试题
一、选择题((1)-(40)题每小题1分,(41)-(50)题每小题2分,共60分)
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。
(1)在32位计算机中,一个字长所占的字节数为______。
A) 1 B) 2 C) 4 D) 8
(2)与十进制511等值的十六进制数为______。
A) 1FF B) 2FF C) 1FE D) 2FE
(3)能将高级语言编写的源程序转换成目标程序的是______。
A) 编辑程序 B) 编译程序 C) 解释程序 D) 链接程序
(4)在计算机系统中,存储一个汉字的国标码所需要的字节数为______。
A) 1 B) 2 C) 3 D) 4
(5)下列带有通配符的文件名,能表示文件ABC.TXT的是______。
A) *BC.? B) A?.* C) ?BC.* D) ?.?
(6)在多媒体计算机系统中,不能用以存储多媒体信息的是______。
A) 光缆 B) 软盘 C) 硬盘 D) 光盘
(7)DOS命令“COPY/?”的功能是______。
A) 将当前盘当前目录中的所有文件复制到当前盘的根目录下
B) 将当前盘当前目录中所有以单个字符命名的文件复制到当前盘的根目录下
C) 以提示方式复制文件
D) 显示COPY命令的帮助信息
(8)在Windows环境下,若要将当前活动窗口存入剪贴板,则可以按______。
A) Ctrl+PrintScreen键
B) Shift+PrintScreen键
C) PrintScreen键
D) Alt+PrintScreen键
(9)在Windows环境下,单击当前应用程序窗口的“关闭”按钮,其功能是______。
A) 将当前应用程序转为后台运行
B) 退出Windows后再关机
C) 退出Windows后重新启动计算机
D) 终止当前应用程序的运行
(10)在Windows环境下,粘贴快捷键是______。
A) Ctrl+Z B) Ctrl+X C) Ctrl+C D) Ctrl+V
(11)以下叙述中正确的是______。
A) 构成C程序的基本单位是函数
B) 可以在一个函数中定义另一个函数
C) main()函数必须放在其它函数之前
D) 所有被调用的函数一定要在调用之前进行定义
(12)以下选项中合法的实型常数是______。
A) 5E2.0 B) E-3 C) .2E0 D) 1.3E
(13)以下选项中合法的用户标识符是______。
A) long B) _2Test C) 3Dmax D) A.dat
(14)已知大写字母A的ASCII码是65,小写字母a的ASCII码是97,则用八进制表示的字符常量'\101'是______。
A) 字符A B) 字符a C) 字符e D) 非法的常量
(15)以下非法的赋值语句是______。
A) n=(i=2,++i); B) j++; C) ++(i+1); D) x=j>0;
(16)设a和b均为double型常量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是______。
A) 6.500000 B) 6 C) 5.500000 D) 6.000000
(17)已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是______。
A) scanf("%2d%2d%2d",&i,&j,&k);
B) scanf(""%d %d %d",&i,&j,&k);
C) scanf("%d,%d,%d",&i,&j,&k);
D) scanf("i=%d,j=%d,k=%d",&i,&j,&k);
(18)与数学式子3乘以x的n次方/(2x-1)对应的C语言表达式是______。
A) 3*x^n/(2*x-1)
B) 3*x**n/(2*x-1)
C) 3*pow(x,n)*(1/(2*x-1))
D) 3*pow(n,x)/(2*x-1)
(19)设有定义:long x=-123456L;,则以下能够正确输出变量x值的语句是______。
A) printf("x=%d\n",x);
B) printf("x=%ld\n",x);
C) printf("x=%8dL\n",x);
D) printf("x=%LD\n",x);
(20)若有以下程序:
main()
{int k=2,i=2,m;
m=(k+=i*=k); printf("%d,%d\n",m,i);
}
执行后的输出结果是______。
A) 8,6 B) 8,3 C) 6,4 D) 7,4
(21)已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1&&y+z/2的值是______。
A) 6 B) 0 C) 2 D) 1
(22)有一函数
1 x>0
y= 0 x=0
-1 x<0,
以下程序段中不能根据x的值正确计算出y的值的是______。
A) if(x>0) y=1;else if(x==0) y=0;else y=-1;
B) y=0;if(x>0) y=1;else if(x<0) y=-1;
C) y=0;if(x>=0)if(x>0) y=1;else y=-1;
D) if(x>=0) if(x>0) y=1;else y=0;else y=-1;
(23)以下选项中,与k=n++完全等价的表达式是_______。
A) k=n,n=n+1 B) n=n+1,k=n C) k=++n D) k+=n+1
(24)以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出,程序如下:
main()
{int n,k;
float score,sum,ave;
sum=0.0;
for(n=1;n<=10;n++)
{for(k=1;k<=4;k++)
{scanf("%f",&score); sum+=score;}
ave=sum/4.0;
printf("NO%d:%f\n",n,ave);
}
}
上述程序运行后结果不正确,调试中发现有一条语句
出现在程序的位置不正确。
这条语句是______。
A) sum=0.0;
B) sum+=score;
C) ave=sum/4.0;
D) printf("NO%d:%f\n",n,ave);
(25)有以下程序段
int n=0,p;
do {scanf("%d",&p);n++;} while(p!=12345&&n<3);
此处do-while循环的结束条件是______。
A) p的值不等于12345并且n的值小于3
B) p的值等于12345并且n的值大于等于3
C) p的值不等于12345或者n的值小于3
D) p的值等于12345或者n的值大于等于3
(26)有以下程序
main()
{int a=15,b=21,m=0;
switch(a%3)
{case 0:m++;break;
case 1:m++;
switch(b%2)
{default:m++;
case 0:m++;break;
}
}
printf("%d\n",m);
}
程序运行后的输出结果是______。
A) 1 B) 2 C) 3 D) 4
(27)C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是______。
A) void B) int C) float D) double
(28)若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是______。
A) p=q; B) *p=*q; C) n=*q; D) p=n;
(29)有以下程序
float fun(int x,int y)
{return(x+y); }
main()
{int a=2,b=5,c=8;
printf("%3.0f\n",fun((int)fun(a+c,b),a-c));
}
程序运行后的输出结果是______。
(30)有以下程序
void fun(char *c,int d)
{*c=*c+1;d=d+1;
printf("%c,%c,",*c,d);
}
main()
{char a='A',b='a';
fun(&b,a); printf("%c,%c\n",a,b);
}
程序运行后的输出结果是______。
A) B,a,B,a B) a,B,a,B C) A,b,A,b D) b,B,A,b
(31)以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序void sort(int a[],int n)
{int i,j,t;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]<a[j]) {t=a[i];a[i]=a[j];a[j]=t;}
}
main()
{int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(&aa[3],5);
for(i=0;i<10;i++) printf("%d,",aa[i]);
printf("\n");
}
程序运行后的输出结果是______。
A) 1,2,3,4,5,6,7,8,9,10,
B) 10,9,8,7,6,5,4,3,2,1,
C) 1,2,3,8,7,6,5,4,9,10,
D) 1,2,10,9,8,7,6,5,4,3,
(32)有以下程序
int f(int n)
{if (n==1) return 1;
else return f(n-1)+1;
}
main()
{int i,j=0;
for(i=1;i<3;i++) j+=f(i);
printf("%d\n",j);
}
程序运行后的输出结果是______。
A) 4 B) 3 C) 2 D) 1
(33)有以下程序
main()
{char a[]={'a','b','c','d','e','f','g','h','\0'}; int i,j;
i=sizeof(a); j=strlen(a);
printf("%d,%d\n",i,j);
}
程序运行后的输出结果是______。
A) 9,9 B) 8,9 C) 1,8 D) 9,8
(34)以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。
void reverse(int a[],int n)
{int i,t;
for(i=0;i<n/2;i++)
{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}
}
main()
{int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;
reverse(b,8);
for(i=6;i<10;i++) s+=b[i];
printf("%d\n",s);
}
程序运行后的输出结果是______。
A) 22 B) 10 C) 34 D) 30
(35)有以下程序
main()
{int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};
int i,s=0;
for(i=0;i<4;i++) s+=aa[i][1]; printf("%d\n",s);
}
程序运行后的输出结果是______。
A) 11 B) 19 C) 13 D) 20
(36)有以下程序
#include <string.h>
main()
{char *p="abcde\0fghjik\0";
printf("%d\n",strlen(p));
}
程序运行后的输出结果是______。
A) 12 B) 15 C) 6 D) 5
(37)程序中头文件type1.h的内容是:#define N 5
#define M1 N*3
程序如下:
#include "type1.h"
#define M2 N*2
main()
{int i;
i=M1+M2; printf("%d\n",i);
}
程序编译后运行的输出结果是______。
A) 10 B) 20 C) 25 D) 30
(38)有以下程序
#include <stdio.h>
main()
{FILE *fp; int i=20,j=30,k,n;
fp=fopen("d1.dat","w");
fprintf(fp,"%d\n",i);fprintf(fp,"%d\n",j);
fclose(fp);
fp=fopen("d1.dat","r");
fscanf(fp,"%d%d",&k,&n); printf("%d%d\n",k,n);
fclose(fp);
}
程序运行后的输出结果是_____。
A) 20 30 B) 20 50 C) 30 50 D) 30 20
(39)以下叙述中错误的是______。
A) 二进制文件打开后可以先读文件的末尾,而顺序文件不可以
B) 在程序结束时,应当用fclose函数关闭已打开的文件
C) 利用fread函数从二进制文件中读数据,可以用数组名给数组中所有元素读入数据
D) 不可以用FILE定义指向二进制文件的文件指针
(40)有以下程序
#include <string.h>
main(int argc,char *argv[])
{int i,len=0;
for(i=1;i<argc;i++) len+=strlen(argv[i]);
printf("%d\n",len);
}
程序编译连接后生成的可执行文件是ex1.exe,
若运行时输入带参数的命令行是:
ex1 abcd efg 10<回车>
则运行的结果是______。
A) 22 B) 17 C) 12 D) 9
(41)有以下程序
int fa(int x)
{return x*x; }
int fb(int x)
{return x*x*x; }
int f(int (*f1)(),int (*f2)(),int x) {return f2(x)-f1(x); }
main()
{int i;
i=f(fa,fb,2); printf("%d\n",i);
}
程序运行后的输出结果是______。
A) -4 B) 1 C) 4 D) 8
(42)有以下程序
int a=3;
main()
{int s=0;
{int a=5; s+=a++; }
s+=a++; printf("%d\n",s);
}
程序运行后的输出结果是_______。
A) 8 B) 10 C) 7 D) 11
(43)有以下程序
void ss(char *s,char t)
{while(*s)
{if(*s==t) *s=t-'a'+'A';
s++;
}
}
main()
{char str1[100]="abcddfefdbd",c='d'; ss(str1,c); printf("%s\n",str1);
}
程序运行后的输出结果是______。
A) ABCDDEFEDBD
B) abcDDfefDbD
C) abcAAfefAbA
D) Abcddfefdbd
(44)有以下程序
struct STU
{char num[10]; float score[3]; }
main()
{struct STU s[3]={{"20021",90,95,85}, {"20022",95,80,75},
{"20023",100,95,90}},*p=s;
int i; float sum=0;
for(i=0;i<3;i++)
sum=sum+p->score[i];
printf("%6.2f\n",sum);
}
程序运行后的输出结果是______。
A) 260.00 B) 270.00 C) 280.00 D) 285.00
(45)设有如下定义:
struct sk
{int a;
float b;
}data;
int *p;
若要使p指向data中的a域,正确的赋值语句是______。
A) p=&a; B) p=data.a; C) p=&data.a; D) *p=data.a
(46)有以下程序
#include <stdlib.h>
struct NODE
{int num; struct NODE *next; }
main()
{struct NODE *p,*q,*r;
p=(struct NODE *)malloc(sizeof(struct NODE)); q=(struct NODE *)malloc(sizeof(struct NODE)); r=(struct NODE *)malloc(sizeof(struct NODE)); p->num=10;q->num=20;r->num=30;
p->next=q;q->next=r;
printf("%d\n",p->num+q->next->num);
}
程序运行后的输出结果是______。
A) 10 B) 20 C) 30 D) 40
(47)若有以下说明和定义
typedef int *INTEGER
INTEGER p,*q;
以下叙述正确的是______。
A) p是int型变量
B) p是基类型为int的指针变量
C) q是基类型为int的指针变量
D) 程序中可用INTEGER代替int类型名
(48)有以下程序
main()
{unsigned char a,b,c;
a=0x3; b=a|0x8; c=b<<1;
printf("%d%d\n",b,c);
}
程序运行后的输出结果是______。
A) -11 12 B) -6 -13 C) 12 24 D) 11 22
(49)有以下程序
#include <stdlib.h>
main()
{char *p,*q;
p=(char *)malloc(sizeof(char)*20); q=p;
scanf("%s%s",p,q); printf("%s%s\n",p,q);
}
若从键盘输入:abc def<回车>,则输出结果是______。
A) def def B) abc def C) abc d D) d d
(50)以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序。
#include <string.h>
void f(char p[][10],int n)
{ char t[20]; int i,j;
for(i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if(strcmp(p[i],p[j])<0)
{ strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);}
}
main()
{char p[][10]={"abc","aabdfg","abbd","dcdbe","cd"};int i;
f(p,5); printf("%d\n",strlen(p[0]));
}
程序运行后的输出结果是
A) 6 B) 4 C) 5 D) 3
二、填空题(每空2分,共40分)
请将每一个空的正确答案写在答案卡上,答在试卷上不得分。
(1) 计算机软件分为系统软件和应用软件,操作系统属于【1】。
(2) 在DOS环境下,代表键盘和显示器的设备文件名为【2】。
(3) 支持Internet基本服务的协议是【3】。
(4) 从Windows环境进入MS-DOS方式后,返回Windows环境的DOS命令为【4】。
(5) 某微型机的运算速度为2MIPS,则该微型机每秒执行【5】条指令。
(6) 以下程序运行后的输出结果是【6】。
main()
{int x=10,y=20,t=0;
if(x==y)t=x;x=y;y=t;
printf("%d,%d\n",x,y);
}
(7) 以下程序运行后的输出结果是【7】。
main()
{int x=15;
while(x>10&&x<50)
{x++;
if(x/3){x++;break;}
else continue;
}
printf("%d\n",x);
}
(8) 有以下程序:
#include <stdio.h>
main()
{char c;
while((c=getchar())!='?') putchar(--c);
}
程序运行时,如果从键盘输入:Y?N?<回车>,则输出结果为【8】。
(9) 以下程序运行后的输出结果是【9】。
void fun(int x,int y)
{x=x+y;y=x-y;x=x-y;
printf("%d,%d,",x,y);}
main()
{int x=2,y=3;
fun(x,y);
printf("%d,%d\n",x,y);
}
(10) 以下函数的功能是计算s=1+1/2!+1/3!+……+1/n!,请填空。
double fun(int n)
{double s=0.0,fac=1.0; int i;
for(i=1;i<=n;i++)
{fac=fac 【10】;
s=s+fac;
}
return s;
}
(11) 下面程序的运行结果是:【11】。
#define N 10
#define s(x) x*x
#define f(x) (x*x)
main()
{int i1,i2;
i1=1000/s(N);i2=1000/f(N);
printf("%d %d\n",i1,i2);
}
(12) 下面程序的运行结果是:【12】。
void swap(int *a,int *b)
{int *t;
t=a;a=b;b=t;
}
main()
{int x=3,y=5,*p=&x,*q=&y;
swap(p,q);
printf("%d%d\n",*p,*q);
}
(13) 下面程序的运行结果是:【13】。
typedef union student
{char name[10];
long sno;
char sex;
float score[4];
}STU;
main()
{STU a[5];
printf("%d\n",sizeof(a));
}
(14) 若fp已正确定义为一个文件指针,d1.dat为二进制文件,请填空,以便为“读”而打开此文件:fp=fopen(【14】);。
(15) 设有定义:int n,*k=&n;以下语句将利用指针变量k读写变量n中的内容,请将语句补充完整。
scanf("%d",【15】);
printf("%d\n",【16】);
(16) fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回。
请填空。
#include <stdio.h>
#define N 100
int fun(int(*a)[N])
{int row,col,max,min;
for(row=0;row<N;row++)
{for(max=a[row][0],col=1;col<N;col++)
if(【17】) max=a[row][col];
if(row==0) min=max;
else if(【18】) min=max;
}
return min;
}
(17) 函数sstrcmp()的功能是对两个字符串进行比较。
当s 所指字符串和t所指字符相等
时,返回值为0;当s所指字符串大于t所指字符串时,返回值大于0;当s所指字符串小于t所指字符串时,返回值小于0(功能等同于库函数strcmp())。
请填空。
#include <stdio.h>
int sstrcmp(char *s,char *t)
{while(*s&&*t&&*s==【19】)
{s++;t++; }
return 【20】;
}
基础部分和C语言程序设计试题
参考答案及评分标准
一、选择题(⑴-(40)题每题1分,(41)-(50)题每题2分,其60分)
(1) C (2) A (3) B (4) B (5) C
(6) A (7) D (8) D (9) D (10) D
(11) A (12) D (13) B (14) A (15) C
(16) D (17) C (18) C (19) B (20) C
(21) D (22) C (23) A (24) A (25) D
(26) A (27) B (28) D (29) B (30) D
(31) C (32) B (33) D (34) A (35) B
(36) D (37) C (38) A (39) D (40) D
(41) C (42) A (43) B (44) B (45) C
(46) D (47) B (48) D (49) A (50) C
二、填空题答案(每空2分,共40分)
(1) 【1】系统软件
(2) 【2】 CON 或 CON:
(3) 【3】 TCP/IP 或者传输控制协议/网际协议
(4) 【4】 EXIT 或者 exit
(5) 【5】二百万或者两百万或者 2百万或者 200万或者 2000000 或者 2,000,000
(6) 【6】 20,0
(7) 【7】 17
(8) 【8】 X
(9) 【9】 3,2,2,3
(10) 【10】 /i 或者 *1.0/i 或者 *1/i 或者 *(1.0/i) 或者 /(double)i
(11) 【11】 1000 10
(12) 【12】 3 5
(13) 【13】 80
(14) 【14】 "d1.dat","rb"#"d1.dat","r+b"#"d1.dat","rb+"
(15) 【15】 k
(16) 【16】 *k
(17) 【17】 max<a[row][col] 或者 max<=a[row][col] 或者 a[row][col]>max 或者a[row][col]>=max
(18) 【18】 max<min 或者 max<=min 或者 min>max 或者 min>=max
(19) 【19】 *t 或者 t[0]
(20) 【20】 *s-*t 或者 *s-t[0] 或者 s[0]-*t 或者 s[0]-t[0]。