C程序设计复习资料(含答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C程序设计复习要点
第一章概述
1.C程序的构成与结构特点
2.C程序上机调试过程与流程
第二章数据类型、运算量与表达式
1.数据类型的种类(基本数据类型和构造数据类型)
2.常量的数据类型及其表示(表示方法、存储字节数与表数范围)——整、实、字符、字符串和转义字
符
3.变量的命名、定义方法与赋初值
4.各种表达式及其运算规则——优先级、结合性、类型自动转换与强制转换
●算术运算符、表达式及其构造(注意“/”和“%”特殊性)
●自增、自减运算符及其简单表达式运算
●赋值运算符及其表达式(注意复合赋值运算符的运算方法)
●逗号运算符及其表达式
第三章流程控制
1.赋值语句的一般形式、赋值过程及赋值规则(注意左右数据类型的一致或兼容)
2.输入和输出函数的格式、功能及用法(只要求常用的格式控制符d, f, c, s),提醒注意:
●格式输出中域宽和小数位数的控制
●格式输入与输出中普通字符的原样输入和输出问题
●熟悉并区别以下函数:putchar()、printf()、puts();getchar()、scanf()、gets()
3.关系运算符及其表达式、逻辑运算符及其表达式和条件运算符及其表达式的运算规则(优先级、结合
性)
4.关系表达式与逻辑表达式的构造(根据已知条件写表达式)
5.if语句的三种形式:if …语句、if …else …语句、if 语句的嵌套
●if 语句的格式与用法:简单if、嵌套if、并列if
●逻辑关系与执行过程
●嵌套规则(重点掌握if …else …if …else …if …else)
6.switch语句的格式与用法
7.*熟练使用if和switch语句阅读和编写较为简单的选择结构程序
8.三种循环语句:while() …、do …while()、for()的格式、执行过程及其用法
●循环变量初始化、循环条件构造、循环体所要实现的任务和控制变量修改
注意循环期间与结束时循环控制变量的取值问题
9.结合例题理解和区别break与continue语句的作用及其用法
10.本章涉及的主要算法:累加(计数)、累乘、递推、穷举、判素数、求最大公约与最小公倍等
11.*熟练使用三种循环语句并结合以上算法阅读和编写较为简单的循环结构及其嵌套程序
第四章复杂数据类型
1.一维、二维数组的定义、初始化及其引用方法(数据输入、输出、存储与处理)
2.字符数组的定义、初始化及其引用(字符串输入、输出、存储与处理)
3.常用字符串处理函数:gets()、puts()、strlen()、strcmp()、strcpy()
4.数组涉及的主要算法:排序、极值、逆序、回文和字符串的连接、复制、求长度等
5.*熟练使用数组并结合以上算法阅读和编写较为简单的程序
6.指针的概念:指针、指针变量、指针运算(*、&、++、--、+、-)
7.变量、数组和字符串指针的定义、指向与引用(仅限于一维数组)
8.了解指针数组与二级指针的概念和定义
9.*能够阅读并理解使用指针进行数据处理的相关程序(极值、逆序、回文和字符串的连接、复制、求
长度等)
10.结构体与共用体的概念、定义与引用(仅限概念)
第五章结构化程序设计与应用
1.熟悉程序的三种基本结构:顺序、选择和循环
2.*通过其中部分例题掌握选择、循环语句的使用以及循环和数组涉及的主要算法
第六章函数与编译预处理
1.掌握函数的定义、声明和调用方法及参数传递方式
2.*结合相关例题掌握一般函数和递归函数的定义与使用
3.熟悉局部变量与全局变量的定义及作用范围,了解各种静态与动态变量的定义、作用范围与生存期
4.了解内部函数与外部函数的定义及调用规则
5.掌握宏定义与宏展开(重点掌握带参数宏的定义与展开)
6.了解文件包含的作用及其使用场合
第七章文件
1.了解文件的概念
2.熟悉文件打开、关闭及各种与文件读写有关函数的格式与用法
特别提醒:以上带*部分主要涉及程序阅读、程序填空和编写程序,其余部分主要以选择和概念填空题出现
3ae bc C语言程序设计参考题型
说明:★本题仅反映考试的题型,作为考前复习参考。
★要通过这些典型题目,掌握复习要点中所列内容。
所给题目不可死记硬背,而是通过题目掌握其涉及要点和重要算法。
一、单项选择题
1.C程序的基本构成单位是【C 】
A)文件B)命令C)函数D)语句
2.下列叙述中错误的是【C 】
A)C程序中main( )函数的位置可以任意
B)C程序可以由多个程序文件组成, 而一个程序文件又可以由一个或多个函数组成
C)每个程序文件都有一个main( )函数
D)C程序总是从main( )开始执行,也是由它结束
3.将C源程序转换为目标程序的过程称为【B 】
A)编辑B)编译C)连接D)运行
4.C语言中最基本的数据类型包括【B 】
A)整型、实型、逻辑型B)整型、实型、字符型
C)整型、逻辑型、字符型D)整型、实型、字符串型
5.以下不合法的用户标识符是【C 】
A)j2_KEY B)Double C)4d D)_8_
6.C源程序中不能表示的数制是【A 】
A)二进制B)八进制C)十进制D)十六进制
7.以下合法的字符常量的是【A 】
A)'\x13' B)'\081' C)'65' D)"\n "
8.以下选项中,能用作数据常量的是【D 】
A)o115 B)0118 C)1.5e1.5 D)115L
9.C语言中,要求运算对象必须是整型数据的运算符是【A 】
A)% B)/ C)\ D)&&
10.表示数学关系“x≥y≥z”的C语言表达式是【C 】
A)x>=y>=z B)x>=y || y>=z C)x>=y&&y>=z D)x≥y≥z
11.若变量均已正确定义并赋值,以下合法的C语言赋值语句是【A 】
A)x=y==5; B)x=n%2.5; C)x+n=j; D)x=5=4+1;
12.设有定义:int k=0; 以下选项的四个表达式中与其他三个表达式的值不相同的是【A 】
A)k++ B)k+=1 C)++k D)k+1
13.若有代数式:
以下错误的C语言表达式是【 C 】
A)a/b/c*e*3 B)3*a*e/b/c C)3*a*e/b*c D)a*e/c/b*3
14.设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为【C 】
A)int B)float C)double D)不确定
15.若p和x已经正确定义,x已赋值,并且p=&x,则下列关系表达式之值为1的是【B】
A)p==x B)*p==x C)&p==x D)*x==p
16.当用户要求输入的字符串中含有空格时,应使用的输入函数是【C 】
A)scanf() B)getchar() C)gets() D)getc()
17.下列能输出字符数组str中字符串的语句是【B 】
A)printf("%c",str[0]); B)printf("%s",str);
C)printf("%s",str[]); D)putchar(str);
18.有输入语句:
scanf("B%d,%d",&a,&b);
为使变量a、b分别为5和3,从键盘输入数据的正确形式为【 B 】A)5 3<回车> B)5,3<回车> C)a=5 b=3<回车> D)a=5,b=3<回车> 19.定义如下变量和数组:
int j;
int x[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是【 C 】for(j=2; j>=0; j--)
printf("%2d",x[j][2-j]);
A)1 5 9 B)1 4 7 C)7 5 3 D)3 6 9
20.执行下面程序后,a的值是【B 】
#define SQR(x) x*x
void main( )
{ int a=10,k=2,m=1;
a=SQR(k+m);
printf("%d\n",a);
}
A)10 B)5 C)2 D)1
21.简单if语句的基本形式:if(表达式)语句【D 】
其中“表达式”
A)必须是逻辑表达式B)必须是关系表达式
C)必须是逻辑表达式或关系表达式D)可以是任意合法的表达式
22.在嵌套使用if语句时,C语言规定else总是【C 】
A)和之前与其具有相同缩进位置的if配对B)和之前与其最近的if配对
C)和之前与其最近的且不带else的if配对D)和之前的第一个if配对
23.下列叙述中正确的是【D 】
A)break语句只能用于switch语句
B)在switch语句中必须使用default
C)break语句必须与switch语句中的case配对使用
D)在switch语句中,不一定使用break语句
24.有以下程序段:
x=-1;
do
x=x*x;
while(!x);
执行时,循环体执行的次数为【B 】A)0 B)1 C)2 D)不确定
25.以下不正确的if语句形式是【C 】
A)if(x>y&&x!=y); B)if(x==y) x+=y;
C)if(x!=y) scanf("%d",&x) else scanf("%d",&y); D)if(x<y) {x++;y++;}
26.以下程序的输出结果是【C 】
void main( )
{ int x=2,y=-1,z=2;
if(x<y)
if(y<0) z=0;
else z+=1;
printf("%d\n",z);
}
A)0 B)1 C)2 D)3
27.以下能正确计算1×2×3×…×10的程序段是【A 】
A)i=1,s=1; B) s=1;i=1;
do while(i<=10)
{s=s*i;i++;} s=s*(++i);
while(i<11);
C)for(i=1,s=0;i<=10;i++) D) for(i=1,s=1;;i++)
s=s*i; s=s*i;
28.若j为整型变量,则以下循环执行次数是【C 】
for(j=0;j==0;) printf("%d",j--);
A)无限次B)0次C)1次D)2次
29.若有说明:int a[10];则对a数组元素的正确引用是【C 】
A)a[3.5] B)a(8) C)a[6-5] D)a[10]
30.若有定义语句:double x[5]={1.0,2.0,3.0,4.0,5.0}, *p=x;则错误引用x 数组元素的是【B 】
A)*p B)x[5] C)*(p+1) D)*x
31.C中,一个char类型的数据在内存中占用的字节数是【A 】
A)1 B)2 C)4 D)8
32.设有程序段:
int k=5;
while (k<=0)
k--;
则下列描述中正确的是【 C 】A)while循环执行5次B)循环是无限循环
C)循环语句一次也不执行D)循环体语句执行一次
33.下面程序段的运行结果是【B 】
char c[5]={ 'a', 'b', '\0', 'c', '\0' };
printf(“%s”, c);
A)'a''b' B)ab C)Abc D)"abc"
34.以下不正确的字符串赋值语句是【C 】
A)char *s; s="abcde"; B)char s[ ]="abcde";
C)char s[10]; s="abcde"; D)char *s="abcde";
35.设p1、p2是指向int型一维数组的指针变量,k为int型变量,以下错误的语句是【B 】
A)k=*p1+*p2; B)p2=k; C)p1=p2; D)k=p2-p1;
36.下面程序的输出结果是【A 】
void main( )
{ char s[]= "ABCD";
char *p;
for (p=s;p<s+4;p++)
printf(“%s\n”, p);
}
A)ABCD B) A C)D D) ABCD
BCD B C ABC
CD C B AB
D D A A
37.以下关于C函数的定义和调用描述正确的是【B 】
A)函数的定义可以嵌套,但函数的调用不可嵌套
B)函数的调用可以嵌套,但函数的定义不可嵌套
C)函数的定义和调用均可以嵌套
D)函数的定义和调用均不可嵌套
38.以下关于变量的存储类型和作用域说法错误的是【C 】
A)函数内定义的变量默认存储类型为auto,函数调用结束时释放其值
B)静态局部变量的生存期虽然被延长,但作用范围依然只限于所在函数内有效
C)寄存器变量主要用于使用频度较高的变量,其资源依然使用计算机内存
D)外部变量可以跨文件使用,但静态外部变量不允许跨文件使用
39.以下关于变量的作用域叙述不正确的是【D 】
A)在函数内部定义的变量是局部变量
B)函数中的形式参数是局部变量
C)局部变量的作用范围仅限于其所在函数或复合语句
D)全局变量的作用范围仅限于其所在的文件
40.以下关于C函数参数说法不正确的是【B 】
A)实参可以是常量、变量和表达式B)形参可以是常量、变量和表达式
C)实参和形参可以为任意数据类型D)实参与对应的形参类型一致
41.以下关于C函数返回值的叙述正确的是【D 】
A)被调函数中只有使用return语句才能返回主调函数
B)使用一个return语句可以返回多个函数值
C)函数返回值类型取决于return语句中的表达式类型
D)函数返回值类型取决于定义该函数时所指定的类型
42.以下数组定义中错误的是【B 】
A)int x[][3]={0}; B)int x[2][3]={{1,2},{3,4},{5,6}};
C)int x[][3]={{1,2,3},{4,5,6}};D)int x[2][3]={1,2,3,4,5,6};
43.若有定义语句:char s[10]="1234567\0\0";则strlen(s)的值是【A】
A)7 B)8 C)9 D)10
44.给定以下程序段:
int n=10;
while (n>6)
{ n--;
printf(“%3d”,n);
}
以上程序段输出结果是【D】A)10 9 8 B)9 8 7 C)10 9 8 7 D)9 8 7 6
45.若i,j已定义为int型,则以下程序段中内循环总的执行次数是【C 】
for (i=5; i>0; i--)
for (j=1; j<6; j++)
{……}
A)30 B)24 C)25 D)20
46.若已定义:float *p, m=3.14159; 则使p指向m正确的赋值语句是【B 】
A)p=m; B)p=&m; C)*p=m; D)*p=&m;
47.若已定义:char s[10]; 则下面表达式中不能作为s[1]地址的是【A 】
A)s++ B)s+1 C)&s[0]+1 D)&s[1]
48.已知:int a=3, b=5, t; 要将a和b中的数值进行交换,错误
..的程序段是【C 】A)a=a+b; b=a-b; a=a-b; B)t=a; a=b; b=t;
C)t=a; b=a; a=t; D)t=b; b=a; a=t;
49.关于C程序中的#include <math.h>,错误
..的描述是【 D 】A)它是C语言的预编译命令B)在程序中该行尾部不需要分号
C)用于将math.h包含进来D)math.h是一个函数
50.下列C程序段的输出结果是【C 】
int a=0;
switch(a)
{ case 0: printf(“a=0”);
case 1: printf(“a=1”);
default: printf(“default”);
}
A)a=0 B)a=0default C)a=0a=1default D)default
51.已知:int a, x, y; 有语法错误
..的C语句是【 B 】A)while(x) y++; B)while(x+y=0) a++;
C)while(x<y); D)while(y=5) ++x;
52.对于do … while( )语句,错误
..的说法是【C 】A)用条件控制循环体的重复执行B)循环体至少要执行一次
C)循环体有可能一次也不执行D)循环体中可以包含若干条语句
53.已知:int a, x, y; 有语法错误
..的C语句是【 B 】A)while(x) y++; B)while(x+y=0) a++;
C)while(x<y); D)while(y=5) ++x;
54.已知:int a[5], *p=a; 利用p为数组元素a[4]赋值的正确C语句是【B】
A)scanf(“%d”, p+3); B)scanf(“%d”, p+4);
C)scanf(“%d”, *(p+3)); D)scanf(“%d”, *(p+4));
55.对于C语句:char *a[2]={“abcd”, “ABCD”}; 叙述正确的是【B 】
A)a是指针变量B)a是指针数组C)a是数组指针 D)a是字符串
56.设有如下说明语句:
struct ex
{ int x; float y; char z; } example;
则下面叙述中不正确的是【 B 】A)struct是结构体类型的关键字B)example是结构体类型名
C)x, y, z都是结构体成员名D)struct ex是结构体类型名
57.有以下程序
#include <stdio.h>
struct ord
{ int x,y;} dt[2]={1,2,3,4};
void main()
{ struct ord *p=dt;
printf(“%d,”,++p->x); printf(“%d\n”,++p->y);
}
程序的运行结果是【B 】A)1,2 B)2,3 C)3,4 D)4,1
58.设有以下定义【D 】
union data
{ short int d1; char d2; }demo;
则下面叙述中错误的是____。
A)变量demo与成员d1所占的内存字节数相同
B)变量demo中各成员的地址相同
C)变量demo和各成员的地址相同
D)若给demo.d1赋256后, demo.d2中的值是256
59.设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为【B 】
A)EOF B)非0值C)0 D)NULL
60.读取二进制文件的函数调用形式为:fread(buffer,size,count,fp); 其中buffer代表的是【C 】
A)一个文件指针,指向待读取的文件
B)一个整型变量,代表待读取的数据的字节数
C)一个内存块的首地址,即读入数据存放的地址
D)一个内存块的字节数
61.C语言编译系统对宏命令的处理是【D 】进行的。
A)在程序运行时B)与源程序中的其他语句同时
C)在程序连接时D)在对源程序中的其它成分正式编译之前
62.若要用fopen函数打开一个新的二进制文件,既能读也能写,则打开方式是【B 】
A)rb+ B)wb+ C)ab+ D)ab
1.赋值表达式x*=y+5的另一种书写形式为___ x=x*(y+5)_______。
2.已知a=10,b=20,c=3,则表达式!a>b || c的值为____1_____。
3.表达式(int)((double)(5/2)+2.5)的值是____4______。
4.若j=3,则表达式(++j)+(j++)的值为_____8_____。
5.若a的原值为4,则表达式“a*=a-=3”运算后,a的值是____1______。
6.若a=5、b=3、c=1,则表达式“a>b>c”的值为___0_______。
7.若有定义:
int a=7;
float x=2.5,y=4.7;
则表达式x+a%3*(int)(x+y)%2/4的值为___2.5_______。
8.整数m既能被3整除又能被4整除的逻辑表达式为____(m%3= =0)&&(m%4= =0) ______。
9.写出代数式0<x<1的C逻辑表达式为___(0<x)&&(x<1)_____。
10.写出判断字符变量c所存字符是否为字母的逻辑表达式为c>=’a’&&c<=’z’||c>=’A’&&c<’Z’。
11.实现变量a和b交换的语句或语句序列是a=a+b; b=a-b; a=a-b; 。
12.若整型变量a 和b 中的值分别为7 和9,要求按以下格式输出a和b的值:
a=7
b=9
请完成输出语句:printf("a=%d\nb=%d", a, b);
13.若有定义:double a[10][5]; 则数组a中行下标最大值为__9__,列下标最大值为__4__。
14.若有定义:int a[ ]={1,4,6,5,8,9}; 则*(a+5) 的值为____9______。
15.设有如下定义int a[5][6],*p; 使p指向数组元素a[4][2]的语句为__ p=&a[4][2]; _______。
16.若有定义:int a[10],*p=a; 则元素a[5]的值用p表示的形式是___ *(p+5)_______。
17.若有定义:int *p[4]; 则标识符p表示_长度为4的一维指针数组________。
18.凡是函数中未指定存储类型的局部变量,其默认的存储类型为____ auto ______。
19.函数有内部函数和外部函数,函数定义时用来说明该函数仅限本文件调用的关键字是__static______。
20.未加特别说明(说明为静态)的全局变量是外部变量,能被其它文件使用,而在引用它的文件中,需
要用关键字____extern_____说明。
1.下面程序的功能是:从键盘输入一个字符,若是大写字母,则转换为小写字母并输出,若为小写字母
则直接输出,请在_____处填上合适内容,使程序完整。
include <stdio.h>
void main( )
{ char ch;
ch=getchar( );
if (ch>='A'&&ch<='Z ) ch+=32;
printf(“%c”, ch);
}
2.下面程序的功能是:求1~100间的偶数和,请在_____处填上合适内容,使程序完整。
#include <stdio.h>
void main( )
{ int num, sum=0;
for (num=2; num<=100; num=num+2)
_ sum=sum+num ;
printf("1-100间的偶数和是:%d\n", sum);
}
3.下面程序段是求n!的递归函数,请将函数补充完整。
double fac(int n)
{ double result;
if (n= =1) result=1;
else result= n*fac(n-1);
return(result);
}
4.以下程序的功能是:输入一整数n,判断是否为素数。
#include <stdio.h>
void main( )
{ int i, n;
scanf(“%d”,&n);
for (i=2; _i<n_; i++)
if (n%i==0)
break;
if (i>=n)
printf(“%d is a prime number.\n”, n);
else
printf(“%d is not a prime number.\n”, n);
}
5.如下程序实现字符串逆序,请在_____处填上合适内容,使程序完整。
#include <stdio.h>
#include <string.h>
void main()
{ char *p1, *p2, c, s[50];
scanf(“%s”, s);
p1=s;p2=s+strlen(s)-1;
for(; p1<p2 ; p1++, p2--)
{
c=*p1;*p1=*p2;*p2=c ;
}
printf(“The new string is %s\n”, s);
}
6.如下程序判断字符串是否回文,请在_____处填上合适内容,使程序完整。
#include <stdio.h>
#include <string.h>
void main()
{ char *p1, *p2, c, s[50];
gets(s);
p1=s;p2= s+strlen(s)-1;
for(; p1<p2; p1++, p2--)
if( *p1!=*p2 ) break;
if( p1<p2 ) printf(“该字串不回文\n”);
else printf(“该字串回文\n”);
}
7.下列程序用来求任意两整数的最大公约数,请在_____处填上合适内容,使程序完整。
#include <stdio.h>
void main( )
{ int temp, m, n, x;
printf("Enter two numbers:\n");
scanf("%d,%d", &m, &n);
if (m<n) temp=m, m=n, n=temp;
for(x=n; ; x--)
if (m%x==0&&n%x==0) __break__;
printf("\n最大公约数为:%d\n",x);
}
8.下列程序用“起泡法”对输入的字符串降序排序,请在_____处填上合适内容,使程序完整。
#include <stdio.h>
#include <string.h>
void main( )
{ void sort(char *s);
char str[20];
printf("请输入字符串:\n");
scanf("%s", str);
sort(str);
printf("排序结果:\n");
puts(str );
}
void sort(char *s)
{ int i, j, n;
char c;
n=strlen(s);
for(i=0; i<n-1; i++)
for(j=i; j<n-i-1; j++)
if(s[j]<s[j+1]) c=s[j], s[j]=s[j+1], s[j+1]=c;
}
9.下列程序功能是:统计给定数据中0~9数字个数。
#include<stdio.h>
void main()
{
int i,data[20]={0,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,0} ;
int count[10]={0} ;
for(i=0; i<20; i++)
count[data[i]]+=1;
for(i=0; i<10; i++)
printf("数字%d的个数:%d\n",i,count[i]);
}
10.如下程序功能是:在十个数中删除指定数据
#include<stdio.h>
void main()
{
int a[10],x,*p,*q;
printf("请输入十个整数:\n");
for(p=a;p<a+10;++p) scanf("%d",p);
printf("请输入待删数据:");
scanf("%d",&x);
for(p=q=a;p<a+10;p++)
if(x!=*p) *q++=*p;
if(q==p) printf("查无此数!\n");
else
{
for(p=a;p<q;) p rintf("%5d",*p++);
printf("\n");
}
}
四、阅读程序
1.include <stdio.h>
void main( )
{ char ch;
int cnt1=0,cnt2=0;
while ((ch=getchar( ))!='\n')
if (ch>='a'&&ch<='z') cnt1++;
else cnt2++;
printf("COUNT=%d\n",cnt1);
}
若输入“This is a C program.”,运行结果:_____ COUNT=13______ 2.#include <stdio.h>
void main( )
{ int i, j, temp;
int a[]={0,1,2,3,4,5,6,7,8,9};
for(i=0, j=9; i<j; i++, j--)
{temp=a[i]; a[i]=a[j]; a[j]=temp;}
for(j=0; j<10; j++)
printf("%2d", a[j]);
}
运行结果:_9 8 7 6 5 4 3 2 1 0_
3.#include <string.h>
#include <stdio.h>
void main( )
{ char str1[80]="good",str2[]="morning";
int i, j;
for(i=strlen(str1),j=0;str2[j]!='\0'; i++, j++)
str1[i]=str2[j];
str1[i]='\0';
printf("string1=%s",str1);
}
运行结果:_ string1=goodmorning
4.#include <stdio.h>
void main( )
{ int i, j, pos;
float val, a[10];
for(i=0; i<10 ;i++)
scanf("%f", &a[i]);
val=a[0];
for(j=0; j<10; j++)
if (a[j]>val)
{val=a[j]; pos=j;}
printf("Max=%f,position:%d", val, pos);
}
本程序的功能是:从键盘输入10个数存到数组a中,求10个数的最大值及其位置
当程序运行时,从键盘输入“1 0 2 9 3 8 4 7 5 6”,运行结果:Max=9.000000,position:3 5.#include <stdio.h>
float average(int x[], int n)
{ int i;
float sum=0;
for(i=0;i<n;i++)
sum+=x[i];
return(sum/n);
}
void main( )
{ int a[5]={2,4,6,8,10};
float rst;
rst=average(a,5);
printf("result=%f\n",rst);
}
运行结果:result=6.000000___
6.给定如下程序:
#include <stdio.h>
void main( )
{ char grade;
scanf(“%c”, &grade);
switch (grade)
{ case 'A': printf("85—100\n"); break;
case 'B': printf("70—84\n"); break;
case 'C': printf("60—69\n"); break;
case 'D': printf("<60\n"); break;
default: printf("error\n");
}
}
当程序运行时,从键盘输入“b”,输出的结果是:_error____
7.给定如下程序:
#include <stdio.h>
void main( )
{ int a[5]={2,5,3,7,6}, i, j, t;
for (i=0; i<4; i++)
for (j=i+1; j<5; j++)
if (a[i]>a[j])
{ t=a[i]; a[i]=a[j]; a[j]=t; }
for (i=0; i<5; i++)
printf(“%3d”, a[i]);
}
该程序的功能是:将a数组中的元素从小到大排序;输出的结果为:2 3 5 6 7 8.给定如下程序:
#include <stdio.h>
void fun( )
{
auto int b=0;
static int c=4;
b++; c++;
printf("b=%d c=%d\n", b, c);
}
void main( )
{
int i;
for (i=0; i<3; i++)
fun( );
}
运行结果是:
b=1 c=5
b=1 c=6
b=1 c=7
9.给定如下程序:
#include <stdio.h>
#include <string.h>
void main()
{ char *p1, *p2, c, s[50];
g ets(s);
p1=s; p2=s+strlen(s)-1;
f or(; p1<p2; p1++, p2--)
{
c=*p1; *p1=*p2; *p2=c;
}
p rintf(“The new string is %s\n”, s);
}
此程序的功能是:从键盘输入一字符串存放到数组s中,将此字符串逆序输出。
当程序运行时,从键盘输入“abc we #y”,输出的结果是:The new string is y# ew cba 10.给定如下程序:
#include <stdio.h>
void main()
{ int fun(char *p);
c har str[80];
g ets(str);
printf(“LEN=%d\n”, fun(str));
}
int fun(char *p)
{ int n=0;
while(*p++) n++;
return(n);
}
此程序的功能是:用函数fun计算字符串的长度,主函数输入字符串,输出字符串长度。
六、按要求编程
1.编程计算1!+2!+3!+…+20!。
#include <stdio.h>
void main()
{
float s=0,t=1;
int n;
for(n=1;n<=20;n++)
{
t=t*n;
s=s+t;
}
printf("1!+2!+....+20!=%e\n",s);
}
2.统计由键盘输入的任一字符串中字母、数字和空格的个数。
#include <stdio.h>
void main( )
{
char ch;
int letters=0,digit=0,space=0;
while ((ch=getchar( ))!='\n')
{
if (ch>='a'&&ch<'z'||ch>='A'&&ch<='Z') letters++;
else if(ch>='0'&&ch<='9') digit++;
else if(ch==' ') space++;
}
printf("letters=%d,digit=%d,space=%d",letters,digit,space);
}
3.编写程序找出1—100之间的素数,并统计素数的个数。
#include <stdio.h>
#include <math.h>
void main()
{
int m,k,i,n=0;
for(m=1;m<=100;m=m+2)
{
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>=k+1)
{
printf("%3d",m);
n=n+1;
}
if(n%10==0) printf("\n");
}
printf("\ntotal number is=%d",n);
}
4.从键盘输入10个数,找出最大值与最小值,并计算它们的平均值。
#include <stdio.h>
void main()
{
float a[10],aver,sum,max,min;
int i;
for(i=0;i<10;i++)
scanf("%f",&a[i]);
max=min=sum=a[0];
for(i=1;i<10;i++)
{
if(a[i]>max) max=a[i];
if(a[i]<min) min=a[i];
sum=sum+a[i];
}
aver=sum/10;
printf("aver=%f,max=%f,min=%f",aver,max,min); }
5.将键盘输入的任意字符串进行逆序并输出。
方法1:
#include <stdio.h>
#include <string.h>
void main()
{
char s[80],t;
int i,j;
gets(s);
j= strlen(s)-1;
for(i=0; i<j; i++, j--)
{ t=s[i];s[i]=s[j];s[j]=t; }
printf(“The new string is %s\n”, s);
}
方法2:
#include <stdio.h>
#include <string.h>
void main()
{
char s[80],t;
int i,j;
gets(s);
j= strlen(s);
for(i=0; i<j/2; i++)
{ t=s[i];s[i]=s[j-1-i];s[j-1-i]=t; }
printf(“The new string is %s\n”, s);
}
方法3:
#include <stdio.h>
#include <string.h>
void main()
{
char *p1, *p2, c, s[50];
gets(s);
p1=s; p2=s+strlen(s)-1;
for(; p1<p2; p1++, p2--)
{
c=*p1; *p1=*p2; *p2=c;
}
printf(“The new string is %s\n”, s);
}
6.判断由键盘输入的字符串是否为回文。
方法1:
#include <stdio.h>
#include <string.h>
void main()
{
char s[80];
int i,j;
gets(s);
j= strlen(s)-1;
for(i=0; i<j; i++, j--)
if( s[i]!=s[j] ) break;
if( i<j ) printf(“该字符串不回文”);
else printf(“该字符串回文”);
}
方法2:
#include <stdio.h>
#include <string.h>
void main()
{
char s[80];
int i,j;
gets(s);
j= strlen(s);
for(i=0; i<j/2; i++)
if( s[i]!=s[j-1-i] ) break;
if( i<j/2 ) printf(“该字符串不回文”);
else printf(“该字符串回文”);
}
方法3:
#include <stdio.h>
#include <string.h>
void main()
{
char *p1, *p2, c, s[50];
gets(s);
p1=s;
p2= s+strlen(s)-1;
for(; p1<p2; p1++, p2--)
if( *p1!=*p2 ) break;
if( p1<p2 ) printf(“该字串不回文\n”);
else printf(“该字串回文\n”);
}
7.找出所有三位数中的水仙花数(各位数字的立方和恰好是本数)。
#include <stdio.h>
void main()
{
int i,j,k,m;
for(m=100;m<1000;m++)
{
i=m/100;
j=m/10-i*10;
k=m%10;
if(m==i*i*i+j*j*j+k*k*k) printf("%4d",m);
}
}
8.已知Fibonacci数列的前两项为1,其后各项为前两项之和。
用递归函数输出此数列的前20项,每行
输出10个数。
#include <stdio.h>
void main( )
{ int f(int n);
int i;
for (i=1;i<=20;i++)
{
printf("%6d",f(i));
if (i%10==0) printf("\n");
}
}
int f(int n)
{ int t;
if (n==1||n==2) t=1;
else t=f(n-1)+f(n-2);
return (t);
}
9.写一个函数求两个整数的最小公倍数,函数原型为:int gb(int m, int n),在主函数中从键盘输入两个整
数,然后调用gb()函数,并输出结果。
#include <stdio.h>
int gb(int m, int n)
{
int x;
for(x=n; ; x++)
if (x%m==0&&x%n==0) break;
return x;
}
void main()
{
int m, n;
printf("Enter two numbers:\n");
scanf("%d,%d", &m,&n);
printf("%d",gb(m,n));
}
10.打印杨辉三角形(10行)。
要求:使用二维数组和循环语句实现。
1
1 1
1 2 1
1 3 3 1
……
方法1:
#include <stdio.h>
void main( )
{
int a[10][10],i,j;
for (i=0;i<10;i++)
{
for (j=0;j<=i;j++)
{
if (i==j||j==0)
a[i][j]=1;
else
a[i][j]=a[i-1][j-1]+a[i-1][j];
printf("%6d",a[i][j]);
}
printf("\n");
}
}
方法2:
#include <stdio.h>
#define N 11
void main()
{
int i,j,a[N][N];
for(i=1;i<N;i++)
{
a[i][i]=1;
a[i][1]=1;
}
for(i=3;i<N;i++)
for(j=2;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=1;i<N;i++)
{
for(j=1;j<=i;j++)
printf("%6d",a[i][j]);
printf("\n");
}
}。