文章目录
- 题目
- 1.下面哪个不是C语言的基本数据类型?( B )
- 2.C语言的标识符应以字母或( A )开头。
- 3.如果需要在C程序里调用标准函数库中的printf函数,则应该在程序的开头包含哪个头文件?( A )
- 4.C语言源程序的扩展名是( B )。
- 5.若变量已正确定义并赋值,表达式( A )不符合C语言语法。
- 6.以下选项中不属于C语言的类型的是( D )。
- 7.以下选项中合法的用户标识符是( B )。
- 8.已知大写字母A的ASCII码值是65,小写字母a的ASCII码是97,则用八进制表示的字符常量‘\101’是( A )。
- 9.+=、*=运算符
- 笔记(拍完视频再发)
题目
1.下面哪个不是C语言的基本数据类型?( B )
A.整型; B.逻辑型
; C.浮点型; D.字符型;
解析:A:整型简单理解就是整数,int a=1,a就是一个值为1的整型变量B:逻辑型,在C语言里没有专门的逻辑型。布尔表达式的结果为0相当于是false,非0则真。C:float b=2.5; b就是一个值为2.5的浮点型变量,简单理解就是有小数。D.字符型,char ch='a';
2.C语言的标识符应以字母或( A )开头。
A.下划线
;B.波浪线;C.字符*;D.字符#;
解析:标识符定义规则有三点1.不能数字开头2.不能是保留字。比如int、float这种3.可以是下划线和字母开头。做题的话还有一点不能加特殊符号,比如.号
扩展:1.自己实际写用的最多的还是驼峰起名法ABlogOfCMakesYouCanPassExam每个词的开头大写2.手撕源码遇到保留字,在前边加个my_比如my_LinkededList
3.如果需要在C程序里调用标准函数库中的printf函数,则应该在程序的开头包含哪个头文件?( A )
A.stdio.h
; B.math.h; C.stdlib.h; D.不用包含任何头文件;
4.C语言源程序的扩展名是( B )。
A…cpp; B..c
; C…obj; D…exe;
5.若变量已正确定义并赋值,表达式( A )不符合C语言语法。
A.3%2.0
B.a*b/c C.2/b D.a/b/c
解析:模运算:就是求余数。5除以3余2,所以5%3=2C语言里边,两个整型相除,不保留小数,5/3=1你真得觉得对浮点型进行模运算合理吗?
扩展:5/2.0=2.5;当一个整型和另一个浮点型运算的时候,会有整型提升,整型提升成浮点型。相当于5变成5.0了两个浮点型的相除。。。5/2.0反正能算出来是2.5
6.以下选项中不属于C语言的类型的是( D )。
A.signed short int B.unsigned long int C.unsigned int D.long short
解析:int表示的范围是有限的long:不够用了,可以用long,它的范围更大,再不够用,还有long long ,再不够用还可以用数组存,不用担心你的钱多到银行的系统存不了。short:感觉用int太浪费空间,可以考虑用short,节约空间unsigned:int不是4个字节吗?32个比特位,里边其实固定有一位是用来表示符号的。unsigned可以把符号位当成数来用。。。能表示的正数的范围会扩大,不能表示负数
7.以下选项中合法的用户标识符是( B )。
A.long B._2Test
C.3Dmax D.A.dat
解析:见2题
8.已知大写字母A的ASCII码值是65,小写字母a的ASCII码是97,则用八进制表示的字符常量‘\101’是( A )。
A.字符A
B.字符a C.字符e D.非法的常量
解析:详解见视频。这题把8进制的101转成10进制就行
101 = 1 ∗ 8 2 + 0 ∗ 8 1 + 1 ∗ 8 0 = 64 + 1 = 65 101=1*8^2+0*8^1+1*8^0=64+1=65 101=1∗82+0∗81+1∗80=64+1=65
9.+=、*=运算符
int main(){ int k=2,i=2,m; m=(k+=i*=k); printf("%d,%d\n",m,i);return 0;
}
执行后的输出结果是( C )。
A.8,6 B.8,3 C.6,4
D.7,4
原式 | 展开 |
---|---|
i*=k | i=i*k |
k+=i | k=k+i |
要点:1.不熟练就先展开2.留意视频里讲的等效替代,看代码的动态变化——进阶必备。i*=k算完之后,就相当于是k+=几?要看成这样
10.以下选项中,与k=n++完全等价的表达式是(A )。
A.k=n,n=n+1 B.n=n+1,k=n C.k=++n D.k+=n+1
11.阅读下面的程序
#include<stdio.h>void main(){int i,j;i=010;j=9;printf("%d,%d",i-j,i+j);}
则程序的运行结果是( D )。
A.1,19 B.-1,19 C.1,17 D.-1,17
解析:0开头表示8进制的数0x开头16进制0b开头二进制这题,你先把010转成8进制,不会?。。。1、2、3、4、5、6、7、108进制逢8进1,不8题乃种解法,一个一个数也能数出来
12.若有以下定义和语句:
int a=010, b=0x10, c=10;printf("%d,%d,%d\n",a,b,c);
则输出结果是( B )。
A.10,10,10 B.8,16,10
C.8,10,10 D.8,8,10
13.执行下列程序段后的输出结果是( A )。
int x=1,y=1,z=1;x+=y+=z;printf("%d\n",x<y?y:x);
A.3
B.2 C.1 D.4
解析:?号左边是一个布尔表达式,真假决定去冒号左边的值还是右边还是第9题乃样,?:运算完之后,就相当于x<y?y:x 变成 x了,而x又等于3,所以就打印3喽
14.以下关于运算符优先顺序的描述中正确的是( C )。
A.关系运算符 < 算术运算符 < 赋值运算符 < 逻辑运算符
B.逻辑运算符 < 关系运算符 < 算术运算符 < 赋值运算符
C.赋值运算符 < 逻辑运算符 < 关系运算符 < 算术运算符
D.算术运算符 < 关系运算符 < 赋值运算符 < 逻辑运算符
赋值运算符:形如=、+=逻辑运算符:&&(并且)、||(或者)关系运算符:大于号、小于号算术运算符:加减乘除
15.若int K=3;,且有下面的程序片段:
if(K<=0) printf("####");else printf("&&&&");
上面程序片段的输出结果是( B )。
A.#### B.&&&& C.####&&&& D.有语法错误,无输出结果
解析:二选一,选哪个看真假
16.设char CH;,其值为A,且有下面的表达式:
CH=(CH>='A' && CH<='Z')?(CH+32):CH
法1:一点一点看,CH为A,肯定和A相等,所以&&左边为真,CH当然也小于Z了,所以右边也为真
法2:看语义,如果CH是一个大写字母,布尔表达式的结果就为真
则表达式的值是( B )。
A.A B.a
C.Z D.z
17.有如下程序
int main() { int a=2,b=-1,c=2; if(a<b)if(b<0) c=0; else c++;printf("%d\n",c);return 0;
}
该程序的输出结果是( C )。
A.0 B.1 C.2 D.3
解析:1.if后边如果只有一句可以不写大括号。2.else和结构上(不是距离上)紧挨着的if配对,当if条件为假的时候,就会执行else里的语句只能说:动(手)的都懂
18.若有以下定义:
float x;int a,b;
则正确的switch 语句是( C )。
A.switch(x){case 1.0:printf("*\n"); case 2.0:printf("**\n");}B.switch(x){case 1,2:printf("*\n");case 3:printf("**\n");}C.switch(a+b) {case 1:printf("\n"); case 1+2:printf("**\n");}D.switch(a+b);{case 1:printf("*\n");case 2:printf("**\n");}
解析:case的条件别写小数
19.以下程序的运行结果是( A )。
int main(){int n;for(n=1;n<=10;n++){if(n%3==0) continue; printf("%d",n);}return 0;
}
A.12457810 B.369 C.12 D.1234567890
建议:看视频,有讲for循环的基础概念语义:打印1到10之间,不能整除3的数
20.若有以下说明:
char s1[ ]={"tree"},s2[]={"flower"};
则以下对数组元素或数组的输出语句中,正确的是( C )。
A.printf(“%s%s”,s1[5],s2[7]);
B.printf(“%c%c”,s1,s2);
C.puts(s1);puts(s2);
D.puts(s1,s2);
简单理解:想打印字符串,用%s或者puts函数。补充:字符串经常用string表示
21.如有说明:char s1[5],s2[7];
,要给数组s1和s2整体赋值,下列语句中正确的是( B )。
A.s1=getchar(); s2=getchar();
B.scanf("%s%s",s1,s2);
C.scanf(“%c%c”,s1,s2);
D.gets(s1,s2);
简单理解:想调键盘,接受一个字符串,用%s(gets我当时就用的少,都用的scanf和printf这俩,后来也不用C语言了,有必要了再研究吧)
22.在定义int a[5][4]; 之后,对a数组元素的引用正确的是( C )。
A.a[2][4] B.a[1,3] C.a[4][3]
D.a[5][0]
解析:访问数组元素,下标别越界哥,基操
23.在C语言中,设有数组定义:char array[ ]=“China”; 则数组array所占的空间为( C )。
A.4个字节 B.5个字节 C.6个字节
D.7个字节
解析:字符串结尾是斜杠0,你不写有人帮你写。China看上去是5个,还有隐藏的斜杠0,一共6个
24.定义如下变量和数组:
int i;int x[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
则下面语句的输出结果是( C )。
for(i=0;i<4;i++) printf("%3d",x[i][3-i]);
A.1, 5 ,9 ,13 B.1, 6, 11, 16 C.4 ,7 ,10, 13
D.4,8 ,12 ,16
25.以下程序的输出结果是( A )。
#include<stdio.h>void main(){int i,x[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++) printf("%d,",x\[i][i]);printf("\n");
}
A.1,5,9, B.1,4,7, C.3,5,7, D.3,6,9,
可以看视频。也可以参考前边的题。
26.下面程序段的运行结果是( A )。
char *s="abcde";s+=2;printf("%s",s);
建议看视频,有讲指针的基础知识
A.cde B.字符’c’ C.字符’c’的地址 D.无确定的输出结果
27.若有以下程序:
int main(){int m[][3]={1,4,7,2,5,8,3,6,9};int i,j,k=2;for (i=0;i<3;i++){printf("%d",m[k][i]); }return 0;
}
程序运行后输出结果是( C )。
A.4 5 6 B.2 5 8 C.3 6 9
D.7 8 9
28.定义为void类型的函数,其含义是( A )。
A.调用函数后,被调用的函数没有返回值
B.调用函数后,被调用的函数不返回
C.调用函数后,被调用的函数的返回值为任意的类型
D.以上3种说法都是错误的
29.对于C程序的函数,( A )的叙述是正确的。
A.函数定义不能嵌套,但函数调用可以嵌套
B.函数定义可以嵌套,但函数调用不能嵌套
C.函数定义与调用均不能嵌套
D.函数定义与调用均可以嵌套
30.以下程序的运行结果是( C )。
void f(int a,int b){
int t;t=a;a=b;b=t;
}int main(){
int x=1,y=3,z=2; if(x>y) f(x,y);
else if(y>z)
f(y,z);
else
f(x,z); printf(“%d,%d,%d\n”,x,y,z);
return 0;
}
A.1,2,3 B.3,1,2 C.1,3,2
D.2,3,1
31.若已定义“int a[9],*p=a;”并在以后的语句中未改变p的值,则不能表示a[1]地址的表达式是( A )。
A.a++
B.a+1 C.p+1 D.++p
32.有如下程序段:
int *p,a=10,b=1;p=&a; a=*p+b;
执行该程序段后,a的值为( B )。
A.12 B.11 C.10 D.编译出错
33.设有如下定义:
struct Date{ int year; int month;int day;};struct Teacher{ char name[20];char sex;struct Date birthday;}person;
对结构体变量person的出生年份进行赋值时,下面的赋值语句正确的是( C )。
A.year=1975; B.birthday.year=1975; C.person.birthday.year=1975;
D.person.year=1975;
34.若有下面的定义:
struct Test{int s1;float s2;char s3;union uu{char u1[10];int u2[2];}ua;
}stu;
则sizeof(struct Test)的值是( A )。
A.19
B.17 C.14 D.27
35.以下各选项要说明一种新的类型名,其中正确的是( A )。
A.typedef int i1;
B.typedef int=i2; C.typedef i1 int i3; D.typedef i4;
36.假设有如下定义:
struct {int a;float b;}data,*p;
若有p=&data,则对data中的a域的正确引用是( )。
A.(*p).data.a B.p->data.a C.(*p).a
D.p.data.a
37.假设有如下定义:
struct City{char *name;long total;}city[]={"Guangzhou",800,"Meizhou",600,"Shanghai",500,"Hangzhou",400};
能正确输出字符串Meizhou的语句是( D )。
A. printf(“%c”,city[1].name)
B. B.printf(“%s”,city[1].name[1]);
C. C.printf(“%s”,city.name[1]);
D. D.printf("%s",city[1].name);
38.设有以下语句:
char x=3,y=6,z; z=x^y<<2;
则z的二进制值是( A )。
A.00011011
B.00010100 C.00011100 D.00011000
39.设有定义语句“char c1=49,c2=49;”,则以下表达式中值为0的是( B )。
A.c1&&c2 B.c1^c2
C.c1&c2 D.c1|c2
40.在位运算中,操作数每左移一位,其结果相当于( A )。
A.操作数乘以2
B.操作数除以2 C.操作数除以4 D.操作数乘以4
41.以下程序的输出结果是( D )。#include<string.h>void main( ){char *p1, *p2, str[50]="ABCDEFG";p1="abcd"; p2="efgh";strcpy(str+1, p2+1); strcpy(str+3, p1+3);printf("%s", str);}
A.AfghdEFG B.Abfhd C.Afghd D.Afgd
解析:执行strcpy(str+1, p2+1);后,str所对应的字符串变为“Afgh”,再执行strcpy(str+3, p1+3);后,str所对应的字符串变为“Afgd”,所以正确答案是D。
42.下面程序把数组元素中的最大值放入a[0]中,则在if语句中的条件表达式应该是( B )。
void main( ){int a[10]={6, 7, 2, 9, 1, 10, 5, 8, 4, 3}, *p=a, i;for(i=0; i<10; i++, p++)if(________) \*a=\*p;printf("%d", *a);}
A.p>a B.*p>a[0]
C.*p>*a[0] D.*p[0]> *a[0]
43.下列程序执行后的输出结果是( B )。
void main( ){int a\[3][3], *p, i;p=&a\[0][0];for(i=0; i<9; i++) p[i]=i+1;printf("%d\n", a\[1][2]);}
A.3 B.6 C.9 D.随机数
44.以下程序的输出结果是( C )。
#include <stdio.h>void fun(int *s){static int j=0;dos[j]+=s[j+1];while (++j<2);}void main( ){int k, a[10]={1, 2, 3, 4, 5};for(k=1; k<3; k++) fun (a);for(k=0; k<5; k++) printf ("%d", a[k]);}
A.34756 B.23445 C.35745
D.12345
45.以下程序的运行结果是( B )。
#define MIN (x, y) (x) < (y) ? (x) : (y)void main ( ){int i = 10, j = 15, k;k = 10 * MIN (i, j);printf("%d\n", k); }
A.10 B.15
C.100 D.150
解析:语句k = 10 * MIN (i, j);在预编译时将进行宏替换为:k = 10 * (i) < (j) ? (i) : (j);因i = 10,j = 15,所以语句等价于k = 10 * 10 < 15 ? 10 : 15;,10*10比15大,因此k的值将是15。故正确答案是B。
46.在宏定义:#define PI 3.141592中,用宏名PI代替一个( D )。
A.常量B.单精度数C.双精度数D.字符串
解析:在宏定义中,标示符(或宏名)PI,它被定义代表后面的单词串。所以正确答案是D。
47.设有以下说明语句,则下面的叙述不正确的是( C )。
struct stu{int a;float b;} stutype;
A.struct是结构体类型的关键字
B.struct stu是用户定义的结构体类型
C.stutype 是用户定义的结构体类型名
D.a和b都是结构体成员名
解析:stutype是类型为struct stu的结构体变量
,不是结构体类型名。故选择答案是C。