haihongyuan.com
海量文库 文档专家
全站搜索:
您现在的位置:首页 > 初中教育 > 初中作文初中作文

c语言复习题(有答案)●

发布时间:2013-10-11 13:33:51  

思 考 题

不仅要会做这些题,更重要的是要掌握其相关知识点

一、一般填空题

1-1、调用fopen函数打开一文

1-4、getchar函数的原形在头文件【1】中.

1-5、sqrt函数的原形在头文件【1】中.

1-6、如果函数不要求带回值,可用【1】来定义函数返回值为空.

答案:w或w+;a或a+;stdio.h ; stdio.h ; math.h ;void .

2-1、字符串“\1011234\\at”的长度(字符数)是【1】.

2-2、字符串“abc\103\\bcd”的长度(字符数)是【1】.

2-3、字符串“1\\t\x43\abx44”的长度(字符数)是【1】.

2-4、“a“在内存中占【1】个字节.

2-5、‘a’在内存中占【1】个字节.

2-6、“\71“在内存中占【1】个字节.

2-7、一维数组下标的最小值是【1】;数组char a[]=“china” ;在内存应占【1】个字节。 答案:8; 8; 9; 2;1;2 ;0;6.

3-1、设x=(5>1)+2, x的植为【1】.

3-2、表达式‘B’+15+‘\x41’+011+0x10的值是【1】.

3-3、表达式‘b’+5+‘\x42’+011+0x10的值是【1】.

答案:3;171;194;

4-1、假设所有变量都为整型,表达式(a=2,b=5,a>b?a++:b++,a+b)的值是【1】.

4-2、if(!a)中的表达式!a等价于【1】.

4_3、已知a=1,b=2,c=3,执行if(a>b>c) b=a;else b=c;a=4;b=8;后,b的值是【1】.

答案:8;a==0;8;

5-1、若所用变量都已定义,下列程序段的执行结果是【1】.

for(i=1;i<=5;i++);printf(“OK\n”);

5-2、执行语句char s[3]=”ab”,*p;p=s;后,*(p+2)的值是【1】.

5-3、若有以下定义和语句:int a[4]={0,1,2,3},*p; p=&a[2]; ,则*--p的值是【1】. 5-4、下列程序的输出结果是【1】,main(){int a=011;printf(“%d\n”,++a);}

答案:OK;?\0? ;1;10

6-1、若宏定义为:#define y(x) 2+x, 则表达式a=3*y(3)的值为【1】.

6-2、若宏定义为:#define y(x) 2+x, 则表达式a=4*y(2)的值为【1】.

6-3、若宏定义为:#define y(x) 2/x, 则表达式a=4+3*y(3)的值为【1】.

答案:9;10;6 .

二、单项选择题

1-1、若以"a+"方式打开一个已存在的文件,则以下叙述正确的是()。

A:文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作 B:文件打开时,原有文件内容不被删除,位置指针移到文件开头,可作重写和读操作 C:文件打开时,原有文件内容被删除,只可作写操作

D:以上各种说法皆不正确

1-2、若执行fopen函数时发生错误,则函数的返回值是()。

1

A:地址值 B:0 C:1 D:EOF

1_3、若要打开A盘上user子目录下名为abc.txt的文件进行读、写操作,符合要求的是()。

A:fopen(“A:\user\abc.txt”, “r”) B:fopen(“A:\\user\\abc.txt”, “r+”)

C:fopen(“A:\user\abc.txt”, “rb”) D:fopen(“A:\\user\\abc.txt”, “w”)

答案:A;B;B;

2-1、以下属于c语言预先规定的保留字是()。

A:int B:score C:aver D:sum

2-2、下列运算符中优先级最高的是()。

A:< B:+ C:&& D:!=

2-3、下面不正确的字符串常量是()。

A:‘abc? B:??12?12” C:”0” D:” “

2-4、运算对象必须是整型的运算符是()。

A:% B:/ C:= D:<=

2-5、下面错误的常量是()。

A: 0xff B:1.2e0.5 C:2L D:?\72?

2-6、下列变量定义语句中,正确的是()。

A: char: a b c; B:char a; b; c; C:int x;z; D:int x,z;

2-7、sizeof(float)是()。

A:一个双精度型表达式 B:一个整型表达式 C:一种函数调用 D:不合法表达式 2_8、c语言的注释语句开头必须是()。

A:/ B:* C:/* D:?

2_9、设以下变量均为int类型,则值不等于7的表达式是()。

A:(x=y=6,x+y,x+1) B:(x=y=6,x+y,y+1) C:(x=6,x+1,y=6,x+y) D:(y=6,y+1,x=y,x+1) 2_10、C程序的语句结束符是()。

A:; B:: C:. D:换行

2_11、C语言中用于结构化程序设计的三种基本结构是()。

A:顺序结构、选择结构和循环结构 B:if、switch、break

C:for、while、do-while D:if、for、continue

2_12、C语言中,int、char和short三种类型的数据在内存中占用的字节数()。

A:由用户自己定义 B:均为两个字节 C:是任意的 D:由所用机器的字长决定

答案:A;B;A;A;B;D;B;C;C; A;A;D;

3-1、在一个c程序中()。

A:main函数必须出现在所有函数之前 B:main函数的位置没有特别限制

C:main函数必须出现在所有函数之后 D:main函数必须出现固定位置

3-2、已知函数原形声明为:float www(char a, char b); 该函数的类型为()。

A:指向字符型的指针 B:字符型 C:浮点型 D:指向浮点型的指针 3-3、与实际参数为整型数组名相对应的形式参数不可以定义为()。

A:int a[]; B:int *a; C:int a; D:int a[3];

3_4、全局变量的定义不可能在()。

A:函数内部 B:函数外面 C:文件外面 D:最后一行

3_5、putchar函数可以向终端输出一个()。

A:整型变量表达式的值 B:实型变量的值 C:字符串 D:字符或字符型变量值 3_6、数组名作为实际参数传给函数时,数组名被处理为()。

A:数组的长度 B:数组的元素个数 C:数组的首地址 D:数组中各元素的值 2

3_7、C语言中,当调用函数时()。

A:实参和虚参本身各占一个独立的存储单元 B:实参和虚参可以共用存储单元

C:实参和虚参可以由用户指定是否共用存储单元 D:由计算机自动确定是否共用存储单元 3_8、调用函数时,实参和虚参必须保持一致的是()。

4-1、int a=3,b=2,c=1; if(a>b>c)a=b; else a=c; 则a的值为()。

A:3 B:2 C:1 D:0

4-2、下列程序的输出为()。

main()

{ int y=10; while(y--); printf("y=%d\n",y); }

A: y=0 B: while构成无限循环 C: y=1 D: y=-1

4-3、假设所有变量都为整型,表达式(a=2,b=5,a>b?a++:b++,a+b)的值是().

A: 7 B:8 C: 9 D: 2

4-4、以下程序的输出结果是()。

main()

{ int i=010, j=10 ; printf("%d,%d\n",++i,j--); }

A: 11,10 B:9,10 C: 10,9 D: 10,9

4_5、设a=2,且a定义为整型变量,执行语句a+=a-=a*=a;后,a的值为()。

A: 12 B: 144 C: 0 D: 132

4-6、int a=1,b=2,c=3; if(a>c)a=b; a=c;c=b; 则c的值为()。

A:1 B:2 C:3 D:不一定

4-7、若变量a与i已正确定义,且i已正确赋值,合法的语句是()。

A: a==1 B:++i; C:a=a++=5; D:a=int(i);

4_8、strlen(“12\0345\n”)与strlen(“12\0845\n”)的测试结果分别是。

A:相同 B:2和5 C:5和2 D:5和5

4_9、设 char s[10]="\ta\017bc";则数组s所占的字节数是()。

A:9 B:10 C:6 D:7

4_10、设 char *s="\ta\017bc";则指针变量s指向的字符串所占的字节数是()。

A:9 B:5 C:6 D:7

4_11、若i=3,则printf("%d",-i++);输出的值和i的值分别为()。

A:相同 B:-3和4 C:5和2 D:5和5

答案:C;D;B;B; C; B;B;C;B;C;B;

5-1、一维数组定义的格式为:类型说明符 数组名()。

A:[常量表达式] B:[整型表达式] C:[整型常量] 或[整型表达式] D:[整型常量] 5-2、以下能正确定义数组并正确赋初值的邮局语句是()。

A:int N=5,b[N][N]; B: int a[1][2]={{1},{3}};

C: int c[2][]={{1,2},{3,4}}; D: int d[3][2]={{1,2},{34}};

5_3、以下不正确的定义语句是()。

A:double x[5]={2.0,4.0,6.0,8.0,10.0}; B: int y[5]={0,1,3,5,7,9};

C: char c1[]={?1?,?2?,?3?,?4?,?5?}; D: char c2[]={?\x10?,?\xa?,?\x8?};

5_4、在C语言中,引用数组元素时,其数组下标的数据类型允许是()。

A: 整型常量 B:整型表达式 C: 整型常量或整型表达式 D: 任何类型的表达式 5_5、若有说明:int a[10];则对a数组元素的正确引用是()。

A:a[10] B:a[3,5] C:a(5) D:a[10-10]

3 A:在个数上 B:在类型上 C:在顺序上 D:在个数、类型、顺序上 答案:B;C;D;A;D;C;A;D;

3_6、下列数组定义中,正确的是()。

A:int a[][4]; B:int a[][]; C:int a[][][5]; D:int a[3][];

5_7、若有说明:int a[10];则对a数组元素的正确引用是()。

A:a[10] B:a[3,5] C:a(5) D:a[3>1]

答案:A;D;B;C;D;A;D;

6-1、相同结构体类型的变量之间可以()。

A: 相加 B:赋值 C: 比较大小 D: 地址相同

6_2、结构体类型的定义允许嵌套是指()。

A:成员是已经或正在定义的结构体型 B: 成员可以重名

C: 结构体型可以派生 D: 定义多个结构体型

6_3、有如下定义:struct student{char name[20];int age;}wang,*p;p=&wang;,以下不合法的引用为()。

A: p.age B: wang.age C: p->age D: (*p).age

6_4、在定义构造数据类型时,不能()。

A:说明变量 B:说明存储类型 C:初始化 D:末尾不写分号

6_5、当定义一个结构体变量时,系统分配给它的内存是()。

A:各成员所需内存量的总和 B:结构中第一个成员所需内存量

C:结构中最后一个成员所需内存量 D:成员中占内存量最大者所需的容量

6_6、enum a {sum=9,mon=-1,tue};定义了()。

A:枚举变量 B:3个标识符 C:枚举数据类型 D:整数9和-1

6_7、以下各选项企图说明一种新的类型名,其中正确的是()。

A:typedef v1 int; B:typedef v2=int;

C:typedef int v3; D:typedef v4: int;

答案:B;A;A;D;A;C;C;

7-1、若宏定义为:#define y 2+3, 则表达式y*3+3的值为().

A: 14 B:16 C: 18 D: 20

7-2、若宏定义为:#define y 2+3, 则表达式2+y*3的值为().

A: 11 B:13 C: 15 D: 17

7_3、有宏定义为#define Y(a,b) a+b ,则表达式2+Y(2,3)*3的值为().

A: 11 B: 13 C: 15 D: 17

答案:A;B;B;

8-1、如有int *p,a=5,b; 定义,则以下正确的程序段为()。

A: p=&b;scanf(“%d?,&p); B: p=&b; scanf(“%d?,*p);

C: scanf(“%d?,&b); p=b; D: p=&b;p=a;

8-2、若有语句:int a[3][4],*p[3]={a[0],a[1],a[2]}; 不能表示a[2][3]的元素的是()。

A: *(*(a+2)+3) B: *(*(p+2)+3) C: (p[2]+3) D: (*(p+2))

8_3、p1,p2为指向浮点的指针变量,则下列运算错误的是()。

A: *p1-*p2 B: p1++ C: *p1%*p2 D: p1-p2

8_4、有以下定义:int a[2][3];,则对数组元素的正确引用()是。

A: *(*(a+i)+j) B: (a+i)[j] C: *(a+i+j) D: a[i]+j

8_5、若有定义:int (*p)();,则该指针为()。

A: 指向整型的指针 B: 指向字符型的指针 C: 指向整型函数的指针 D: 指向字符型函数的指针 4

8_6、下列正确的定义是()。

① int i,*p=&i; ②int *p=&i,i; ③int *p,i;p=&i;④int *p,i;p=i;⑤int *p,i,p=&i;

A: ①③ B: ②④ C:②⑤ D:④①

答案:D;D;C;A;C;A;

三、多项选择题

1_1、下列选项中合法的标识符有()。

A: good_morning B:main C: stdio.h D: 8abc

答案:AB;

1_2、下列选项中合法的用户标识符有()。

A: page B:short C: _3com D: int

答案:AC;

1_3、下列选项中合法的用户标识符有()。

A: return B:f2_G3 C: a3-3 D: abc

答案: BD;

1_4、以下叙述正确的是()。

A:C语言严格区分大小写英文字母。 B:C语言用“;”作为语句分隔符。

C:C程序书写格式自由:一行内可以写几个语句,一个语句也可以写在几行。

D:可以使用/*?*/对C程序中的任何部分作注释。

答案:ABCD;

1_5、下列对逻辑运算符两侧的运算对象的数据类型描述不正确的是()。

A: 只能是0或1; B:只能是0或非0正数;

C: 可以是整型或字符型数据; D:可以是任何类型的数据;

答案:AB;

1_6、以下对switch语句和break语句中描述错误的有()。

A: 在switch语句中必须使用break语句; B:break语句只能用于switch语句;

C: 在switch语句中可以根据需要使用或不使用break语句; D:break语句是switch语句的一部分; 答案:ABD;

2_1、已定义c为字符型变量,则下列语句中错误的是()。

A: c=?97?; B:c=”97” ; C: c=97; D: c=”a”;

答案:ABD;

3_1、以下正确的是()。

A:预处理命令行必须以‘#’开始。 B:以‘#’开始的都是预处理命令行。

C:程序在执行过程中对预处理命令行进行处理。 D:#define ABCD是正确的宏定义。 答案:ABD;

4_1、在定义int a[2][3]之后,对a[i][j]的正确引用有()。

A: a[0][2] B: a[1,3] C: a[1>2][!1] D: a[2][0]

答案:AC;

4_2、以下对二维数组a正确初始化的是()。

A:static char word[]=?Turbo\0?; B:static char word[]={?T?,?u?,?r?,?b?,?o?,?\0?};

C:static char word[]={“Turbo\0”}; D:static char word[]=”Turbo\0”;

答案:BCD;

5_1、以下4个选项中可以看作是一条语句的有()。

A: {;} B: a=0,b=0,c=0 ; C: if(a>0); D: if(b==0) m=1;n=2;

答案:ABC;

5

5_2、若a、b、c、d都是int型变量且已赋初值0,则正确的赋值语句是()。

A: a=b=c=d=100 ; B: d++; C: c+b; D: d=(c=22)-(b++);

答案:ABD;

5_3、设有以下定义:int a=0;double b=1.25;char c=’A’;

#difine d 2 ,则正确的语句是()。

A: a++; B: b++; C: c++; D: d++;

答案:ABC;

6_1、以下述说中正确的是()。

A:一个c源程序可以由一个或多个函数组成。 B:一个c源程序必须包含一个main()函数。 C:c源程序的基本组成单位是函数。 D:在c源程序中,注释说明只能位于一条语句的最后。 答案:ABC;

6_2、以下对C语言中的函数描述不正确的是()。

A:可以嵌套定义,不可以嵌套调用。 B:不可以嵌套定义,可以嵌套调用。

C:可以嵌套定义,也可以嵌套调用。 D:嵌套定义和嵌套调用都不允许。

答案:ACD;

四、程序填空

1、功能:计算平均成绩并统计90分以上人数。成绩数据以一负数作为结束标志。 #include <stdio.h>

void main(void)

{

int n,m;float grade,average;

/***********SPACE***********/

average=n=m=【?】;

while(1)

{

/***********SPACE***********/

【?】("%f",&grade);

if(grade<0) break;

n++;

average+=grade;

/***********SPACE***********/

if(grade<90)【?】;

m++;

}

if(n) printf("%.2f%d\n",average/n,m);

}

答案: 1). 0 或 0.0 2). scanf 3). Continue

2、功能:找出一维数组中最大值和此元素的下标,数组元素的值由键盘输入。 #include "stdio.h"

void main()

{

int a[10],*p,*s,i;

for(i=0;i<10;i++)

/***********SPACE***********/

scanf("%d", 【?】);

/***********SPACE***********/

for(p=a,s=a;【?】<10;p++)

if(*p>*s) s=p;

/***********SPACE***********/

printf("max=%d,index=%d\n",【?】,s-a);

}

答案:1). a + i 或 &a[i] 2). p-a 或 -a+p 3). *s

6

3、功能:输入学生成绩并显示。

# include <stdio.h>

struct student

{

char number[6];

char name[6];

int score[3];

} stu[2];

void output(struct student stu[2]);

void main(void)

{

int i, j;

/***********SPACE***********/

for(i=0; i<2; 【?】)

{

printf("请输入学生%d的成绩:\n", i+1);

printf("学号:");

/***********SPACE***********/

scanf("%s", 【?】.number);

printf("姓名:");

scanf("%s", stu[i].name);

for(j=0; j<3; j++)

{

printf("成绩 %d. ", j+1);

/***********SPACE***********/

scanf("%d", 【?】.score[j]);

}

printf("\n");

}

output(stu);

}

void output(struct student stu[2])

{

int i, j;

printf("学号 姓名 成绩1 成绩2 成绩3\n"); for(i=0; i<2; i++)

{

printf("%-6s%-6s", stu[i].number, stu[i].name); for(j=0; j<3; j++)

printf("%-8d", stu[i].score[j]);

printf("\n");

}

}

答案:

1). i++ 或 ++i 或 i=i+1 或 i+=1

2). stu[i]

3). &stu[i]

4、功能:输入两个整数x,y,请把这两个数由小到大输出。 #include <stdio.h>

void main(void)

{

int x,y,t;

/***********SPACE***********/

scanf("%d%d",【?】);

/***********SPACE***********/

if (【?】)

7

/***********SPACE***********/

{【?】}

printf("small to big: %d %d\n",x,y);

}

答案:

1). &x,&y 或 &y,&x

2). x>y 或 x>=y 或 y<x 或 y<=x

3). t=y;y=x;x=t; 或 t=y,y=x,x=t; 或 t=x;x=y;y=t; 或 t=x,x=y,y=t;

5、功能:输出结果为:

* * * * *

* * * * *

* * * * *

* * * * *

#include <stdio.h>

void main(void)

{

/***********SPACE***********/

static char 【?】={'*','*','*','*','*'};

int i,j,k;

char space=' ';

for(i=0;i<5;i++)

{

printf("\n");

for(j=1;j<=3*i;j++)

/***********SPACE***********/

printf("%1c",【?】);

/***********SPACE***********/

for(k=0;k<【?】;k++)

printf("%3c",a[k]);

}

printf("\n");;

}

答案: 1). a[5] 或 a[] 2). space 或 ' ' 3). 5 或 =4

6、功能:下面函数为二分法查找key值。数组中元素已递增排序,若找到key则返回对应的下标,否则返回-1。

#include <stdio.h>

fun(int a[],int n,int key)

{

int low,high,mid;

low=0;

high=n-1;

/***********SPACE***********/

while(【?】)

{

mid=(low+high)/2;

if(key<a[mid])

/***********SPACE***********/

【?】;

else if(key>a[mid])

/***********SPACE***********/

【?】;

else

return mid;

8

}

return -1;

}

void main(void)

{

int a[10]={1,2,3,4,5,6,7,8,9,10};

int b,c;

b=4;

c=fun(a,10,b);

if(c==1)

printf("not found");

else

printf("position %d\n",c);

}

答案: 1). low<=high 或 high>=low 2). high=mid-1 3). low= mid + 1

7、功能:计算圆周率的近似值。(π/4=1-1/3+1/5-1/7+?)

-------------------------------------------------------*/

#include <stdio.h>

#include <math.h>

void main(void)

{

int s;

/***********SPACE***********/

float n,【?】;

double t;

t=1;pi=0;n=1;s=1;

/***********SPACE***********/

while(【?】>=1e-6)

{

pi+=t;n+=2;s=-s;t=s/n;

}

/***********SPACE***********/

pi*=【?】;

printf("pi=%.6f\n",pi);

}

2 pi fabs(t) 4

五、程序改错

1、功能:编写函数fun求20以内所有5的倍数之积。

#define N 20

#include "stdio.h"

void main(void)

{

int sum;

sum=fun(5);

printf("%d以内所有%d的倍数之积为: %d\n",N,5,sum);

getch();

}

int fun(int m)

{

/**********FOUND**********/

int s=0,i;

for(i=1;i<N;i++)

/**********FOUND**********/

if(i%m=0)

/**********FOUND**********/

9

s=*i;

return s;

}

答案:

1). int s=1,i;

2). if(i%m==0) 或 if(!(i%m))

3). s*=i; 或 s=s*i; 或 s=i*s;

2、功能:编写一个程序模拟袖珍计算器的加、减、乘、除四则运算。 例如:输入3+5=或5-2=或3*4=或4/2=,求表达式结果。

#include<stdio.h>

void main(void)

{

float x,y;

char operate1;

printf("Arithmetic expression\n");

/**********FOUND**********/

scanf("%f",x);

/**********FOUND**********/

while((operate1==getchar())!='=')

{

printf("result=");

scanf("%f",&y);

/**********FOUND**********/

switch(y)

{

case '+':

x+=y;

break;

case '-':

x-=y;

break;

case '*':

x*=y;

break;

case '/':

x/=y;

break;

}

}

printf("%f",x);

getch();

return;

}

答案: 1). scanf("%f",&x); 2). while((operate1=getchar())!='=') switch(operate1)

3、功能:编写函数求2!+4!+6!+8!+10+12!+14!。

#include "stdio.h"

long sum(int n)

{

/**********FOUND**********/

int i,j

long t,s=0;

/**********FOUND**********/

for(i=2;i<=n;i++)

{

t=1;

10 3).

for(j=1;j<=i;j++)

t=t*j;

s=s+t;

}

/**********FOUND**********/

return(t);

}

void main(void)

{

printf("this sum=%ld\n",sum(14));

getch();

}

答案: 1). int i,j;

2). for(i=2;i<=n;i=i+2) 或 for(i=2;i<=n;i+=2) 或 for(i=2;i<=n;i++,i++)

3). return(s); 或 return s; 或 return (s);

4、功能:找大于m的最小素数

#include<stdio.h>

#include<math.h>

int fun(int m)

{ int i,k;

for(i=m+1;;i++)

/**********FOUND**********/

{ for(k=2;k<srqt(i);k++)

/**********FOUND**********/

if(i%k=0) break;

/**********FOUND**********/

if(k<sqrt(i)) return i;

}

}

答案: 1). <=

2). ==

3). >

5、功能:统计出若干个学生的平均成绩,最低分以及得最低分的人数。

例如:输入10名学生的成绩分别为92,87,68,56,92,84,67,

75,92,66,则输出平均成绩为77.9,最低高分为56,得最低分

的人数为1人。

#include "stdio.h"

float Min=0;

int J=0;

float fun(float array[],int n)

{

int i;float sum=0,ave;

Min=array[0];

for(i=0;i<n;i++)

{

if(Min>array [i]) Min=array [i];

/**********FOUND**********/

sum=+array [i];

}

/**********FOUND**********/

ave=sum\n;

for(i=0;i<n;i++)

/**********FOUND**********/

if(array [i]=Min) J++;

return(ave);

}

11

main( )

{

float a[10],ave;

int i=0;

for(i=0;i<10;i++)

scanf("%f",&a[i]);

ave=fun(a,10);

printf("ave=%f\n",ave);

printf("min=%f\n",Min);

printf("Total:%d\n",J);

getch();

}

sum+=array[i]; ave=sum/n; if(array [i]==Min) J++;

6、功能:一个已排好序的一维数组,输入一个数number,要求按原来 排序的规律将它插入数组中.

main( )

{

int a[11]={1,4,6,9,13,16,19,28,40,100};

int temp1,temp2,number,end,i,j;

/***********FOUND***********/

for(i=0;i<=10;i++)

printf("%5d",a[i]);

printf("\n");

scanf("%d",&number);

/***********FOUND***********/

end=a[10];

if(number>end)

/***********FOUND***********/

a[11]=number;

else //是小于或等于最后那个数

{

for(i=0;i<10;i++)

{

/***********FOUND***********/

if(a[i]<number) //原数组是升序排列

{

temp1=a[i];

a[i]=number;

for(j=i+1;j<11;j++) //后面所有的数后移一个位置

{

temp2=a[j];

a[j]=temp1;

temp1=temp2;

}

break;

}

}

}

for(i=0;i<11;i++)

printf("%6d",a[i]);

}

for(i=0;i<10;i++) end=a[9]; a[10]=number; if(a[i]>number)

12

六、程序设计

1、功能:编写函数fun计算下列分段函数的值: 且x≠-3

5x+6 0≤x<10且x≠2及x≠3

其它

#include "stdio.h"

float fun(float x)

{

/**********Program**********/

/********** End **********/

}

void main(void)

{

float x,f;

printf("Input x=");

scanf("%f",&x);

f=fun(x);

printf("x=%f,f(x)=%f\n",x,f);

//yzj();

}

答案: float y;

if (x<0 && x!=-3.0)

y=x*x+x+6;

else if(x>=0 && x<10.0 && x!=2.0 && x!=3.0)

y=x*x-5*x+6;

else y=x*x-x-1;

return y;

2、功能:求一组数中大于平均值的数的个数。

例如:给定的一组数为1,3,6,9,4,23,35,67,12,88时,函数值为3。 #include "stdio.h"

int fun(int a[],int n)

{

/**********Program**********/

/********** End **********/

}

void main(void)

{

int a[10]={1,3,6,9,4,23,35,67,12,88};

int y;

y=fun(a,10);

printf("y=%d\n",y);

//yzj();

}

答案:

int i,k=0;

float s=0,ave;

for(i=0;i<n;i++)

s+=a[i];

ave=s/n;

printf("%f ",ave);

13

for(i=0;i<n;i++) if(a[i]>ave)k++;

return k;

3、功能:编写函数求表达式的和(n的值由主函数输入)。

1-1/2+1/3-1/4+......+1/n

例如:当n=20时,表达式的值为0.668771。(迭代)★

#include "stdio.h"

float sum(int n)

{

/**********Program**********/

/********** End **********/

}

void main(void)

{

int n;

scanf("%d",&n);

printf("sum=%f\n",sum(n));

//yzj();

//getch();

}

答案:

float s=0;

int i,k=1;

for(i=1;i<=n;i++)

{ s=s+k*1.0/i;

k=-k;

}

return(s);

4、功能:把20个随机数存入一个数组,然后输出该数组中的最小值。其中确定最小值的下标的操作在fun函数中实现,请给出该函数的定义。

思考:还可有哪3种修改参数的方法 ?并同时考虑若定义了指向元素的指针,访问元素的4种方法。建议试一试。

#include "stdio.h"

#define VSIZE 20

int vector[VSIZE] ;

int fun(int list[],int size)

{

/**********Program**********/

/********** End **********/

}

void main()

{

int i;

for (i=0;i<VSIZE;i++)

{

vector[i]=rand();

printf("Vector[%d]=%6d\n",i,vector[i]);

}

i=fun(vector,VSIZE);

printf("\nMininum: Vector[%d]=%6d\n",i,vector[i]);

}

答案:

14

int i,min=0;

for(i=1; i <size; i++)

if(list[min]>list[i]) min=i;

return min;

再参见函数一章的课件。

5、功能:找出一个大于给定整数且紧随这个整数的素数,并作为函数值返回。

#include "stdio.h"

#include"conio.h"

int fun(int n)

{

/**********Program**********/

/********** End **********/

}

void main()

{

int m;

printf("Enter m: ");

scanf("%d", &m);

printf("\nThe result is %d\n", fun(m));

}

答案:

int i,k;

for(i=n+1;;i++)

{

for(k=2;k<i;k++)

if(i%k==0) break;

if(k==i)return(i);

}

6、功能:用下列6种方法求两数和:①只用主函数;②用子函数接收和返回数据本身;③用子函数接收数据地址和返回本身;④在子函数中不用返回语句返回求和结果;⑤在子函数中用返回数据的地址返回求和结果;⑥用全局变量返回求和结果。

答案:

参见函数一章的课件。

7、功能:输入三个整数x,y,z,请把大的输出。用宏和函数两种方法。

提示:用“?:”运算符。

答案:

使用宏:

#include<stdio.h>

#define F(x,y,z) z>(x>y?x:y)?z:x>y?x:y

main()

{int x,y,z;

scanf(“%d,%d,%d”,&x,&y,&z);

pirntf(“%d\n”,F(x,y,z));

}

15

使用子函数调用的方法:

自己编。

8、功能:用辗转相除法(欧几里得算法)求两个正整数的最大公约数和最小公倍数。(迭代)★ 答案:用函数调用的方法求最大公约数和最小公倍数。

int zgys(int a,int b) /*最大公约数*/

{ int k,r;

if(a<b) {k=a;a=b;b=k;}

while(b!=0) {r=a%b;a=b;b=r;}

return(a); }

int zgbs(int a,int b) /*最小公倍数*/

{ int d;

if(a<b) {d=a;a=b;b=d;}

if(b==0) d=0;

else{d=a;while(d%b!=0) d+=a;}

return(d); } /* “a*b/公约数==公倍数”*/

#include<stdio.h>

void main(void)

{

int a,b,gys,gbs;

clrscr();

scanf(“%d,%d”,&a,&b);

gys=zgys(a,b);

gbs=zgbs(a,b);

printf(“%d,%d”,gys,gbs);

}

16

网站首页网站地图 站长统计
All rights reserved Powered by 海文库
copyright ©right 2010-2011。
文档资料库内容来自网络,如有侵犯请联系客服。zhit326@126.com