在国家计算机二级的考试题库中,有哪些C语言的题目呢?下面是小编给大家整理的及答案,供大家参阅!
一、选择题
1.若有以下定义和语句:
char s [10]="abcd!",*s2="\nl23\\";
Drintf***"%d%d\n",strlen***sl***,strlen***s2******;
则输出结果是*** ***。
A.5 5
B.10 5
C.10 7
D.5 8
2.有以下程序:
#include
#define N 8
void fun***int*x,int i***
{*x=****x+i***;***
main*** ***
{ int a[N]={1,2,3,4,5,6,7,8},i;
fun***a,2***;
for***i=0;i{printf***"Ha",a[i]***;}
printf***"\n"***;
***
程序运行后的输出结果是*** ***。
A.1313
B.2234
C.3234
D.1234
3.有以下程序:
#include
int f***int t[],int n***;
main*** ***
{int a[4]={1,2,3,4},s;
s=f***a,4***;printf***"%d\n",s***;
int f***int t[],int n***
{if***n>0***return t[n-1]+f***t,n-1***;
else return 0;
***
程序运行后的输出结果是*** ***。
A.4
B.10
C.14
D.6
4.有以下程序:
#include
int fun*** ***
{static int x=1;
X*=2;return X;
main*** ***
{int i,S=1;
for***i=1;i<=2;i++***s=fun*** ***;
printf{¨%d\n",s***;
***
程序运行后的输出结果是*** ***。
A.0
B.1
C.4
D.8
5.有以下程序:
#include
#define SUB***a******a***-***a***
main*** ***
{int a=2,b=3,c=5,d;
d=SUB***a+b****C;
printf***"%d\n",d***;
***
程序运行后的输出结果是*** ***。
A.0
B.-l2
C.-20
D.10
6.设有定义:
struet complex
{int real,unreal;***datal={1,8},data2;
则以下赋值语句中错误的是*** ***。
A.data2=datal;
B.data2={2,6};
C.data2.real=datal.real;
D.data2.real=datal.unreal;
7.有以下程序:
#include
#include
struct A
{int a;char b[10];double C;***;
void f***struct A t***;
main*** ***
{struct A a={"1001,"ZhangDa",l098,0};
f***a***;printf***"%d,%S,%6.1f\n",a.a,a.b,a.c***;}
void f***struct A t***
{t.a=1002;strcpy***t.b,"ChangRon9"***;t.c=1202.0;}
程序运行后的输出结果是*** ***。
A.1001,ZhangDa,1098.0
B.1002,ChangRong,1202.0
C.1001,ChangRong,1098.0
D.1002,ZhangDa,1202.0
8.有以下定义和语句:
struct workers
{int num;char name[20];char C;
struct
***int day;int month;int year;***S;
};
struct workers w,*pw;
pw=&w;
能给w中year成员赋1980的语句是*** ***。
A.*pw.year=1980;
B.w.year=1980;
C.pw->year=1980
D.w.S.year=1980;
9.有以下程序:
#include
main*** ***
{int a=2,b=2,C=2;
print{***"%d\n",a/b&c***;
}
程序运行后的输出结果是*** ***。
A.0
B.1
C.2
D.3
10.有以下程序:
#include
main*** ***
{FILE*fp;char str[10];
fp=fopen***"myfile,dat",""***;
{puts***"abe",ip***;fclose***fp***;
fp=fopen***"myfile.dat","a*"***;
fprintf***fp,"%d",28***;
rewind***fp***;
fscanf***fp,"%S",str***;puts***str***;
fclose***fp***;
}
程序运行后的输出结果是*** ***。
A.abc
B.28c
C.abc28
D.内类型不一致而出错
二、程序改错题
给定程序中,函数proc*** ***的功能是:使数组中的元素的值缩小5倍。
请修改程序中的错误,使它能得出正确的结果。
注意:不要改动main*** ***函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include
#include
#include
float m[lO];
//****found****
int proc***void***
{
int j;
printf***"In subfunc after calling\n"***;
for***j=0;j<10;j++***
{
//****found****
printf***"%f",m[j]%5***;
}
}
void main*** ***
{
int i;
printf***"In main before calling\n"***;
for***i=0;i<10;i++***
{
m[i]=i+20;
printf***"%f",m[i]***;
}
proc*** ***;
printf***"\nln main after calling\n"***;
for***i=0;i<10;i++***
printf***"%f",m[i]/5***;
}
三、程序设计题 学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构体数组stu中,请编写函数proc*** ***,其功能是:按分数的高低排列学生的记录,高分在前。
注意:部分源程序给出如下。
请勿改动main*** ***函数和其他函数中的任何内容,仅在函数proc*** ***的花括号中填入所编写的若干语句。
试题程序:
#include
#define M l6
typedef struct
{
char num[l0];
int S;
}
STREC:
void proc***STREC a[]***
{
int i,j;
STREC t;
for***i=1;i排序*/
for***j=0;jif***a[j].s的记录,高分在前*/
{t=a[j];a[j]=a[j+1];a[j+1]=t;***
}
void main*** ***
{
STREC stu[M]={{"GA005",85***,{"GA003",76},
{"GA002",69},{"GA004",85***,{"GA001",91***,
{"GA007",72***,{"GA008",64***,{"GA006",87***,
{"GA015",85***,{"GA013",91***,{"GA012",64***,
{¨GA014",91***,{"GA011",66***,{"GA017",64},
{"GA018",64***,{"GA016",72}};
int i;
proc***stu***;
printf***"The data after sorted:\n"***;
for***i=0;i{
if***i%4= =0***
//每行输出4个学生记录
printf***"n"***;
printf***"%s%4d",stu[i],num,stu[i].s***;
}
printf***"\n"***;
}
答案
一、选择题
1.A。(解析)\n和\\分别为转义字符,各占据一个字符的位置。
2.C。(解析)本题考查了宏定义与局部变量的区别,宏定义的作用范围为整个程序,而变量的作用范围只在定义它的函数体的部分,因此,主函数中定义的i与fun*** ***中的i互不相干。
3.B。(解析)本题考查了函数的调用,并且使用了嵌套。
4.C。(解析)本题考查了static的用法。当static用于局部变量中,成为静态局部变量。静态局部变量有两个用法,记忆功能和全局生存期。当static用于全局变量,主要作用是限制此全局变量被其他的文件调用。当static用于类中的成员,表示这个成员是属于这个类,但是不属于类中任意特定对象。所以本题答案为C。
5.C。(解析)本题调用参数,并考查了优先级。SUB***a+b****C调用后可写成***a书b***-***a+b****C,结果为5-25=-20。
6.B。(解析)B中的赋值方式仅限于在结构说明时,对每个变量成员初始化。在程序中对结构体成员赋值,或采用选项A中的整体赋值方式,或采用选项C、D中对结构成员依次赋值。
7.A。(解析)将结构变量作为形参,通过函数间形参与实参相结合的方式将整个结构传递给函数,这种传递方式是值传递。在被调用函数中,对结构形参变量值进行的任何修改都不会影啊到调凋函数中的结构变量。
8.D。(解析)结构workers中的成员s是一个嵌套的结构类型定义,因此在给year赋值时,要用“.”运算在深入一层访问到最基本的成员year,只有D项反映出了这一点。
9.A。(解析)根据C语言运算符的优先级与结合性,先计算a/b,结果为l,再将a/b的结果与C做按位与运算,即l与2做按位与运算,其结果为0。 . .
10.C。(解析)本题考查文件的操作,首先打开文件,进行写操作,把“abc”写入“myfile”文件,再打开“myfile.data"文件,输入28,在键盘上接收字符,输出并关闭文件。本题结果为abc28。
二、程序改错题
***1***错误:int proc***void***
正确:void proc***void***
***2***错误:printf***"%f",m[j]%5***;
正确:pfintf***"%f",m[j]/5***;
(解析)由主函数中的函数调用可知,函数proe*** ***没有返回值。因此“int proc***void***”应改为“void proc***void***”。题目中要求使数组中元素的值缩小到l/5,而不是对5取余。因此,“printf***"%f",m[j]%5***;”应改为“printf***”%f”,mEjl/5***;”。
三、程序设计题
void proc***STREC a[]***
{
int i,j;
STREC t;
for***i=1;ifor***j=0;jif***a[j].s{t=a[j];a[j]=a[j+1];a[j+1]=t;}
}
(解析)要按分数的高低排列学生的记录,可以使用冒泡排序法。将每一个学生的成绩与其他学生的成绩相比较,对不符合要求的记录交换位置。