1. 选择题
1,执行下列语句后a和b的值分别为( C )。
int a, b, c;
a=b=c=1;
++a|| ++b && ++c;
A: 错误 1
B: 2 2
C: 2 1
D: 1 1
2,若希望当A的值为奇数时,表达式的值为”真”,A的值为偶数时,表达式的值为”假”,则以下不能满足要求的表达式是( C )。
A: A%2==1
B: !(A%2==0)
C: !(A%2)
D: A%2
3,已知 int x=10, y=20, z=30;
以下语句执行后x, y, z的值是( B )。
if(x>y)
z=x;x=y;y=z;
A: x=10,y=20,z=30
B: x=20,y=30,z=30
C: x=20,y=30,z=10
D: x=20,y=30,z=20
4,判断char型变量cl是否为小写字母的正确表达式是( D )。
A: 'a'<=cl<='z'
B: (cl>=a)&&(cl<=z)
C: ('a'>=cl)||('z''<=cl)
D: (cl>='a')&&(cl<='z')
5,下述程序的输出结果是( C)
main()
{
int a=0,b=0,c=0;
if(++a>0||++b>0) ++c;
printf("%d,%d,%d",a,b,c);
}
A: 0,0,0
B: 1,1,1
C: 1,0,1
D: 0,1,1,
6,语句:printf(“%d”,(a=2)&&(b= -2));
的输出结果是(D)。
A: 无输出
B: 结果不确定
C: -1
D: 1
7, 若有定义:int a=3,b=2,c=1;
并有表达式:①a%b,
②a>b>c,
③b&&c+1
.则表达式值相等的是(C)
A: ①和②
B: ②和③
C: ①和③
D: ③和④
8,请阅读以下程序:
main()
{
int a=5,b=0,c=0;
if(a=b+c) printf(“***\n”);
else printf(“$$$\n”);
}
以上程序(D)。
A: 有语法错不能通过编译
B: 可以通过编译但不能通过连接
C: 输出***
D: 输出$$$
9,
若w=1,x=2,y=3,z=4
,则条件表达式w
A: 4
B: 3
C: 2
D: 1
10,以下程序的输出结果是(B)。
main()
{int x=2,y=-1,z=2;
if(x<y)
if(y<0) z=0;
else z+=1;
printf(“%d\n”,z);
}
A: 3
B: 2
C: 1
D: 0
11,
对下述程序,正确的判断是( B)
main()
{
int x,y;
scanf("%d,%d",&x,&y);
if(x>y)
x=y;y=x;
else
x++;y++;
printf("%d,%d",x,y);
}
A: 有语法错误,不能通过编译
B: 若输入3和4,则输出4和5
C: 若输入4和3,则输出3和4
D: 若输入4和3,则输出4和5
12,设int x,a,b;则下面if语句中错误的是(B )
A: if(a=b) x++;
B: if(a=
C: if(a-b) x++;
D: if(x) x++;
13,以下程序输出结果是(B)
main( )
{
int x=1,y=0,a=0,b=0;
switch(x)
{
case 1:switch(y)
{
case 0 :a++;break;
case 1 :b++;break;
}
case 2:a++;b++;break;
case 3:a++;b++;
}
printf("a=%d,b=%d",a,b);
}
A: a=1,b=0
B: a=2,b=1
C: a=1,b=1
D: a=2,b=2
14,
设int a=0,b=5;
执行表达式++a||++b,a+b
后,a,b和表达式的值分别是(C)
A: 1,5,7
B: 1,6,7
C: 1,5,6
D: 0,5,7
15 能正确标识“当x的取值在[1,10]或[200,210]范围内当真,否则为假”的表达是(C)
A: (x>=1)&&(x<=10)&&(x>200)&&(x<=210)
B: (x>=1)||(x<=10)||(x>=200)||(x<210)
C: (x>=1)&&(x<=10)||(x>=200)&&(x<=210)
D: (x>=1)||(x<=10)&&(x>200)||(x<=210)
16有如下程序段
int a=14,b=15,x;
char c=‘A’;
x=(a&&b)&&(c<‘B’);
执行该程序段后,x的值为(D)。
A: true
B: false
C: 0
D: 1
17下面判断正确的是____________。(A)
A: char *a="china";等价于char *a; a="china";
B: char str[10]={“china”};等价于char str[10];str[]={“china”};
C: char *s=”china”;等价于char *s; *s=”china”;
D: char c[4]=”abc”,d[4]=”abc”;等价于char c[4]=d[4]=”abc”;
18,若有说明:char *language[]={“FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”};
则表达式*language[1]>*language[3]
比较的是______________。(C)
A: 字符F和字符P
B: 字符串BASIC和字符串JAVA
C: 字符B和字符J
D: 字符串FORTRAN和字符串PASCAL
19,若有说明:int*p1,*p2,m=5,n;
以下程序段正确的是( D)
A: p1=&m;p2=&p1
B: p1=&n;scanf("%d",*p1)
C: scanf("%d",n); *p1=n
D: p1=&n; *p1=m
20,若有以下定义和语句:
int a[]={l,2,3,4,5,6,7,8,9,10},*p=a;
则值为3的表达式是_________.(A)
A: p+=2,*(p++)
B: p+=2,*++p
C: p+=3,*p++
D: p+=2,++*p
21,若有以下定义,则赋值正确的是( C)。
int a ,b , *p;
float c, *q;
A: p=&c
B: q=p
C: p=NULL
D: q=new int
22,已有函数max(a,b),
为了使函数指针变量p指向函数max,则下面选项中赋值方法正确的是(A)。
A: p=max
B: *p=max
C: p=max(a, b)
D: *p=max(a, b )
23,有以下程序
void fun(char *c,int d)
{
*c=*c+1;
d=d+1;
printf(“%c,%c,”,*c,d);
}
main()
{ char b=’a’,a=’A’;
fun(&b,a);
printf(“%c,%c\n”,b,a);
}
程序的运行结果是( B )
A: a,B,B,a
B: b,B,b,A
C: a,B,a,B
D: b,B,B,A
24, p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是(B)
A: c=*p1+*p2
B: p2=c
C: p1=p2
D: c=*p1*(*p2)
25,以下正确的定义语句和赋值语句是_________。(B)
A: int b[3][5],(*p)[3],(*q)[5];p=b;q=b;
B: float b[3][5],*p[3];p[0]=b[0];p[2]=*b+4;
C: double b[3][5],s[5][3],*q;q=b;s=q;
D: int b[10],*q;char *s;q=b;s=b;
26,以下程序有错,错误原因是___________。(A)
main()
{int *p,i;
char *q,ch;
p=&i; q=&ch; *p=40; p=q;
┆
}
A: p和q的类型不一致,不能执行p=q;语句
B: p中存放的是地址值,因此不能执行p=40;语句
C: q没有指向具体的存储单元,所以*q没有实际意义
D: q虽然指向了具体的存储单元,但该单元中没有确定的值,所以不能执行p=q; 语句
27,若有以下定义,则数值不为3的表达式是__________。( C )
int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;
A: x[3]
B: p1=x+3,*p1++
C: p1=x+2,*(p1++)
D: p1=x+2,*++p1
28设有以下定义:
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*prt)[3]=a,*p=a[0];
则下列能够正确表达数组元素a[1][2]的表达式是( D )。
A: *((*prt+1))
B: *(*(p+5))
C: (*prt+1)+2
D: *(*(a+1)+2)
29
有以下程序
#include
main()
{
int a[5]={2,4,6,8,10},*p,**k;
p = a; k = &p;
printf("%d",*(p++));
printf("%d\n",**k);
}
程序运行后输出结果是(D)
A: 46
B: 22
C: 44
D: 24
30 p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是( B)
A: c=*p1+*p2
B: p2=c
C: p1=p2
D: c=*p1*(*p2)
31,若有以下定义和语句,则对a数组元素地址的正确引用为________________。©
int a[2][3], (*p)[3];
p=a;
A: *(p+2)
B: p[2]
C: *(p[1]+1)
D: (p+1)+2
32,有以下程序
#include
main()
{
int a[5]={2,4,6,8,10},*p,**k;
p = a; k = &p;
printf("%d",*(p++));
printf("%d\n",**k);
}
程序运行后输出结果是( D)
A: 46
B: 22
C: 44
D: 24
33,
已定义以下函数:
int fun(int *p){return *p;}
fun函数返回值是 ( C )
A: 一个整数
B: 形参p的地址值
C: 形参p中存放的值
D: 不确定的值
34,
有以下程序
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);
}
程序运行后的输出结果是(B)
A: ABCDDEFEDBD
B: abcDDfefDbD
C: abcAAfefAbA
D: Abcddfefdbd
35,若有以下定义,则数值不为3的表达式是__________。©
int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;
A: x[3]
B: p1=x+3,p1++
C: p1=x+2,(p1++)
D: p1=x+2,*++p1
36,有如下程序
main()
{ char s[]="ABCD", *p;
for(p=s+1; p<s+4; p++)printf("%s",p);}
该程序的输出结果是(D )
A: ABCDBCDCDD
B: ABCD
C: BCD
D: BCDCDD
37,对于两个类型相同的指针变量,不能进行( A )运算?
A: +
B: -
C: =
D: ==
38,
main函数的正确说明形式是___________。(B)
A: main(int argc,char *argv)
B: main(int abc,char **abv)
C: main(int argc,char argv)
D: main(int c,char v[])
39,下面说明不正确的是(D)
A: char a[10]="china";
B: char a[10],*p=a;p="china"
C: char *a;a="china";
D: char a[10],*p;p=a="china"
40, 若要对a进行+ +运算,则a应具有下面说明______(D)
A: int a[3][2];
B: char * a [ ]={“12”,”ab”};
C: char (*a)[3]
D: int b[10],*a=b;
41,若有以下程序段,
int c1=1, c2=2, c3;
c3=1.0/c2*c1;
则执行后,c3中的值是(A )。
A: 0
B: 0.5
C: 1
D: 2
42,设有以下语句:
struct st{int n; struct st *next;};
static struct st a[3]={5, &a[1], 7, &a[2], 9, ‘\0’},*p;
p=&a[0];
则表达式( D)的值是6。
A: p++ ->n
B: p->n++
C: (*p).n++
D: ++p->n
43, 下面四个选项中,均是合法整型常量的选项是( A)。
A: 160 -0xffff 011
B: -0xcdf 01a 0xe
C: -01986 012 0668
D: -0x48a 0x2e5 0x
44,
在下列叙述中,错误的一条是( B )。
A: 全局变量存放在静态存储区中,在程序开始执行时就给全局变量分配存储区,程序执行完才释放
B: 在有参函数中,形参在整个程序一开始执行时便分配内存单元
C: 用数组名作函数实参和形参时,应在主调用函数和被调用函数中分别定义数组
D: 在同一个源文件中,全局变量与局部变量同名时,在局部变量的作用范围内,全局变量不起作用
45,
以下程序的输出结果是(B)。
main()
{int x=2,y=-1,z=2;
if(x<y)
if(y<0) z=0;
else z+=1;
printf(“%d\n”,z);
}
A: 3
B: 2
C: 1
D: 0
46,设有以下定义和语句,则输出结果是(指针变量占2个字节)( B)。
struct date
{long *cat;(2字节)
struct date *next;(2字节)
double dog;(8字节)
}too;
printf(“%d”, sizeof(too));
A: 20
B: 16
C: 14
D: 12
47,若输入1.5、2.5,以下程序的输出结果为(C)。
main( )
{int max(float x, float y);
float a, b;
int c;
scanf("%f, %f" , &a, &b);
c=max(a, b);
printf("%d", c);
}
max(float x, float y)
{float z;
z=x>y ? x : y;
return(z);
}
A: 1
B: 2.5
C: 2
D: 3
48,语句while(!E);中的表达式!E等价于( A)
A: E0
B: E!=1
C: E!=0
D: E1
49,以下程序的输出结果是( )。
main()
{
int x=2,y,z;
x*=3+1;
printf("%d,",x++);
x+=y=z=5;
printf("%d,",x);
x=y=z;
printf("%d\n",x);
}
A: 8,14,1
B: 8,14,5
C: 8,13,5
D: 9,14,5
50,以下程序的输出结果是( )。
main()
{int i=1,j=3;
printf("%d,",i++);
{int i=0;
i+=j*2;
printf("%d,%d,",i,j);
}
printf("%d,%d\n",i,j);
}
A: 1,6,3,1,3
B: 1,6,3,2,3
C: 1,6,3,6,3
D: 1,7,3,2,3
51,fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是(C )
A: 只写
B: 追加
C: 读或读写
D: 答案b和c都正确
52,
下面程序段的运行结果是( A)。
a=1;b=2;c=2;
while(a<b<c) {t=a;a=b;b=t;c--;}
printf("%d, %d, %d", a, b, c);
A: 1,2,0
B: 2,1,0
C: 1,2,1
D: 2,1,1
53,以下程序的输出结果是(C)。
#include
#include
main()
{
int a=1,b=4,c=2;
float x=10.5, y=4.0, z;
z=(a+b)/c+sqrt((double)y)*1.2/c+x;
printf("%f\n", z);
}
A: 14.000000
B: 15.400000
C: 13.700000
D: 14.900000
54,若要“向文本文件尾增加数据”,在fopen函数中应使用的文件方式是( B )。
A: “ab+”
B: “a”
C: “ab”
D: “a+”
55,能正确表示逻辑关系:”a≥10或a≤0”的C语言表达式是( D )。
A: a>=10 or a<=0
B: a>=0|a<=10
C: a>=10&&a<=0
D: a>=10||a<=0
56,对下述程序,正确的判断是( A )
main()
{
int x,y;
scanf("%d,%d",&x,&y);
if(x>y)
x=y;y=x;
else
x++;y++;
printf("%d,%d",x,y);
}
A: 有语法错误,不能通过编译
B: 若输入3和4,则输出4和5
C: 若输入4和3,则输出3和4
D: 若输入4和3,则输出4和5
57,只能向终端输出一个字符的函数是( B )。
A: printf函数
B: putchar函数
C: getchar函数
D: scanf函数
58,有如下程序
main( )
{ float x=2.0,y;
if(x<0.0) y=0.0;
else if(x<10.0) y=1.0/x;
else y=1.0;
printf(“%f\n”,y);
}
该程序的输出结果是( C )。
A: 0.000000
B: 0.250000
C: 0.500000
D: 1.000000
59,以下程序的输出结果是(D )。
#include
void fun(float *p1,float *p2, float *s)
{s=(float *)calloc(1, sizeof(float));
*s=*p1+*(p2++);
}
main()
{float a[2]={1.1, 2.2}, b[2]={10.0, 20.0}, *s=a;
fun (a, b, s);
printf(“%f\n”, *s);
}
A: 11.100000
B: 12.100000
C: 21.100000
D: 1.100000
60,
以下选项中,能定义s为合法的结构体变量的是( )。
A) typedef struct abc
{
double a;
char b[10];
}s;
B) struct
{
double a;
char b[10];
}s;
C) struct ABC
{
double a;
char b[10];
}
ABC s;
D) typedef struct ABC
{
double a;
char b[10];
}
A: 在题目描述中
B: 在题目描述中
C: 在题目描述中
D: 在题目描述中
61,设有如下定义:
struct sk
{int a; float b;} data, *p;
若有p=&data,则对data中的成员a的正确引用是(B)。
A: (*p).data.a
B: (*p).a
C: p->data.a
D: p.data.a
62,
设有以下说明语句:
struct lie
{
int a;
float b;
}st;
则下面叙述中错误的是(C )。
A: struct是结构类型的关键字
B: struct lie 是用户定义的结构类型
C: st是用户定义的结构类型名
D: a和b都是结构成员名
## 判断题
1,字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值。 对
2,“==”表示关系运算符等于, “=”表示赋值运算符。 对
3.,C语言的基本组成单位是语句 错
4,指针可以赋值,给指针赋值时一定要类型相同,级别一致。 对
5,C语言的基本组成单位是语句()。 错
6, C语言中,关键字及编译预处理命令用小写字母书写。 错
7,指针的类型是它所指向的变量或对象的类型。 对
8,两个指针在任何情况下相减都是有意义的。 对
9, 表达式*p++的运算顺序为先自增后取值。 错
10,指针、数组名、函数名都是地址。 对
11,一个指针变量的值是一个地址值。 对
12, 指针可以加上或减去一个int型数,也可以加上一个指针。 错
13, 通过变量名或地址访问一个变量的方法称为“直接访问”方式。 对
14,指向同一数组的两个指针p1,p2相减的结果与所指元素的下标相减的结果是相同的。 对
15 函数指针所指向的是程序代码区。 对
16, 如果两个指针的类型相同,且均指向同一数组的元素,那么它们之间就可以进行加法运算。 错
17,语句“int p;”中的p的含义为取值。 错
18,C语言中,只能用下标来引用数组元素。 错
19,如果两个指针的类型相同,且均指向同一数组的元素,那么它们之间就可以进行加法运算。 错
20, C语言中的文件是一种流式文件,读写时均以字符为单位。 对
21结构体和共用体成员的应用都可能引用最低一级的成员。 对
22,对于数值型数组来说,可以引用整个数组。 错
23,用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。 对
24,将整数值赋值给枚举变量时不需要作强制类型转换。 错
25,枚举类型是一种基本的数据类型 错
26, 结构体变量作参数时是地址传递。 错
27,定义结构体typedef struct one { int a;}s; s a;则a为结构体变量 对
28,结构体和共用体成员的应用都可能引用最低一级的成员。 对
29,结构体数组不可以在定义时进行初始化。 错
30,表达式c=fgetc(fp)!=EOF的功能是从fp指向的文件中读取字符,并判断文件是否结束。 对
31, 函数原型说明中,省略形参变量或者将形参变量写成其它名称不影响程序的正确性。 对
32,C语言函数返回类型的默认定义类型是void 错
## 函数题
1,二维数组交换两行值功能函数的实现问题
现在有一个程序如下,要求完成对应的函数change(),该函数有三个参数,分别是二维数组arr和两个整数u、w,函数功能是要求实现将二维数组arr[][N]中行标为u和w的两行元素交换位置,交换规则是相同的列进行交换。已知该二维数组的行数和列数都为N,注意:行标和列标都从0开始。
#include
#define N 10
void change(int arr[][N], int u,int w)
{//请在此完成函数,u,w都是下标}
将两数组的指针传入change函数,在函数中将两指针对应的数组内容进行调换;
2,矩阵主对角线的平均值
题目描述:
输入一个n*n的矩阵,要求计算对角线的平均值,结果保留两位小数。
输入:
输入只有一个用例,第一行表示矩阵行数(也是列数),接下来n行,每行n个整数,表示矩阵的元素。
输出:
用一行输出主对角线元素的平均值,结果保留两位小数(四舍五入)。
根据二维数组的组数和每组个数尽行处理,使其对角数相加。
3,题目描述
密码:密码被盗,后果很严重。现在发现安全的密码至少应该满足下面两个条件:
(1).密码长度大于等于8,且不要超过16。
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。
这四个字符类别分别为:
1.大写字母:A,B,C…Z
2.小写字母:a,b,c…z
3.数字:0,1,2…9;
4.特殊符号:~,!,@,#,$,%,^
使用for循环进行多次判断,使用if语句和sizeof()判断密码位数是否合格,在用fou循环判断每个字符是否合格,用4个初始数当他们有3个非0就合格;