超级经典c语言陷阱考试题

合集下载

c语言考试题及答案以及解析

c语言考试题及答案以及解析

c语言考试题及答案以及解析1. 选择题1.1 以下哪个关键字用于定义一个结构体?A. structB. unionC. enumD. typedef答案:A解析:在C语言中,`struct`关键字用于定义一个结构体。

1.2 以下哪个函数用于将字符串转换为浮点数?A. atoiB. atofC. itoaD. sprintf答案:B解析:`atof`函数用于将字符串转换为浮点数。

2. 填空题2.1 定义一个整型变量并初始化为10,使用语句___________。

答案:int a = 10;解析:使用`int`关键字定义一个整型变量`a`,并使用赋值操作符`=`将其初始化为10。

2.2 以下代码段的输出结果是___________。

```c#include <stdio.h>int main() {int i = 5;printf("%d", i++);return 0;}```答案:5解析:`i++`是后缀递增运算符,先输出变量`i`的值,然后`i`的值加1。

3. 编程题3.1 编写一个C语言程序,计算并输出100以内所有偶数的和。

```c#include <stdio.h>int main() {int sum = 0;for (int i = 1; i <= 100; i++) {if (i % 2 == 0) {sum += i;}}printf("Sum of even numbers from 1 to 100 is: %d\n", sum);return 0;}```解析:程序使用for循环遍历1到100的整数,通过`if`语句判断是否为偶数,如果是偶数,则累加到变量`sum`中。

最后输出100以内所有偶数的和。

3.2 编写一个C语言程序,实现字符串反转。

```c#include <stdio.h>#include <string.h>void reverseString(char* str) {int len = strlen(str);for (int i = 0; i < len / 2; i++) {char temp = str[i];str[i] = str[len - i - 1];str[len - i - 1] = temp;}}int main() {char str[] = "Hello, World!";reverseString(str);printf("Reversed string: %s\n", str);return 0;}```解析:程序定义了一个`reverseString`函数,使用for循环交换字符串的字符,实现字符串反转。

完整版C语言100个经典题目

完整版C语言100个经典题目

完整版C语言100个经典题目在学习和掌握C语言编程技巧的过程中,解决各种经典题目是非常重要的。

下面是一份C语言的100个经典题目,帮助你提高编程能力和理解C语言的核心概念。

1. 编写一个程序,输出"Hello, World!"。

2. 编写一个程序,从键盘输入两个整数,然后输出它们的和。

3. 编写一个程序,从键盘输入两个整数,然后交换它们的值。

4. 编写一个程序,输出1到100之间所有的奇数。

5. 编写一个程序,输出1到100之间所有能被3整除的数。

6. 编写一个程序,判断一个年份是否为闰年。

7. 编写一个程序,将一个字符串逆序输出。

8. 编写一个程序,求出一个整数的阶乘。

9. 编写一个程序,判断一个数是否为素数。

10. 编写一个程序,输入一个字符串,然后统计其中的字母、数字和空格的个数。

11. 编写一个程序,将一个字符串转换为大写字母。

12. 编写一个程序,从键盘输入一个字符串,然后去除其中的重复字符。

13. 编写一个程序,将一个字符串按照指定分隔符进行拆分,并输出拆分后的结果。

14. 编写一个程序,将一个字符串中的所有单词首字母大写。

15. 编写一个程序,找出一个整数数组中的最大值。

16. 编写一个程序,找出一个整数数组中的最小值。

17. 编写一个程序,计算一个整数数组中所有元素的平均值。

18. 编写一个程序,对一个整数数组进行冒泡排序。

19. 编写一个程序,对一个整数数组进行选择排序。

20. 编写一个程序,对一个整数数组进行插入排序。

21. 编写一个程序,对一个整数数组进行快速排序。

22. 编写一个程序,计算斐波那契数列的第n个数字。

23. 编写一个程序,计算一个整数的平方根。

24. 编写一个程序,判断一个字符串是否为回文字符串。

25. 编写一个程序,输入一个正整数n,然后输出n行杨辉三角。

26. 编写一个程序,将一个二维整数数组进行转置。

27. 编写一个程序,将一个二维整数数组进行矩阵乘法运算。

100条经典C语言笔试题目(全)

100条经典C语言笔试题目(全)

100条经典C语言笔试题目1、请填写bool,float,指针变量与“零值”比较的if语句。

提示:这里“零值”可以是0,0.0,FALSE 或者“空指针”。

例如int变量n与“零值”比较的if语句为:if ( n == 0 )if ( n != 0 )以此类推。

(1)请写出 bool flag 与“零值”比较的 if 语句:【标准答案】if ( flag )if ( !flag )(2)请写出 float x 与“零值”比较的 if 语句:【标准答案】 const float EPSINON = 0.00001;if ((x >= - EPSINON) && (x <= EPSINON)不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。

(3)请写出 char *p 与“零值”比较的 if 语句【标准答案】 if (p == NULL)if (p != NULL)2、以下为 Linux下的 32 位 C程序,请计算 sizeof 的值。

char str[] = “Hello” ;char *p = str ;int n = 10;请计算(1)sizeof (str ) =(2)sizeof ( p ) =(3)sizeof ( n ) =【标准答案】(1)6、(2)4、(3)4(4)void Func ( char str[100]) {……;} 请计算 sizeof( str ) = (5)void *p = malloc( 100 );请计算sizeof ( p ) =【标准答案】(4)4、(5)43、 long a=0x801010;a+5=?【标准答案】0x801010用二进制表示为:“1000 0000 0001 0000 0001 0000”,十进制的值为8392720,再加上5就是8392725。

4、用变量a给出下面的定义e) 一个有10个指针的数组,该指针是指向一个整型数的;f) 一个指向有10个整型数数组的指针 ;g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数;h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数;【标准答案】e)int * a[10]; f)int (*a)[10]g)int (*a)(int); h) int (*a[10])(int)5、设有以下说明和定义:typedef union {long i; int k[5]; char c;} DATE;struct data { int cat; DATE cow; double dog;} too;DATE max;则语句 printf("%d",sizeof(struct date)+sizeof(max));的执行结果是:_____【标准答案】DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20.data是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32.所以结果是 20 + 32 = 52。

c语言难度高的试题及答案

c语言难度高的试题及答案

c语言难度高的试题及答案C语言难度高的试题及答案1. 问题:编写一个C语言程序,实现一个简单的文本编辑器,要求能够读取文本文件,允许用户在指定位置插入、删除、替换字符,并能够保存修改后的文件。

答案:```c#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_SIZE 1024void insert(char *str, int pos, char c) {memmove(str + pos + 1, str + pos, strlen(str + pos));str[pos] = c;}void delete(char *str, int pos) {memmove(str + pos, str + pos + 1, strlen(str + pos + 1) + 1);}void replace(char *str, int pos, char c) {str[pos] = c;}void saveToFile(const char *filename, const char *str) { FILE *file = fopen(filename, "w");if (file) {fputs(str, file);fclose(file);} else {printf("File could not be opened.\n");}}int main() {char text[MAX_SIZE] = "Hello, World!";printf("Original text: %s\n", text);// Example operationsinsert(text, 7, 'a');printf("After insert: %s\n", text);delete(text, 5);printf("After delete: %s\n", text);replace(text, 0, 'J');printf("After replace: %s\n", text);saveToFile("edited.txt", text);printf("Text saved to edited.txt\n");return 0;}```2. 问题:设计一个C语言程序,实现一个简单的计算器,支持加、减、乘、除四种运算,并能够处理除以零的情况。

最难的C语言试题及答案

最难的C语言试题及答案

最难的C语言试题及答案试题1:以下哪个选项是C语言中合法的变量名?A. 2variableB. variable2C. _variableD. variable$答案:C试题2:以下哪个语句可以用来定义一个指向整型的指针?A. int *p = 0;B. int *p = 1;C. int *p = "0";D. int *p = {0};答案:A试题3:在C语言中,以下哪个选项是正确的字符串声明?A. char str[] = "Hello";B. char str[] = 'Hello';C. char str = "Hello";D. char str[] = {"Hello"};答案:A试题4:以下哪个函数调用是合法的?A. printf("%d", 5);B. scanf("%d", &5);C. printf("%d", &5);D. scanf("%d", 5);答案:A试题5:以下哪个选项是C语言中的关键字?A. voidB. voidsC. intD. intes答案:A试题6:以下哪个选项是C语言中正确的数组声明?A. int arr[5] = {1, 2, 3, 4, 5};B. int arr[] = {1, 2, 3, 4, 5};C. int arr[5] = {1, 2, 3};D. int arr = {1, 2, 3, 4, 5};答案:A试题7:以下哪个选项是C语言中正确的函数声明?A. int myFunction();B. int myFunction;C. int myFunction int a;D. int myFunction(int a);答案:D试题8:在C语言中,以下哪个选项表示一个无限循环?A. while(1);B. do {} while(0);C. for(;;);D. for(;0;);答案:C试题9:以下哪个选项是C语言中正确的文件包含指令?A. #include <stdio.h>B. #include "stdio.h"C. #include <stdio.h>D. #include "stdio.h"答案:A试题10:以下哪个选项是C语言中正确的宏定义?A. #define PI 3.14159B. #define PI = 3.14159C. #define PI 3.14159;D. #define PI答案:A。

c语言的考试题目答案及解析

c语言的考试题目答案及解析

c语言的考试题目答案及解析1. 题目:以下哪个选项是C语言中的合法变量名?A. 2variableB. variable2C. _variableD. variable-2答案:C解析:在C语言中,变量名必须以字母或下划线开头,不能以数字开头。

因此,选项A和D是不合法的。

选项B虽然以字母开头,但是数字紧跟字母,没有下划线或空格分隔,所以也是不合法的。

选项C 以下划线开头,符合变量命名规则。

2. 题目:以下哪个选项是C语言中正确的字符串字面量?A. "Hello, World!"B. 'Hello, World!'C. "Hello, World!"D. "Hello, World!"答案:A解析:在C语言中,字符串字面量应该用双引号括起来。

选项B使用了单引号,这是用于字符字面量的,而不是字符串。

选项C和D是重复的,并且由于格式问题,它们可能没有正确显示,但假设它们是正确的字符串字面量,那么答案应该是A,因为它是第一个出现的合法字符串字面量。

3. 题目:以下哪个选项是C语言中正确的函数声明?A. int function(int x) {}B. void function() {}C. int function(int x, int y) {}D. All of the above答案:D解析:在C语言中,函数声明可以包含参数列表,也可以没有参数。

选项A和C都包含了参数列表,并且参数类型是int,这是合法的。

选项B没有参数列表,并且指定了返回类型为void,这也是合法的。

因此,所有选项都是正确的函数声明。

4. 题目:以下哪个选项是C语言中正确的条件语句?A. if (x > 0) { ... }B. if x > 0 { ... }C. if (x > 0) { ... } else { ... }D. if (x > 0) { ... } elseif { ... }答案:C解析:在C语言中,条件语句必须使用if关键字,并且条件表达式需要用括号括起来。

c语言 经典易错题

c语言 经典易错题

c语言经典易错题在学习C语言的过程中,我们经常会遇到一些经典的易错题。

这些题目看似简单,但往往会隐藏一些陷阱。

下面我将介绍一些常见的C 语言易错题,并通过详细的解析帮助大家更好地理解和掌握。

题目一:```c#include <stdio.h>int main() {int a = 5, b = 3;a = b++;printf("a=%d, b=%d\n", a, b);return 0;}```在上面的代码中,我们定义了两个变量a和b,并且使用后置递增操作符将b赋值给a。

最后通过printf函数打印出a和b的值。

请问,代码执行后a和b的值分别是多少?解析:在执行 `a = b++` 这一行代码时,先将 `b` 的值赋给 `a`,然后再将`b` 自身进行自增操作。

`b++` 的返回值是原始的 `b` 的值,在本例中即为 `3`。

所以执行完这一行代码后,`a` 的值为 `3`,`b` 的值为 `4`。

因此,最后打印出的结果是 `a=3, b=4`。

题目二:```c#include <stdio.h>int main() {int a = 5, b = 3;a = ++b;printf("a=%d, b=%d\n", a, b);return 0;}```与题目一类似,下面的这段代码中我们只是将递增操作符从后置变为前置。

请问,代码执行后a和b的值分别是多少?解析:在执行 `a = ++b` 这一行代码时,先对 `b` 进行自增操作,然后再将自增后的 `b` 的值赋给 `a`。

`++b` 的返回值就是自增后的 `b` 的值,在本例中即为 `4`。

所以执行完这一行代码后,`a` 的值为 `4`,`b` 的值也为 `4`。

因此,最后打印出的结果是 `a=4, b=4`。

题目三:```c#include <stdio.h>int main() {int a = 5, b = 3;int c = a++ + ++b;printf("a=%d, b=%d, c=%d\n", a, b, c);return 0;}```在上面的代码中,我们定义了三个变量a、b和c,并使用了后置递增和前置递增操作符。

超级经典c语言陷阱考试题

超级经典c语言陷阱考试题

若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为___d___.a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j以下正确的程序段是_________.a)char str[20]; b)char *p;scanf("%s",&str); scanf("%s",p);c)char str[20]; d)char str[20],*p=str;scanf("%s",&str[2]); scanf("%s",p[2]);下面程序的运行结果是_______.#include <stdio.h>#include <string.h>fun(char *w,int n){char t,*s1,*s2;s1=w;s2=w+n-1;while(s1<s2){t=*s1++;*s1=*s2--;*s2=t;}}main(){char p[] = “1234567”;fun(p,strlen(p));puts(p);}a)7654321 b)1714171 c)1711717 d)7177171下面程序段的运行结果是__ hELLO!______.char s[80],*sp="HELLO!";sp=strcpy(s,sp);s[0]='h';puts(sp);.下面程序段的运行结果是__ef_____.char str[]="abc\0def\0ghi",*p=str;printf("%s",p+5);设有如下定义:int x = 1, y = -1;,则语句:printf(“%d\n”, (x--&++y));的输出结果是:BA. 1B.0C.-1D. 2设有如下定义:int a, b;,则语句:printf("%d", (a = 5) && (b = -1));的输出结果是:AE. 1F. 5G.-1H.不确定程序执行后的输出结果是:n = 3int i, n = 0;for (i = 2; i < 7; i++) {do {if (i % 3) {continue;}--n;} while(!i);n++;}printf("n = %d\n", n);1.以下代码,哪一句是非法的?____最后一句s.p[0] = 2;____struct po_s{int i;int *p;};int main(void){struct po_s s;int *p;p = &s.i;p[0] = 4;p[1] = 3;s.p = p;s.p[1] = 1;s.p[0] = 2;return 0;2.以下代码,输出什么?____a3, BB(注意大小写)____int a[5] = {0x1a,0xa3,0xd3,0xe4,0xbb};int *ptr;ptr = (int *)(&a + 1);printf("%x, %X", *(a + 1), *(ptr - 1));3.下面的代码输出是什么,为什么?void foo(void){unsigned int a = 0x10;int b = -20;(a + b > 6) ? puts("> 6") : puts("<= 6");}输出>6因为表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。

c语言试卷集(10套)-试题及答案

c语言试卷集(10套)-试题及答案

c语言试卷集(10套)-试题及答案C语言试卷集(10套)-试题及答案试卷一一、选择题(每题2分,共20分)1. C语言中,用于表示逻辑“真”的值是()。

A. 0B. 1C. -1D. 任意非零值答案:B2. 下列哪个选项是C语言中的合法变量名?()A. 2variableB. variable2C. variable_2D. variable!答案:C3. C语言中,用于定义一个整型数组的语句是()。

A. int array[10];B. int [10] array;C. int 10 array;D. int array=10;答案:A4. 下列哪个选项是C语言中的合法字符串常量?()A. "Hello"B. 'Hello'C. "HelloD. Hello答案:A5. C语言中,用于表示逻辑“假”的值是()。

A. 0B. 1C. -1D. 任意非零值答案:A6. 下列哪个选项是C语言中的合法浮点数常量?()A. 3.14B. 314.C. .314D. 3.14E答案:A7. C语言中,用于定义一个整型变量的语句是()。

A. int x;B. var x;C. x int;D. int = x;答案:A8. 下列哪个选项是C语言中的合法字符常量?()A. 'A'B. "A"C. 'AB'D. "AB"答案:A9. C语言中,用于定义一个字符数组的语句是()。

A. char array[10];B. char [10] array;C. char 10 array;D. char array=10;答案:A10. C语言中,用于表示字符常量的是()。

A. 'A'B. "A"C. AD. "A"答案:A二、填空题(每题3分,共15分)1. C语言中,用于定义一个整型变量并初始化为0的语句是()。

(经典)C语言陷阱和缺陷

(经典)C语言陷阱和缺陷

C语言陷阱和缺陷[1]原著:Andrew Koenig - AT&T Bell Laboratories Murray Hill, New Jersey 07094原文:收藏翻译:lover_P[译序]那些自认为已经“学完”C语言的人,请你们仔细读阅读这篇文章吧。

路还长,很多东西要学。

我也是……[概述]C语言像一把雕刻刀,锋利,并且在技师手中非常有用。

和任何锋利的工具一样,C会伤到那些不能掌握它的人。

本文介绍C语言伤害粗心的人的方法,以及如何避免伤害。

[内容]·0 简介· 1 词法缺陷o 1.1 =不是==o 1.2 &和|不是&&和||o 1.3 多字符记号o 1.4 例外o 1.5 字符串和字符· 2 句法缺陷o 2.1 理解声明o 2.2 运算符并不总是具有你所想象的优先级o 2.3 看看这些分号!o 2.4 switch语句o 2.5 函数调用o 2.6 悬挂else问题· 3 链接o 3.1 你必须自己检查外部类型· 4 语义缺陷o 4.1 表达式求值顺序o 4.2 &&、||和!运算符o 4.3 下标从零开始o 4.4 C并不总是转换实参o 4.5 指针不是数组o 4.6 避免提喻法o 4.7 空指针不是空字符串o 4.8 整数溢出o 4.9 移位运算符· 5 库函数o 5.1 getc()返回整数o 5.2 缓冲输出和内存分配· 6 预处理器o 6.1 宏不是函数o 6.2 宏不是类型定义·7 可移植性缺陷o7.1 一个名字中都有什么?o7.2 一个整数有多大?o7.3 字符是带符号的还是无符号的?o7.4 右移位是带符号的还是无符号的?o7.5 除法如何舍入?o7.6 一个随机数有多大?o7.7 大小写转换o7.8 先释放,再重新分配o7.9 可移植性问题的一个实例·8 这里是空闲空间·参考·脚注0 简介C语言及其典型实现被设计为能被专家们容易地使用。

c语言关系运算符20题与答案(较难)

c语言关系运算符20题与答案(较难)

1. 复杂条件表达式题目:判断的结果。

答案:1 (真)2. 混合运算符优先级题目:判断的结果。

答案:1 (真)3. 带括号的复杂表达式题目:判断的结果。

答案:0 (假)4. 混合运算符和条件运算题目:判断的结果。

答案:1 (真)5. 结合条件和算术运算符题目:判断的结果。

答案:1 (真)6. 嵌套条件表达式题目:判断的结果。

答案:1 (真)7. 多层嵌套表达式题目:判断的结果。

答案:1 (真)8. 带括号的复杂表达式题目:判断的结果。

答案:0 (假)9. 运算符优先级陷阱题目:判断的结果。

答案:1 (真)10. 条件运算符嵌套题目:判断的结果。

答案:1 (真)11. 带有算术运算的条件判断题目:判断的结果。

答案:1 (真)12. 结合条件和算术运算符题目:判断的结果。

答案:1 (真)13. 嵌套条件和算术运算题目:判断的结果。

答案:1 (真)14. 带有否定运算符的条件判断题目:判断的结果。

答案:1 (真)15. 多重条件运算题目:判断的结果。

答案:1 (真)16. 条件嵌套及否定运算题目:判断的结果。

答案:1 (真)17. 多层条件表达式题目:判断的结果。

答案:1 (真)18. 混合条件运算题目:判断的结果。

答案:1 (真)19. 否定运算及嵌套条件题目:判断的结果。

答案:1 (真)20. 结合算术与条件运算题目:判断的结果。

答案:1 (真)。

c语言陷阱题

c语言陷阱题

C语言中的陷阱题通常涉及对语言细节、边缘情况或特定行为的理解。

这些陷阱可能会让初学者或经验不足的程序员犯错。

以下是一些常见的C语言陷阱题示例:1. 未初始化的局部变量c#include <stdio.h>int main() {int a;printf("%d\n", a); // a的值是未定义的,输出可能是任何值return 0;}2. 数组越界c#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5};printf("%d\n", arr[5]); // 越界访问,未定义行为return 0;}3. 指针与数组的区别c#include <stdio.h>int main() {int arr[] = {1, 2, 3, 4, 5};int *p = arr;sizeof(arr); // 返回整个数组的大小(以字节为单位)sizeof(p); // 返回一个指针的大小(以字节为单位),而不是它所指向的数组的大小return 0;}4. 字符串字面量与字符数组c#include <stdio.h>int main() {char *str1 = "Hello";char str2[] = "Hello";str1[0] = 'h'; // 错误!尝试修改字符串字面量的内容,这是未定义行为。

str2[0] = 'h'; // 正确,修改字符数组的内容。

return 0;}5. 函数参数传递方式c#include <stdio.h>void modify(int a) {a = 10; // 修改的是局部变量a,不影响main函数中的x}int main() {int x = 5;modify(x);printf("%d\n", x); // 输出5,不是10return 0;}6. 浮点数比较由于浮点数的精度问题,直接比较两个浮点数可能会产生意外的结果。

c语言程序面试考试题

c语言程序面试考试题

c语言程序面试考试题一、基础语法类。

1. 题目:写一个C程序,输出“Hello, World!”。

- 解析:- 这是C语言中最基本的程序。

在C语言中,可以使用`stdio.h`库中的`printf`函数来输出信息。

#include <stdio.h>.int main() {printf("Hello, World!\n");return 0;}2. 题目:以下代码有什么错误?#include <stdio.h>.int main() {int num = 10;if (num = 5) {printf("num is 5\n");} else {printf("num is not 5\n");}return 0;}- 解析:- 在`if`语句中,使用了`num = 5`,这是一个赋值操作而不是比较操作。

正确的应该是`num == 5`。

3. 题目:解释`static`关键字在函数内部变量声明中的作用。

- 解析:- 当`static`关键字用于函数内部变量声明时,该变量具有静态存储期。

这意味着该变量在程序的整个执行期间都存在,而不是在函数每次调用时创建和销毁。

并且,`static`变量只在第一次调用函数时初始化一次,后续调用函数时,该变量的值保留上次调用结束时的值。

例如:#include <stdio.h>.void func() {static int count = 0;count++;printf("count = %d\n", count);}int main() {func();func();return 0;}- 在这个例子中,`count`变量在函数`func`中是静态变量,第一次调用`func`时,`count`被初始化为0,然后自增为1并输出。

第二次调用`func`时,`count`不会再次初始化,而是直接使用上次的值1,然后自增为2并输出。

(完整版)C语言考试题库及答案

(完整版)C语言考试题库及答案

(完整版)C语言考试题库及答案一、选择题1. 以下哪个选项是C语言的合法标识符?A. intB. 2abcC. voidD. a+b答案:C2. 在C语言中,下列哪个选项是正确的数据类型?A. floatB. integerC. doubleD. All of the above答案:D3. 若变量定义如下:int a = 5;,则执行语句printf("%d", a++); 后,a的值是多少?A. 4B. 5C. 6D. 无法确定答案:C4. 以下哪个函数用于动态分配内存?A. malloc()B. alloc()C. new()D. calloc()答案:A5. 在C语言中,哪个运算符用于取模(取余)?A. %B. /C. &D. |答案:A以下是判断题部分:6. C语言中的数组名可以作为指向该数组首元素的指针使用。

()答案:正确7. 在C语言中,结构体变量可以作为函数的参数传递。

()答案:正确8. 在C语言中,静态存储类别的变量在程序运行期间始终占据内存空间。

()答案:正确二、填空题9. 在C语言中,定义一个整型变量需要使用关键字______。

答案:int10. 若变量定义如下:int a = 10;,则执行语句printf("%d", a--); 后,a的值是______。

答案:911. 在C语言中,用于动态分配内存的函数是______。

答案:malloc12. 在C语言中,用于释放动态分配的内存的函数是______。

答案:free13. 在C语言中,用于清空标准输入缓冲区的函数是______。

答案:getchar()三、编程题14. 编写一个C语言程序,实现以下功能:输入一个整数,输出它的阶乘。

答案:```c#include <stdio.h>int main() {int n, i;long factorial = 1;printf("Enter an integer: ");scanf("%d", &n);if (n < 0) {printf("Factorial of a negative number doesn't exist.\n");} else {for (i = 1; i <= n; i++) {factorial = i;}printf("Factorial of %d is %ld\n", n, factorial);}return 0;}```15. 编写一个C语言程序,实现以下功能:输入一个字符串,判断它是否是回文(正读和反读都一样的字符串)。

C语言黑洞陷阱

C语言黑洞陷阱

C语⾔⿊洞陷阱495是⼀个很神奇的数,被称为⿊洞数或者陷阱数。

给定任何⼀个⼩于1000的正整数,经前位补0后可以得到⼀个三位数(两位数前⾯补1个0,⼀位数前⾯补2个0)。

如果这个三位数的三个数字不全相等,那么经有限次“重排求差”操作,总会得到495。

所谓“重排求差”操作即组成该数的数字重排后的最⼤数减去重排后的最⼩数。

例如,对整数80,前位补0后得到080,重排后可以得到800,008。

此时可以得到的最⼤数为800,最⼩数为008(即8)。

那么需要4次重排求差即可得到495:1 #include <stdio.h>2 #include <stdlib.h>3 int main(){45 int n,t;6 int a,b,c;7 int k=1;8 printf("Input n(<1000):");9 scanf("%d",&n);10 do{11 a=n/100;//分离12 b=n/10%10;13 c=n%10;14 if(a<b)15 {16 t=a;17 a=b;18 b=t;19 }20 if(a<c)21 {22 t=a;23 a=c;24 c=t;25 }26 if(b<c)27 {28 t=b;29 b=c;30 c=t;31 }32 n=(a*100+b*10+c)-(c*100+b*10+a);33 printf("%d:%d-%d=%d\n",k,a*100+b*10+c,c*100+b*10+a,n);34 k=k+1;35 }while(n!=495);36373839404142 }。

经典C语言测试题(众多知名企业用作招聘笔试题)

经典C语言测试题(众多知名企业用作招聘笔试题)

一个很牛的人出的被众多知名IT 企业用作面试题的看似很简单C 语言测试题 C++/C 试题本试题仅用于考查C++/C 程序员的基本编程技能。

内容限于C++/C 常用语法,不涉及数据结构、算法以及深奥的语法。

考试成绩能反映出考生的编程质量以及对C++/C 的理解程度,但不能反映考生的智力和软件开发能力。

笔试时间90分钟。

请考生认真答题,切勿轻视。

一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。

(10分)提示:这里“零值”可以是0, 0.0 , FALSE 或者“空指针”。

例如 int 变量 n 与“零值”比较的 if 语句为: if ( n == 0 ) if ( n != 0 ) 以此类推。

请写出 BOOL flag 与“零值”比较的 if 语句:请写出 float x 与“零值”比较的 if 语句:请写出 char *p 与“零值”比较的 if 语句:二、以下为Windows NT 下的32位C++程序,请计算sizeof 的值(10分) void Func ( char str[100]) { 请计算sizeof( str ) =} char str[] = “Hello” ;char *p = str ; int n = 10; 请计算sizeof (str ) = sizeof ( p ) = sizeof ( n ) =void *p = malloc( 100 ); 请计算sizeof ( p ) =三、简答题(25分)1、头文件中的ifndef/define/endif 干什么用?2、#include <filename.h> 和#include “filename.h” 有什么区别?3、const 有什么用途?(请至少说明两种)4、在C++ 程序中调用被C编译器编译后的函数,为什么要加extern “C”声明?5、请简述以下两个for循环的优缺点//第一个f o r(i=0;i<N;i++) {i f(c o n d i t i o n)D o S o m e t h i n g();e l s eD o O t h e r t h i n g(); }//第二个i f(c o n d i t i o n){f o r(i=0;i<N;i++)D o S o m e t h i n g();}e l s e{f o r(i=0;i<N;i++)D o O t h e r t h i n g(); }优点:程序简洁缺点:多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。

C语言试题(答案带解析)

C语言试题(答案带解析)

C语言试题(答案带解析)题目:编写一个C语言程序,实现以下功能:1. 输入一个字符串,长度不超过100个字符。

2. 统计并输出字符串中字母、数字、空格和其他字符的数量。

3. 删除字符串中所有的空格,并输出处理后的字符串。

4. 查找字符串中第一次出现字母 'a' 的位置,并输出位置(位置从0开始计算)。

5. 检查字符串是否为回文(忽略大小写和空格),如果是,输出"Yes",否则输出"No"。

试题代码如下:```c#include <stdio.h>#include <string.h>#include <ctype.h>int main() {char str[101];int alpha_count = 0, digit_count = 0,space_count = 0, other_count = 0;int i, a_position = -1;int len, is_palindrome = 1;// 输入字符串printf("Enter a string (up to 100 characters): ");fgets(str, 101, stdin);// 删除换行符len = strlen(str);if (str[len - 1] == '\n') {str[len - 1] = '\0';len--;}// 统计字符数量for (i = 0; i < len; i++) {if (isalpha(str[i])) {alpha_count++;if (str[i] == 'a') {a_position = i;}} else if (isdigit(str[i])) {digit_count++;} else if (isspace(str[i])) {space_count++;} else {other_count++;}}// 输出字符数量printf("Letters: %d\n", alpha_count); printf("Digits: %d\n", digit_count); printf("Spaces: %d\n", space_count); printf("Others: %d\n", other_count); // 删除空格并输出处理后的字符串char new_str[101];int j = 0;for (i = 0; i < len; i++) {if (!isspace(str[i])) {new_str[j++] = str[i];}}new_str[j] = '\0';printf("String without spaces: %s\n", new_str);// 查找字母 'a' 的位置if (a_position != -1) {printf("First occurrence of 'a' is at position: %d\n", a_position);} else {printf("'a' not found in the string.\n");}// 检查字符串是否为回文int start = 0, end = j - 1;while (start < end) {if (tolower(new_str[start]) !=tolower(new_str[end])) {is_palindrome = 0;break;}start++;end--;}if (is_palindrome) {printf("Yes\n");} else {printf("No\n");}return 0;}```解析:1. 程序首先通过 `fgets` 函数读取用户输入的字符串,并检查是否有多余的换行符。

(完整版)C语言试题及答案解析

(完整版)C语言试题及答案解析

C语言一、选择题(第题2分,共20分)1.一个C程序的执行是从 A 。

A) 本程序的main函数开始,到main函数结束B) 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C) 本程序文件的第一个函数开始,到本程序main函数结束D) 本程序的main函数开始,到本程序文件的最后一个函数结束2.若x、i、j、k都是int型变量,则计算下面表达式后,x的值为 C 。

x=(i=4,j=16,k=32)A) 4 B) 16 C) 32 D) 523.设C语言中,一个int型数据在内存中占2个字节,则unsigned int 型数据的取值范围为 C 。

A) 0~255 B) 0~32767 C) 0~65535 D) 0~21474836474.设有说明:char w; int x; float y; double z;则表达式w*x+z-y值的数据类型为 D 。

A) float B) char C) int D) double5. putchar函数可以向终端输出一个D 。

A) 整型变量表达式 B) 实型变量值C) 字符串 D) 字符或字符型变量值6. printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列。

如果字符串长度大于5,则输出按方式 B ;如果字符串长度小于5,则输出按方式 C 。

A) 从左起输出该字符串,右补空格 B) 按原字符长从左向右全部输出C) 右对齐输出该字符串,左补空格 D) 输出错误信息7.判断char型变量ch是否为大写字母的正确表达式是 C 。

A) ‘A’<=ch<=‘Z’ B) (ch>=‘A’)&(ch<=‘Z’)C) (ch>=‘A’)&&(ch<=‘Z’) D) (‘A’<= ch)AND(‘Z’>= ch)8.已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是 B 。

c语言竞赛中的陷阱题

c语言竞赛中的陷阱题

1.若有以下说明,则对strcpy库函数的调用不正确的有_______。

(知识点10.4)char *str1=“copy”,str2[10],*str3=“abcde”,*str4,*str5=“hijk”A)strcpy(str2,str1);B)strcpy(str3,str1);C)strcpy(str4,str1);D)strcpy(str5 ,str1);2.下列叙述不正确的有_____。

(知识点8.8)A)全局变量可以为本文件中其他函数所调用,编译时分配在静态存储区B)局部变量只在本函数范围内有效,形式参数属于局部变量C)局部变量如没有被说明为静态的存储类别,则会被分配动态存储空间,存储在动态存储区中D)局部静态变量在函数调用结束后依然存在,但其他函数不能引用它3.已有定义int a=-2;和输出语句printf(“%8lx”,a);下列叙述不正确的有_______。

(知今识点4.5)A)整型变量的输出形式只有%d一种B)%x是格式符的一种,它可以适用于任何一种类型的数据C)%x是格式符的一种,其变量的值按十六进制输出,但%8lx是错误的D)%8lx不是错误的格式符,其中数字81规定了输出字段的宽度4 、若有运算符<<,sizeof,^,&=,则它们按优先级由高至低的排列次序正确的是_______。

(知识点3.8)A)sizeof,&= ,<<,^ B)sizeof,<<,^,&=C)^,<<,sizeof,&= D)<<,^,&=,sizeof5、下列程序的运行结果是_______。

(知识点12.2)main(){ unsigned c1=0xff,c2=0x00;c1=c2|c1>>2;c2=c1^0236;printf(“%x,%x\n”,c1,c2);}A)0x3f,0XA1 B)3f,A1 C)ffff,61 D)3f,a16、下列程序的运行结果是_______。

c语言经典题目100题

c语言经典题目100题

c语言经典题目100题C语言经典题目100题C语言经典题目一直是程序员们提高编程技能和理解语言细节的重要手段之一。

在这篇文档中,我将为你准备100道C语言经典题目,帮助你更好地掌握和应用C语言的基础知识。

这些题目将涵盖C语言的各个方面,包括基本数据类型、运算符、流程控制、函数等。

请注意,本文所提供的代码示例可以供你借鉴参考,但请务必自行思考和尝试解决这些问题。

题目1:编写一个C程序,交换两个变量的值。

```c#include<stdio.h>int main(){int a = 5, b = 10;int temp;printf("交换前:a = %d, b = %d\n", a, b);temp = a;a = b;b = temp;printf("交换后:a = %d, b = %d\n", a, b);return 0;```题目2:编写一个C程序,判断一个数是奇数还是偶数。

```c#include<stdio.h>int main(){int num;printf("请输入一个整数:");scanf("%d", &num);if(num % 2 == 0)printf("%d 是偶数\n", num);elseprintf("%d 是奇数\n", num);return 0;}```题目3:编写一个C程序,求两个数的最大公约数。

```c#include<stdio.h>int main()int num1, num2;int gcd;printf("请输入两个正整数:");scanf("%d %d", &num1, &num2);for(int i = 1; i <= num1 && i <= num2; i++){if(num1 % i == 0 && num2 % i == 0)gcd = i;}printf("%d 和 %d 的最大公约数是 %d\n", num1, num2, gcd);return 0;}```题目4:编写一个C程序,判断一个数是否为素数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为___d___.
a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j
以下正确的程序段是_________.
a)char str[20]; b)char *p;
scanf("%s",&str); scanf("%s",p);
c)char str[20]; d)char str[20],*p=str;
scanf("%s",&str[2]); scanf("%s",p[2]);
下面程序的运行结果是_______.
#include <stdio.h>
#include <string.h>
fun(char *w,int n)
{char t,*s1,*s2;
s1=w;s2=w+n-1;
while(s1<s2){t=*s1++;*s1=*s2--;*s2=t;}
}
main()
{
char p[] = “1234567”;
fun(p,strlen(p));
puts(p);
}
a)7654321 b)1714171 c)1711717 d)7177171
下面程序段的运行结果是__ hELLO!______.
char s[80],*sp="HELLO!";
sp=strcpy(s,sp);
s[0]='h';
puts(sp);
.下面程序段的运行结果是__ef_____.
char str[]="abc\0def\0ghi",*p=str;
printf("%s",p+5);
设有如下定义:int x = 1, y = -1;,则语句:printf(“%d\n”, (x--&++y));的输出结果是:B
A. 1
B.0
C.-1
D. 2
设有如下定义:int a, b;,则语句:printf("%d", (a = 5) && (b = -1));的输
出结果是:A
E. 1
F. 5
G.-1
H.不确定
程序执行后的输出结果是:n = 3
int i, n = 0;
for (i = 2; i < 7; i++) {
do {
if (i % 3) {
continue;
}
--n;
} while(!i);
n++;
}
printf("n = %d\n", n);
1.以下代码,哪一句是非法的?____最后一句s.p[0] = 2;____
struct po_s
{
int i;
int *p;
};
int main(void)
{
struct po_s s;
int *p;
p = &s.i;
p[0] = 4;
p[1] = 3;
s.p = p;
s.p[1] = 1;
s.p[0] = 2;
return 0;
2.以下代码,输出什么?____a3, BB(注意大小写)____
int a[5] = {0x1a,0xa3,0xd3,0xe4,0xbb};
int *ptr;
ptr = (int *)(&a + 1);
printf("%x, %X", *(a + 1), *(ptr - 1));
3.下面的代码输出是什么,为什么?
void foo(void)
{
unsigned int a = 0x10;
int b = -20;
(a + b > 6) ? puts("> 6") : puts("<= 6");
}
输出>6
因为表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。

因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。

4.说明以下两个语句的作用,哪个更好?为什么?
#define PS struct po_s*
typedef struct po_s* PS_t;
这两个语句是将PS 和 PS_t 作为一个指向结构po_s指针。

typedef更好。

因为如下代码
PS p1, p2;
PS_t p3, p4;
p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。

第二个例子正确地定义了p3 和p4 两个指针。

5.下面两段代码一样吗?为什么?
int square(volatile int *ptr)
{
int a, b;
a = *ptr;
b = *ptr;
return a * b;
}
int square(volatile int *ptr)
{
int a;
a = *ptr;
return a * a;
}
由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。

第一段段代码返回的可能不是你所期望的平方值。

#include
static jmp_buf buf;
main(b)
{
volatile int b;
b =3;
if(setjmp(buf)!=0)
{
printf("%d ", b);
exit(0);
}
b=5;
longjmp(buf , 1);
}
请问, 这段程序的输出是
(a) 3
(b) 5
(c) 0
(d) 以上均不是
考查多维数组与指针
void foo(int [][3]);
main()
{
int a [3][3]= { { 1,2,3} , { 4,5,6},{7,8,9}};
foo(a);
printf("%d" , a[2][1]);
}
void foo(int b[][3])
{
++ b;
b[1][1] =9;
}
这段程序的输出是: b
(a) 8
(b) 9
(c) 7
(d)以上均不对
考查自减操作(--)
void e(int );
main()
{
int a;
a=3;
e(a);
}
void e(int n)
{
if(n>0)
{
e(--n);
printf("%d", n);
e(--n);
}
}
void f(char**);
main()
{
char * argv[] = { "ab" ,"cd" , "ef" ,"gh", "ij" ,"kl" }; f( argv );
}
void f( char **p )
{
char* t;
t= (p+= sizeof(int))[-1];
printf( "%s" , t);
}
这段程序的输出是: b
(a) ab
(b) cd
(c) ef
(d) gh。

相关文档
最新文档