湖南省计算机水平考试强化培训班二级C语言Word文件下载.docx
《湖南省计算机水平考试强化培训班二级C语言Word文件下载.docx》由会员分享,可在线阅读,更多相关《湖南省计算机水平考试强化培训班二级C语言Word文件下载.docx(33页珍藏版)》请在冰豆网上搜索。
10)c=c+1;
可改成:
0&
4.switch语句
格式:
switch(表达式)
{
case常量1:
语句序列1;
[break;
]
case常量2:
语句序列2;
…
case常量n:
语句序列n;
default:
语句序列n+1;
注意:
(1)表达式运算的结果是整数;
(2)有无break语句的执行不同。
循环结构
1.while语句
格式:
while(表达式)
{循环体}
2.do~while语句
do
{
循环体;
}while(表达式);
3.for语句
for(表达式1;
表达式2;
表达式3)
{循环体;
对于上述三种循环结构要了解下面几个问题:
(1)表达式是循环控制条件,与if语句中的表达式一样。
(2)三种循环语句的执行过程。
#include"
stdio.h"
voidmain()
{inta,b;
for(a=1;
a<
=9;
a++)
{printf("
a=%d:
"
a);
for(b=1;
b<
=a;
b++)
printf("
%8d"
a*b);
printf("
\n"
);
下面的程序是求表达式的值:
s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+......+(1*2*3*......*n)/(3*5*7*......(2*n+1))
请修改程序中的错误,并运行修改后的程序。
当n=30时,程序的运行结果(按四舍五入保留10位小数)。
程序:
#include<
conio.h>
stdio.h>
math.h>
doublefun(intn)
{doubles,t;
inti;
s=1.0;
t=1.0;
for(i=1;
i<
=n;
i++)
{/*下行有错*/
t=t*n/(2*n+1);
/*下行有错*/
s=t;
}
returns;
main()
{printf("
\n%12.10lf"
fun(30));
4.break和continue语句
函数
1.函数定义的格式
一般格式:
函数类型函数名(形参及形参类型)
{函数体}
注意:
(1)函数类型的定义:
如果只有一个返回值,根据返回值的数据类型来定义。
无返回值或2个或2个以上,函数类型定义为void.
floatfun(intn)
{floats;
returns;
printf(“%10.2f\n”,fun(20);
(2)形参及形参类型:
每个形参要分别定义其数据类型;
实参将值单向传递给形参。
voidfun(intx,inty)
{x=x+1;
y=y+1;
inta=10,b=20;
fun(a,b);
printf(“a=%d,b=%d\n”,a,b);
(3)函数体中的return语句只能返回一个值。
2.函数调用格式:
函数名(实参列表)
实参与形参应一一对应,数据类型与个数也应一一对应。
TC参数传递方向从右向左。
3.函数调用方式:
递归调用
数组
1.数组的定义
一维数组:
数据类型数组名[常量]
二维数组:
数据类型数组名[常量1][常量2]
(1)数组元素下标从0开始到长度减1
inta[5];
数组元素有:
a[0]a[1]a[2]a[3]a[4]
下标从0变化到4,可以使用一个循环变量来控制,如:
for(i=0;
=4;
i++),i的变化恰好是下标值的变化。
inta[3][4];
a[0][0]a[0][1]a[0][2]a[0][3]
a[1][0]a[1][1]a[1][2]a[1][3]
a[2][0]a[2][1]a[2][2]a[2][3]
同样以上一样,可以用一个双层循环来控制二维数组下标的变化:
for(i=0;
=2;
i++)
for(j=0;
j<
=3;
j++)
2.数组的引用
两种方式:
引用数组元素名(直接方式)和引用数组名。
(1)引用数组元素名时,可把数组元素名看作是单个的变量来使用。
scanf(“%d”,&
a[0]);
a[0]=10;
(2)引用数组名时,数组名只能作函数参数,且传递整个数组。
在被调函数中对形参数组操作,形参数组的值能返回到实参数组。
voidfun(intb[],intn)
{intk;
for(k=0;
k<
n;
k++)
b[k]=b[k]+1;
{inta[5]={0,1,2,3,4},k;
fun(a,5);
5;
printf(“%8d”,a[k]);
特殊问题
1.数据的输入与输出
scanf(“格式控制字符串”,输入地址列表);
该函数出错的四个问题:
(1)格式字符选择不对;
常见的是所有的数据都采用d%.
数据类型
格式字符
int
%d
longint
%ld
unsignedint
%u
unsignedint
%lu
float
%f
double
%lf
char
%c
字符串
%s
(2)输入地址列表出错,无地址运算符,只有变量名。
scanf(“%f”,x);
正确的是:
scanf(“%f”,&
x);
(3)格式控制字符串中的字符在数据输入时必须原样输入。
scanf(“x=%f,a=%d\n”,&
x,&
a);
正确的输入是:
x=12,a=345\n
(4)数据输入格式不对。
格式串中有其它字符时,必须按上述(3)进行。
对于数值型数据的输入,如果没有其它字符分隔,有两种办法:
用空格分隔多个数据,或每输入一个数据换行。
特别是数组的输入,常用空格分隔。
输出函数printf(“格式控制字符串”,输出项列表);
%lf或%f
说明:
(1)在输出语句的普通字符是原样输出;
(2)%md中是m是规定输出项的宽度;
(3)%m.nf中m是域宽,n是保留小数位数,系统会自动进行四舍五入。
2.程序中分号引起的错误
程序中原则上每一行有一个分号,每一个分号对应C语言的一个语句,而导致算法出错的是多加了分号,少了分号系统编译的时就会出错。
常见错误:
正确
错误
if(表达式);
语句;
else语句2;
if(表达式);
语句1;
{...}
while(表达式);
for(表达式1;
{...}
表达式3);
注:
for语句中分号分隔三个表达式,分号不能省
复合语句:
{t=a;
b=t};
函数定义:
函数类型函数名(形参及类型)
函数类型函数名(形参及类型);
结构体定义:
structstu
{intx;
floaty;
};
3.运算符使用出错
在程序设计中,使用运算符时常出现以下错误:
运算符
*
表达式时不能缺省,特别是
平方和立方
/
与转义字符\混淆;
两个整数相除,结果为整数
实数不能进行求余运算
类型强化转换运算符
正确:
(float)(a+b)(float)a/b
错误:
float(a+b)float(a/b)
与&
和||运算符出错
a>
c与a>
c
、||
连接两个条件,常用逗号连接
==
a==ba=b
4.赋初值问题
定义了变量或数组,当第一次使用变量或数组元素时,如果变量或数组元素参与计算或需要输出其值时,则必须赋初始值。
特别是变量或数组元素第一次使用出现在赋值号的右边时,则一定要有初始值。
一般情况下:
求和变量赋初值为0,求积变量赋初始值为1。
三种方式赋初始值:
(1)变量初始化:
定义变量时赋初始值。
inta=1;
floaty=1.23;
(2)采用赋值语句赋值
inta;
a=1;
y=1.23;
(3)采用格式化数据输入函数scanf()
inta;
scanf(“%d%f”,&
a,&
y);
5.函数
函数定义格式:
函数返回值数据类型说明函数名(形参及类型)
变量说明部分;
语句执行部分;
(1)当被定义函数有一个返回值,函数数据类型应根据返回的值的数据类型定义,且函数体中有return语句。
其它函数的数据类型定义为void。
定式如下:
(****代表同一种数据类型)
****fun(形参及类型)
****x;
………
returnx;
{****s;
….
s=fun(…);
….}
如:
floatadd(floatx,floaty)
{floatz;
z=z+y;
returnz;
{floatop1,op2,sum;
scanf(“%f%f”,&
op1,&
op2);
sum=add(op1,op2);
printf(“%f\n”,sum);
(2)参数传递
传递方式:
实参将值单向一一对应传递给形参。
TC中参数方向是从右向左。
voidfun(intx,int*y)
{…}
{inta=10,b;
……
fun(,);
…..
6.判断取整的问题
例判断整数n是否是一个整数的平方
可利用下述算法:
intk;
k=sqrt(k);
if(k*k==n)
7.程序中出现的函数:
sqrt(x)fabs(x)fmod(x,y)x%y
改错题
单击”考生文件夹”,进入下面界面
首先看清题目,有几个错误提示行,则必须改正几个错误。
每一个错误在提示行的下一行。
运行程序,填上正确的答案。
前后不要加空格,数据输出不要在汉字输入状态
举例:
1.输入函数变量前没有取地下址运算符
下面的程序中,函数fun的功能是:
根据形参m,计算下面公式的值。
T=1+1/(2*3)+1/(3*4)+......+1/(m*(m+1))
请改正程序中的错误,并运行改正后的程序。
当从键盘输入56时,给出程序运行的正确结果。
doublefun(intm)
{doublet=1.0;
inti=2;
for(i=2;
=m;
/*下行有错*/
t=1.0/(i*(i+1));
returnt;
{intm;
\n请输入一个整数:
"
/*下行有错*/
scanf("
%d"
m);
%lf\n"
fun(m));
2.变量数据类型定义为整数,进行除法运算时,要转化为实数运算。
下列程序的功能是:
求出以下分数序列的前30项之和,2/1,3/2,5/3,8/5,13/8,21/13,……请改正程序中的错误,并运行修改后程序,给出程序结果(按四舍五入保留6位小数)。
{longa,b,c,k;
doubles;
s=0.0;
a=2;
b=1;
for(k=1;
=30;
s=s+a/b;
c=a;
a=a+b;
b=c;
%lf\n"
s);
3.变量赋初值错误。
(一般的情况:
求和变量初值为0,求积初始值为1)。
以下程序求[1,1000]之间能被5和7整除的数之和。
请改正程序中的错误,并运行修改后的程序,给出正确程序运行结果,填入相应窗口。
inti,sum;
/*下行有错*/
sum=1;
for(i=1;
=1000;
if((fmod(i,5)==0)||(fmod(i,7)==0))
sum=sum+i;
%d\n"
sum);
4.运算出错。
常见的错时:
%用/,==用!
=,||用&
可反过来用。
以下程序求[1,1000]之间能被5和7整除的数之和。
5.边缘条件出错误,应该是<
=或>
=时,只有<
或>
.
以下程序求[1,500]之间能被3或5整除的数之和。
请改正程序中的错误,并运行修改后的程序,给出正确程序运行结果.
inti;
intsum;
sum=0;
500;
{if((fmod(i,3)==0)||(fmod(i,5)==0))
sum+=i;
7.算法出错
下面的程序是求500以内的所有的素数之和。
请修改程序中的错误,使它能得出正确的结果,并给出正确结果。
intprime(intn)
{intyes,i;
if(n<
=1){return1;
yes=1;
for(i=2;
i<
=sqrt(n);
if(n%i==0){yes=0;
break;
return1;
{intsum=0,i;
=500;
if(prime(i))sum+=i;
sum);
7.“+”与“++”用法出错。
以下程序求[1,500]之间能被5和7整除的数之和。
for(i=4;
{if((fmod(i,5)==0)&
(fmod(i,7)==0))
sum=++i;
8.表达式出错(“*”导致的错误)
T=1+1/(2*3)+1/(3*4)+……+1/(m*(m+1))
当从键盘输入70时,给出程序运行的正确结果。
/*下行程序有错*/
t+=1.0/i*(i+1);
return;
&
m);
fun(m));
9.结果是求个数,不是求累加和。
下面程序是求[20,1000]之间同时满足除4余3或除5余4条件的数的个数。
请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。
intcount;
count=0;
for(i=20;
if(fmod(i,4)==3||fmod(i,5)==4)
count+=i;
%ld\n"
count);
10.For语句的三个表达式出错。
s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+......+(1*2*3*....*n)/(3*5*7*.....(2*n+1))
当n=20时,程序的运行结果(按四舍五入保留10位小数)。
/*下行有错*/
i--)
{t=t*i/(2*i+1);
s+=t;
fun(20));
11.函数数据类型定义或变量数据类型定义出错
下面的程序是计算如下公式的A30值。
A1=1,A2=1/(1+A1),A3=1/(1+A2),A4=1/(1+A3),......
请改正程序中的错误,并给出程序运行的正确结果(按四舍五入保留10位小数)
程序:
{/*下行有错*/
intA=1;
A=1/(1+A);
return;
%12.10lf\n"
12.奇偶数问题
下面程序是求[20,160]之间的所有偶数的平方和。
longsum;
sum=0;
160;
if(fmod(i,2)!
sum+=i*i;
填空题
(1)阅读题目,搞清题意;
(2)阅读程序,理解算法,特别是程序中每个变量的作用.
(3)根据程序运行,计算和估算,发现程序中缺什么,需要补充什么?
已知24有8个因子,而24正好被8整除。
求[50,250]之间有多少个整数能被其因子的个数整除,将下列程序补充完整,把程序运行的正确结果填入相应窗口。
inta,b,c,n,count=0;
for(a=50;
a<
=250;
a++)
________
for(c=1;
c<
c++)
if(_______)
b+=1;
if(a%b==0)
count++;
1.补充变量定义和赋初值
如:
以下程序求[1,700]之间能被3或7整除的数之和。
请将程序补充完整,把程序运行的正确结果填入相应窗口。