前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >高效备考方法-程序设计题

高效备考方法-程序设计题

作者头像
用户6755376
发布2020-03-04 10:30:57
7640
发布2020-03-04 10:30:57
举报

程序设计题

一、程序编程题解题技巧

1.首先仔细审题,了解题目的要求,记下题目给出的输入和输出例示,以便检验在完成指定的函数后,程序运行的结果是否正确。 2.调出源程序后,应对照函数首部的形参,审视主函数中调用函数时的实参内容,以便明确在函数中需要处理的数据对象。 3.理解试题的要求,审视主函数中调用函数的方式,若在表达式中调用函数(如把函数值赋给某个对象),则要求有函数值返回,需注意函数的类型,并在函数中用return语句返回函数值;若主函数中仅用语句形式调用函数,则需要通过形参间接地返回所得结果。 4.选择适当的算法进行编程,输入程序语句。不要忘记及时存盘! 5.编译程序,直到没有语法错误。 6.调试程序,利用试题中给出的例示数据进行输入(若要求输入的话),运行程序,用例示的输出数 据检验输出结果,直到结果相同

二、编程题的基本算法

1. 求和问题 (1)(循环控制变量)计数器的范围。 (2)和变量的初值一般为0。 (3)如是分数求和,请注意整除问题。 (4)在确保前三个条件的情况下,按编程的思路,一步步完善。 2. 求乘积问题 (1)积变量 (2)乘积表达式作分母的时候,是一个整体,请加括号。 3. 找最大值、最小值问题 (1)首先将首元素(行首、列首等)的值赋给保存最大值(或最小值)的变量,如max(或min) (2)然后将max(或min)和后面的元素一一比较,如果出现更大的值(或更小的值),则将该值赋给max(或min),直到全部比完为止,利用一个临时变量j记录max所在位置。 (3)一维数组的首元素为a[0],二维数组的首元素为a[0][0],二维数组的行首元素为a[i][0],二维数组的列首元素为a[0][i]。 例:找出2×M整型二维数组中最大元素的值

代码语言:javascript
复制
int fun (int a[][M]) 
{   
int i,j,max=a[0][0];    
for(i=0;i<2;i++)       
for(j=0;j<M;j++)          
if(max<a[i][j])             
max=a[i][j];    
return max; 
} 

4. 求素数问题

(1)判断一个素是否为素数。 (2)求某个范围内素数的个数、和、平方根和等。 5. 求最小公倍数、最大公约数问题

最小公倍数求法:用从1开始的数去整除,若能同时整除,则此数为最小公倍数,否则继续加1再整除,直到找到为止。

代码语言:javascript
复制
for(k=1; k++)     
{                
if(k%a==0&&k%b==0)   break;   
}

最大公约数求法(碾转相除法) (1)将两数中的大数去除以小数,如果除不断,转入(2),若能整除,转入(3)。 (2)将小数变成被除数,它们的余数为除数,再相除。如果除不断,转入(2)。若能整除,转入(3)。 (3)则此除数为最大公约数。

代码语言:javascript
复制
int a(int x,int y)   
{    
int temp;   
temp=x%y;   
if(temp==0)   
{ 
return y; 
} 
else   
{    
return a(y,temp);   
}   
} 

6. 字符串问题

(1)串重新组合问题。 ①原串中去掉(或添加)一部分组成成分(如数字、*号) ②奇数或偶数重排 (2)在串中查找字符或字符串问题。 (3)前两个问题中涉及到的字符移动问题(前移、后移) (4)将串中的某些前移,某些后移,实质是先选出来,存在不同的数组中,再重新合并。 (5) 逆序。 (6)字符型的数字转换为成其面值相同的整数,并进行相关运算。如‘5’转换为数值5怎么转换?‘5’-‘0’=5 或‘5’-48=5 (7)字符大小写转换。如‘A’转换为‘a’怎么转换? ‘A’-‘a’=-32 或‘a’-32=‘A’。 7. 排序问题(假定有n个元素)

(1)冒泡排序。 从数组的首元素开始,依次对相邻的两个元素进行比较,当发现前面的数字大于(或小于)后面时就进行依次交换,从头到尾比较完一遍就挑出一个最大(或最小)的数,将其排在最后面,n个数要比较n-1遍,其中第j遍要两两相比n-j遍。 主要参数说明: i (循环次数n-1次): 0----n-2 如果a[i]<a[i+1] {t=a[i];a[i]=a[j];a[j]=t; }则为降序 如果a[i]>a[i+1] {t=a[i];a[i]=a[j];a[j]=t; }则为升序. (2)选择排序。 选择排序分升序和降序,其中降序排序,首先从数组中挑选一个最大的元素,把它和第一个元素交换,接着从剩下的n-1个元素中再挑出一个最大的元素,把它和第二个元素交换,不断重复以上过程,直到比较完最后两个元素。 主要参数说明: i (循环次数n-1次): 0----n-2 j (被比较元素的下标):i+1 -----n-1 如果a[i]<a[j] {t=a[i];a[i]=a[j];a[j]=t; }则为降序。 如果a[i]>a[j] {t=a[i];a[i]=a[j];a[j]=t; }则为升序 8. 逻辑与(&&)和逻辑或(||)的应用

例如:求100以内能被5整除或7整除,但不能被11整除。if((i%5==0||i%7==0)&&i%11!=0) 9. 算术运算符%与/的应用

求商用/ 求余数用% (1)截尾数问题,取一个数的后n-1位。 (2)求一个数的每一位上的数字。 (3)奇数:X%2==1;偶数:X%2==0; 10. 结构体编程问题

请区分b.score[i]与b[i].score 11. 结点引用问题

12.两个数重新合并成一个新数

13.统计字符串中单词的个数,单词中间用若干个空格隔开

请掌握指针文件相关函数及字符串相关函数的使用方法。FILE *fp;fopen(fp)与fclose(fp)对称。

三、 C编程时常犯的错误。

1.书写标识符时,忽略了大小写字母的区别

代码语言:javascript
复制
main() 
{ 
 int a=5; 
 printf("%d",A); 
} 

编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。 2. 忽略了变量的类型,进行了不合法的运算

代码语言:javascript
复制
main() 
{ 
float a,b; 
printf("%d",a%b); 
} 

%是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。 3. 将字符常量与字符串常量混淆

代码语言:javascript
复制
char c; c="a"; 

在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“\0”作字符串结束标志,它是由系统自加上的,所以字符串“a”实际上包含两个字符:‘a'和‘\0',而把它赋给一个字符变量是不行的。 4. 忽略了“=”与“==”的区别 C语言中,“=”是赋值运算符,“==”是关系运算符 5. 忘记加分号

分号是C语句中不可缺少的一部分,语句末尾必须有分号。 例如: a=1 b=1 编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。 6. 多加分号

(1)对于一个复合语句, 例如

代码语言:javascript
复制
{ 
z=x+y; 
t=z/100; 
printf("%f",t); 
}; 

复合语句的花括号后不应再加分号,否则将会画蛇添足。 (2)对于if语句 例如:

代码语言:javascript
复制
if(a%3==0); 
i++; 

本是如果3整除a,则i加1。但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行i++语句,不论3是否整除a,i都将自动加1。 (3)对于for语句

代码语言:javascript
复制
for(i=0;i<5;i++); 
{ 
scanf("%d",&x); 
printf("%d",x); 
} 

本意是先后输入5个数,每输入一个数后再将它输出。由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。 7. 输入变量时忘记加地址运算符“&”

代码语言:javascript
复制
int a,b; 
scanf("%d%d",a,b); 

这是不合法的。scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。“&a”指a在内存中的地址。但有字符数组 char str[10];写成scanf("%s",&str);就是错误的。C语言编译系统对数组名的处理是:数组名代表该数组的起始地址,且scanf函数中的输入项是字符数组名,不必要再加地址符&。应改为:scanf("%s",str); 8. 输入数据的方式与要求不符。

①scanf("%d%d",&a,&b); 输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法: 3,4 输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。 ②scanf("%d,%d",&a,&b); C语言规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据 时应输入与这些字符相同的字符。下面输入是合法的: 3,4 此时不用逗号而用空格或其它字符是不对的。 9. 输入字符的格式与要求不一致。

在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。

代码语言:javascript
复制
scanf("%c%c%c",&c1,&c2,&c3);  

如输入a b c 字符“a”送给c1,字符“ ”送给c2,字符“b”送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。 10. 输入输出的数据类型与所用格式说明符不一致。

例如,a已定义为整型,b定义为实型 

代码语言:javascript
复制
a=3;b=4.5;   
printf("%f%d\n",a,b); 

编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。 11. 输入数据时,企图规定精度 

代码语言:javascript
复制
scanf("%7.2f",&a);   

这样做是不合法的,输入数据时不能规定精度。 12. switch语句中漏写break语句  例如:根据考试成绩的等级打印出百分制数段。

代码语言:javascript
复制
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;”。例如 

代码语言:javascript
复制
case 'A':printf("85~100\n");break; 

13. 忽视了while和do-while语句在细节上的区别。

14.定义数组时误用变量。

代码语言:javascript
复制
int n;   
scanf("%d",&n); 
int a[n]; 

数组名后用方括号括起来的是常量表达式,可以包括常量和符号常量。即C不允许对数组的大小作动态定义。 15. 在定义数组时,将定义的“元素个数”误认为是可使用的最大下标值。

16.在不应加地址运算符&的位置加了地址运算符。

代码语言:javascript
复制
scanf("%s",&str);

四、注意事项

1. 每年考题都有部分会更新,因此同学们在做题目的时候要多做总结,掌握方法不能直接记答案 2. 做题时候一定要先找到考试文件夹,看清楚文件安装的路径,例如:考试系统安装在了D盘下面,因此做题的时候我们的考题就都在文件夹D:\KSWJJ\24000001下面,其中24010001表示每个考生的准考证号,做题时候一定要注意自己只能在自己的考试目录下做题,否则不得分 3. 不管是填空题、改错题,还是编程题,都要记得保存,保存按钮在vc++6.0左上角 4. 做编程题时,除了保存还必须进行编译和运行,其中为编译,为执行,当程序没有编译时执行为灰色的,即不能执行,只有编译正确后才能进行执行命令 5. 执行结果必须出现:“Press any key to continue”字样才能生成out.dat文件,如果没有出现该语句则应该注意是否自己的测试数据有没有输入正确。


学习有困难怎么办,快来加入微信群和大家交流吧。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 计算机二级C语言 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档