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';
A.下划线
;B.波浪线;C.字符*;D.字符#;
解析:标识符定义规则有三点
1.不能数字开头
2.不能是保留字。比如int、float这种
3.可以是下划线和字母开头。
做题的话还有一点
不能加特殊符号,比如.号
扩展:
1.自己实际写
用的最多的还是驼峰起名法
ABlogOfCMakesYouCanPassExam
每个词的开头大写
2.手撕源码
遇到保留字,在前边加个my_
比如my_LinkededList
A.stdio.h
; B.math.h; C.stdlib.h; D.不用包含任何头文件;
A…cpp; B..c
; C…obj; D…exe;
A.3%2.0
B.a*b/c C.2/b D.a/b/c
解析:
模运算:就是求余数。5除以3余2,所以5%3=2
C语言里边,两个整型相除,不保留小数,5/3=1
你真得觉得对浮点型进行模运算合理吗?
扩展:
5/2.0=2.5;
当一个整型和另一个浮点型运算的时候,会有整型提升,整型提升成浮点型。相当于5变成5.0了
两个浮点型的相除。。。5/2.0反正能算出来是2.5
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可以把符号位当成数来用。。。能表示的正数的范围会扩大,不能表示负数
A.long B._2Test
C.3Dmax D.A.dat
解析:见2题
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
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+=几?要看成这样
A.k=n,n=n+1 B.n=n+1,k=n C.k=++n D.k+=n+1
#include
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、10
8进制逢8进1,不8题乃种解法,一个一个数也能数出来
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
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
A.关系运算符 < 算术运算符 < 赋值运算符 < 逻辑运算符
B.逻辑运算符 < 关系运算符 < 算术运算符 < 赋值运算符
C.赋值运算符 < 逻辑运算符 < 关系运算符 < 算术运算符
D.算术运算符 < 关系运算符 < 赋值运算符 < 逻辑运算符
赋值运算符:形如=、+=
逻辑运算符:&&(并且)、||(或者)
关系运算符:大于号、小于号
算术运算符:加减乘除
if(K<=0) printf("####");
else printf("&&&&");
上面程序片段的输出结果是( B )。
A.#### B.&&&& C.####&&&& D.有语法错误,无输出结果
解析:二选一,选哪个看真假
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
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里的语句
只能说:
动(手)的都懂
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的条件别写小数
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的数
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表示
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语言了,有必要了再研究吧)
A.a[2][4] B.a[1,3] C.a[4][3]
D.a[5][0]
解析:访问数组元素,下标别越界哥,基操
A.4个字节 B.5个字节 C.6个字节
D.7个字节
解析:字符串结尾是斜杠0,你不写有人帮你写。China看上去是5个,还有隐藏的斜杠0,一共6个
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
#include
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,
可以看视频。
也可以参考前边的题。
char *s="abcde";
s+=2;
printf("%s",s);
建议看视频,有讲指针的基础知识
A.cde B.字符’c’ C.字符’c’的地址 D.无确定的输出结果
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
A.调用函数后,被调用的函数没有返回值
B.调用函数后,被调用的函数不返回
C.调用函数后,被调用的函数的返回值为任意的类型
D.以上3种说法都是错误的
A.函数定义不能嵌套,但函数调用可以嵌套
B.函数定义可以嵌套,但函数调用不能嵌套
C.函数定义与调用均不能嵌套
D.函数定义与调用均可以嵌套
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
解析:函数分值传递和地址传递。
A.a++
B.a+1 C.p+1 D.++p
【记住这句话】数组名是数组首元素地址
int *p,a=10,b=1;
p=&a; a=*p+b;
执行该程序段后,a的值为( B )。
A.12 B.11 C.10 D.编译出错
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
*号,叫解引用,可以根据地址拿出来那里存的值
struct City{
char *name;
long total;
}city[]={"Guangzhou",800,"Meizhou",600,"Shanghai",500,"Hangzhou",400};
能正确输出字符串Meizhou的语句是( D )。
A. printf(“%c”,city[1].name)
B. printf(“%s”,city[1].name[1]);
C. printf(“%s”,city.name[1]);
D. printf("%s",city[1].name);
city是城市数组,city[1]才是一个城市对象
char x=3,y=6,z;
z=x^y<<2;
则z的二进制值是( B )。
A.00011011
B.00010100 C.00011100 D.00011000
A.c1&&c2 B.c1^c2
C.c1&c2 D.c1|c2
A.操作数乘以2
B.操作数除以2 C.操作数除以4 D.操作数乘以4
#include
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”
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]
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.随机数
#include
void fun(int *s){
static int j=0;
do
s[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
#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。
这个题有问题
A.常量B.单精度数C.双精度数D.字符串
struct stu{
int a;
float b;
} stutype;
A.struct是结构体类型的关键字
B.struct stu是用户定义的结构体类型
C.stutype 是用户定义的结构体类型名
D.a和b都是结构体成员名
解析:stutype是类型为struct stu的结构体变量
,不是结构体类型名。故选择答案是C。