设计一个企业网站首页,陕西省住房城乡建设部门户网站,长春站建筑,wordpress 评论数量C语言练习1 选择题 前言 “人生在勤#xff0c;勤则不匮。”幸福不会从天降#xff0c;美好生活靠劳动创造。全面建成小康社会的奋斗目标#xff0c;为广大劳动群众指明了光明的未来#xff1b;全面建成小康社会的历史任务#xff0c;为广大劳动群众赋予了光荣的使命… C语言练习1 选择题 前言 “人生在勤勤则不匮。”幸福不会从天降美好生活靠劳动创造。全面建成小康社会的奋斗目标为广大劳动群众指明了光明的未来全面建成小康社会的历史任务为广大劳动群众赋予了光荣的使命全面建成小康社会的伟大征程为广大劳动群众提供了宝贵的机遇。面对这样一个千帆竞发、百舸争流、有机会干事业、能干成事业的时代广大劳动群众一定要倍加珍惜、倍加努力。 选择题
1、执行下面程序正确的输出是 int x 5, y 7;
void swap()
{int z;z x;x y;y z;
}
int main()
{int x 3, y 8;swap();printf(%d,%d\nx, y);return 0;
}A: 5,7 B: 7,5 C: 3,8 D: 8,3 答案解析 正确答案C swap函数调用时用的是全局变量主函数中定义的变量只在主函数中有效因为主函数也是一个函数它与其他函数是平行关系输出语句这里考虑局部优先的原则故选C 2、以下不正确的定义语句是 A: double x[5] {2.0, 4.0, 6.0, 8.0, 10.0}; B: char c2[] {‘\x10’, ‘\xa’, ‘\8’}; C: char c1[] {‘1’,‘2’,‘3’,‘4’,‘5’}; D: int y[53]{0, 1, 3, 5, 7, 9}; 答案解析 正确答案B 本题B选项考查转义字符有如下格式但八进制数字是0-7没有8故B选项中’\8’是错误的 \ddd ddd表示1到3个八进制数 如\130 转义为 字符X \xhh hh表示1到2位十六进制数 如\x30 转义为 字符0 3、 test.c 文件中包括如下语句文件中定义的四个变量中是指针类型的变量为【多选】
#define INT_PTR int*
typedef int* int_ptr;
INT_PTR a, b;
int_ptr c, d;A: a B: b C: c D: d 答案解析 正确答案ACD 因为#define是宏定义仅仅是直接替换,INT_PTR a, b; 进行宏替换后代码是这样的int *a, b;这里的int *是a的类型b的类型是int故此次b只是int类型。而typedef是把该类型定义一个别名别名是一个独立的类型了使用这个类型创建的变量都是这个类型的。 所以 acd才是指针类型 4、 若给定条件表达式 (M)?(a):(a–) 则其中表达式 M A: 和(M 0)等价 B: 和(M 1)等价 C: 和(M ! 0)等价 D: 和(M ! 1)等价 答案解析 正确答案C 给定条件表达式(M)?(a):(a–)。 (表达式1)? (表达式2): (表达式3)为三目运算符。 计算规则为 先判断表达式1是否为真若为真则计算表达式2并将表达式2的结果作为整个表达式最终的结果表达式3不计算否则表达式3的结果为最终结果表达式2不计算。 在此表达式中若M0为假计算a–; 若M≠0为真计算a; 若要求与M等价则要满足M取0时为假取非0数值时为真。 c选项中假定M取0则M表示假当M是0时,表达式M!0不成立为假计算a–; 当M取非0数值时M为真表达式M!0成立为真计算a; 符合题意选C 5、有如下定义语句则正确的输入语句是【多选】
int b;
char c[10];A: scanf(“%d%s”,b,c);B: scanf(“%d%s”,b,c); C: scanf(“%d%s”,b,c); D: scanf(“%d%s”,b,c); 答案解析 正确答案AB c和c两个地址值是一样的程序的效果相同也没错但同时也必须把变量b的地址给scanf,故CD错误AB正确 6.以下程序段的输出结果是
#includestdio.h
int main()
{char s[] \\123456\123456\t;printf(%d\n, strlen(s));return 0;
}A: 12 B: 13 C: 16 D: 以上都不对 答案解析 正确答案A 这里考查转义字符注意\\ 表示字符’‘\123表示字符’{\t表示制表符这些都是一个字符 7.若有以下程序则运行后的输出结果是
#include stdio.h
#define N 2
#define M N 1
#define NUM (M 1) * M / 2
int main()
{printf(%d\n, NUM);return 0;
}A: 4 B: 8 C: 9 D: 6 答案解析 正确答案B 宏只是替换替换后NUM的样子是(211)*21/2计算得8 8、如下函数的 f(1) 的值为
int f(int n)
{static int i 1;if (n 5)return n;n n i;i;return f(n);
}A: 5 B: 6 C: 7 D: 8 答案解析 正确答案C 此题注意静态局部变量的使用static改变了i的生命周期第一次调用函数i初值是1递归第二次调用函数时i还是第一次那个变量值已经变成了2再一次调用函数时i就是3依次类推 9、下面3段程序代码的效果一样吗
int b;
(1)const int *a b;
(2)int const *a b;
(3)int *const a b;A: (2)(3) B: (1)(2) C: 都不一样 D: 都一样 答案解析 正确答案B const在的左边则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变);在的右边则指针的指向不可变。简记为左定值右定向(1)和(2)const都在的左边(3)中const在的右边所以应该选择B。 10、对于下面的说法正确的是 A: 对于 struct X{short s;int i;char c;}sizeof(X)等于sizeof(s) sizeof(i) sizeof( c ) B: 对于某个double变量 a可以使用 a 0.0 来判断其是否为零 C: 初始化方式 char a[14] “Hello, world!”; 和char a[14]; a “Hello, world!”;的效果相同 D: 以上说法都不对 答案解析 正确答案D A选项没有考虑内存对齐。B选项考察double类型的比较由于浮点数存在误差不能直接判断两个数是否相等通常采用比较两数之差的绝对值是否小于一个很小的数字具体的可自己设定这样一个数作为误差来确定是否相等。C选项a为数组首地址是常量不能改变所以A,B,C都是错的选择D 11、已知函数的原型是 int fun(char b[10], int a); 设定义 char c[10];int d; 正确的调用语句是 A: fun(c,d); B: fun(c,d); C: fun(c,d); D: fun(c,d); 答案解析* 正确答案A 参数a是指针要接收地址BD错误。参数b可以接收的是char*而c的类型是char(*)[10]C错误 12、请问下列表达式哪些会被编译器禁止【多选】
int a 248, b 4;
int const *c 21;
const int *d a;
int *const e b;
int const * const f a;A: c 32; B: d 43 C: ea D: f0x321f 答案解析** 正确答案ABCD 如果 const 位于 * 的左侧则 const 就是用来修饰指针所指向的变量即指针指向为常量c和d不能变。 如果 const 位于 * 的右侧则 const 就是修饰指针本身即指针本身是常量e和f不能变。 13、以下程序的输出结果为
#include stdio.h
int i;
void prt()
{for (i 5; i 8; i)printf(%c, *);printf(\t);
}
int main()
{for (i 5; i 8; i)prt();return 0;
}A: *** B: *** *** *** *** C: *** *** D: * * * 答案解析 正确答案A 全局变量i在main()中修改为5第一次在prt()中执行循环输出三次’* i被修改为8回到main()中第二次调用prt()时i8为假循环结束没输出执行一次print(“\t”)再次回到主函数后i变为9i8为假循环结束; 14、下面代码段的输出是
int main()
{int a 3;printf(%d\n, (a a - a * a));return 0;
}A: -6 B: 12 C: 0 D: -12 答案解析 正确答案D aa-aa等价于aa(aa-aa)即先计算aa-aa所以此时a的值为3-33-6再计算-6(-6)-12赋值给a所以a的值为-12也就是整个表达式的值所以应选择D 15、下列不能实现死循环的是 A: while(1){} B: for(;1;){} C: do{}while(1); D: for(;0;){} 答案解析 正确答案D 只有条件为真时才进行循环ABC中1为真D中0为假 16、设变量已正确定义以下不能统计出一行中输入字符个数不包含回车符的程序段是 A: n0;while(chgetchar()!‘\n’)n; B: n0;while(getchar()!‘\n’)n; C: for(n0;getchar()!‘\n’;n); D: n0;for(chgetchar();ch!‘\n’;n); 答案解析 正确答案D 对于for循环其中第一项初始化表达式只执行一次因此ch只从输入流中取一个字符之后就再不会取字符因此会死循环 17、运行以下程序后如果从键盘上输入 65 14回车 则输出结果为
int main()
{int m, n;printf(Enter m,n;);scanf(%d%d, m, n);while (m ! n) //1{while (m n) m m - n; //2while (n m) n n - m; //3}printf(m%d\n, m);return 0;
}A: 3 B: 2 C: 1 D: 0 答案解析 正确答案C 此题技巧是耐心考查while循环和循环嵌套的理解初值m65,n14循环1判断m!n为真来到循环2判断mn为真执行mm-n;直到m9,n14循环2结束来到循环3判断nm为真执行nn-m;直到m9,n5循环3结束回到循环1如此往复直到mn时循环结束 18、若运行以下程序时从键盘输入 ADescriptor回车 则下面程序的运行结果是
#include stdio.h
int main()
{char c;int v0 0, v1 0, v2 0do{switch (c getchar()){casea:caseA:casee:caseE:casei:caseI:caseo:caseO:caseu:caseU:v1 1;defaultv0 1; v2 1;}} while (c ! \n);printf(v0%d,v1%d,v2%d\n, v0, v1, v2);return 0;
}A: v07,v14,v27 B: v08,v14,V28 C: v011,v14,v211 D: v012,v14,v212
答案解析 正确答案D 代码switch语句中没有break则每次找到入口进入后顺序执行到代码块结束为止。例如当c为’A’时从case A’进入先后执行v11;v01;v21;而当c为’p’时从default进入先后执行v01;v21;容易看出最终v0和v2是相等的 19、如下函数是求两个int数字最大公约数的指出其中存在的问题【多选】
int gcd(char x, char y)
{int min x y ? x : y;for (min 0; min 0; min--)if (x% min 0 y % min 0)return min;
}A: 参数类型不对 B: 循环变量min初值不对 C: 判断等于的符号不对 D: 返回类型不对 答案解析 正确答案ABC 1.函数实参是int形参用char不对会发生截断丢失数据2.min在for循环开始时更新为0不再是两个形参中的较小值3.判断是否整除的时候误将写成赋值运算符4.函数最终要返回一个int值返回值类型没问题但是这里要强调一个选项中没写出的问题如果是牛客网上的题会报编译错误说该函数不是在所有情况下都有返回值只有在if条件成立的情况下有返回值一般在vs上这种情况能通过编译器会给一个默认的返回值。 20、执行下面的程序段语句3的执行次数为
for(i 0; i n-1; i) // (1)
for(j n; j i; j--) // (2)
state; // (3)A: n(n2)/2 B: (n-1)(n2)/2 C: n(n1)/2 D: (n-1)(n2)
答案解析 正确答案C 外循环有n次当i0,内循环为n次,当i1,内循环为n-1次,当i2时内循环为n-2次以此类推总次数为 n(n-1)(n-2)…21,就是个等差数列等于n(n1)/2 后期会推出更多C语言练习题希望大家与我共同进步早日成为大佬