大一上学期C语言期末复习总结和模拟试题带答案

合集下载

c语言期末考试题库及详解答案

c语言期末考试题库及详解答案

c语言期末考试题库及详解答案C语言期末考试题库及详解答案一、选择题1. 下列哪个选项是C语言中正确的整型常量?A. 0.1234B. 0x12ABC. 0b1010D. 1e10答案:B2. C语言中,以下哪个关键字用于定义变量的存储类别?A. staticB. constC. typedefD. volatile答案:A3. 在C语言中,以下哪个运算符用于求两个数的余数?A. /B. %C.D. ++答案:B4. 下列哪个选项是C语言中正确的字符常量?A. 'A'B. "A"C. AD. 65答案:A5. 在C语言中,以下哪个函数用于计算两个数的最大值?A. max()B. min()C. pow()D. sqrt()答案:A二、填空题6. C语言中,用于定义数组的关键字是______。

答案:int7. C语言中,用于输入输出的库函数分别是______和______。

答案:scanf(); printf()8. C语言中,若要定义一个指针变量,需要使用关键字______。

答案:int*9. C语言中,用于定义函数的关键字是______。

答案:void 或其他数据类型10. C语言中,若要实现字符串的复制,可以使用库函数______。

答案:strcpy()三、简答题11. 简述C语言中结构体的定义方式。

答案:在C语言中,结构体是一种用户自定义的数据类型,它允许将多个不同类型的数据项组合成一个单一的类型。

结构体的定义方式如下:struct 结构体名 {数据类型成员名1;数据类型成员名2;...};12. 解释C语言中的递归函数。

答案:递归函数是一种函数自己调用自己的特殊函数。

递归函数通常用于解决可以被分解为相似子问题的问题。

递归函数需要有一个明确的终止条件,以防止无限递归。

四、编程题13. 编写一个C语言程序,实现求一个整数的阶乘。

答案:```c#include <stdio.h>long factorial(int n) {if (n <= 1) return 1;else return n * factorial(n - 1);}int main() {int num;printf("Enter a number: ");scanf("%d", &num);printf("Factorial of %d = %ld", num, factorial(num)); return 0;}```14. 编写一个C语言程序,实现字符串的反转。

c语言期末考试题库及详解答案编程题

c语言期末考试题库及详解答案编程题

c语言期末考试题库及详解答案编程题在C语言的期末考试中,编程题是检验学生对C语言编程能力的重要部分。

以下是一套精心准备的C语言期末考试题库及详解答案,帮助学生复习和准备考试。

1. 编写一个程序,计算并输出100以内所有素数的和。

素数是指只能被1和它本身整除的大于1的自然数。

我们可以通过遍历2到99的每个数,检查它是否为素数,如果是,则累加到总和中。

最后输出总和。

```c#include <stdio.h>#include <stdbool.h>bool isPrime(int num) {if (num <= 1) return false;for (int i = 2; i * i <= num; i++) {if (num % i == 0) return false;}return true;}int main() {int sum = 0;for (int i = 2; i <= 100; i++) {if (isPrime(i)) {sum += i;}}printf("The sum of all prime numbers less than 100is: %d\n", sum);return 0;}```2. 编写一个程序,实现字符串的反转。

字符串反转是一个常见的编程问题,可以通过遍历字符串,将字符从后向前存入新的字符串中,然后输出。

```c#include <stdio.h>#include <string.h>void reverseString(char str[]) {int len = strlen(str);for (int i = len - 1; i >= 0; i--) {printf("%c", str[i]);}}int main() {char str[] = "Hello, World!";printf("Original string: %s\n", str);printf("Reversed string: ");reverseString(str);printf("\n");return 0;}```3. 编写一个程序,计算数组中所有元素的平均值。

c语言大期末考试题库及详解答案

c语言大期末考试题库及详解答案

c语言大期末考试题库及详解答案一、选择题1. C语言中,以下哪个关键字用于定义一个函数?A. intB. voidC. returnD. function答案:A2. 在C语言中,哪个运算符用于取模?A. /B. %C. *D. -答案:B3. 如果一个变量声明为 `int x;`,那么x的类型是什么?A. 浮点型B. 整型C. 字符型D. 双精度型答案:B4. 下列哪个选项是C语言中的合法标识符?A. 2variableB. variable2C. variable!2D. variable-2答案:B5. 在C语言中,以下哪个语句用于结束一个循环?A. continueB. breakC. returnD. exit答案:B二、填空题6. C语言中,一个基本的程序结构包括_____、_____和_____。

答案:预处理指令;函数定义;程序的主体7. 以下代码段的输出结果是_____。

```c#include <stdio.h>int main() {int a = 5, b = 10;printf("%d", a + b);return 0;}```答案:158. 在C语言中,若要定义一个字符数组来存储字符串"Hello",正确的声明方式是_____。

char str[] = "Hello";```答案:char str[6];9. 下列代码段中,变量x的最终值是_____。

```cint x = 10;x += x * x - 3 * x + 2;```答案:11210. C语言中,若要计算两个数的乘积,可以使用运算符_____。

答案:*三、简答题11. 解释C语言中指针的概念及其用途。

答案:指针是一种变量,它存储了另一个变量的内存地址。

指针用于访问和操作内存地址中的数据,可以实现动态内存分配、数组操作、函数参数传递等。

大学C语言期末考试练习题(带详解答案)word版本

大学C语言期末考试练习题(带详解答案)word版本

大学C语言期末考试练习题(带详解答案)一、单项选择题1.(A)是构成C语言程序的基本单位。

A、函数B、过程C、子程序D、子例程2.C语言程序从 C开始执行。

A) 程序中第一条可执行语句 B) 程序中第一个函数C) 程序中的main函数 D) 包含文件中的第一个函数3、以下说法中正确的是(C)。

A、C语言程序总是从第一个定义的函数开始执行B、在C语言程序中,要调用的函数必须在main( )函数中定义C、C语言程序总是从main( )函数开始执行D、C语言程序中的main( )函数必须放在程序的开始部分4.下列关于C语言的说法错误的是(B)。

A) C程序的工作过程是编辑、编译、连接、运行B) C语言不区分大小写。

C) C程序的三种基本结构是顺序、选择、循环D) C程序从main函数开始执行5.下列正确的标识符是(C)。

A.-a1B.a[i]C.a2_iD.int t5~8题为相同类型题考点:标识符的命名规则(1)只能由字母、数字、下划线构成(2)数字不能作为标识符的开头(3)关键字不能作为标识符选项A中的“-” ,选项B中“[”与“]”不满足(1);选项D中的int为关键字,不满足(3)6.下列C语言用户标识符中合法的是( B)。

A)3ax B)x C)case D)-e2 E)union选项A中的标识符以数字开头不满足(2);选项C,E均为为关键字,不满足(3);选项D中的“-”不满足(1);7.下列四组选项中,正确的C语言标识符是(C)。

A) %x B) a+b C) a123 D) 123选项A中的“%” ,选项B中“+”不满足(1);选项D中的标识符以数字开头不满足(2)8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。

A、print _3d db8 aBcB、I\am one_half start$it 3paiC、str_1 Cpp pow whileD、Pxq My->book line# His.age选项B中的“\”,”$” ,选项D中“>”,”#”,”.”,”-”不满足(1);选项C中的while为关键字,不满足(3)9.C语言中的简单数据类型包括(D)。

c语言期末考试题库大题及详解答案

c语言期末考试题库大题及详解答案

c语言期末考试题库大题及详解答案C语言期末考试题库大题及详解答案一、简答题1. 请简述C语言的基本数据类型及其特点。

答案:C语言的基本数据类型包括整型(int)、浮点型(float和double)、字符型(char)和枚举型(enum)。

整型用于存储整数,浮点型用于存储小数,字符型用于存储单个字符,枚举型用于定义一组命名的常量。

每种数据类型都有其特定的取值范围和占用内存大小。

2. 请解释C语言中的数组和指针的区别。

答案:数组是一种数据结构,用于存储固定数量的相同类型元素,可以通过下标访问元素。

指针是一个变量,它存储另一个变量的内存地址。

数组名可以作为指向数组第一个元素的指针使用,但数组本身是一个固定大小的内存块,而指针可以被赋值为不同的地址,具有动态性。

二、编程题1. 编写一个C语言程序,实现输入三个整数,找出其中的最大值并输出。

答案:```c#include <stdio.h>int main() {int num1, num2, num3, max;printf("请输入三个整数:");scanf("%d %d %d", &num1, &num2, &num3);max = (num1 > num2) ? ((num1 > num3) ? num1 : num3) : ((num2 > num3) ? num2 : num3);printf("最大值是:%d\n", max);return 0;}```2. 编写一个C语言程序,实现字符串的反转。

答案:```c#include <stdio.h>#include <string.h>int main() {char str[100];printf("请输入一个字符串:");fgets(str, sizeof(str), stdin); // 使用fgets以包含空格int len = strlen(str) - 1; // 减去换行符长度for (int i = len; i >= 0; --i) {printf("%c", str[i]);}printf("\n");return 0;}```三、综合题1. 请编写一个C语言程序,实现一个简单的计算器,能够进行加、减、乘、除四种基本运算。

大学c语言期末考试题及答案

大学c语言期末考试题及答案

大学c语言期末考试题及答案一、选择题(每题2分,共20分)1. 下列关于C语言的描述中,错误的是:A. C语言是一种高级语言B. C语言的执行方式是编译执行C. C语言支持面向对象编程D. C语言具有丰富的库函数答案:C2. 在C语言中,用于定义一个结构体的关键字是:A. structB. unionC. enumD. typedef答案:A3. 下列关于数组的描述中,正确的是:A. 数组必须在定义时初始化B. 数组的下标从1开始C. 数组可以存储不同类型的数据D. 数组的大小在定义后不能改变答案:D4. 在C语言中,用于文件操作的库函数是:A. printfC. fopenD. getchar答案:C5. 下列关于指针的描述中,错误的是:A. 指针可以存储变量的地址B. 指针可以作为函数的参数C. 指针可以被赋值为NULLD. 指针可以存储函数的地址答案:D6. 在C语言中,用于定义一个函数的关键字是:A. functionB. defC. voidD. int答案:B7. 下列关于循环的描述中,错误的是:A. for循环可以嵌套使用B. while循环可以和break语句一起使用C. do-while循环至少执行一次D. 循环体内不能使用continue语句答案:D8. 在C语言中,用于定义一个宏的预处理命令是:B. #includeC. #pragmaD. #import答案:A9. 下列关于函数的描述中,错误的是:A. 函数可以有返回值B. 函数可以没有参数C. 函数可以没有返回值D. 函数可以没有定义答案:D10. 在C语言中,用于定义一个枚举类型的关键字是:A. enumB. structC. unionD. typedef答案:A二、填空题(每题2分,共10分)1. C语言中,用于定义一个整型变量的关键字是____。

答案:int2. 在C语言中,表示逻辑与运算的运算符是____。

答案:&&3. 当需要在C语言中表示一个常量时,可以使用关键字____。

大一C语言易错点总结和模拟试题带答案

大一C语言易错点总结和模拟试题带答案

易错点C语言中易犯的错误对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误.看着有错的程序,不知该如何改起,一些C编程时常犯的错误,写给各位学员以供参考.******************************** ******************************** ************************1.书写标识符时,忽略了大小写字母的区别.main(){int a=5;printf("%d",A);}编译程序把a和A认为是两个不同的变量名,而显示出错信息.C认为大写字母和小写字母是两个不同的字符.习惯上,符号常量名用大写,变量名用小写表示,以增加可读性.******************************** ******************************** ************************2.忽略了变量的类型,进行了不合法的运算.main(){float a,b;printf("%d",a%b);}%是求余运算,得到a/b的整余数.整型变量a和b可以进行求余运算,而实型变量则不允许进行"求余"运算.******************************** ******************************** ************************3.将字符常量与字符串常量混淆.char c;c="a";在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列.C规定以"\"作字符串结束标志,它是由系统自动加上的,所以字符串"a"实际上包含两个字符:'a'和'\',而把它赋给一个字符变量是不行的.******************************** ******************************** ************************4.忽略了"="与"=="的区别.在许多高级语言中,用"="符号作为关系运算符"等于".如在BASIC程序中可以写if (a=3) then …但C语言中,"="是赋值运算符,"=="是关系运算符.如:if (a==3) a=b;前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a.由于习惯问题,初学者往往会犯这样的错误.******************************** ******************************** ************************5.忘记加分号.分号是C语句中不可缺少的一部分,语句末尾必须有分号.a=1b=2编译时,编译程序在"a=1"后面没发现分号,就把下一行"b=2"也作为上一行语句的一部分,这就会出现语法错误.改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号.{z=x+y;t=z/100;printf("%f",t);}对于复合语句来说,最后一个语句中最后的分号不能忽略不写******************************** ******************************** ************************6.多加分号.对于一个复合语句,如:{z=x+y; t=z/100;printf("%f",t);};复合语句的花括号后不应再加分号,否则将会画蛇添足.又如:if (a%3==0);I++;本是如果3整除a,则I加1.但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1.再如:for (I=0;I<5;I++);{scanf("%d",&x);printf("%d",x);}本意是先后输入5个数,每输入一个数后再将它输出.由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它.****************************************************************************************7.输入变量时忘记加地址运算符"&".int a,b;scanf("%d%d",a,b);这是不合法的.Scanf函数的作用是:按照a,b在内存的地址将a,b的值存进去."&a"指a在内存中的地址.******************************** ******************************** ************************8.输入数据的方式与要求不符.①scanf("%d%d",&a,&b);输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:3,4输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab.②scanf("%d,%d",&a,&b);C规定:如果在"格式控制"字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符.下面输入是合法的:3,4此时不用逗号而用空格或其它字符是不对的.3 43:4又如:scanf("a=%d,b=%d",&a,&b); 输入应如以下形式:a=3,b=4****************************************************************************************9.输入字符的格式与要求不一致.在用"%c"格式输入字符时,"空格字符"和"转义字符"都作为有效字符输入.scanf("%c%c%c",&c1,&c2,&c3);如输入a b c字符"a"送给c1,字符" "送给c2,字符"b"送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔.****************************************************************************************10.输入输出的数据类型与所用格式说明符不一致.例如,a已定义为整型,b定义为实型a=3;b=4.5;printf("%f%d\n",a,b);编译时不给出出错信息,但运行结果将与原意不符.这种错误尤其需要注意.****************************************************************************************11.输入数据时,企图规定精度.scanf("%7.2f",&a);这样做是不合法的,输入数据时不能规定精度.****************************************************************************************12.switch语句中漏写break语句.例如:根据考试成绩的等级打印出百分制数段.switch(grade){ case 'A':printf("85~100\n"); case 'B':printf("70~84\n");case 'C':printf("60~69\n");case 'D':printf("<60\n"); default:printf("error\n");由于漏写了break语句,case只起标号的作用,而不起判断作用.因此,当grade值为A时,printf函数在执行完第一个语句后接着执行第二,三,四,五个printf函数语句.正确写法应在每个分支后再加上"break;".例如case 'C':printf("60~69\n");break; ****************************************************************************************13.忽视了while和do-while语句在细节上的区别.(1)main(){int a=0,I;scanf("%d",&I); while(I<=10){a=a+I;I++;}printf("%d",a);}(2)main(){int a=0,I;scanf("%d",&I);do{a=a+I;I++;}while(I<=10);printf("%d",a);}可以看到,当输入I的值小于或等于10时,二者得到的结果相同.而当I>10时,二者结果就不同了.因为while循环是先判断后执行,而do-while循环是先执行后判断.对于大于10的数while循环一次也不执行循环体,而do-while语句则要执行一次循环体.******************************** ******************************************************** 14.定义数组时误用变量. int n; scanf("%d",&n); int a[n]; 数组名后用方括号括起来的是常量表达式,可以包括常量和符号常 量.即C 不允许对数组的大小作动态定义. **************************************************************************************** 15.在定义数组时,将定义的"元素个数"误认为是可使的最大下 标值. main() {static int a[10]={1,2,3,4,5,6,7,8,9,10}; printf("%d",a[10]); } C 语言规定:定义时用a[10],表示a 数组有10个元素.其下标值由0 开始,所以数组元素a[10]是不存在的. **************************************************************************************** 16.初始化数组时,未使用静态存储. int a[3]={0,1,2}; 这样初始化数组是不对的.C 语言规定只有静态存储(static)数组 和外部存储 (exterm)数组才能初始化.应改为: static int a[3]={0,1,2}; **************************************************************************************** 17.在不应加地址运算符&的位置加了地址运算符. scanf("%s",&str); C 语言编译系统对数组名的处理是:数组名代表该数组的起始地址 ,且scanf 函数中的输入项是字符数组名,不必要再加地址符&.应 改为:scanf("%s",str); **************************************************************************************** 18.同时定义了形参和函数中的局部变量. int max(x,y) int x,y,z; {z=x>y?x:y; return(z); } 形参应该在函数体外定义,而局部变量应该在函数体内定义.应改 为: int max(x,y)int x,y;{int z;z=x>y?x:y;return(z);}试题一一、单项选择题(共30分,每题1分)1. 下列不正确的转义字符是A.\\B.\‘ C.074 D.\02. 不是C语言提供的合法关键字是A.switchB.cherC.caseD.default3.正确的标识符是()A.?a B.a=2 C.a.3 D.a_34.下列字符中属于键盘符号的是A.\ B.\n C.\t D.\b.下列数据中属于“字符串常量”的A.ABC B.“ABC” C.‘ABC’ D.‘A’6.char型常量在内存中存放的是A.ASCII码B.BCD码C.内码值D.十进制代码值7.设a为5,执行下列语句后,b 的值不为2的是()A.b=a/2B.b=6-(——a) C.b=a%2 D.b=a>3?2:28.在以下一组运算符中,优先级最高的运算符是()A.<= B.= C.% D.& &9.设整型变量i的值为3,则计算表达式i——i后表达式的值是()A.0B.1C. 2D.表达式出错10.设整型变量a,b,c均为2,表达式a+++b+++c++的结果是()A.6B.9C.8D.表达式出错11.若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是()A.1B.2C.2.0D.2.512.设a=1,b=2,c=3,d=4,则表达式:a<b?a:c<d?a:d的结果是()A.4B.3C.2D.113.设a为整型变量,不能正确表达数学关系:10<a<15的C语言表达式是()A.10<a<15B.a==11 || a= =12 || a= =13 || a= =14C.a>10&&a<15D.!(a<=10)&&!(a>=15)14.若有以下定义:char a、 intb 、 floatc 、 double d,则表达式a*b+d-c值的类型为()A.floatB.intC.charD.double15.表达式“10!=9”的值是()A.trueB.非零值 C.0 D.116.循环语句 for (x=0,y=0;(y!=123)|| (x<4);x++);的循环执行()A.无限次B.不确定次 C.4次 D.3次17.在C语言中,下列说法中正确的是()A. 不能使用“do while”的循环B.“do while”的循环必须使用break语句退出循环C.“do while”的循环中,当条件为非0时将结束循环D.“do while”的循环中,当条件为0时将结束循环。

大一c语言期末考试试题及答案(含对应考察点)

大一c语言期末考试试题及答案(含对应考察点)

一1-1 考察点计算思维C语言实现->模块化编程能力->函数设计题型C语言-自主编程难度系数 4题目请在右边完善GetZhouChang函数,函数的具体要求如下:输入:圆的半径r处理:计算这个圆的周长,并返回结果输出:圆的周长输出样式:注意:请勿修改任何已有代码!默认圆周率为3.14!默认代码#include <stdio.h>/*请在此处注释语句下方完成GetZhouChang函数的声明与实现*/float GetZhouChang(float x);float GetZhouChang(float r){return 2*3.14*r;}int main( ) {float r = 4.4;float zhouchang = GetZhouChang(r);printf("%0.2f",zhouchang);return 0;}2-1 考察点计算思维C语言实现->模块化编程能力->函数设计题型C语言-自主编程难度系数 4题目请完善判断奇偶数JudgeOddNumber函数,函数的具体要求如下:形参:一个整型数num处理:判断num奇偶数,如果是奇数,返回1;如果是偶数,返回0返回:返回判断结果提示:函数建议声明为如下格式 int JudgeOddNumber(int num); 注意:请勿修改任何已有代码!默认代码#include<stdio.h>//请在此处注释语句下方完成JudgeOddNumber函数的声明与实现int JudgeOddNumber(int num);int JudgeOddNumber(int num){if(num%2==1)return 1;elsereturn 0;}int main( ) {int num = 103;int result = JudgeOddNumber(num);printf("%d", result); // 当前num是奇数,输出1num = 8;result = JudgeOddNumber(num);printf("%d", result); // 当前num是偶数,输出0return 0;}3-1 考察点计算思维C语言实现->模块化编程能力->函数设计题型C语言-自主编程难度系数 4题目请在右边完善func函数,函数的具体要求如下:输入:两个整型的数据a和b处理:求a-b的绝对值,并返回结果输出:|a-b|注意:请勿修改任何已有代码!默认代码#include<stdio.h>/*请在此处注释语句下方完成func函数的声明与实现,*/int func(int a,int b);int func(int a,int b){if(a>b)return a-b;elsereturn b-a;}int main( ){int a = 30,b = 100;int result = func(a,b);printf("%d", result);return 0;}4-1 考察点计算思维C语言实现->模块化编程能力->函数设计题型C语言-自主编程难度系数 4题目请完善div函数,函数的具体要求如下:形参:两个整型数a,b处理:判断a能否整除b,如果可以整除,输出0;如果不能整除,输出它们的余数返回:返回处理结果提示:函数建议声明为如下格式 int div(int a,int b);注意:输出语句结束不用换行!请勿修改任何已有代码!默认代码#include<stdio.h>//请在此处注释语句下方完成div函数的声明与实现int div(int a,int b);int div(int a,int b){return a%b;}int main( ) {int a = 100;int b = 50;int result = div(a,b);printf("%d",result);return 0;}5-1 考察点计算思维C语言实现->模块化编程能力->函数设计题型C语言-自主编程难度系数 4题目请在右边完善Calculation函数,函数的具体要求如下:输入:两个整型的数据处理:计算这两个数组成的矩形的周长,并返回结果输出:矩形周长输出样式:注意:请勿修改任何已有代码!默认代码#include <stdio.h>/*请在此处注释语句下方完成Calculation函数的声明与实现*/int Calculation(int a,int b);int Calculation(int a,int b){return 2*(a+b);}int main( ) {int a = 10, b = 20;int c irc = Calculation(a,b);printf("周长为%d",circ);return 0;}6-1 考察点计算思维C语言实现->模块化编程能力->函数设计题型C语言-自主编程难度系数 4题目请完善判断最大数的GetMax函数,函数的具体要求如下:输入:三个整型数a,b,c处理:通过条件语句判断最大的数,并返回最大的数输出:返回判断结果提示:函数建议声明为如下格式 int GetMax(int a,int b,int c) 注意:请勿修改任何已有代码!默认代码#include <stdio.h>//请在此处注释语句下方完成GetMax函数的声明与实现int GetMax(int a, int b, int c);int GetMax(int a, int b, int c){int max;if(a>b)max=a;elsemax=b;if(max<c)max=c;return max;}int main( ) {int a = 20, b = 5, c = 10;int max = GetMax(a, b, c);printf("三个数最大的是%d", max);return 0;}7-1 考察点计算思维C语言实现->模块化编程能力->函数设计题型C语言-自主编程难度系数 4题目请在右边完善fun函数,函数的具体要求如下:输入:一个整型数字处理:用户传入一个整型数字,然后返回这个整型数字的最后一位数字,输出样式如下图输出样式:注意:请勿修改任何已有代码!默认代码#include <stdio.h>/*请在此处注释语句下方完成fun函数的声明与实现,*/int fun(int x);int fun(int x){return x%10;}int main( ){int x = 325;int result = fun(x);printf("%d", result);return 0;}8-1 考察点计算思维C语言实现->模块化编程能力->函数设计题型C语言-自主编程难度系数 4题目请完善右边的fun函数,函数的具体要求如下:输入:任意一个字母处理:如果是大写字母返回1;如果是小写字母返回0.输出:返回判断结果注意:请勿修改任何已有代码!提示:A的ASCII码是65,a的ASCII码是97默认代码#include <stdio.h>//请在此处注释语句下方完成fun函数的声明与实现int fun(char letter);int fun(char letter){if(letter>=65 && letter<=90)return 1;elsereturn 0;}int main( ){char letter = 'A';int result = fun(letter);printf("%d%\n", result);char letter2 = 'b';int result2 = fun(letter2);printf("%d",result2);return 0;}9-1 考察点计算思维C语言实现->模块化编程能力->函数设计题型C语言-自主编程难度系数 4题目请完善判断最小数的GetMin函数,函数的具体要求如下:输入:三个整型数a,b,c处理:通过定义的GetMin函数判断最小的数,并返回最小的数输出:返回判断结果注意:请勿修改任何已有代码!输出语句结束不用换行!默认代码#include <stdio.h>//请在此处注释语句下方完成GetMin函数的声明与实现int GetMin(int a, int b, int c);int GetMin(int a, int b, int c){int min;if(a<b)min=a;elsemin=b;if(c<min)min=c;return min;}int main( ) {int a = 18, b = 8, c = 28;int min = GetMin(a, b, c);printf("三个数最小的是%d", min);return 0;}10-1 考察点计算思维C语言实现->模块化编程能力->函数设计题型C语言-自主编程难度系数 4题目请在右边完善UpperLetter函数,函数的具体要求如下:输入:一个小写字母处理:将小写字母转换成大写字母,返回结果输出样式:大写字母注意:请勿修改任何已有代码!提示:A的ASCII码是65,a的ASCII码是97默认代码#include <stdio.h>/*请在此处注释语句下方完成UpperLetter函数的声明与实现,*/char UpperLetter(char letter);char UpperLetter(char letter){return letter-32;}int main( ){char letter = 'g';char r = UpperLetter(letter);printf("%c", r);return 0;}11-1 考察点计算思维C语言实现->模块化编程能力->函数设计题型C语言-自主编程难度系数 4题目请在右边完善fun函数,函数的具体要求如下:输入:一个浮点型数字处理:输出该数绝对值,保留小数点后三位有效数位输出:返回绝对值注意:请勿修改任何已有代码!默认代码#include <stdio.h>/*请在此处注释语句下方完成fun函数的声明与实现,*/float fun(float a);float fun(float a){if(a>=0)return a;elsereturn -a;}int main( ){float a = -30;float b = fun(a);printf("绝对值是%.3f",b);return 0;}12-1 考察点计算思维C语言实现->模块化编程能力->函数设计题型C语言-自主编程难度系数 4题目请完善fun函数,函数的具体要求如下:输入你和你朋友的年龄,返回两者的年龄差,注意务必年龄大者减去年龄小者。

大学C语言期末考试题库试题及答案汇总

大学C语言期末考试题库试题及答案汇总

1.下列定义变量的语句中错误的是______。

A、int _intB、double int_C、char ForD、float US$答案:D知识点:常量、变量和标识符2.以下不合法的用户标识符是______。

A、j2_KEYB、DoubleC、4dD、_8_答案:C知识点:常量、变量和标识符3.以下4组用户定义标识符中,全部合法的一组是______。

A、_main enclude sinB、If -max turboC、txt REAL 3COMD、int k_2 _001答案:A知识点:常量、变量和标识符4.以下定义语句中正确的是______。

A、char a='A' b='B';B、float a=b=10.0;(正解a=10.0 b=10.0)C、int a=10,*b=&a;D、float *a,b=&a;答案:C知识点:常量、变量和标识符5.以下不能定义为用户标识符的是______。

A、scanfB、VoidC、_3com_D、int答案:D知识点:常量、变量和标识符6.以下有4组用户标识符,其中合法的一组是______。

A、For -sub CaseB、4d DO SizeC、f2_G3 IF abcD、WORD Void define答案:C知识点:常量、变量和标识符7.C语言中最简单的数据类型包括______。

A、整型、实型、逻辑型B、整型、实型、字符型C、整型、字符型、逻辑型D、整型、实型、逻辑型、字符型答案:B知识点:常量、变量和标识符8.下列选项中,合法的C语言关键字是______。

A、VARB、cherC、integerD、default答案:D知识点:常量、变量和标识符9.以下不能定义为用户标识符的是______。

A、MainB、_0C、_intD、sizeof答案:D知识点:常量、变量和标识符10.下列叙述中正确的是______。

大一c语言期末试题及答案

大一c语言期末试题及答案

大一c语言期末试题及答案一、选择题(每题2分,共20分)1. C语言中,用于定义变量的关键字是()。

A. varB. defineC. intD. type答案:C2. 下列哪个选项是C语言中的合法标识符?()A. 2variableB. variable2C. variable!D. variable$答案:B3. 在C语言中,哪个运算符用于比较两个值是否不相等?()A. ==B. !=C. =D. <=答案:B4. 下列哪个选项是正确的C语言数组声明?()A. int array[10];B. int array[];C. int [10] array;D. int array=10;答案:A5. C语言中,用于循环结构的关键字是()。

A. loopB. repeatC. whileD. do答案:C6. 下列哪个选项是正确的C语言函数声明?()A. int function(int a, int b);B. int function(int, int);C. int function(a, b);D. int function(int a, b);答案:A7. 在C语言中,用于定义一个指针的关键字是()。

A. pointB. ptrC. pointerD. *答案:D8. 下列哪个选项是正确的C语言字符串声明?()A. char str[];B. char str[10] = "Hello";C. char str = "Hello";D. char str[10] = {'H', 'e', 'l', 'l', 'o'};答案:B9. 在C语言中,用于定义一个结构体的关键字是()。

A. structB. typeC. classD. record答案:A10. 下列哪个选项是正确的C语言文件操作函数?()A. fopenB. openfileC. createfileD. fileopen答案:A二、填空题(每题2分,共20分)1. C语言中,用于定义一个整型变量的关键字是______。

c语言期末考试题库及详解答案

c语言期末考试题库及详解答案

c语言期末考试题库及详解答案C语言作为计算机编程的基础语言,其期末考试通常包含对基础语法、数据结构、算法设计等方面的考察。

以下是一份C语言期末考试题库及详解答案,供学生复习参考。

1. 编写一个C程序,实现两个整数的加法运算,并输出结果。

```c#include <stdio.h>int main() {int a, b, sum;printf("请输入两个整数:");scanf("%d %d", &a, &b);sum = a + b;printf("两个整数相加的结果是:%d\n", sum);return 0;}```2. 编写一个C程序,实现字符串的反转输出。

```c#include <stdio.h>#include <string.h>void reverseString(char str[]) {int length = strlen(str);for (int i = 0; i < length / 2; i++) {char temp = str[i];str[i] = str[length - i - 1];str[length - i - 1] = temp;}}int main() {char str[100];printf("请输入一个字符串:");scanf("%s", str);reverseString(str);printf("反转后的字符串是:%s\n", str);return 0;}```3. 编写一个C程序,实现查找数组中的最大值,并输出其索引。

```c#include <stdio.h>int main() {int arr[] = {5, 10, 15, 20, 25};int maxIndex = 0;for (int i = 1; i < 5; i++) {if (arr[i] > arr[maxIndex]) {maxIndex = i;}}printf("数组中的最大值是:%d,其索引为:%d\n",arr[maxIndex], maxIndex);return 0;}```4. 编写一个C程序,实现冒泡排序算法。

大学c语言期末考试题及答案

大学c语言期末考试题及答案

大学c语言期末考试题及答案一、选择题(每题2分,共20分)1. C语言中,以下哪个关键字用于声明一个函数?A. intB. returnC. voidD. function答案:C2. 在C语言中,以下哪个不是合法的变量名?A. _myVarB. 2ndVarC. my-variableD. myVar答案:B3. 下列哪个选项是C语言中的逻辑运算符?A. &&B. ||C. !D. 以上都是答案:D4. C语言中,以下哪个选项用于循环结构?A. ifB. whileC. switchD. for答案:D5. 在C语言中,以下哪个函数用于计算两个整数的和?A. max()B. min()C. sum()D. pow()答案:C6. C语言中,以下哪个选项用于数组的声明?A. int array[10];B. int *array;C. int array[];D. 以上都是答案:D7. 下列哪个选项是C语言中的字符串字面量?A. "Hello World"B. 'Hello World'C. "Hello" "World"D. 以上都是答案:A8. 在C语言中,以下哪个选项用于定义指针?A. int *p;B. int p[];C. int p;D. 以上都是答案:A9. C语言中,以下哪个函数用于输入?A. scanf()B. printf()C. getchar()D. 以上都是答案:A10. 在C语言中,以下哪个选项用于定义结构体?A. structB. unionC. enumD. typedef答案:A二、填空题(每题2分,共20分)1. C语言中,用于定义一个整型变量的关键字是________。

答案:int2. 在C语言中,________运算符用于比较两个值是否相等。

答案:==3. C语言中,________关键字用于声明一个全局变量。

大一c语言期末考试试题及答案

大一c语言期末考试试题及答案

大一c语言期末考试试题及答案一、选择题(每题2分,共20分)1. 下列哪个选项是C语言的标准输入输出库函数?A. math.hB. stdio.hC. string.hD. time.h答案:B2. C语言中,以下哪个关键字用于声明变量?A. includeB. defineC. intD. void答案:C3. 在C语言中,以下哪个选项不是合法的标识符?A. _nameB. 2variableC. name$D. name答案:B4. 下列哪个选项不是C语言中的控制语句?A. ifB. switchC. forD. case答案:D5. C语言中,以下哪个选项是正确的二维数组声明?A. int array[3][2];B. int array[][];C. int array[3][];D. int array[2,3];答案:A6. 在C语言中,以下哪个选项是正确的字符串字面量?A. "Hello World"B. 'Hello World'C. "Hello\nWorld"D. 'Hello\nWorld'答案:A7. C语言中,以下哪个选项是正确的函数声明?A. int add(int a, int b);B. int add(a, b);C. int add(int a, b);D. int add(a, b) int a, b;答案:A8. 在C语言中,以下哪个选项是正确的结构体声明?A. struct Student {int id;char name[50];};B. struct {int id;char name[50];} Student;C. struct Student {int id;char name[];};D. struct Student {int id;char name[50];} student;答案:A9. C语言中,以下哪个选项是正确的指针声明?A. int *p;B. int *p[];C. int (*p)[];D. int *p[10];答案:A10. 在C语言中,以下哪个选项是正确的宏定义?A. #define PI 3.14159B. #define PI = 3.14159C. #define PI 3.14159D. #define PI 3.14159答案:A二、填空题(每题2分,共20分)1. C语言中,用于定义一个整型变量并赋值为10的语句是 int a = 10; 。

大学C语言期末考试题库试题及答案汇总-填空 复习题

大学C语言期末考试题库试题及答案汇总-填空 复习题

大学C语言期末考试题库试题及答案汇总-填空复习题1.以下程序的输出结果是______。

main(){ int a=0;a+=(a=8);printf("%d\n",a);}答案:16知识点:赋值表达式2.若有定义:int a=10,b=9,c=8;接着顺序执行下列语句后,变量b中的值是______。

c=(a-=(b-5));c=(a % 11)+(b=3);答案:3知识点:赋值表达式3.以下程序运行后的了输出结果是______。

main(){ int a=1,b=2,c=3;if(c=a) printf("%d\n",c);else printf("%d\n",b);}答案:1知识点:赋值表达式4.若有语句int i=-19, j=i%4;printf("%d\n",j);则输出结果是______。

答案:-3知识点:算术表达式7.设y 是int型变量,请写出判断y为奇数的关系表达式______。

答案:y%2知识点:算术表达式12.下面程序的输出是______。

main(){ int x=2;while(x--);printf("%d\n", x);}答案:-1知识点:自加、自减运算符和逗号运算符19.以下程序的输出结果是______。

void fun(){ static int a=0;a+=2; printf("%d",a);}main(){ int cc;for(cc=1;cc<4;cc++) fun();printf("\n")}答案:246知识点:函数的调用21.若有以下程序int f(int x,int y){ return(y-x)*x; }main(){ int a=3,b=4,c=5,d;d=f(f(3,4),f(3,5));printf("%d\n",d);}执行后输出结果是______。

大一上学期C语言期末复习总结和模拟试题带答案

大一上学期C语言期末复习总结和模拟试题带答案

大一上学期C语言期末复习总结和模拟试题带答案易错点C 语言中易犯的错误对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误?看着有错的程序,不知该如何改起,一些C编程时常犯的错误,写给各位学员以供参考?****************************************************************************************1.书写标识符时,忽略了大小写字母的区别.mai n(){int a=5;prin tf("%d",A);}编译程序把a和A认为是两个不同的变量名,而显示出错信息.C认为大写字母和小写字母是两个不同的字符?习惯上,符号常量名用大写,变量名用小写表示,以增加可读性.****************************************************************************************2.忽略了变量的类型,进行了不合法的运算.mai n(){float a,b;prin tf("%d",a%b);}%是求余运算,得到a/b的整余数.整型变量a和b可以进行求余运算,而实型变量则不允许进行"求余"运算?**************************************************************** ************************ 3.将字符常量与字符串常量混淆?char c;c="a";在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列.C规定以"\"作字符串结束标志,它是由系统自动加上的,所以字符串"a"实际上包含两个字符:'a'和'\',而把它赋给一个字符变量是不行的?**************************************************************** ************************ 4.忽略了"="与"=="的区别.在许多高级语言中,用"="符号作为关系运算符"等于".如在BASIC程序中可以写if (a=3) then …但C语言中,"="是赋值运算符,"=="是关系运算符?如:if (a==3) a=b;前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a.由于习惯问题,初学者往往会犯这样的错误?**************************************************************** ************************5.忘记加分号.分号是C语句中不可缺少的一部分,语句末尾必须有分号.a=1b=2编译时,编译程序在"a=1"后面没发现分号,就把下一行"b=2"也作为上一行语句的一部分,这就会出现语法错误.改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号.{z=x+y;t=z/100;prin tf("%f",t);}对于复合语句来说,最后一个语句中最后的分号不能忽略不写**************************************************************** ************************ 6.多加分号.对于一个复合语句,如:t=z/100;prin tf("%f",t);};复合语句的花括号后不应再加分号否则将会画蛇添足.又如:if (a%3==0);I++;本是如果3整除a,则I加1.但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1.再如:for (I=0;I<5;I++);{sea nf("%d", &x);prin tf("%d",x);}本意是先后输入5个数,每输入一个数后再将它输出.由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它.**************************************************************** ************************7.输入变量时忘记加地址运算符"&".int a,b;sea nf("%d%d",a,b);{ z=x+y;这是不合法的.Seanf函数的作用是b的值存进去."&a"指a在内存中的地址.**************************************************************** ************************8.输入数据的方式与要求不符?①scan f("%d%d",&a,&b);输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:3,4输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab.②scan f("%d,%d",&a,&b);C规定:如果在"格式控制"字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符?下面输入是合法的:3,4此时不用逗号而用空格或其它字符是不对的.3 4 3:4又如:**************************************************************** ************************9.输入字符的格式与要求不一致?在用"%c"格式输入字符时,"空格字符"和"转义字符"都作为有效字符输入.sca nf("%c%c%c",&c1,&c2,&c3);如输入a b c字符"a"送给c1,字符""送给c2,字符"b"送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔?**************************************************************** ************************ 10.输入输出的数据类型与所用格式说明符不一致.例如,a已定义为整型,b定义为实型a=3;b=4.5;prin tf("%f%d\n",a,b);编译时不给出出错信息,但运行结果将与原意不符?这种错误尤其需要注意?**************************************************************** ************************按照a,b在内存的地址将a, 输入应如以下形式a=3,b=411.输入数据时,企图规定精度?规定精度?**************************************************************** ************************12.switch 语句中漏写break语句.例如:根据考试成绩的等级打印出百分制数段?switch(grade){ case 'A':pri ntf("85~100\n");case 'B':pri ntf("70~84\n");case C:pri ntf("60~69\n");case 'D':pri ntf("<60\n");default:pri ntf("error\n");由于漏写了break语句,case只起标号的作用,而不起判断作用?因此,当grade值为A时,printf 函数在执行完第一个语句后接着执行第二,三,四,五个printf函数语句. 正确写法应在每个分支后再加上"break;".例如case C:pri ntf("60~69\n");break;**************************************************************** ************************ 13.忽视了while和do-while 语句在细节上的区别.(1)mai n(){int a=0,I;sca nf("%d",&I); while(l<=10){a=a+I;I++;}prin tf("%d",a); }(2)mai n(){int a=0,I;sca nf("%d",&l); do{a=a+I;I++;}while(I<=10); prin tf("%d",a); }sca nf("a=%d,b=%d",&a,&b);sca nf("%7.2f",&a);这样做是不合法的,输入数据时不能可以看到,当输入I的值小于或等于10 时,二者得到的结果相同?而当I>10时,二者结果就不同了?因为while循环是先判断后执行,而do-while循环是先执行后判断.对于大于10的数while循环一次也不执行循环体,而do-while语句则要执行一次循环体.**************************************************************** ************************14.定义数组时误用变量int n;sea nf("%d",&n);int a[n];数组名后用方括号括起来的是常量表达式,可以包括常量和符号常量.即C不允许对数组的大小作动态定义.**************************************************************** ************************ 15.在定义数组时,将定义的"元素个数"误认为是可使的最大下标值?mai n(){static int a[10]={1,2,3,4,5,6,7,8,9,10};prin tf("%d",a[10]);}C语言规定:定义时用a[10],表示a数组有10个元素.其下标值由0 开始,所以数组元素a[10]是不存在的.****************************************************************************************16.初始化数组时,未使用静态存储.int a[3]={0,1,2};这样初始化数组是不对的.C语言规定只有静态存储(static)数组和外部存储(exterm)数组才能初始化.应改为:static int a[3]={0,1,2};**************************************************************** ************************ 17.在不应加地址运算符&的位置加了地址运算符.sca nf("%s",&str);C语言编译系统对数组名的处理是:数组名代表该数组的起始地址,且scanf函数中的输入项是字符数组名,不必要再加地址符&应改为:scanf("%s",str);****************************************************************************************18.同时定义了形参和函数中的局部变量.int max(x,y) int x,y, z;{z=x>y?x:y;return(z);}。

大学C语言期末考试题及答案

大学C语言期末考试题及答案

大学C语言期末考试题及答案东北大学C语言期末考试题及答案(1)1、构成C语言的基本单位是___B____。

过程函数语句命令2、设x为整型变量,不能正确表达数学关系:55 switch(x) { case 0:b++; case 1:a++; case 2:a++;b++; }printf("a=%d,b=%d",a,b); } a=1,b=1a=2,b=1a=1,b=0a=2,b=2 7、执行下面程序段的结果是__D___。

int x=0; do { printf〔“%2d〞,x--〕; }while〔x〕;打印出321打印出23不打印任何结果陷入死循环8、设x=10,y=5;z=15,执行下面一段程序后z的结果是__C___。

If〔x>y〕 if 〔y>z〕x=y; else z=y;76549、如果一个函数被说明为static,那么__B___。

该函数只能被main函数调用该函数能被当前文件的函数调用,但不能被其他文件的函数调用该函数不能被当前文件的函数调用,可以被其他文件的函数调用任何文件的函数都可以调用该函数10、下面关于局部变量的描述中,错误的是__D___。

函数的局部变量的有效范围只能在本函数函数的形式参数也是局部变量局部变量的名称不能和函数同名称不同的函数中不能定义相同名称的局部变量11、以下初始化字符数组的语句中,错误的是__A___。

char str[5]="hello";char str[]={'h','e','l','l','o','\0'};char str[5]={"hi"};char str[100]="";12、引用数组元素时,数组下标可以是__D___。

整型常量整型变量整型表达式以上均可13、已知:char str[10],*p=str; 下面的语句中正确的是__B___。

大学C语言期末考试试题库试题和答案解析汇总

大学C语言期末考试试题库试题和答案解析汇总

1.下列定义变量的语句中错误的是__D____。

A、int _intB、double int _C、char ForD、float US$知识点:常量、变量和标识符2.以下不合法的用户标识符是__C____。

A、j2_KEYB、DoubleC、4dD、_8_知识点:常量、变量和标识符3.以下4组用户定义标识符中,全部合法的一组是__A____。

A、_main enclude sinB、If -max turboC、txt REAL 3COMD、int k_2 _001知识点:常量、变量和标识符4.以下定义语句中正确的是__C____。

A、char a='A' b='B';B、float a=b=10.0;(正解a=10.0 b=10.0)C、int a=10,*b=&a;D、float *a,b=&a;知识点:常量、变量和标识符5.以下不能定义为用户标识符的是__D____。

A、scanfB、VoidC、_3com_D、int知识点:常量、变量和标识符6.以下有4组用户标识符,其中合法的一组是___C___。

A、For -sub CaseB、4d DO SizeC、f2_G3 IF abcD、WORD Void define 知识点:常量、变量和标识符7.C语言中最简单的数据类型包括_B_____。

A、整型、实型、逻辑型B、整型、实型、字符型C、整型、字符型、逻辑型D、整型、实型、逻辑型、字符型知识点:常量、变量和标识符8.下列选项中,合法的C语言关键字是__D____。

A、VARB、cherC、integerD、default知识点:常量、变量和标识符9.以下不能定义为用户标识符的是__D____。

A、MainB、_0C、_intD、sizeof知识点:常量、变量和标识符10.下列叙述中正确的是_D_____。

A、C语言中既有逻辑类型也有集合类型B、C语言中没有逻辑类型但有集合类型C、C语言中有逻辑类型但没有集合类型D、C语言中既没有逻辑类型也没有集合类型知识点:常量、变量和标识符11.当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是____C__。

大一c期末考试题及答案

大一c期末考试题及答案

大一c期末考试题及答案一、选择题(每题2分,共20分)1. 在C语言中,以下哪个关键字用于声明函数?A. intB. voidC. returnD. function答案:A2. 以下哪个选项是C语言中的合法整型常量?A. 0x12B. 0.123C. 0b1011D. 0123答案:A3. C语言中,哪个运算符用于计算两个数的乘积?A. +B. -C. *D. /答案:C4. 下列哪个选项是C语言中的逻辑运算符?A. &&B. ||C. !D. 以上都是答案:D5. 在C语言中,以下哪个选项是正确的字符串声明?A. char str[] = "Hello";B. int str[] = "Hello";C. float str[] = "Hello";D. double str[] = "Hello";答案:A6. C语言中,哪个函数用于计算数组的长度?A. strlen()B. sizeof()C. length()D. size()答案:B7. 在C语言中,以下哪个选项是正确的二维数组声明?A. int arr[2][3];B. int arr[][];C. int arr[2][];D. int arr[3,2];答案:A8. C语言中,哪个关键字用于跳过当前循环的剩余部分,直接进入下一次循环迭代?A. breakB. continueC. returnD. exit答案:B9. 在C语言中,以下哪个选项是正确的结构体声明?A. struct Student { int age; char name[50]; };B. struct { int age; char name[50]; };C. struct Student { int age; string name; };D. struct { int age; string name; };答案:A10. C语言中,哪个函数用于将字符串复制到另一个字符串?A. strcpy()B. strncpy()C. strcat()D. strncat()答案:A二、填空题(每题3分,共15分)1. 在C语言中,使用________关键字可以定义一个宏。

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

易错点C 语言中易犯的错误对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误•看着有错的程序,不知该如何改起,一些C编程时常犯的错误,写给各位学员以供参考•****************************************************************************************1.书写标识符时,忽略了大小写字母的区别.mai n(){int a=5;prin tf("%d",A);}编译程序把a和A认为是两个不同的变量名,而显示出错信息.C认为大写字母和小写字母是两个不同的字符•习惯上,符号常量名用大写,变量名用小写表示,以增加可读性.****************************************************************************************2.忽略了变量的类型,进行了不合法的运算.mai n(){float a,b;prin tf("%d",a%b);}%是求余运算,得到a/b的整余数.整型变量a和b可以进行求余运算,而实型变量则不允许进行"求余"运算•**************************************************************** ************************ 3.将字符常量与字符串常量混淆•char c;c="a";在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列.C规定以"\"作字符串结束标志,它是由系统自动加上的,所以字符串"a"实际上包含两个字符:'a'和'\',而把它赋给一个字符变量是不行的•**************************************************************** ************************ 4.忽略了"="与"=="的区别.在许多高级语言中,用"="符号作为关系运算符"等于".如在BASIC程序中可以写if (a=3) then …但C语言中,"="是赋值运算符,"=="是关系运算符•如:if (a==3) a=b;前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a.由于习惯问题,初学者往往会犯这样的错误•**************************************************************** ************************5.忘记加分号.分号是C语句中不可缺少的一部分,语句末尾必须有分号.a=1b=2编译时,编译程序在"a=1"后面没发现分号,就把下一行"b=2"也作为上一行语句的一部分,这就会出现语法错误.改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号.{z=x+y;t=z/100;prin tf("%f",t);}对于复合语句来说,最后一个语句中最后的分号不能忽略不写**************************************************************** ************************6.多加分号.对于一个复合语句,如:t=z/100;prin tf("%f",t);};复合语句的花括号后不应再加分号否则将会画蛇添足.又如:if (a%3==0);I++;本是如果3整除a,则I加1.但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1.再如:for (I=0;I<5;I++);{sea nf("%d", &x);prin tf("%d",x);}本意是先后输入5个数,每输入一个数后再将它输出.由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它.******************************** ******************************** ************************7.输入变量时忘记加地址运算符"&".int a,b;sea nf("%d%d",a,b);{ z=x+y;这是不合法的.Seanf函数的作用是b的值存进去."&a"指a在内存中的地址.**************************************************************** ************************8.输入数据的方式与要求不符•①scan f("%d%d",&a,&b);输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:3,4输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab.②scan f("%d,%d",&a,&b);C规定:如果在"格式控制"字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符•下面输入是合法的:3,4此时不用逗号而用空格或其它字符是不对的.3 4 3:4又如:******************************** ******************************** ************************9.输入字符的格式与要求不一致•在用"%c"格式输入字符时,"空格字符"和"转义字符"都作为有效字符输入.sca nf("%c%c%c",&c1,&c2,&c3);如输入a b c字符"a"送给c1,字符""送给c2,字符"b"送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔•**************************************************************** ************************ 10.输入输出的数据类型与所用格式说明符不一致.例如,a已定义为整型,b定义为实型a=3;b=4.5;prin tf("%f%d\n",a,b);编译时不给出出错信息,但运行结果将与原意不符•这种错误尤其需要注意•**************************************************************** ************************按照a,b在内存的地址将a, 输入应如以下形式a=3,b=411.输入数据时,企图规定精度•规定精度•**************************************************************** ************************ 12.switch 语句中漏写break语句.例如:根据考试成绩的等级打印出百分制数段•switch(grade){ case 'A':pri ntf("85~100\n");case 'B':pri ntf("70~84\n");case C:pri ntf("60~69\n");case 'D':pri ntf("<60\n");default:pri ntf("error\n");由于漏写了break语句,case只起标号的作用,而不起判断作用•因此,当grade值为A时,printf 函数在执行完第一个语句后接着执行第二,三,四,五个printf函数语句. 正确写法应在每个分支后再加上"break;".例如case C:pri ntf("60~69\n");break;**************************************************************** ************************ 13.忽视了while和do-while 语句在细节上的区别.(1)mai n(){int a=0,I;sca nf("%d",&I); while(l<=10){a=a+I;I++;}prin tf("%d",a); }(2)mai n(){int a=0,I;sca nf("%d",&l); do{a=a+I;I++;}while(I<=10); prin tf("%d",a); }sca nf("a=%d,b=%d",&a,&b);sca nf("%7.2f",&a);这样做是不合法的,输入数据时不能可以看到,当输入I的值小于或等于10 时,二者得到的结果相同•而当I>10时,二者结果就不同了•因为while循环是先判断后执行,而do-while循环是先执行后判断.对于大于10的数while循环一次也不执行循环体,而do-while语句则要执行一次循环体.******************************** ******************************** ************************14.定义数组时误用变量int n;sea nf("%d",&n);int a[n];数组名后用方括号括起来的是常量表达式,可以包括常量和符号常量.即C不允许对数组的大小作动态定义.**************************************************************** ************************ 15.在定义数组时,将定义的"元素个数"误认为是可使的最大下标值•mai n(){static int a[10]={1,2,3,4,5,6,7,8,9,10};prin tf("%d",a[10]);}C语言规定:定义时用a[10],表示a数组有10个元素.其下标值由0 开始,所以数组元素a[10]是不存在的.****************************************************************************************16.初始化数组时,未使用静态存储.int a[3]={0,1,2};这样初始化数组是不对的.C语言规定只有静态存储(static)数组和外部存储(exterm)数组才能初始化.应改为:static int a[3]={0,1,2};**************************************************************** ************************ 17.在不应加地址运算符&的位置加了地址运算符.sca nf("%s",&str);C语言编译系统对数组名的处理是:数组名代表该数组的起始地址,且scanf函数中的输入项是字符数组名,不必要再加地址符&应改为:scanf("%s",str);****************************************************************************************18.同时定义了形参和函数中的局部变量.int max(x,y) int x,y, z;{z=x>y?x:y;return(z);}形参应该在函数体外定义,而局部变量应该在函数体内定义.应改为:int max(x,y)int x,y;{int 乙z=x>y?x:y;return(z);}试题一一、单项选择题(共30分,每题1 分)C1.下列不正确的转义字符是A.\\‘ C.074 D.\02.不是C语言提供的合法关键字是A.switchB.cherC.caseD.default3.正确的标识符是()A. ?a B.a=2 C.a.3 D.a_34.下列字符中属于键盘符号的是 B.\n C.\t D.\b.下列数据中属于“字符串常量”的 A.ABC B. “ABC C.‘ABC D. ‘A' 6.char型常量在内存中存放的是A.ASCII 码B.BCD 码C. 内码值D.十进制代码值7.设a为5, 执行下列语句后,b 的值不为2的是()A.b=a/2B.b=6-(——a) C.b=a%2 D.b=a>3 ? 2: 28.在以下一组运算符中,优先级最高的运算符是()A.<=B.=C.%D.&&9.设整型变量i的值为3,则计算表达式i i后表达式的值是()A.0B.1C. 2D.表达式出错10.设整型变量a,b,c均为2,表达式a+++b+++c++勺结果是()A.6B.9C.8D.表达式出错11.若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是()A.1B.2C.2.0D.2.512.设a=1, b=2, c=3, d=4,则表达式:a<b? a:c<d? a: d 的结果是( )A.4B.3C.2D.113.设a为整型变量,不能正确表达数学关系:10<a<15的C语言表达式是()A.10<a<15B.a==11 || a= =12 || a= =13 || a= =14C.a>10&&a<15D. !(a<=10)&& (a>=15)14.若有以下定义:char a、int b、float c 、double d,则表达式a*b+d-c值的类型为()A.floatB.i ntC.charD.double15.表达式“ 10! =9”的值是( )A.trueB.非零值 C.0 D.116.循环语句for (x=0, y=0;(y! =123) || (x<4); x++);的循环执行()A.无限次B.不确定次 C.4次 D.3次17.在C语言中,下列说法中正确的是( )A.不能使用“ do while ”的循环B.“do while ”的循环必须使用break语句退出循环C.“do while ”的循环中,当条件为非0时将结束循环D.“do while ”的循环中,当条件为0时将结束循环。

相关文档
最新文档