计算机二级C语言题库(一) 选择题 以下叙述中正确的是( ) A. C程序中的注释只能出现在程序的开始位置和语句的后面 B. C程序书写格式严格,要求一行内只能写一个语句 C. C程序书写格式自由,一个语句可以写在多行上 D. 用C语言编写的程序只能放在一个程序文件中 答案:C 解析:C程序中的注释可以出现在程序的任何位置,故A错误;C程序书写格式自由,一行内可以写多个语句,一个语句也可以写在多行上,所以B错误,C正确;C语言编写的程序可以放在多个程序文件中,故D错误 。
若有定义:int a=8,b=5,c;执行语句c=a/b+0.4;后,c的值为( ) A. 1.4 B. 1 C. 2 D. 2.0 答案:B 解析:a/b是整数除法,8/5结果为1,1 + 0.4由于c是整型变量,会舍去小数部分,所以c的值为1。
程序填空题 下面程序的功能是从键盘输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。
请填空。
c复制代码 #include int main() { float x, max, min; scanf("%f", &x); max = min = x; while (【1】) { if (x > max) max = x; if (【2】) min = x; scanf("%f", &x); } printf("\nmax = %f\nmin = %f\n", max, min); return 0; } 答案:【1】x >= 0 【2】x < min 解析:【1】处循环条件是当输入的数大于等于0时继续循环;【2】处判断如果输入的数小于当前最小值,则更新最小值。
程序改错题 下列给定程序中,函数fun的功能是:计算并输出high以内最大的10个素数之和。
high由主函数传给fun函数。
若high的值为100,则函数的值为732。
请改正程序中的错误,使它能得出正确的结果。
c复制代码 #include #include int fun(int high) { int sum = 0, n = 0, j, yes; while ((high >= 2) && (n < 10)) { yes = 1; for (j = 2; j <= sqrt(high); j++) if (high % j == 0) { yes = 0; break; } if (yes == 0) { sum += high; n++; } high--; } return sum; } int main() { printf("%d\n", fun(100)); return 0; } 答案:将if (yes == 0)改为if (yes == 1)。
解析:原程序逻辑错误,当yes == 1时说明high是素数,此时才应该累加并计数。
计算机二级C语言题库(二) 选择题 以下选项中合法的标识符是( ) A. _123 B. 1_23 C. 2a D. int 答案:A 解析:标识符由字母、数字和下划线组成,且不能以数字开头,关键字不能作为标识符。
B以数字开头不合法;C以数字开头不合法;D中int是关键字不合法。
若有定义语句:int a=10; double b=3.14; 则表达式 'A'+a+b值的类型是( ) A. char B. int C. double D. float 答案:C 解析:在表达式运算中,不同类型的数据混合运算时,最终结果类型向精度高的类型转换。
'A'是字符型,会先转换为整型,a是整型,b是双精度型,由于双精度型精度最高,所以整个表达式结果类型为双精度型double。
程序填空题 下面程序的功能是输出1至100之间每位数的乘积大于每位数的和的数,请填空。
c复制代码 #include int main() { int n, k = 1, s = 0, m; for (n = 1; n <= 100; n++) { k = 1; s = 0; 【1】; while (m) { k *= m % 10; s += m % 10; 【2】; } if (k > s) printf("%d ", n); } return 0; } 答案:【1】m = n 【2】m /= 10 解析:【1】处将当前要判断的数n赋值给m,以便后续对其各位数进行操作;【2】处每次去掉m的最后一位数。
程序改错题 下列给定程序中,函数fun的功能是:将字符串中的内容按逆序输出,但不改变字符串中的内容。
请改正程序中的错误,使它能得出正确的结果。
c复制代码 #include void fun(char *a) { if (*a) { fun(a + 1); printf("%c", *a); } } int main() { char s[10] = "abcd"; printf("处理前字符串 = %s\n处理后字符串 = ", s); fun(s); printf("\n"); return 0; } 答案:程序无语法错误,该程序通过递归实现了字符串逆序输出且不改变原字符串内容,无需修改。
计算机二级C语言题库(三) 选择题 有以下程序段: c复制代码 int k = 0; while (k = 1) k++; 则while循环执行的次数是( ) A. 无限次 B. 有语法错误,不能执行 C. 一次也不执行 D. 执行1次 答案:A 解析:while (k = 1)中是赋值表达式k = 1,其值恒为1(真),所以会陷入无限循环。
若有定义语句:char s[10]="1234567\0\0"; 则strlen(s)的值是( ) A. 7 B. 8 C. 9 D. 10 答案:A 解析:strlen函数计算字符串长度,遇到'\0'结束,所以s中有效字符到'7'为止,长度为7。
程序填空题 下面程序的功能是求100以内(不包括100)能被3整除且个位数为6的所有整数,请填空。
c复制代码 #include int main() { int i, j; for (i = 0; 【1】; i++) { j = i * 10 + 6; if (【2】) printf("%d ", j); } return 0; } 答案:【1】i < 10 【2】j % 3 == 0 && j < 100 解析:【1】因为要找100以内符合条件的数,i最大到9,所以循环条件是i < 10;【2】判断j能被3整除且小于100。
程序改错题 下列给定程序中,函数fun的功能是:把形参s所指字符串中最右边的n个字符复制到形参t所指字符数组中,形成一个新串。
若s所指字符串的长度小于n,则将整个字符串复制到形参t所指字符数组中。
请改正程序中的错误,使它能得出正确的结果。
c复制代码 #include #include void fun(char *s, int n, char *t) { int len = strlen(s), i, j = 0; if (len <= n) strcpy(t, s); else { for (i = len - n; i < len; i++) t[j++] = s[i]; 【1】; } } int main() { char s[100], t[100]; int n; printf("请输入字符串: "); gets(s); printf("请输入截取的字符个数: "); scanf("%n", &n); 【2】; printf("新的字符串为: %t\n", t); return 0; } 答案:【1】t[j] = '\0'; 【2】将scanf("%n", &n);改为scanf("%d", &n);,将printf("新的字符串为: %t\n", t);改为printf("新的字符串为: %s\n", t); 解析:【1】处添加字符串结束符;【2】处scanf格式错误,应改为%d读取整数,printf格式也错误,输出字符串应该用%s 。