我的c语言错题
- 格式:doc
- 大小:100.50 KB
- 文档页数:9
C语言中有一些常见的易错题,例如:
-数组越界:数组的索引是从0开始的,一个长度为`n`的数组的索引范围应该是0到`n-1`。
如果尝试访问超出这个范围的索引,就会导致未定义的行为。
-忘记初始化变量:如果一个变量在使用之前没有被初始化,它的值将是未定义的。
这可能会导致难以预测的结果。
-忘记声明变量:在C语言中,变量必须在使用之前声明。
如果在函数内部使用了一个变量,但没有声明,就会导致编译错误。
-错误的逻辑比较:逻辑比较运算符是`&&`(和)、`||`(或)和`!`(非)。
如果使用错误的比较运算符,如`<`或`>`,就会导致错误的结果。
-忘记释放内存:通过`malloc`、`calloc`或`realloc`等函数分配的内存必须在使用完毕后通过`free`函数释放,否则可能会导致内存泄漏。
这些是C语言中常见的一些易错题类型,希望对你有所帮助。
●字符常量:用单引号‘’括起来的一个字符。
包括普通字符常量和转义字符。
普通字符常量:如‘a’、‘A’、‘1’。
转义字符:由一对单引号引起来的以\开头的若干字符的组合。
如‘\n’表示回车换行、‘\\’表示反斜线符、‘\’’表示单引号符、‘\”’表示双引号、‘\ddd’表示八进制数、‘\xhh’表示十六进制数。
/:当除号左右两边都是整数的时候,商也要是整数,如果不是整数则舍弃小数部分。
当参与运算量有一个为实型,则商为double型。
规则:把<<左边的运算数的各二进位全部左移若干位,高位丢弃,低位补0。
左移一位相当于该数乘以2。
左移n位相当于该数乘以2n。
●右移运算>>把>>左边的运算数的各二进位全部右移若干位。
高位补0,低位丢弃。
右移一位相当于该数除以2。
右移n位相当于除以2n。
当定义的变量类型和scanf中“格式符”类型不一致时(这里只限定在字符型和整型两种类型,其他数据类型不可以。
)整型和字符型之间通过ASCALL可以相互转化。
●getchar经常作为while循环条件,判断输入哪一个字符时,循环结束。
例如,输入字符串,直到输入‘0’,程序结束,则可写成while( getchar()!='0')●内嵌结构中,else总是与前面最近的且未曾配对的if语句配对,组成一对if-else语句。
4.知识点:switch语句●switch语句的圆括号中的表达式的值必须是整型或字符型,不能为实型。
●case后的表达式可以是求得整型和字符型的常量表达式,但不能含有变量。
●default的位置对程序的执行没有影响。
●循环体部分可以只有一条空语句,不做任何操作。
3.知识点:一维数组的初始化●顺序列出数组元素的全部初值,例如int a[5]={1,2,3,4,5};●只给数组的前面一部分元素设定初值,未赋初值的元素自动取0值。
例如,int a[5]={1,2};●对全部数组元素赋初值时,可以不指定数组元素的个数。
易错点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时将结束循环。
1:设有定义:char p[]={'1','2','3'},*q=p;,以下不能计算出一个char型数据所占字节数的表达式是()。
A) sizeof(p)B) sizeof(char)C) sizeof(*q)D) sizeof(p[0])参考答案:A【解析】根据题目中的定义可以知道sizeof(p),计算的是数组p中所有元素所占用的字节数,而不是char型数据所占字节数。
2:面向对象方法中,继承是指()。
A) 一组对象所具有的相似性质B) 一个对象具有另一个对象的性质C) 各对象之间的共同性质D) 类之间共享属性和操作的机制参考答案:D【解析】继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为基础建立新类的定义技术。
广义的说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。
3:若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是A) x+1=yB) ++x,y=x--C) x=x+10=x+yD) double(x)/10参考答案:B【解析】A选项中不能将变量y赋给表达式,C选项中错误与A选项一样,D选项中强制类型转换表达式应写成(double)x/10。4:有以下程序#include <stdio.h>main(){ FILE *pf;char *s1="China", *s2="Beijing";pf=fopen("abc.dat","wb+");fwrite(s2,7,1,pf);rewind(pf); /*文件位置指针回到文件开头*/fwrite(s1,5,1,pf);fclose(pf);}以上程序执行后abc.dat文件的内容是A) ChinaB) ChinangC) ChinaBeijingD) BeijingChina参考答案:B【解析】本题考查文件操作函数,fwrite和rewind函数,题目中先是将s2字符串写入adc.dat中,然后将写指针回到文件开头,然后写入s1字符串,那么s1字符串就将前五个字符覆盖,所以最终结果为Chinang,选项B正确。
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,并使用了后置递增和前置递增操作符。
第1题【程序改错】功能:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。
例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:“EDCBAABCDE”。
------------------------------------------------------*/#include <conio.h>#include <stdio.h>#include <string.h>void fun (char *s, char *t){/**********FOUND**********/int i;sl = strlen(s);for (i=0; i<sl; i++)/**********FOUND**********/t[i] = s[sl-i];for (i=0; i<sl; i++)t[sl+i] = s[i];/**********FOUND**********/t[2*sl] = "0";}main(){char s[100], t[100];printf("\nPlease enter string s:"); scanf("%s", s);fun(s, t);printf("The result is: %s\n", t);}答案:1). int i,sl;2). t[i] = s[sl-i-1];3). t[2*sl] = '\0'; 或 t[2*sl] = 0;第2题【程序改错】功能:求出以下分数序列的前n项之和。
和值通过函数值返回main 函数。
2/1+3/2+5/3+8/5+13/8+21/13 ……例如:若n = 5,则应输出:8.391667。
------------------------------------------------------*/#include <conio.h>#include <stdio.h>/**********FOUND**********/fun ( int n ){int a, b, c, k; double s;s = 0.0; a = 2; b = 1;for ( k = 1; k <= n; k++ ){/**********FOUND**********/s = (double)a / b;c = a;a = a + b;b = c;}/**********FOUND**********/return c;}main( ){int n = 5;printf( "\nThe value of function is: %lf\n", fun ( n ) );}答案:1). double fun(int n)2). s = s + (double)a / b; 或 s += (double)a / b; 或 s += a /(double)b; 或s=s+a/(double)b;3). return s;第3题【程序改错】功能:读入一个整数m( 5≤m≤20 ),函数getarr调用函数rnd获得m个随机整数,函数sortpb将这m个随机整数从小到大排序。
c语言改错题题库及详解答案1. 题目:以下代码段中存在错误,请找出并改正。
```c#include <stdio.h>int main() {int a = 10;int b = 20;int c = a + b;printf("The sum is %d", c);return 0;}```答案:代码中缺少了字符串结束的空格。
应改为:```cprintf("The sum is %d ", c);```2. 题目:找出并改正以下代码段中的错误。
```c#include <stdio.h>int main() {int num = 100;if (num = 100)printf("Number is 100\n");return 0;}答案:代码中使用了赋值运算符 "=" 而不是比较运算符 "=="。
应改为:```cif (num == 100)```3. 题目:以下代码段中存在逻辑错误,请指出并改正。
```c#include <stdio.h>int main() {float a, b, c;scanf("%f %f", &a, &b);c = a / b;printf("The result is %f", c);return 0;}```答案:代码中没有检查除数 b 是否为 0,这会导致运行时错误。
应添加检查:```cif (b != 0) {c = a / b;printf("The result is %f", c);} else {printf("Error: Division by zero.\n");}```4. 题目:找出并改正以下代码段中的语法错误。
以下各个项中,可作为C语言中合法整数的是( )。
A.10110BB.0386C.0XffaD.x2a2错解:B 错认为是十进制整形数据,开头为0,后面无意义。
整形常量:十进制 +(-)0—9八进制 +(-)O 0—7十六进制 +(-)OX 0—f或OX 0—F在输出是不会输出前导符。
下列定义变量的语句中错误的是()A.int _int;B.double int_;C.char For;D.float US$;正解:D 变量格式:数据类型名(整型、实型、字符型)+变量名变量名即格式字符属于标识符(符号常量名、函数名、数组名、文件名)由有效字符序列组成:字母、数字、下划线,且第一个字符不能是数字,另外C语言中大小写字母不等效。
设有定义:int a; float b; ,执行scanf("%2d%f",&a,&b);语句时,若从键盘输入876 <空格>543.0<回车>,则a和b的值分别是()A.87 和 6.00000B.876 和 543.0C.87 和 543.0D.76 和 543.0正解:%2d决定了a只能接受两位数字,所以a的值为87%2d%f是连在一起的,所以按照默认规定,输入的数据也是连续的,中间没有空格,否则会将空格作为输入的结束符来看待。
已知字符 'a' 的ASCII码为 97,执行下列语句的输出是____。
printf ("%d, %c", 'b', 'b'+1 ) ;A.98,bB.语法不合法C.98,99D.98,c正解:C.字符数据在内存中以ASCII码存储,因此字符数据和整型数据可以通用,可相互赋值。
有以下程序:main(){int m=0256, n=256;printf("%o %o\n", m, n);}运行程序后的输出结果是( )A.0256 0400B.0256 256C.256 400D.400 400错解:A. %O输出结果无前导符符号,若输出需要带上前导符,则应该为%#O,同理十六进制输出前导符为%#OX。
c语言编程易错题一、引言C语言是一种广泛使用的编程语言,广泛应用于操作系统、嵌入式系统、游戏开发等领域。
由于其语法简单、灵活,C语言成为许多初学者和进阶开发者首选的编程语言。
然而,在C语言编程过程中,由于各种原因,许多开发者容易犯错。
本文档旨在总结一些常见的C语言编程易错题,以帮助开发者避免类似的错误。
二、易错题及解决方法1. 变量命名错误变量命名是编程中非常重要的一步,正确的命名可以帮助读者更好地理解代码,并减少混淆和错误。
常见的变量命名错误包括:a. 命名不符合规范:使用非法字符、变量名过短或过长、不合适的缩写等。
b. 命名不一致:在不同代码片段中使用相同名称的变量,但在不同上下文中具有不同的含义。
c. 拼写错误:变量名中的字母、数字或符号拼写错误。
解决方法:使用有意义的变量名,遵循命名规范,确保拼写正确。
2. 数组越界在C语言中,数组的索引是从0开始的,因此越界可能导致未定义的行为。
常见的越界错误包括:a. 访问不存在的数组元素。
b. 使用局部变量的索引访问数组。
c. 在多维数组中发生越界。
解决方法:在使用数组时,确保索引在有效范围内,并进行必要的检查。
3. 类型不匹配类型不匹配可能导致程序崩溃或产生不正确的结果。
常见的类型不匹配错误包括:a. 将字符串存储在整数变量中。
b. 将浮点数与整数进行运算。
c. 传递不匹配的数据类型给函数。
解决方法:在编程时,确保数据类型的匹配,并了解各种数据类型的特性和限制。
4. 函数参数错误函数参数错误可能导致程序行为异常或产生错误结果。
常见的函数参数错误包括:a. 传递不正确的参数数量或类型给函数。
b. 在函数内部使用未初始化的参数。
c. 在函数内部修改了不应被修改的参数。
解决方法:在使用函数时,确保传递正确的参数数量和类型,并在函数内部正确使用参数。
5. 指针使用不当指针是C语言中非常重要的概念,正确使用指针可以大大提高编程效率。
常见的指针使用错误包括:a. 未初始化指针就进行操作。
1. **问题:**```c#include <stdio.h>int main() {int x = 5;printf("%d", x++);return 0;}```**解析:**输出为5,因为后置递增操作符`x++`会先返回`x`的值,然后再将`x`的值加1。
2. **问题:**```c#include <stdio.h>int main() {int x = 5;printf("%d", ++x);return 0;}```**解析:**输出为6,因为前置递增操作符`++x`会先将`x`的值加1,然后返回加1后的值。
3. **问题:**```c#include <stdio.h>int main() {int x = 5;printf("%d", x++);printf("%d", x);return 0;}```**解析:**输出为56,因为第一个`printf`语句中的`x++`会先返回`x`的值(5),然后再将`x`的值加1,所以第一个`printf`输出5,第二个`printf`输出加1后的值6。
4. **问题:**```c#include <stdio.h>int main() {char ch;while (ch = getchar() != '\n') {putchar(ch);}return 0;}```**解析:**此循环将一直运行,即使输入了回车键。
原因是赋值操作符`=`的优先级低于不等于操作符`!=`,所以`getchar() != '\n'`会先执行,然后将结果赋给`ch`。
应该使用括号来明确优先级:`while ((ch = getchar()) != '\n')`。
5. **问题:**```c#include <stdio.h>int main() {char str[] = "Hello";printf("%c", str[5]);return 0;}```**解析:**会输出未定义的结果,因为数组`str`的有效索引是0到4,访问`str[5]`超出了数组的边界。
练习11、在下数据输出的判断中,正确的是()。
int x=0xaffbc;printf(“%x”,x);A.赋值非法B.输出值不确定C.输出值为affbD.输出值为ffbc2、下列语句中,最正确的赋值语句是()。
A.a=7+b+c=a+7;B.a=7+b++=a+7;C.a=7+b,b++,a+7;D.a=(7+b,c=a+7);3、下列语句中正确的是()。
A.int x=y=z=0;B.int z=(x+y)++;C.x+=3= =2;D.x%=2.5;4、表达式a=(a=6,a*3,a+3);运行后。
则a的值为()。
A. 39B. 36C. 6D. 95、C语言的程序一行写不下时,可以()。
A. 用逗号换行B.用分号换行C.在任意一空格处换行D.用回车符换行6、对于条件表达式(M)?(a++):(a--)来说,其中的表达式M等价于()。
A. M==0B. M==1C. M!=0D.M!=17、下列程序的输出结果是()。
main(){int x=0,y=5,z=3;while(z-->0&&++x<5)y=y-1;printf(“%d,%d,%d\n”,x,y,z);}A.3,2,0B.3,2,-1C.4,3,-1D.5,-2,5练习21、若x和y均为int型变量,则执行下面的循环后,y的值为()。
for(y=1,x=1;y<=5;y++){if(x>=10)break;if(x%2==1){x+=5;continue;}x-=3;}A.2B.4C.6 D82、在下列程序中,若要求a1,a2,c1,c2的值分别为10,20,A,B,正确的数据输入是()。
main(){int a1,a2;char c1,c2;scanf(“%d%d”,&a1,&a2);scanf(“%c%c”,&c1,&c2);}A.1020AB<CR>B.10 20<CR>AB<CR>C.10 20 AB<CR>D.10 20AB<CR>3、下列程序段中所表示的逻辑关系是()。
1、有以下程序:#include <stdio.h>#include <string.h>typedef struct {char name[9]; char sex; float score[2];} STU;void f(STU a){ STU b={"Zhao", 'm', 85.0, 90.0}; int i;strcpy(, );a.sex=b.sex;for (i=0; i<2; i++)a.score[i]=b.score[i];}main( ){STU c={"Qian",'f',95,92};f(c);printf("%s,%c,%d,%d",(int),c.sex,(int)c.score[0],c.score[1]);}程序运行后的输出结果是( A )。
A)Qian,f,95,92B)Qian,m,85,90C)Zhao,f,95,92D)Zhao,m,85,90本题考查的是结构体变量用作函数参数。
结构体变量用作函数参数时是传值调用,即在函数内部无论怎样修改形参结构体变量的内容,都不会影响到调用函数时传递给函数的实参结构体变量。
因此,本题的f()函数没有任何实际作用,它改变不了什么内容。
故本题的结果是定义结构体c时给出的初始值,应该选择A)。
2、有以下程序:#include <stdio.h>main( ){ FILE *fp; int a[10]={1,2,3}, i, n;fp = fopen("d1.dat", "w");for (i=0; i<3; i++)fprintf(fp, "%d", a[i]);fprintf(fp, "\n");fclose(fp);fp = fopen("d1.dat", "r");fscanf(fp, "%d", &n);fclose(fp);printf("%d\n",n);}程序的运行结果是( B )A)12300B)123C)1D)321本题主要考查的是文件的操作。
程序改错题汇总1、用"起泡法"对连续输入的十个字符排序后按从小到大的次序输出.2、分别统计字符串中大写字母和小写字母的个数。
3、求1到10的阶乘的和。
4、判断m是否为素数,若是返回1,否则返回0。
5、用选择法对数组中的n个元素按从小到大的顺序进行排序。
6、求一个3行4列矩阵的外框的元素值之和。
7、以下程序把两个数按由大到小的顺序输出来。
8、求1到20的阶乘的和。
9、判断字符ch是否与str所指串中的某个字符相同;若相同,什么也不做,若不同,则将其插在串的最后。
(指针)10、已知一个数列从第0项开始的前三项分别为0、0、1,以后的各项都是其相邻的前三项的和。
下列给定程序中,函数fun的功能是:计算并输出该数列的前n项的平方根之和sum,n的值通过形参传入。
11、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?12、编写函数fun计算下列分段函数的值:x*x+x x<0且x≠-3f(x)= x*x+5x 0≤x<10且x≠2及x≠3x*x+x-1 其它13、请编写函数fun,对长度为8个字符的字符串,将8个字符按降序排列。
14、实现交换两个整数的值。
15、读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里的“单词”是指由空格隔开的字符串)。
16、先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面。
17、计算数组元素中值为正数的平均值(不包括0)。
18、将s所指字符串中出现的、t1所指子串全部替换成t2所指子字符串,所形成的新串放在w 所指的数组中。
在此处,要求t1和t2所指字符串的长度相同。
19、将s所指字符串中的字母转换为按字母序列的后续字母(但Z转换为A, z转换为a),其它字符不变。
20、在键盘上输入一个3行3列矩阵的各个元素的值(值为整数),后输出矩阵第一行与第三行元素之积,并在fun()函数中输出。
C语言易错题集及易忘知识1.下面的程序运行后输出为【】。
main( ){ int a=-32769;ptintf("%8U\\n",a);}A) 32769 B) %8U C) 32767 D) -32767分析:格式字符必须小写,题中的"%8U"不会当作格式控制符,而是原样输出,变量a 将没有对应的格式说明,也不会送出。
本题正确答案为B。
2. ①八进制----> 十进制(31.5)(八)整数部分:3*8(1)+1*8(0)=25小数部分:5*8(-1)=0.625所以(31.5)(八)=(25.625)(十)②十六进制----> 十进制(19.A)(十六)整数部分:1*16(1)+9*16(0)=25小数部分:10*16(-1)=0.625所以(19.A)(十六)=(25.625)(十)3. 若执行下面程序段后的输出为:3,4,5,请填空。
int a,b=3,c=5;a=b<c?【3】:c++;printf("%d,%d,%d",a,b,c);分析:本题考查条件运算符和增量运算符的概念,题中b<C为真,应取B++的值给A,因B的值是先用后增1,所以A为3,题中的C++没有执行到,C保持原值。
4. 与其它高级语言相比,在C语言中赋值号并不是优先级最低的,C语言中优先级最低的运算符是逗号运算符。
5. C语言语句一行写不下时,可以【D 】。
A) 用逗号换行B) 用分号换行C) 用回车换行D) 在任意一空格处换行6. 表达式5%(-3)的值是2 ,表达式-5%(-3)的值是-2 。
分析:注意到%运算符只能两边为整数,且其作用是取余数,与正负无关,二%的优先级高于符号。
7. 在C语言中,格式输入库函数为scanf 格式输出库函数为printf 。
8. C语言中构造类型的数据有三种:数组、结构体和共用体,数组是同类型数据的集合,结构体是不同类型的数据集合。
C语言程序改错一、程序改错共 138 题(共计 1380 分)━━━━━━━━━━━━━━━━━━第 1 题(10.0 分)/*------------------------------------------------------ 功能:根据整型形参 m,计算如下公式的值:y=1+1/3+1/5+1/7+...+1/(2m-3)------------------------------------------------------*/ #include "stdio.h"double fun(int m){/**********FOUND**********/double y=1int i;/**********FOUND**********/for(i=3; i<m; i++)/**********FOUND**********/y+=1.0/(2i-3);return(y);}void main(void){int n;clrscr();printf("Enter n: ");scanf("%d", &n);printf("\nThe result is %1f\n", fun(n));getch();}答案:1). double y=1;2). for(i=3; i<=m; i++) 或 for(i=3; i<m+1;i++)3). y+=1.0/(2*i-3);第 2 题(10.0 分)/*------------------------------------------------------ 功能:用选择法对数组中的 n 个元素按从小到大的顺序进行排序。
------------------------------------------------------*/ #include <stdio.h>#define N 20void fun(int a[], int n){int i, j, t, p;for (j = 0 ;j < n-1 ;j++){/**********FOUND**********/p = jfor (i = j;i < n; i++)/**********FOUND**********/if(a[i] >a[p])/**********FOUND**********/p=j;t = a[p] ;a[p] = a[j] ;a[j] = t;}}main(){int a[N]={9,6,8,3,-1},i, m = 5; printf("排序前的数据:") ;for(i = 0;i < m;i++)printf("%d ",a[i]);printf("\n");fun(a,m);printf("排序后的数据:") ;for(i = 0;i < m;i++)printf("%d ",a[i]);printf("\n");getch();}答案:1). p = j;2). if(a[i] < a[p]) 或 if(a[p] > a[i])3). p = i;第 3 题(10.0 分)/*------------------------------------------------------ 功能:编写一个程序,从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,并删除重复的字符。
1.改错题(30题)第一题:#include<stdio.h>void main(){int a,b,c;/**/ float f; /**/ f为小数类型,具体下方f的输出用%f可看出为float 类型clrscr();printf("Please input a b :");scanf("%d%d",/**/&a,&b/**/);变量a,b必须取地址,除非数组名不取地址,因数组名就是地址f=/**/ (float)a/b; /**/ a,b均为整数,要获得结果的小数部分必须进行强制类型转换c=(int)((f-(int)f)*10);printf("\n%f %d\n",f,c);getch();}第二题:#include <stdio.h>void find(/**/int m /**/)参数类型必须指出,具体main函数中调用find函数的参数k为int 类型,所以对应的参数m也是int类型{int a1,a2;a1=m%10;求m的个位a2=m/10;求m的十位if(m%3==0 &&(/**/ a1==4 || a2==4 /**/))如果m能被3整除且个位或者十位是4 printf("%d\n",m);则输出m}void main(){ int k;for(k=10;k<=99;k++)k从10到99,一一尝试/**/ find( k ) /**/;调用函数find,函数的作用是寻找满足条件的数getch();}第三题:#include<stdio.h>void main(){/**/ int a,tag; /**/语法错误c语言的变量区分大小写,程序中用到小写tag,此处改为小写int num1=0,num2=0; num1和num2分别为大于个数和小于个数的计数器,程序开始归零clrscr();printf("please input numbers :");scanf("%d",/**/ &a /**/);语法错误变量a需取地址,输入第一个数tag=a;将第一个数放入tag中while(a)程序以0结束,循环的条件为:只要不输入0{ scanf("%d",&a);程序循环输入数字,存入a/**/ if(!a) /**/ continue;逻辑错误,程序执行的条件,a不为0else if(a<tag) num1++;如果a中数比tag小,计数器num1增加1else if(a>tag) num2++;如果a中数比tag大,计数器num2增加1}printf("\n%d %d\n",num1,num2);getch();}第四题:#include <stdio.h>long int fsum(int n) fsum函数用于求阶乘{long int k;if(n==1)/**/ k=1 /**/;逻辑错误,1的阶乘为1elsek=n*fsum(n-1);n的阶乘为n-1的阶乘乘以nreturn (/**/ k /**/);逻辑错误,运算结果在k中}void main(){ int i;long int sum;sum=0;for(i=1;i<=9;/**/ i++,i++ /**/)语法错误for语句格式不符sum+=fsum(i);printf("sum=%ld\n",sum);getch();}第五题:#include<stdio.h>void main(){ int i,a=0;/**/char c1,c2; /**/ 语法错误c1,c2为字符类型,程序中用getchar()获取clrscr();printf("Enter an 8 bit binary number :");c2=getchar();/**/ for(i=1;i<=7;i++) /**/语法错误for语句中间为;{ c1=getchar();a=a*2+c1-'0';}/**/ if (c2=='1') /**/ a=(-1)*a;如果依照题意c2=='1',a是负数printf("\n%d \n",a);getch();}第六题:#include<stdio.h>void main( ){int i,n;/**/ n = 0; /**/n为计数器,从0开始for(i=10;i<=100;i++)判断10-99是否是对称数if(i/10==i%10) i/10得到十位,i%10得到个位,若相等则是对称数{printf("%5d",i);输出对称数n++;计数器增加1if(/**/ n%9==0 /**/)语法错误表示相等的关系用双等号;printf("\n");9个数一行输出,换行}for(i=100;i<=999;i++)判断100-999是否是对称数if(/**/ i/100==i%10 /**/) i/100得到百位,i%10得到个位,若相等则是对称数{printf("%5d",i);n++;if(n%9==0)printf("\n");}getch();}第七题:#include <stdio.h>void main(){/**/ int a[10]; /**/语法错误数组下标用中括号;int i,j,k,x;printf("Enter 10 numbers:");scanf("%d",/**/ &x /**/);语法错误x需取地址;a[0]=x;for(k=1;k<=9;k++){ scanf("%d",&x);for(i=0;i<k;i++)if (a[i]>x) break;if(i<k)for(j=k;j>i;j--) a[j]=a[j-1];a[i]=x;}/**/ for(i=0;i<10;i++) /**/逻辑错误,数组下标从0开始printf("%d ",a[i]);printf("\n");getch();}第八题:#include <stdio.h>#include <math.h>int fun( /**/ float a,float b,float c /**/)语法错误函数三个参数的类型此处必须列出;{float t;int mk = 0;if(c<a){ t = a; a = c; c = t;}if(c<b){ t = b; b = c; c = t;}通过以上两次比较将最大的边放入c中if( fabs( c*c - (a*a+b*b)) < 1.0e-8)mk = 1;/**/ return mk; /**/}main(){float a,b,c;printf("Please input three numbers(a b c):\n");scanf("%f%f%f",&a,&b,&c);if(/**/ fun(a,b,c) /**/== 1)法错误调用函数三个参数之间用,分隔;printf("Yes\n");elseprintf("No\n");getch();}第9题:基本思路:每一趟从待排序的数列中选出值最小(或最大)的数据,将它与当前待排序的子数列的最后一个数据进行交换,直到全部数据排序完毕。
c语言错题总结期末一、变量与表达式1. 以下语句的输出是什么?```c#include <stdio.h>int main(){int a = 2, b = 3;printf("a*3+5*b = %d", a*3+5*b);return 0;}```答案:a*3+5*b的值是21。
解析:根据运算符的优先级,先进行乘法运算,然后进行加法运算。
2. 下面代码的输出是什么?```c#include <stdio.h>int main(){int a = 3, b = 4, c = 5;printf("a + b - c = %d\n", a + b - c);printf("a * b / c = %d\n", a * b / c);printf("a + b * c = %d\n", a + b * c);return 0;}```答案:```a +b -c = 2a *b /c = 2a +b *c = 23```解析:根据运算符的优先级,先进行乘法运算,然后进行加法和减法运算。
二、流程控制1. 下面哪个循环语句可以用来反复执行一段代码块,直到满足某个条件时停止执行?A. ifB. switchC. whileD. for答案:C. while解析:while循环可以根据给定的条件反复执行一段代码块,直到条件不再满足时停止执行。
2. 下面的代码片段输出结果是什么?```c#include <stdio.h>int main(){int i = 0;while(i < 3){printf("%d ", i);i++;}return 0;}```答案:输出结果是0 1 2 。
解析:while循环的终止条件是i小于3,所以循环会执行3次,i的初始值为0,每次循环后i会自增1。
c语言面试找错题C语言面试中经常会出现找错题,考察面试者在代码中找出错误的能力。
下面给出一些常见的C语言找错题,供大家练习。
题目1:```c#include <stdio.h>int main() {int a = 10;int b = 20;int sum = a + b;printf("The sum of a and b is: %d\n", sum);return 0;}```问题:请找出以上代码中的错误,并解释原因。
答案:以上代码没有错误。
题目2:```c#include <stdio.h>int main() {int a = 10;int b = 20;printf("The sum of a and b is: %d\n", a, b);return 0;}```问题:请找出以上代码中的错误,并解释原因。
答案:以上代码的错误在于`printf`函数的使用。
`printf`函数的第一个参数是一个格式化字符串,后续参数是格式化字符串中使用的参数。
在上述代码中,格式化字符串中只有一个`%d`,但是后续提供了两个参数`a`和`b`。
正确的写法应该是`printf("The sum of a and b is: %d\n", sum);`。
题目3:```c#include <stdio.h>int main() {int a = 10;int b = 20;int sum;sum = a + b;printf(“The sum of a and b is: %d\n”, sum);return 0;}```问题:请找出以上代码中的错误,并解释原因。
答案:以上代码的错误在于`printf`函数的格式化字符串中使用的双引号是中文引号,而不是英文引号。
C语言中使用的是英文引号,因此应该修改为`printf("The sum of a and b is: %d\n", sum);`。
错的1.算法的时间复杂度,是指执行算法所需要的工作量,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。
算法的空间复杂度是指执行这个算法所需要的内存空间。
2.数据的逻辑结构反映的是元素数据之间的逻辑关系,与使用的计算机无关。
3.在关系中凡能惟一标识元组的最小属性集称为该表的键或码。
二维表中可能有若干个键,它们称为该表的候选码或候选键。
从二维表的所有候选键中选取一个作为用户使用的键称为主键或主码。
4.确认测试的任务是验证软件的功能和性能,以及其他特性是否满足需求规格说明中确定的各种需求5.数据流图用于抽象描述一个软件的逻辑模型,它由一些特定的图符构成,包括4个方面,即加工、数据流、存储文件、源和潭。
6.选择排序的基本思想是扫描整个线性表,从中选出最小的元素,将它交换到表的最前面,然后对剩下的子表采用同样的方法,直到子表为空7.进行逻辑或运算,在已知其中一个运算对象为真的情况下,不必判断另外一个运算对象的真假8.函数调用时,函数返回值的类型既不由主调函数类型所决定,也不由return语句中的表达式类型所决定,更不是由系统临时决定,而是由定义该函数时所指定的数值类型所决定。
scanf函数中的“%c”表示通过键盘只读入一个字符型的数据一维数组的一般定义格式为:类型说明符数组名[常量表达式]。
其中,“[]”中的内容可以是整型常量,也可以是整型表达式。
不可以是变量。
编译预处理命令的特点有:①为了区分一般的语句,预处理命令行都必须以#开始,结尾不加分号;②预处理命令可以放在程序中的任意位置;③在程序中凡是以#开始的语句都是预处理命令行。
①&用按位与运算将特定位清0或保留特定位;②|用按位或运算将特定的位置设置为1;③^用按位异或运算将某个变量的特定位翻转或交换两个变量的值。
打开文件函数fopen()的调用形式为:fp=fopen(文件名,文件使用方式)。
“文件使用方式”说明:方式“r”为以输入方式打开一个文本文件;方式“a+”为以读/写方式打开一个文本文件,保留文件中原有的数据;方式“w+”为以读/写方式建立一个新的文本文件;方式“r+”为以读/写方式打开一个文本文件。
数据元素是由多个数据项组成,数据是能够被计算机识别、存储和加工处理的信息载体,数据处理的最小单位是数据项。
内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法,如数据存储的文件结构、索引、集簇及hash等存取方式与存取路径,内模式的物理性主要体现在操作系统及文件级上,它还未深入到设备级上(如磁盘及磁盘操作)。
随着计算机软件规模的扩大,软件本身的复杂性不断增加,研制周期显著变长,正确性难以保证,软件开发费用上涨,生产效率急剧下降,从而出现了入们难以控制软件发展的局面,即所谓的“软件危机”。
在关系表中,每一列称为一个属性,对应表中的一个字段;每一行称为一个元组,对应表中的一条记录。
注意表达吃和语句的区别C源程序经过程序编译之后生成一个后缀为“.obj”的二进制文件(称为目标文件),然后由称为“连接程序”的软件包文件与C语言提供的各种库函数连接起来生成一个后缀为“.exe”的可运行文件。
本题考查结构体所占的存储单元。
sizeof(struct date)=2+2+2=6(因为结构体的3个成员均为int类型,各占两个存储单元)。
C语言规定,字符常量在程序中要用单引号括起来。
首先判断c1是否为小写字母的主要条件c1>='a'和c1<='z'是逻辑与关系,其次选项A)的这种形式C语言中没有,所以选项D)正确。
①do… while语句、while语句、for语句所实现的循环可以相互替代;②do…whil e 语句和while语句的区别是do…while语句至少执行一次,再判断循环条件,while语句是先判断条件再执行。
字符替换定义格式为:# define标识符(形参表)形参表达式。
题中F是代表形参表达式的标识符(字符串)。
①字符替换格式:#define 标识符字符串,行末不加分号;②双引号中出现的宏名不替换;③如果提前结束宏名的使用,程序中可以使用#undefine;④在进行宏定义时,宏定义能层层置换,能够嵌套。
Sizeof计算出运算对象在计算机的内存中所占用的字节数量rewind(fp)的功能是:使fp指定的文件的位置指针重新定位到文件的开始位置。
类是对一类具有相同的属性和方法对象的描述,属性用于描述对象的状态,方法用于表示对象的行为,基于同一个类产生的两个对象是可以分别设置自己的属性值的。
数据库设计目前一段采用生命周期法,即将整个数据库应用系统的开分解成目标独立的若干阶段,它们是:需要分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、编码阶段、测试阶段、运行阶段、进一步修改阶段。
在数据库设计中采用上面几个阶段中的前四个阶段,并且重点以数据结构和模型设计为主线。
数据库管理一般包括:数据库的建立、数据库的调整、数据库的重组、数据库的安全性控制与完整性控制、数据库的故障恢复和数据库的监控。
一个C语言源程序无论包括了多少函数,总是从main函数开始执行,从main函数结束。
C语言中允许进行不同数据类型的混合运算,但在实际运算时,要先将不同类型的数据转化成同一类型再进行运算。
类型转换的一般规则是:①运算中将所有char型转换成int型,float型转换成double型;②低级类型服从高级类型,并进行相应的转换,数据类型由低到高的顺序为:char->int->unsigned-> long->float->double;③赋值运算中最终结果的类型,以赋值运算符左边变量的类型为准,即赋值运算符右端值的类型向左边变量的类型看齐,并进行相应转换。
①break语句可以出现在循环体内及switch语句体内,不能用于其他的语句;②continue 语句的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,而接着转去判定循环条件是否成立,从而确定下一次循环是否继续执行,也就是说执行contiune语句不会使整个循环终止;③在循环体内使用break语句会使循环提前终止;④从多层循环嵌套中退出时,可以使用goto语句或者break语句。
【解析】本题考查函数调用的有关知识点。
函数调用①可以出现在表达式中;②可以作。
①字符串的长度是指字符串中字符的个数,但不包含字符串结束符;②以反斜为独立的语句存在;③可以作为一个函数的实参。
线“\”开头的特殊字符序列,意思是把反斜线后面的字符序列转换成特定的含义,而不是原来的含义,不包含在字符串长度之内,“\”连同后面的字符为一个长度。
二维数组的元素可以看成是按矩阵形式存放的,总是先存放第一行的元素,再存放第二行的元素。
数组第一维的下标是i,说明它前面还有i行,有i*m个元素,数组第二维的下标是j,说明它前面还有j 列,有j 个元素,所以共有i*m+j个元素。
宏替换分为简单的字符替换和带参数的宏替换两类。
使用宏时应注意以下几点:①定义仅仅是符号替换,不是赋值语句,因此不做语法检查;②为了区别程序中其他的标识符,宏名的定义通常用大写字母,但不是必须用大写;③双引号中出现的宏名不替换;④使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。
结构化分析的常用工具有数据流图、数据字典、判定树和判定表。
数据模型描述的内容包含数据结构、数据操作和数据约束。
scanf()函数中格式控制字符串是为了输入数据用的,无论其中有什么字符,在输入数据时,按照一一对应的位置原样输入这些字符。
不同的编译系统或计算机系统对几类整型数所占用的字节数有不同的规定。
long、int和short类型数据占用内存大小是由选择何种C编译系统决定的。
在输入格式控制符中指定变量j的输入格式控制符为“%2d”,即变量j所占的宽度为2,所以变量j只接收输入数据的前两位,从第3位开始直到空格之间的输入整数都会被保存到变量y中,因为y为浮点型数据,所以输出结果为选项B)。
:①C语言中,二维数组或多维数组元素排列的顺序是按行存放;②不同数组的元素之间可以相互赋值;字符串复制函数strcpy(s1,s2)是把s2的字符串复制给s1,执行后s1=089;字符串连接函数strcat(s1,s2),功能是把s2 字符串连接到s1字符串的末尾,执行后s1=08967。
①字符替换格式:#define 标识符字符串,标识符称为宏名,无类型;。
①文件由数据流形式组成,可以按数据的存放形式分为二进制文件和文本文件;②C语言既能读写文本文件,又可以读写二进制文件。
】“s”是代表数组首地址的地址常量,不是变量,“=”左边不能出现常量,因此s="ABCDEF"语法错误。
“**s”和“s”一样;“*s”是指变量地址,不能给其赋字符串。
;++(p->x)是将p->x的值加1100以内的素数Main(){int n,i;For(n=2;i<100;n++){for(i=2;i<n;i++)If (n%i==0) break;If(i>=n) printf(“%10d”,n);}}冒泡排序的主题函数For(i=0;i<n-1;i++)For(j=0;j<n-1-i;j++)If(a[i]>a[i+1]){t=a[i]; a[i]=a[j+1]; a[j+1]=t;}对任何一棵二叉树,度为0的结点(即叶子结点)总是比度为2的结点多一个。
DFD图(数据流图)是以图形的方式描述数据在系统中流动和处理的过程,只反映系统必须完成的逻辑功能,它是需求分析阶段的图形工具。
盒式图(N-S图)、问题分析图(PAD图)和PDL(伪码)是详细设计的常用工具。
在E-R图中用矩形表示实体集,在矩形内写上该实体集的名字,用椭圆形表示属性,在椭圆形内写上该属性的名称,用菱形表示联系,菱形内写上联系名。
外模式也称子模式,它是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,它是由概念模式推导出来的,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
一个概念模式可以有若干个外模式。
格式字符X或x是以十六进制无符号形式输出整型数(注:输出时不显示前导0x或0X)。
字符串常量是用一对双括号括起来的一串字符。
它用字符数组来存放,不能用一对大括号对括起来。
若在scanf函数的格式控制字符串中插入了其他的字符,则在输入时要求按一一对应的位置原样输入这些字符,我们必须把“a= ”、“b=”、“c=”也输入。
其中的“,”也要输入的记住要原样输入①定义函数时,形参的类型说明必须放在函数头部分;②return后的值可以是任意合法的表达式;③如果函数的形参与实参的类型不一致,则以函数值的类型为准。