全国计算机等级考试C语言培训.doc_第1页
全国计算机等级考试C语言培训.doc_第2页
全国计算机等级考试C语言培训.doc_第3页
全国计算机等级考试C语言培训.doc_第4页
全国计算机等级考试C语言培训.doc_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

全国计算机等级考试二级 C语言程序设计一、上机考试时间全国计算机等级考试二级C语言上机考试时间定为90分钟。考试时间由系统自动进行计时,提前5分钟自动报警来提醒考生应及时存盘,考试时间用完,系统将自动锁定计算机,考生将不能再继续考试。二、考试基本要求1. 熟悉 Visual C+ 6.0 集成开发环境。2. 掌握结构化程序设计的方法,具有良好的程序设计风格。3. 掌握程序设计中简单的数据结构和算法并能阅读简单的程序。4. 在 Visual C+ 6.0 集成环境下,能够编写简单的C程序,并具有基本的纠错和调试程序的能力三、考试题型及分值二级C语言上机满分为100分。共有三种题型:1. 程序填空题30分(24个空)2. 程序修改题30分(23处错误,由写着”*found*” 注释语句进行提示,均在其下面语句体内,重点注意下面第一条语句)3. 程序设计题40分(1题,给出了要求和main函数,在函数fun内编写若干行语句) 每道题需要完成“save”(保存)、“compile”(编译)和“Execute”(运行)。四、考试内容说明:考试内容中,若未强调,则出现于笔试和上机两种形式考试中,其中红色表示侧重于上机考试的内容;若未强调题型,则在上机考试的三种题型均有体现。抽中率针对上机考试。1. C语言程序的结构1) 程序的构成,main函数和其他函数。2) 头文件,数据说明,函数的开始和结束标志以及程序中的注释。3) 源程序的书写格式。(常出现于改错题,抽中率约为8%)4) C语言的风格。2. 数据类型及其运算1) C的数据类型(基本类型,构造类型,指针类型,无值类型)及其定义方法。2) C运算符的种类、运算优先级和结合性。3) 不同类型数据间的转换与运算。4) C表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式)和求值规则。其中1)、3)、4)是重点,抽中率约为56%。3. 基本语句1) 表达式语句,空语句,复合语句。2) 输入输出函数的调用,正确输入数据并正确设计输出格式。主要在上机形式考核,抽中率约为35%。4. 选择结构程序设计1) 用if语句实现选择结构。2) 用switch语句实现多分支选择结构。3) 选择结构的嵌套。第1)点常与循环结构结合使用,抽中率约为37%。5. 循环结构程序设计1) for循环结构。2) while和do-while循环结构。3) continue语句和break语句。4) 循环的嵌套。第1)、2)点常与选择结构结合使用,抽中率约为37%。6. 数组的定义和引用1) 一维数组和二维数组的定义、初始化和数组元素的引用。2) 字符串与字符数组。抽中率约为28%。7. 函数1) 库函数的正确调用。2) 函数的定义方法。3) 函数的类型和返回值。4) 形式参数与实在参数,参数值传递。5) 函数的正确调用,嵌套调用,递归调用。6) 局部变量和全局变量。7) 变量的存储类别(自动,静态,寄存器,外部),变量的作用域和生存期。第2)、3)、4)、5)是重点,抽中率约为37%。8. 编译预处理1) 宏定义和调用(不带参数的宏,带参数的宏)。2) “文件包含”处理。抽中率约为2%。9. 指针1) 地址与指针变量的概念,地址运算符与间址运算符。2) 一维、二维数组和字符串的地址以及指向变量、数组、字符串、函数、结构体的指针变量的定义。通过指针引用以上各类型数据。3) 用指针作函数参数。4) 返回地址值的函数。5) 指针数组,指向指针的指针。抽中率约为35%。10. 结构体(即“结构”)与共同体(即“联合”)1) 用typedef说明一个新类型。2) 结构体和共用体类型数据的定义和成员的引用。3) 通过结构体构成链表,单向链表的建立,结点数据的输出、删除与插入。抽中率约为7%。11. 位运算1) 位运算符的含义和使用。2) .简单的位运算。主要在笔试形式考核。12. 文件操作只要求缓冲文件系统(即高级磁盘I/O系统),对非标准缓冲文件系统(即低级磁盘I/O系统)不要求。1) 文件类型指针(FILE类型指针)。2) 文件的打开与关闭(fopen,fclose)。3) 文件的读写(fputc,fgetc,fputs,fgets,fread,fwrite,fprintf,fscanf函数的应用),文件的定位(rewind,fseek函数的应用)。多出现在填空题和改错题,抽中率约为2%。五、上机考题分类分析近几年的上机考试题目,发现试题会出现重复,如填空题的题目,换一个问法在修改题或设计题出现。我们粗略将上机考题分为五大类:字符串处理、数组处理、结构体及链表、数学问题、实际应用。1. 字符串处理字符串处理一般使用指针和数字,for和while循环语句,需注意修改后字符串结尾应附上结尾标记0,可细分以下几种:1.1字符ASCII码应用1.2字符查找和删除指定字符1.3子字符串查找1.4字符统计1.5字符串逆置1.6回文数1.7数字字符串换成长整型1.8字符串长度的比较1.9子字符串移动1.10字符串连接2. 数组处理数组与字符串紧密相连,如字符串处理也可转换成数字处理。数组处理多用数组的下标进行运算。数组处理可细分为:2.1数组元素排序2.2求数组元素的最大值、最小值和平均值2.3移动数组元素2.4把指定数组元素移动到字符串中或数组中2.5元素分段存放3. 结构体及链表此类型所要求的fun函数功能比较简单,与数组、指针操作紧密相关,关键是对成员的引用,可细分为:3.1求最大值、最小值和平均值3.2排序3.3元素分段存放3.4查找元素4. 数学问题数学问题较多地应用到数组和常用数学算法,注意对于累加或累乘的变量要先赋初值。可细分为:4.1公式求值4.2多项式求值4.3素数问题4.4求方程的解4.5矩阵问题:其实是二维数组处理问题4.6数的按位分离及合并4.7四舍五入4.8整除及奇偶判断问题5. 实际应用5.1有统计单词数等。六、讲解典型考题1. 程序填空题第一题请补充fun函数,改函数的功能是判断一个数是否为素数。该数是素数时,函数返回字符串“yes!”,否则函数返回字符串“no!”,并在主函数中输出。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容。仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:#include #include 1 int i,m;m=1;for (i= 2 ; i1)return (“yes!”);elsereturn(“no!”);main()int k=0;printf(“Input:”);scanf(“%d”, &k);printf(“%sn”, fun(k);【考点分析】:该题考查素数的定义和求素数的算法,以及函数定义。(满足4.3的例子)【解题思路】:fun函数的功能是判断一个数是素数,如果该数是素数,函数返回字符串“yes!”,否则函数返回字符串“no!”并在主函数中输出。素数的定义是:除了能被1和自身整除外,不存在其他任何能整除该数的自然数。因此,在判断一个数是否为素数时,只要有除了1和本身能整除它,还有一个数能整除它,就判定此数不是素数。【参考答案】:1:char *fun(int n) /*由于需要返回字符串,因此返回类型应该定义为字符指针,形参变量应该被定义为int类型,这里的形参只能为n,因为下面函数块中只有n没有被定义*/2:2 /*根据素数的定义,i的初始值不能为1,循环终止条件不能为i=n,2为最小的素数*/3:n%i=0 或 !(n%i) 或0=n%i /*从if语句块可见,当有一个数能整除n时,for循环终止*/#include #include char *fun(int n) int i,m;m=1;for (i=2; i1)return (“yes!”);elsereturn(“no!”);第二题请补充函数fun,其功能是:计算并输出给定10个数的方差:例如:给定的10个数为15.0,19.0,16.0,15.0,18.0,12.0,15.0,11.0,10.0,16.0,输出为s=2.758623注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容。仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:#include #include double fun(double x10)int i;double avg=0.0;double sum=0.0;double abs=0.0;double sd;for (i=0; i10; i+)sum += 1 ;avg=sum/10;for (i=0; i10; i+) 2 (xi-avg)* (xi-avg);sd= 3 (abs/10);return sd;main()double s, x10=15.0,19.0,16.0,15.0,18.0,12.0,15.0,11.0,10.0,16.0;int i;printf(“nThe original data is :n”);for (i=0; i10; i+) printf(“6.1f”, xi);printf(“nn”);s=fun(x);printf(“s=%fnn”, s);【考点分析】:该题主要考查循环语句、数学函数。(满足4.1的例子)【解题思路】:fun函数的功能是计算并输出给定10个数的方差,因此需要了解方差的算法,可从题目给出的表达式得知。本函数还要求调用函数库中的函数sqrt()求平方根。【参考答案】:1:xi /*累计数组x中10个元素的和*/2:abs+= 或 abs = abs+ /*累加了数组x中10个元素与平均值avg的差的平方*/3:sqrt /*调用数学函数sqrt开方以求方差*/#include #include double fun(double x10)int i;double avg=0.0;double sum=0.0;double abs=0.0;double sd;for (i=0; i10; i+)sum += xi;avg=sum/10;for (i=0; i10; i+)abs +=(xi-avg)* (xi-avg);sd= sqrt (abs/10);return sd;第三题请补充fun函数,该函数的功能是:判断一个年份是否为闰年。例如:1900年不是闰年,2004年是闰年。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容。仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:#include #include int fun( int n)int flag=0;if (n%4 =0)if ( 1 )flag=1;if ( 2 )flag=1;return 3 ;main()int year;printf(“Input the year:”);scanf(“%d”, &year);if (fun(year)printf(“%d is a leap year. n”, year);elseprintf(“%d is not a leap year. n”, year);【考点分析】:该题考查if.else语句,函数返回。(满足4.8的例子)【解题思路】:fun函数的功能是判断一个年份是否为闰年,如果年份能被4 整除但是不能被100整除,或者能被400整除,这两种情况满足之一都是闰年。【参考答案】:1:n%100 !=0或n%100或0!=n %100 /*第一种情况:能被4整除但是不能被100整除*/2:n%400=0或 !(n%400)或0=n%400 /*第二种情况:能被400整除*/3:flag /*返回flag的值,当flag1为真main函数打印这一年是闰年,否则打印这一年不是闰年*/#include #include int fun( int n)int flag=0;if (n%4 =0)if (n%100 !=0)flag=1;if (n%400 =0 )flag=1;return flag;第四题请补充fun函数,该函数的功能是:把一个字符串中非字母字符删除,字母字符按从小到大排序,并把这个全部由字母字符组成的字符串保存在原串中,函数返回这个字符串的长度。例如:输入“cixbr2.3”,结果为“bcirx”,字符串长度为5。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容。仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:#include #define N 20int fun( char *str)int i=0,j=0,k=0,m=0;char t;char *p=str;while (*p)if (*p=A & *p=a & *p=z) 1 ;p+;*(str + i) =0; 2 ;while (*(p+j)k=j; 3 ;while (*(p+k)if (*(p+k) *(str+m)t=*(str+m);*(str+m) = *(p+k);*(p+k)=t;k+;j+return i;main()char strN;int n;printf(Input the original string: );gets(str);printf(n * The original string *n);puts(str);printf(* The new string *n);n=fun(str);puts(str);printf(* The length of new string is : %d*n, n);【考点分析】:该题考查字符串、循环语句、指针和选择排序算法。(满足1.2的例子)【解题思路】:fun函数的功能是对字符串中的字母字符按ASCII码从小到大进行排序,并把修改后的字符串放存在原串中,函数返回字母字符的个数。因此,本题应采用分步实现,首先把字母字符找出来存放在原串中,然后利用选择法进行从小到大的排序。选择法的思路为:把第一个元素与其后面的元素比较,如果比后面的大,则交换,比较完所有的元素后,第一个位置的元素是最小的元素;在把第二个元素与其后面的元素进行比较,结果是除了第一个元素外,第二个元素是最小的元素;以此类推。【参考答案】:1:*(str+i+)=*p或 stri+=p0 /*把字母字符串拷贝到原串,下标i自增1*/2:p=str /*使字符指针p从以前所指的位置移到字符串str第一个字符处*/3:m=j /*m是需要与其后字符比较的字符的下标,它是随着j的增加而递增#include #define N 20int fun( char *str)int i=0,j=0,k=0,m=0;char t;char *p=str;while (*p)if (*p=A & *p=a & *p=z) *(str+i+)=*p ;p+;*(str + i) =0;p=str;while (*(p+j)k=j;m=j;while (*(p+k)if (*(p+k) *(str+m)t=*(str+m);*(str+m) = *(p+k);*(p+k)=t;k+;j+;return i;第五题字符串str由数字字符组成(长度不超过5个字符),可看作任意进制的数,请补充fun函数,该函数的功能是把str字符串转换成任意进制的数,结果保存在数组xx中,由函数返回转换后数组xx的实际长度。其中x表示str原来的进制,y表示要转换成的进制。例如,输入str=“1001”,x=2,y=10,结果输出:9。如果输入str=“9”,x=10,y=2,结果输出:1001注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容。仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:#include #include #include #define N 8int xxN;int fun(char *str, int x, int y)int sum;int i=0;char *p=str;for (i=0; i5)printf(“Error: string too longer! Please input again!nn”);exit(0);for (i=0; stri; i+)if (stri9)printf(“Error: %c not is 0 to 9 digits character!nn”, stri);exit(0);printf(“The original string :”);puts(str);printf(“nInput x=: ”);scanf(“%d”, &x);printf(“nInput y=: ”);scanf(“%d”, &y);n=fun(str,x,y);printf(“n%s is convered to decimal number: nn”,str);for (i=n-1; i=0; i-)printf(“%d”,xxi);【考点分析】:该题考查字符串、指针和进制转换。(满足1.7的例子)【解题思路】:fun函数的功能是:把由数字字符组成的str字符串转换成任意制数的数。因此,先把字符串str的字符转换成对应的数字,转换规则:数字=数字字符0,进制转换算法:如果是一个y进制数,则对应的十进制为:。然后再用取模的方法把十进制转换成其他进制。【参考答案】:1:*p-0 /* n乘以权x后累加低位的一位数字*/2:sum%y /*sum对y取模得到低位上的数字*/3:sum=sum/y或sum/=y /*sum除以y,舍去最后一位数字*/#include #include #include #define N 8int xxN;int fun(char *str, int x, int y)int sum;int i=0;char *p=str;for (i=0; iN; i+)xxi=0;sum=*p-0;p+;while (*p)sum=sum*x + *p-0 ;p+;i=0;while (sum !=0)xxi=sum%y;sum=sum/y;i+;return i;第六题请补充fun函数,该函数的功能是求一维数组xN的平均值,并对所得的结果进行四舍五入保留两位小数。例如,当x1015.6, 19.9, 16.7, 15.2, 18.3, 12.1, 15.5, 11.0, 10.0, 16.0时,结果输出为:avg=15.030000注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容。仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:#include #include double fun(double x10)int i;long t;double avg=0.0;double sum=0.0;for (i=0; i10; i+) 1 ;avg=sum/10;avg= 2 ;t= ;avg=(double)t/100;return avg;main()double avg, x10= 15.6, 19.9, 16.7, 15.2, 18.3, 12.1, 15.5, 11.0, 10.0, 16.0;int i;printf(“nThe orginal data is :n”);for (i=0; i10; i+)printf(“%6.1f”, xi);printf(“nn”);avg=fun(x);printf(“average=%fnn”,avg);【考点分析】:该题考查四舍五入算法和数据类型强制转换。(满足2.2、4.7的例子)【解题思路】:fun函数的功能是先计算出数字x的平均值,再对平均值保留2位小数,并对第3位进行四舍五入。算法的关键是:若预保留的位数的个数为n,则先把实数乘以10的n+1次方;然后对此数加5再与10整除,其个位将被舍弃;把所得的整数强制转换成double型,再除以10的n次方就得到最后的结果。【参考答案】:1:sum+=xi或sum=sum+xi /*累加求和*/2:avg*1000 /*因保留两位小数,必须乘以10的3次方*/3:(avg+5)/10 /*进行四舍五入,去掉小数点后面两位数后面的数,把结果保留在t中#include #include double fun(double x10)int i;long t;double avg=0.0;double sum=0.0;for (i=0; i10; i+)sum+=xi ;avg=sum/10;avg=avg*1000;t= (avg+5)/10 ;avg=(double)t/100;return avg;第七题请补充fun函数,该函数的功能是:输出一个NN矩阵,N由键盘输入,矩阵元素的值为随机数,并计算出该矩阵周边元素的平均值,结果由函数返回。例如:当N=4: 注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容。仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:#include #include #include #define N 20double fun(int aN, int n)int i,j,k;double s=0.0;double aver=0.0;printf(“*The array *n”);for (i=0; in; i+)for (j=0; jn; j+)aij=rand()%10;printf(“%4d”,aij);if (i=0 | i=n-1 | j=0 | j=n-1) 1 ;printf(“n”);k= 2 ;aver= 3 ;return aver;main()int aNN;int n;double s;printf(“*Input the dimension of array N*n”);scanf(“%d”,&n);s=fun(a,n);printf(“*The Result*n”);printf(“The average is %2.3fn”,s);【考点分析】:该题考查矩阵操作、循环语句、条件语句和二维数组。(满足4.5的例子)【解题思路】:fun函数的功能是:输出一个NN维矩阵,N由键盘输入,矩阵元素的值为随机数,并计算出该矩阵周边元素的平均值,结果由函数返回。矩阵运算归于数组操作。建立矩阵时以行为外循环,列为内循环,可以同时计算周边元素的和。NN周边元素的个数为4(N-1)。【参考答案】:1:s+=aij /*周边元素累加求和*/2:4*(n-1) /*求周边元素的总个数*/3:s/k /*求周边元素的平均值*/#include #include #include #define N 20double fun(int aN, int n)int i,j,k;double s=0.0;double aver=0.0;printf(“*The array *n”);for (i=0; in; i+)for (j=0; jn; j+)aij=rand()%10;printf(“%4d”,aij);if (i=0 | i=n-1 | j=0 | j=n-1)s+=aij ;printf(“n”);k=4*(n-1) ;aver= s/k ;return aver;第八题请补充fun函数,该函数的功能是判断一个数的个位数字和百位数字之和是否等于其十位上的数字,是则返回“yes!”,否则返回“no!”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容。仅在fun函数的横线上填入所编写的若干表达式或语句。试题程序:#include #include char *fun(int n)int g,s,b;g=n%10;s=n/10%10;b= 1 ;if ( 2 )return 3 ;elsereturn “no!” ;main()int num=0;printf(“*Input data*n”);scanf(“%d”,&num);printf(“nn”);printf(“*The result*n”);printf(“nn%s”,fun(num);【考点分析】:该题考查数的按位分离算法,函数返回。(满足4.6的例子)【解题思路】:fun函数的功能是判断一个数的个位数字和百位数字之和是否等于其十位上的数字。数的按位分离算法是:对10取模求个位上的数字,整除10后再对10取模求十位上的数字,整除100后再对10取模求百位上的数字。由于函数返回的是一个字符指针,因此,返回值必须是一个字符串。【参考答案】:1:n/100%10 /*n整除100后,原来的百位变成个位,再取模得到到原百位上的数字*/2:(g+b)=s /*个位和百位数字之和等于十位数字的表达式3:” yes!” /*返回字符串“yes!”*/#include #include char *fun(int n)int g,s,b;g=n%10;s=n/10%10;b=n/100%10;if (g+b)=s)return “yes!” ;elsereturn “no!” ;2. 程序改错题一般情况,错误主要分为语法错误和逻辑错误。(1)语法错误:用编译器很容易解决,所以改错题第一步先编译,解决这类错误。常见语法错误有:丢失分号,或分号写出逗号。关键字拼写错误,如小写变成大写。语句格式错误,如for语句中多写或少写分号。表达式声明错误,如少了()。函数类型说明错误,与main()不一致。函数形参声明错误,如少*等。运算符书写错误,把/写成。(2)逻辑错误,或叫语义错误,这和实现程序功能紧密相关,一般用编译器很难发现。对于逻辑错误,可按下列步骤查找:先读试题,看清题目的功能要求。通读程序,看懂程序中算法的实现方法。细看程序,发现常见错误点。常见的逻辑错误如下:变量初值错误。下标越界。运算类型不匹配。因此,对于程序改错题,应先编译查找其中的语法错误,通过编译器的提示容易找到错误的地方及原因,然后再寻找逻辑错误。修改了语法错误后再次编译,直到修改完所有的语法错误。而查找逻辑错误时,需要运行程序根据结果来检查。第一题下列给定程序中,函数fun的功能是:逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c数组中,形成一个新的字符串。例如,若a中的字符串为aBCDeFgH,b中的字符串:Abcd,则c中的字符串应为:aBcdeFgH。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不能增行或删行,也不得更改程序的结果!试题程序:#include #include void fun(char *p, char *q, char *c)/*found*/int k=1;/*found*/while (*p !=*q)if (*p *q)ck=*q;elseck =*p;if (*p)p+;if (*q)q+;k+;main()char a10=”aBCDeGgH”, b10=”ABcd”, c80=0;fun(a,b,c);printf(“The string a: ”);puts(a);printf(“The string b: ”);puts(b);printf(“The result: ”);puts(c);【考点分析】:该题考查变量赋初值、循环语句及条件。(满足1.1的例子)【解题思路】:有两个错误标志,说明有两个错误。先检查语法错误,编译程序后发现没有错误及警告,说明没有语法错误,只有逻辑错误;逻辑错误必须根据程序的功能及预期结果来考查。本题的两个错误标记比较近,第1处在变量定义处,几乎可以肯定要么是变量的类型错误,要么是变量的初值不正确。对于循环语句,着重考查条件是否存在逻辑错误或者表述是否正确。【参考答案】:1:int k=0; /*fun函数定义变量k并赋初值为1,k作为字符串c的下标,C语言数组的下标是从0开始的,因此应赋值为0。这个错误会导致c数组没有输出,因为初始化语句c80=0,将c数组第一个字符单元赋值为0,这种情况下使用puts()函数是不能输出的,因为该类函数在遇到/0就结束了。同样,使用printf语句也是如此*/2:while (*p | *q) /*根据函数的功能可知,while (*p != *q)循环条件出现了问题,每当遇到一个等值情况就终止了循环#include #include void fun(char *p, char *q, char *c)/*found*/int k=0;/*found*/while (*p | *q)if (*p *q)ck=*q;elseck =*p;if (*p)p+;if (*q)q+;k+;第二题下列给定程序中,函数fun的功能是实现两个整数的交换,例如a和b分别输入60和65,输出为a=65,b=60请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不能增行或删行,也不得更改程序的结果!试题程序:#include # include /*found*/void fun(int a, int b)int t; /*found*/t=b; b=a; a=t;main() int a,b;printf(”Enter a, b: ”);scanf(”%d%d”,&a,&b);fun(&a, &b);printf(”a=%d b=%dn”,a,b);【考点分析】:该题考查指针和函数的定义。【解题思路】:fun函数很简单,应从前到后依次审查函数定义、变量类型等。编译就能发现函数定义的形参类型不符,编译后就能发现第2个错误。【参考答案】:1:void fun(int *a, int *b) /*函数的形参与实参类型不符,从主函数的调用可知,形参应定义为指针*/2:t=*b;*b=*a,*a=t; /*指针只是指向地址,变量t是整型变量,故不能直接把地址赋值给变量t,而应该将指针指向存储区的值赋给t。如果要使用该数,应该在指针前加引用操作符“*”*/#include # include void fun(int *a,int *b)int t;t=*b;*b=*a,*a=t;第三题下列给定程序中,函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不能增行或删行,也不得更改程序的结果!试题程序:#include # include void fun(char *s)int i,j;/*found*/for (i=0, j=0; si!=0; i+)if (si=0 & si=9)sj=si;/*found*/sj=”0”;main()char item80;printf(“nEnter a string :”);gets(item);printf(“nnThe string is: %sn”, item);fun(item);printf(“nnThe string of changing is: %sn”,item);【考点分析】:该题考查字符串、循环语句、数据提取整理。(满足2.4的例子)【解题思路】:有两个错误标记,说明有两个错误。先检查语法错误,编译程序后发现在sj=”0”处有警告,说明可能有错误;修改警告处再次运行,输出的只是一个字符而不是一个字符串,说明字符串的输出提前结束了。【参考答案】:1:sj+=si; /*函数要把数字保存在字符串s中,但是下标变量j一直没有增加,因而sj应该为sj+*/2:sj=0; /*字符用单引号表示,而双引号”表示字符串。字符串以0为结束符,是sj最后一个字符,应该用单引号表示*/#include # include void fun(char *s)int i,j;/*found*/for (i=0, j=0; si!=0; i+)if (si=0 & si=9)sj+=si;/*found*/sj=0;第四题下列给定程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论