搜索
您的当前位置:首页正文

C语言程序设计试题集及其答案 (2)

来源:二三娱乐


第一章基础知识

一.填空 1.

每个C程序都必须有且仅有一个________函数。

2.C语言程序开发到执行通常要经过6个阶段即编辑、预处理、________、链接、加载 和执行。

3.软件是程序,以及______、使用和维护所需要的所有文档。 4.国标中规定:“计算机程序是按照具体要求产生的适合于计算机处理的_________”。 5.程序设计语言按照书写形式,以及思维方式的不同一般分为低级语言和________两大类 。

6.C语言是由________组成的。

7.C语言的函数可分为主函数main、标准库函数和_________。 8.一个函数是由两部分组成的,即:________和函数体。

9.编译是将C语言所编写的源程序________成机器代码,也称为建立目标代码程序的过程。 10.

程序是由某种程序设计语言编制出来,体现了编程者的控制思想和对计算机执行操作 的要求。不同的任务功能,就会需求不同的软件程序,如:控制计算机本身软硬件协调工作 ,并使其设备充分发挥效力,方便用户使用的系统软件程序,称为操作系统;而为办公自动 化(OA)、管理信息系统(MIS)、人工智能、电子商务、网络互联等等应用而开发的软件程 序,统称为_________。 11.机器语言是以__________形式表示的机器基本指令的集合,是计算机系统唯一不需要翻 译可以直接识别和执行的程序设计语言。 12.与机器语言相比,使用汇编语言来编写程序可以用_______来表示指令的操作码和操作对 象,也可以用标号和符号来代替地址、常量和变量。 13. 在编译程序之前,凡以____开头的代码行都先由预处理程序预处理。 14.C程序的执行均是由执行_________开始。 15.

函数体即为包含在{}内的部分。它分为________和为完成功能任务由若干个C语句 组成的执行部分。 16.

C语言程序中一条简单语句是以________字符作为结束符的。 17.

C语言是结构化、________的程序设计语言。 18.

由于计算机硬件不能直接识别高级语言中的语句,因此,必须经过“_______程序”, 将用高级语言编写的程序翻译成计算机硬件所能识别的机器语言程序方可执行。 19.

用高级语言编写的程序需翻译成计算机硬件所能识别的机器语言程序方可执行。所以 说,用高级语言进行程序设计,其编程效率高,方便易用,但_______没有低级语言高。 20.

第一个系统体现结构化程序设计思想的教学工具语言是_______语言。 解答: 1.main() 2.编译 3.开发 4.指令序列

5.高级语言 6.函数

7.自定义函数 8.函数首部 9.翻译

10.应用软件 11.二进制代码 12.助记符 13.#

14.main函数 15.声明部分 16.;(或分号) 17.模块化 18.翻译 19.执行速度 20.PASCAL 二.阅读程序写结果 解答: 三.补充程序 解答: 四.改错题 解答: 五.编程一 解答: 六.编程二 解答: 第二章常量、变量和表达式 一.填空

1.以16位计算机为例,若定义longinta;则变量a占______个字节的内存空间。 2.以16位计算机为例,若定义doublea;则变量a占______个字节的内存空间。 3.以16位计算机为例,若定义longdouble;则变量a占______个字节的内存空间。 4.在______位机,int型占4个字节。

5.C语言的数据类型有:基本数据类型、构造数据类型、枚举类型、______、空类型 。

6.在C语言中,基本数据类型有:______。 7.整型常量046转换为十进制数等于______。 8.整型常量054转换为十进制数等于______。 9.整型常量0x125转换为十进制数等于______。 10.整型常量0x7C转换为十进制数等于______。 11.整型常量39转换为八进制等于______。

12.实数473.468写成规范化指数形式,则应为______。 13.实数0.0453写成规范化指数形式,则应为______。 14.将0x123转换为二进制等于______。 15.字符’A’表示成十六进制等于______。

16.在C语言中,称代表常量的标识符为______。

17.C语言中是用编译预处理命令______来定义符号常量

18.在C语言中,以反斜杠符(\\)开头,后跟字符的字符序列,称之为______,主

要用来表示控制及不可见的字符或者一些图形符号 19.语句printf(\"\\106\")执行的结果输出是______。 20.语句printf(“b”)执行的结果输出是______。 21.语句printf(“\\\\b”)执行的结果输出是______。 22.语句printf(\"\\102\")执行的结果输出是______。

23.若有charch1;ch1='a'+4;则语句printf(\"%c\的输出结果为______。 24.字符串常量“Hello,everyone!”占据的内存空间为______个字节 25.字符串常量“Hello,Bob!”占据的内存空间为______个字节

26.十进制整型常量由0~9个数据组成,但不能以______开始,没有小数部分 27.十六进制常量由0~9和______组成

28.unsignedlong类型常量通常以______为后缀 29.实型常量通常有小数形式和______两种表达方式

30.C语言中是用编译预处理命令______来包含其他源文件

31.为了表示字符串的结束,系统自动在字符串的最后加一个______,但不被输出 32.C语言中,其值可被改变的量称为变量,它具有三个基本要素:变量名、______ 和变量值 33.C语言规定,变量的标识符只能由字母、数字和下划线组成,且不能以______开 头。 34.在16位机中,sizeof(“hello\\n”)等于______。 35.在16位机中,printf(“\\“hello\\””)等于______。 36.字符变量在内存中占用______个字节的存储空间。 37.若有定义intx=27,y=6;则表达式x/y的值为______。 38.若有定义intx=47,y=8;则表达式x%y的值为______。 39.若有定义charch1='A',ch2,ch3;执行ch2=ch1++;ch3=++ch1;printf(\"ch1=%c,ch2=% c\则输出为______。 40.若有定义charch1='A',ch2,ch3;执行ch2=ch1++;ch3=++ch1;printf(\"ch2=%c,ch3=% c\则输出为______。

41.若有定义inti=5,j,k;执行j=i--;k=--i;printf(\"i=%d,j=%d\\n\则输 出为______。

42.表达式(int)(13.7+25.6)/4%5的值是______。 43.表达式3.6-5/2+1.2+5%3的值是______。 44.表达式54%10/2+4.0*(8/5)的值是______。

45.若定义intx;doubleb=5.45;执行x=b后,则x的值为______。 46.若定义inty;charc='A';执行y=c后,则y的值为______。 47.若定义inta=8;floatb=2.5;则a/(int)(b)的值为______。 48.若a=5,则执行a*=7-3语句后,a的值是______。

49.若inta=1,b=0,c=4,d=2;则表达式(a>b?a:b)&&(c-d)的值为______。 50.已知a=0,表达式a=1?b=1:b=0;执行后,b的值是______。 51.若定义intm=7,n=12;则表达式n%=m-m%5的值是______。

52.若定义inta=8;floatb=4.5;执行a*=a/=a-b后,a的值为______。 53.inta=2;!a++的值为______。

54.inta=0;!a++&++a的值为______。

55.inta=7;floatb=4.5;则printf(“%d”,a*=a/=a-b)的值为______。

56.intk=7;floata=2.5,b=4.7;则表达式a+k%3*(int)(a+b)%2/4的值为______。 57.#defineMax(a,b)a=2,b=6;printf(“%d\\n”,M ax(a,b))的值为 ______。

58.在32位机中,inta=4,b=7;printf(“%0x”,a-b)的值为:______。 59.intx,y,z;x=y=2;z=3;y=x++-1;printf(“%d,%d”,x,y)的值为:______。 60.inti=2,j;printf(“%d”,j=i<1)的值为:______ 解答: 1.0 2.4 3.10 4.32

5.指针类型

6.int、float、double、char 7.38 8.44 9.293 10.124 11.047

12.4.734680e+002 13.4.530000e-002 14. 15.\\x41/41H 16.符号常量 17.#define 18.转义字符常量 19.F 20.b 21.\\b 22.B 23.e 24.16 25.11 26.0 27.A~F 28.U

29.指数形式 30.#include 31.“\\0” 32.变量类型 33.数字 34.7

35.“hello” 36.1 37.4 38.7

39.ch1=C,ch2=A 40.ch2=A,ch3=C 41.i=3,j=5 42.4

43.4.800000

44.7.000000 45.5 46.65 47.4 48.20 49.1 50.1 51.2 52.4 53.0 54.0 55.4

56.2.500000 57.2

58.fffffffd 59.3,1 60.0 二.阅读程序写结果 解答: 三.补充程序 解答: 四.改错题 解答: 五.编程一 解答: 六.编程二 解答:

第三章顺序结构 一.填空

1.C语言的语句可分为5类,它们是:控制语句、____________、函数语句、符合语句和空 语句。

2.常用于字符输入的函数为:________________。 3.常用于字符输出的函数为:________________。 4.常用于字符串输入的函数为:________________。 5.常用于字符串输出的函数为:________________。 6.格式输入函数的一般形式为:________________。 7.格式输出函数的一般形式为:________________。

8.printf和scanf是标准的库函数,它们的函数原型在头文件________________中。 9.有charch,则从键盘给ch赋值的格式输入语句为:________________。 10.如果要输出字符串常量“HelloWord!”,则格式输出语句为:________________。 11.设有定义:longx=-123456L;,请写出能够正确输出变量x值的语句________________ 。

12.若有inta,b;,想通过scanf(\"%d%d\输入语句给a赋于1,给b赋于2,则从键盘 输入数据的形式是________________。

13.若有inti,j;scanf(\"i=%d,j=%d\";&i,&j);,要求给i赋10,给j赋20,则应该从键盘 输入_______。

14.已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k

的值为3,请写出正确的输入语句________________。

15.有intm,n,p;scanf(\"m=%dn=%dp=%d\若想

从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是_____ ___________。

16.有inta;floatb,c;scanf(\"%2d%3f%4f\%f\\n\__。

17.有intm=0256,n=256;则printf(\"%o%o\\n\的输出结果是__________________ ___。

18.有intx=102,y=012;,则printf(“%2d,%2d\\n”,x,y);的输出结果是______________ _______。

19.有定义和语句:inta;charc=10;floatf=100.0;doublex;a=f/=c*=(x=6.5); ,则

printf(\"%d%d%3.1f%3.1f\\n\的输出结果是_____________________。 20.若有定义和语句:intm=0xabc,n=0xabc;m-=n;则printf(\"%o\\n\的输出结果是___ __________。 21.若有intm=32,n=032;,则printf(\"%d,%x\\n\执行后输出结果是______________ _____。 22.若有inta=1234;,则printf(\"%2d\\n\的输出结果是_____________________ 。 23.若变量已正确说明为float类型,要通过语句scanf(“%f%f%f”,&a,&b,&c);给a赋于1 0.0,b赋予22.0,c赋予33.0,不正确的输入形式是_____________________。 A)10<回车>22<回车>33<回车>B)10.0,22.0,33.0<回车> C)10.0<回车>22.033.0<回车>D)1022<回车>33<回车> 24.若有intx=3,y=1;则printf(\"%d%d\\n\的输出结果是__________________ ___。 25.若有定义和语句:doubled;floatf;longl;inti;i=f=l=d=20/3;则printf(\"% d%ld%f%f\\n\的输出结果是(小数点后只写一位)_____________________。 26.以下说法中正确的是_____________________。 A)#define和printf都是C语句 B)#define是C语句,而printf不是 C)printf是C语句,但#define不是 D)#define和printf都不是C语句

27.若有intk=17;,则printf(\"%d,%o,%x\\n\的输出结果是_________________ ____。

28.以下叙述中正确的是_____________________。

A)输入项可以是一个实型常量,如:scanf(\"%f\

B)只有格式控制,没有输入项,也能正确输入数据到内存,例如:scakf(\"a=%d,b=%d\"); C)当输入数据时,必须指明变量地址,例如:scanf(\"%f\

29.若有定义和语句:intu=010,v=0x10,w=10;则printf(\"%d,%d,%d\\n\输出结果是 _____________________。

30.若有inta=1,b=4,c=2;floatx=10.5,y=4.0,z;z=(a+b)/c+sqrt((double)y)*1.2/c+ x;,则printf(\"%f\\n\的输出结果是_____________________。

31.若有inta=2,c=5;,则printf(\"a=%%d,b=%%d\\n\的输出结果是________________ _____。

32.有charc;intn=100;floatf=10;doublex;x=f*=n/=(c=50);则printf(\"%d%f\\ n\的输出结果是_____________________。

33.有inti=0,j=0,k=0;scanf(\"%d%*d%d\若 从键盘输入:102030<回车>。输出结果是_____________________。

34.若有inta,b,c;a=25;b=025;c=0x25;,则printf(\"%d%d%d\\n\的输出结果 是___________。 35.有以下语句段

intn1=10,n2=20;printf(“________________”,n1,n2);

要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空。 n1=10n2=20

36.若有语句inti=-19,j=i%4;则printf(\"%d\\n\的输出结果是_____________________ 。

37.有inta=0;a+=(a=8);则printf(\"%d\\n\的输出结果是_____________________。 38.有inta=1,b=2;a=a+b;b=a-b;a=a-b;则printf(“%d,%d\\n”,a,b);的输出结果是 ______________。

39.有unsignedshorta=65536;intb;,则printf(“%d\\n”,b=a);的输出结果是________ ______。

40.语句printf(\"\\10289\\n\");的数据结果为:__________________。 解答: 1.表达式语句 2.getchar() 3.putchar() 4.gets() 5.puts() 6.scanf(“格式控制字符串”,地址表列); 7.printf(“格式控制字符串”,输出表列); 8.stdio.h 9.scanf(“%c”,&ch); 10.printf(“%s”,HelloWord!); 或者:printf(“HelloWord!”); 11.printf(“x=%1d\\n”,x); 12.12或者1 2

13.i=10,j=20

14.scanf(“%d,%d,%d”,&i,&j,&k); 15.m=123n=456p=789

16.a=98,b=765.000000,c=4321.000000 17.256400 18.102,10 19.1651.56.5 20.0

21.32,1a 22.1234 23.B 24.33

25.666.06.0 26.D

27.17,21,11 28.C

29.8,16,10 30.13.700000 31.a=%d,b=%d 32.220.000000 33.10300 34.252137

35.n1=%d\\nn2=%d 36.-3 37.16 38.2,1 39.0 40.B89

二.阅读程序写结果 解答:

三.补充程序 解答: 四.改错题 解答: 五.编程一 解答: 六.编程二 解答: 第四章选择结构 一.填空 1.在if,while,case,do,else等关键字中,用于选择结构的有( ). 2.已知a=1;那么if(a=2)printf(\"%d\的输出结 果是().

3.已知chara='A';那么if(a>65)printf(\"%s\,\"smaller\");的输出结果是().

4.表示“x≥y≥z”的C语言表达式是()。

5.在C语言中,用于实现选择结构的语句有()语句和()语句 。

6.判断两个浮点型变量x和y是否相等一般用:if(<1e-6)…。

7.设有程序段:t=6;a=7;b=8;if(a=b)t=a;,这段程序执行后,t的结果是() 。

8.设a=1,b=2,c=3,d=4,则表达式:a>b?a:c>d?a:d的结果为()。 9.表达式98&&8&&31&&(98-'a')的值为()。

10.若inta=3;则表达式(a>2)&&!('D'>69)的值为()。 解答: 1. 2. 3. 4. 5. 6. 7.

8. 9. 10.

二.阅读程序写结果 1.#include voidmain() {

intx,y,t;

x=7;y=9;if(xprintf(\"%d,%d\\n\ } 2.

#include voidmain() { intx=1,a=2,b=3; switch(x) { case1:a--;break; case2:b++;break; case3:a++;b++; } printf(\"\\na=%d,b=%d\\n\ } 3. #include voidmain() {

charch1='E'; if(ch1>='A') ch1++; else ch1+=32;

printf(\"ch1=%c\\n\ } 4.

#include voidmain() {

intx,y,t; x=5;y=3; if(x>y)

{t=x;x=y;y=t;}

printf(\"%d,%d\\n\ }

5.#include

intmain() {

inta,b,c,m;

printf(\"Enterthreeintegers:\"); scanf(\"%d%d%d\ if(a<=b) m=a; else m=b; if(cprintf(\"m=%d\\n\ return0;}

输入:212223<回车> 6.#include intmain() { charch1='a',ch2='B',ch3='E'; if(ch1>ch2) if(ch2>ch3)ch3++; else --ch3; printf(\"ch3=%c\\n\ return0; } 7.#include intmain() {

floatx,y;

scanf(\"%f\ switch((int)x/10){

case0:y=1.0;printf(\"y=%f\\n\ case1:y=2*x+1;printf(\"y=%f\\n\ case2:y=3*x*x+2;printf(\"y=%f\\n\ default:

printf(\"Nodefinition.\\n\"); }

return0;}

输入:15.3<回车> 8.#include intmain() {

charch1='A',ch2='B'; switch(ch1) { case'A':

switch(ch2){

case'B':printf(\"Good!\\n\");break; case'A':printf(\"Better!\\n\");break; }

case'B':printf(\"Best!\\n\");break; } return0; } 9.

#include voidmain() {

floatscore; score=100;

if(score<60)printf(\"E\\n\"); else

switch((int)score/10) {case10: case9:printf(\"A\\n\"); case8:printf(\"B\\n\"); case7:printf(\"C\\n\");break; case6:printf(\"D\\n\");break; default:printf(\"Error\\n\"); } } 10.#include voidmain() {

inti=0,a=2;if(i==0) printf(“**”); else

printf(“$$”); printf(“*”); } 11.

#include voidmain() {

intm=10,n=0,p=4,q=20; if(n) q=15-m; else q=25+m;

elseif(p) q=q+p;

printf(“q=%d\\n”,q); }

12.#include

if(m)

voidmain() {

inta=1,b=0;switch(a) {

case1:switch(b) {

case0:printf(\"**0**\");break; case1:printf(\"**1**\");break; }

case2:printf(\"**2**\");break; } } 13.

#include intmain() { inta=2,b=7,c=5; switch(a>0){ case1:switch(b<0){ case1:printf(\"@\");break; case2:printf(\"!\");break; } case0:switch(c==5){ case1:printf(\"*\");break; default:printf(\"#\");break; } default:printf(\"&\"); }

printf(\"\\n\"); return0; }

14.#include intmain() {

inta=0,b=1,c=0,d=20;if(a)d=d-10;elseif(!b) if(!c)d=15;elsed=25;printf(\"d=%d\\n\ return0;}

15.#include intmain()

{inta=1;switch(a){

case0:printf(\"**0**\");break; case1:printf(\"**1**\");break; case2:printf(\"**2**\");break; }

return0;}

16.#include intmain()

{intx,y;

scanf(\"%d\

y=x>12?x+10:x-12;printf(\"%d\\n\ return0;}

输入:12<回车> 17.#include intmain() {

floatx,y; charop; doubler;

scanf(\"%c%f%f\ switch(op)

{case'+':r=x+y;break; case'-':r=x-y;break; case'*':r=x*y;break; case'/':r=x/y;break; } printf(\"%.1f\ return0;} 输入:3.5<回车> 18.#include\"stdio.h\" voidmain() { inta=7;if(a>9||a<10)a=a/3;else a=a%3;printf(\"a=%d\ }

19.#include voidmain() {

inta=20;switch(a%3){ case0:printf(\"0\"); case1:printf(\"1\"); case2:printf(\"2\"); default:printf(\"3\"); }

printf(\"4\"); }

20.#include voidmain() {

inta=2,b=5,c=8,t; if(aprintf(\"%d,%d\\n\ }

解答:

1.运行结果: 9,7 2.a=1,b=3 3.ch1=F 4.3,5 5.m=21 6.ch3=D

7.y=31.600000 8.Good! Best! 9.A B C 10.*** 11.q=35 12.**0****2** 13.*& 14.d=20 15.**1** 16.0 17. 0.6 18.a=2 19.234 20.8,1 三.补充程序 1.根据输入字符的ASCII码来判别字符的类别。由ASCII码表可知ASCII值小于32的为控制字 符。在“0”和“9”之间的为数字,在“A”和“Z”之间为大写字母,在“a”和“z”之 间为小写字母,其余则为其它字符。 #include\"stdio.h\" #include\"string.h\" intmain() {

charc;

printf(\"inputacharacter:\");

_____________________________________________ if(c<32)printf(\"Thisisacontrolcharacter\\n\"); _____________________________________________ printf(\"Thisisadigit\\n\");

elseif_______________________________________ printf(\"Thisisacapitalletter\\n\"); elseif(c>='a'&&c<='z')

printf(\"Thisisasmallletter\\n\");

____________________________________________ printf(\"Thisisanothercharacter\\n\"); return0;}

2.计算器程序。用户输入运算数和四则运算符,输出计算结果.

#include\"stdio.h\" intmain() {

floata,b;

____________________________________________; printf(\"inputexpression:a+(-,*,/)b\\n\"); scanf(\"%f%c%f\ switch(c) {

case'+':printf(\"%f\\n\ case____________________________________________printf(\"%f\\n\ case'*':printf(\"%f\\n\

case'/':____________________________________________;break; default:printf(\"inputerror\\n\"); }

return0;} 3.输入三个整数,输出最大数和最小数(注:max总是记录最大数,而min总是记录最小数). #include\"stdio.h\" intmain() { inta,b,c,max,min; printf(\"inputthreenumbers:\"); scanf(\"%d%d%d\ if(a>b) { _______________________________________ _______________________________________ } else

{max=b;min=a;}

____________________________________________ max=c; if(min>c)

_____________________________________ printf(\"max=%d\\nmin=%d\ return0;}

4.#include\"stdio.h\" intmain() { inta;

printf(\"inputintegernumber:\"); scanf(\"%d\

_____________________________________________ {

case1:printf(\"Monday\\n\");break;

_____________________________________________printf(\"Tuesday\\n\");break; case3:printf(\"Wednesday\\n\");break;

case4:printf(\"Thursday\\n\");_____________________________________________ case5:printf(\"Friday\\n\");break; case6:printf(\"Saturday\\n\");break; case7:printf(\"Sunday\\n\");break;

_____________________________________________printf(\"error\\n\"); }

return0;}

5.判断a>b、ainta,b;

printf(\"pleaseinputa,b:\"); scanf(\"%d%d\

_____________________________________________printf(\"A=B\\n\"); _____________________________________________printf(\"A>B\\n\"); _____________________________________________printf(\"Aswitch(c) {

case–1:y=0;break; case0:y=x;break; case1:y=10;break; case2:

case3:y=-0.5*x+20;_____________________________________________; default:y=-2; }

if(c!=2)printf(“y=%f”,y);

_____________________________________________ printf(“error!”); return0;} 7.

找出x,y,z三个数中的最小数,并判断该数是否等于b。 #include\"stdio.h\" intmain() {

intx=4,y=5,z=8,b;

intu,v;

scanf(\"%d\

u=xif_____________________________________________printf(“最小数等于b!\\n”); _____________________________________________printf(“最小数不等于b!\\n”); return0; }

8.输入两个运算数x,y和一个运算符号op,输出该运算结果的值,例如输入3+5↙得到结果8 .

#include\"stdio.h\" intmain() {

floatx,y,r; charop;

scanf(\"%f,%c,%f\ switch(op) { case'+':r=x+y;_____________________________________________; _____________________________________________r=x-y;break; case'*':_____________________________________________;break; _____________________________________________r=x/y;break; } printf(\"%f\ return0; } 9.根据输入字符的ASCII码来判别字符的类别。由ASCII码表可知ASCII值小于32的为控制字 符。在“0”和“9”之间的为数字,在“A”和“Z”之间为大写字母,在“a”和“z”之 间为小写字母,其余则为其它字符。 #include\"stdio.h\" intmain() {

charc;

printf(\"inputacharacter:\"); c=getchar();

_____________________________________________ printf(\"Thisisacontrolcharacter\\n\"); if(c>='0'&&c<='9')

printf(\"Thisisadigit\\n\");

_____________________________________________ printf(\"Thisisacapitalletter\\n\");

_____________________________________________ printf(\"Thisisasmallletter\\n\");

_____________________________________________ printf(\"Thisisanothercharacter\\n\"); return0;}

10.找出a,b,c三个数中的最大数,并判断该数是否等于x。 #include\"stdio.h\"

intmain() {

inta=8,b=4,c=12,x; intu,v;

scanf(“%d”,&x);

u=aif_____________________________________________printf(“最大数等于x!\\n”); _____________________________________________printf(“最大数不等于x!\\n”); return0; } 解答:

1.c=getchar();

(c>='0'&&c<='9') (c>='A'&&c<='Z') else 2.charc; break; '-': printf(\"%f\\n\3.max=a; min=b; if(maxelseif(a>b) elseif(aelseif(c>='A'&&c<='Z') elseif(c>='a'&&c<='z')

else 10.b:a c:u (v==x) else 四.改错题 解答: 五.编程一 1.求分段函数

的值,输入x值,输出结果。

2.从键盘上输入一个数x,计算并输出下列分段函数y的值。

3.某运输公司运费计算时根据运输距离打折计算,折扣的计算方法如下: (其中,discount表示折扣,S表示运输距离)。

编写一完整程序,输入运输距离,统计运费并输出。每公里的运费通过符号常量定义为2 .5。 4.编程输入一元二次方程的三个系数,求解一元二次方程的实根,无实根时不用求虚根, 给出相应提示信息即可。 5.给定三条边,判断其是否能构成三角形,若能构成,判断其是等腰三角形、等边三角形 、直角三角形还是普通三角形。 6.从键盘输入一个三角形的三条边,判断是否能组成三角形,若能组成三角形,则输出它 的面积。 7.从键盘输入一个百分制的学生成绩,输出其对应的分数等级,其中90~100为A,80~89 为B,70~79为C,60~69为D,60以下为E。

8.编写一个程序,从键盘输入三个整数给a,b,c,然后交换它们中的数,把a中原来的值 给b,把b中原来的值给c,把c中原来的值给a。

9.输入一个字符,判断其是否为英文字母,若是英文字母,则将其大小写进行转换,若不 是英文字母,则不变。

10.给定三个整数型x,y,z,输出三个数中的最大值和最小值。 解答:

1.#include\"stdio.h\" #include\"math.h\" voidmain() {

floatx,y;

printf(\"inputx\\n\"); scanf(\"%f\

if(x<0)y=1;elseif(x<=5)y=2*x; else

y=sqrt(x);

printf(\"x=%5.1fy=%8.3f\\n\ }

2.#include\"stdio.h\"

#include\"math.h\" voidmain() {

floatx,y;

printf(\"inputx\\n\"); scanf(\"%f\

if(x>20||x>1&&x<10){ printf(\"无定义\\n\"); return; }

if(x<0)y=-x;

elseif(x<=1)y=sin(x)+x;

elseif(x>=10&&x<=20)y=x*x*x; printf(\"x=%5.1fy=%8.3f\\n\ }

3.#include\"stdio.h\" #include\"math.h\" #defineprice2.5 voidmain() { floatdiscount,cost,s; printf(\"inputdistance\\n\"); scanf(\"%f\ if(s<250)discount=0;elseif(s<800)discount=0.02;elseif(s<1500)discount=0.05;else discount=0.08;cost=s*(1-discount)*price; printf(\"distance=%5.1f;cost=%5.1f\\n\ }

4./*功能:求一元二次方程的解。*/ #include\"math.h\" #include\"stdio.h\" main()

{floata,b,c,disc,x1,x2;scanf(\"%f,%f,%f\ disc=b*b-4*a*c; if(disc==0)

printf(\"x1=x2=%7.2f\\n\输出两个相等的实根*/

elseif(disc>0){x1=(-b+sqrt(disc))/(2*a);/*求出两个不相等的实根*/ x2=(-b-sqrt(disc))/(2*a);

printf(\"x1=%7.2f,x2=%7.2f\\n\ } else

printf(\"无实根\\n\"); }

5.#include\"stdio.h\" voidmain() {

floata,b,c;

printf(\"输入三条边:\\n\");

scanf(\"%f%f%f\ if(a+b>c&&a+c>b&&b+c>a) {if(a==b&&b==c)

printf(\"等边三角形\\n\"); elseif(a==b||b==c||c==a) printf(\"等腰三角形\\n\");

elseif(a*a==b*b+c*c||b*b==a*a+c*c||c*c==b*b+a*a) printf(\"直角三角形\\n\"); } else

printf(\"不能构成三角形\\n\"); }

6.#include\"stdio.h\" #include\"math.h\" voidmain() { floata,b,c,s,area; printf(\"输入三条边:\\n\"); scanf(\"%f%f%f\ if(a+b>c&&a+c>b&&b+c>a) {s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c)); printf(\"area=%7.2f\\n\ } else printf(\"不能构成三角形\\n\"); } 7.#include voidmain() {

intscore; chard;

printf(\"Inputscore\\n\"); scanf(\"%d\

if(score>100||score<0){printf(\"dataerror!\\n\"); return; }

switch(score/10){case10:case9:d='A';break; case8:d='B';break; case7:d='C';break; case6:d='D';break; default:d='E';break; }

printf(\"score=%3ddengji=%c\\n\ }

8.#include voidmain() {

inta,b,c,t;

printf(\"Inputa,b,c\\n\"); scanf(\"%d%d%d\ t=a; a=b; b=c; c=t;

printf(\"a=%d;b=%d;c=%d;\\n\ }

9.#include voidmain() {

charc1,c2;printf(\"Inputaletter:\"); c1=getchar();

if(c1>='a'&&c1<='z') c2=c1+'A'-'a'; elseif(c1>='A'&&c1<='Z') c2=c1+'a'-'A'; else c2=c1;printf(\"原字符:%c转换后为:%c\\n\ } 10. #include voidmain() { inta,b,c,max,min; printf(\"Inputa,b,c\\n\"); scanf(\"%d%d%d\ max=a;min=a; if(b>max)max=b; elseif(bmax)max=c; elseif(cprintf(\"a=%d;b=%d;c=%d;\\n\ printf(\"max=%d;min=%d\\n\ } 六.编程二 解答:

第五章循环结构 一.填空

1.C语言中提供了三种循环控制语句,它们是:()、do-while语句、()。

2.break语句在C程序中只能出现在两种场合:一是用于()语句中,二是用于( )语句中。

3.以下程序段中的语句printf(“***”)要执行5次,请在空白处填入合适的数。 for(i=1;i<=();i=i+2)printf(“***”);

4.定义intk=10;执行语句while(k<20)k+=1;后,k的值为()。 5.在循环控制结构中break语句的作用是()。

6.在循环控制结构中continue语句的作用是:()。

7.若已知inta[5][5];并在运行过程中a数组已经赋值;要打印次对角线元素,在空白处 填入合适的值/表达式; for(i=0;i<5;i++) for(j=();j>=0;j--) printf(\"%5d\

8.执行完语句sum=0;for(i=0;i<10;i++){if(i%5==0)sum+=i; sum=()。

9.在使用while语句中需要注意,为了防止“死循环”的发生,在循环体中一定要有( )语句。

10.do-while语句中,判断循环条件在(),执行循环体在()。(填“先”“后 ”) 解答: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 二.阅读程序写结果 1.#include voidmain() {

intnumber,digit;

number=1234;while(number!=0) {

digit=number%10; printf(\"%d\ number=number/10; } }

2.#include #defineN5 voidmain() { inti;

for(i=1;i3.#include voidmain() {

inti,s,x;

s=0;x=15;for(i=1;i<=5;i++) if(x%i==0)s=s+i;

printf(\"i=%d,s=%d\\n\ }

4.#include voidmain() {

intcounter=1;while(counter<=5){ printf(\"%d\\n\ counter++; } }

5.#include intmain() {

inti,sum,m,a; sum=0;m=5;for(i=0;i<=3;i++) { scanf(\"%d\ if(a>m) sum+=a; } printf(\"sum=%d\\n\ return0;} 输入:21083<回车> 6.#include intmain() {

inti,j,k;

for(i=1;i<=4;i++) {

for(j=1;j<5-i;j++) printf(\"\");

for(k=1;k<=i;k++) printf(\"*\"); printf(\"\\n\"); }

return0;}

7.#include intmain() {

inti,j;

i=1;while(i<5){

for(j=1;j<2*i+1;j++) printf(\"%c\ printf(\"\\n\"); i++;

}

return0;}

8.#include intmain() {

inti=10,m=0,n=0;do {

if(i%2!=0)m=m+i; else n=n+i; i--;

}while(i>=0);

printf(\"m=%d,n=%d\\n\ return0;}

9.#include voidmain() { intsum=0,n; scanf(\"%d\ while(n<=5){ sum+=n; n++; } printf(\"sum=%d\ } 输入:1<回车> 10.#include voidmain() {

inti,j;

for(i=2;i>=0;i--) {

for(j=1;j<=i;j++) printf(\"*\");

for(j=0;j<=2-i;j++) printf(\"!\"); printf(\"\\n\"); } }

11.#include voidmain() {

inta,b;

for(a=1,b=1;a<=100;a++) {

if(b>20)break; if(b%4==1){

b=b+4;continue; }

b=b-5;}

printf(\"a=%d\\n\ }

12.#include voidmain() {

chark; inti;

for(i=1;i<3;i++) {

scanf(\"%c\ switch(k) {

case'0':printf(\"another\\n\"); case'1':printf(\"number\\n\"); } } } 输入:01<回车> 13.#include intmain() { inti,s=0;for(i=1;i<10;i++) { s+=i*i;

if(s>10)break; }

printf(\"i=%d,s=%d\\n\ return0;}

14.#include voidmain() {

charch;

while((ch=getchar())!='\\n') {

if(ch>='A'&&ch<='Z')

ch=ch+32;elseif(ch>='a'&&ch<='z') ch=ch-32;printf(\"%c\ } }

输入:ABCdef<回车> 15.#include intmain() {

inta,b;

for(a=1,b=1;a<=100;a++) {

if(b>=9)break; if(b%3==1){ b+=3; continue; }

b-=5;}

printf(\"%d,%d\\n\ return0;}

16.#include intmain() {

inti=0,j=0;while(i<10)i++; while(j++<10);

printf(\"i=%d,j=%d\\n\ return0;} 17.#include\"stdio.h\" voidmain() { inti,j,t; for(i=1,j=10;i<3;i++,j--) t=i+j; t++; printf(\"%d,%d\ } 18.#include\"stdio.h\" voidmain() {

inti=10,j; do {

j=i%2;printf(\"%d\ i--;

}while(i>4); }

19.#include\"stdio.h\" voidmain() {

inti=7,j; while(i>2){

j=i%2;printf(\"%d\ i--; }

printf(\"%d\ }

20.#include

voidmain() {

inti,j,t=0;for(i=3;i>0;i--) for(j=0;j<4;j++) t+=j;

printf(\"t=%d\ } 解答: 1.4321 2.1 4 9 16 3.i=6,s=9 4.1 2 3 4 5 5.sum=18 6.* ** *** **** 7.## #### ###### ######## 8.m=25,n=30 9.sum=15 10.**! *!! !!! 11.a=6 12.another number number 13.i=3,s=14 14.abcDEF 15.4,10

16.i=10,j=11 17.8,12 18.010101 19.101012 20.t=18 三.补充程序

1.输出100以内能被3整除的数

#include\"stdio.h\" intmain() {

_____________________________________________;

for(_________________________;n<=100;________________________) {

if(n%3!=0)________________________ printf(\"%d\ }

return0;}

2.输出100以内的素数。素数是只能被1和本身整除的数。为减少循环次数,只需对数n用2 ~去除来判断该数是否素数。 #include\"stdio.h\"

________________________ intmain() { intn,i,k; for(n=2;n<=100;________________________) { k=sqrt(n); for(i=2;i<=k;________________________) if(n%i==0)________________________ if(i>k)printf(\"\%2d\ } return0;} 3.输出200以内能被5整除的数 #include\"stdio.h\" intmain() {

________________________

for(________________________;n<=200;________________________) {

if(n%5!=0)________________________ printf(\"%d\ }

return0;}

4.求输入的十个整数中正数的个数及其平均值 #include intmain() {

inti,num=0,a;

floatsum=0;for(i=0;________________________;________________________) {

scanf(\"%d\

if(a>=0){________________________; ________________________; }

}

printf(\"%dplusinteger'ssum:%6.0f\\n\ printf(\"Meanvalue:%6.2f\\n\ return0;}

5.求输入的十个整数中负数的个数及其平均值 #include intmain() {

inti,num,a;

floatsum=0;________________________; ________________________; while(i<10){ scanf(\"%d\ if(a<=0){

________________________; num++; } ________________________; } printf(\"%dplusinteger'ssum:%6.0f\\n\ printf(\"Meanvalue:%6.2f\\n\ return0;} 6.分解并打印出X的各个素数因子.如18=1*2*3*3.#include intmain() { inti,x; scanf(“%d”,&x); printf(“%d=1”,x);

for(________________________;i<=x;________________________) {

while________________________ {

printf(“*%d”,i);

________________________; } }

return0;} 7.输出九九乘法表. #include intmain() {

inti,j;

for(i=1;________________________;________________________) {

for(________________________;________________________;j++) printf(\"%2d*%2d=%2d\ printf(\"\\n\\n\");

}

return0;}

8.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 #include\"stdio.h\" intmain() {

intn,t,number=20;floata=2,b=1,________________________; for(n=1;________________________;________________________) {

s=s+a/b; t=a; a=a+b;

________________________; }

printf(\"sumis%9.6f\\n\ return0;} 9.求1+2!+3!+...+20!的和. #include\"stdio.h\" intmain() { floatn,________________________,t=1;for(n=1;________________________;________________________;) { t*=n; ________________________; } printf(\"1+2!+3!...+20!=%e\\n\ return0;}

10.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 #include\"stdio.h\" intmain() {

intn,t,number=20;floata=2,________________________,s=0;for(________________________;________________________;n++) {

s=s+a/b; t=a;

________________________; b=t; }

printf(\"sumis%9.6f\\n\ return0;} 解答: 1.intn; n=1; n++

continue;

2.#include\"math.h\" n++ i++ break; 3.intn; n=1 n++

continue; 4.i<10 i++ num++ sum+=a 5.i=0; num=0; sum+=a; i++; 6.i=1 i++ (x%i==0) x=x/i; 7.i<=9 i++ j=1 j<=i 8.s=0 n<=20 n++ b=t; 9.s=0 n<=20 n++ s+=t; 10.b=1 n=1 n<=20 a=a+b 四.改错题 解答: 五.编程一

1.试编写程序求S=1+1*2+1*2*3+1*2*3*4+…+1*2*3*…*10的值。 2.编程利用以下公式求π的值。(取n=10000)

3.计算s=1+1/2+1/3+…+1/n的值,其中n的值由键盘输入。 4.编写程序,在屏幕上输出下面的图案(要求用for循环实现)。 ***** ***** ***** *****

*****

5.编写程序,输入整数n,并根据n的值打印图案(要求用for循环实现)。。 n为中间一行的*号个数。例如,当n=4时,图案为 * ** *** **** *** ** *

6.从键盘输入若干个学生的成绩,-1作为结束标志,求出平均成绩及最高成绩并输出其结 果。

7.编写一程序,从键盘输入n个数,输出其最大数和最小数,并输出它们在序列中的序号。 8.编程实现:输出由0、1、2、3组成的所有的各位数字均不相同的三位数,输出时每8个数 占一行。

9.输入一行字符,回车作为结束,分别统计出其中英文字母、空格、数字和其它字符的个 数。 10.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共 有5个数相加),几个数相加由键盘控制。 解答: 1.#include voidmain() { inti; floats=0,term=1;for(i=1;i<=10;i++) {s=s+term; term=term*(i+1); }

printf(\"sum%10.1f\\n\ }

2.#include voidmain() { inti;

floate=1,term=1;for(i=1;i<=100;i++) {term=term*i; e=e+1./term; }

printf(\"e=%10.6f\\n\ }

3.#include voidmain() {

inti,n;

floats=0;printf(\"inputn\\n\"); scanf(\"%d\ for(i=1;i<=n;i++)

s=s+1./i;

printf(\"s=%10.6f\\n\ }

4.#include voidmain() {

inti,j,k;

for(i=1;i<=5;i++) {for(k=1;k<=2*i;k++) printf(\"\");

for(j=1;j<=5;j++) printf(\"*\"); printf(\"\\n\"); } }

5.#include voidmain() { inti,j,n; printf(\"inputn\\n\"); scanf(\"%d\ for(i=1;i<=n;i++) {for(j=1;j<=i;j++) printf(\"*\"); printf(\"\\n\"); } for(i=n-1;i>=1;i--) {for(j=1;j<=i;j++) printf(\"*\"); printf(\"\\n\"); } } 6.

#include voidmain() {

inti,score,sum=0,max;

i=0;printf(\"pleaseinputscore:\\n\"); scanf(\"%d\ max=score;

while(score!=-1){sum=sum+score; if(score>max)max=score; i++;

scanf(\"%d\ }

printf(\"max=%d\\n\

printf(\"average=%f\\n\

} 7.

#include voidmain() {

inti,n,x,max,min,maxi=1,mini=1;printf(\"pleaseinputn:\\n\"); scanf(\"%d\

printf(\"pleaseinputx:\\n\"); scanf(\"%d\ max=x;min=x;

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

scanf(\"%d\

if(x>max){max=x;maxi=i;} if(x voidmain() { inti,j,k,n=0;for(i=1;i<=3;i++) for(j=0;j<=3;j++) for(k=1;k<=3;k++) if(i!=j&&i!=k&&j!=k) {n++;

printf(\"%5d\ if(n%8==0)printf(\"\\n\"); } }

9.#include voidmain() {

intshuzi=0,zimu=0,kge=0,qita=0;charch; ch=getchar(); while(ch!='\\n') {

if(ch=='') kge++;

elseif(ch>='0'&&ch<='9') shuzi++;

elseif(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z') zimu++; else qita++;

ch=getchar();

}

printf(\"数字=%d;字母=%d;空格=%d;其它%d\ }

10.#include voidmain() {

intSn=0,a,n,i=0,t;

printf(\"Sn=a+aa+aaa+…+aaa…a\\npleaseinputa,n:\"); scanf(\"%d,%d\ while(iSn=Sn+t; t=10*t+a; i++; }

printf(\"%ld\\n\ } 六.编程二 解答: 第六章函数 一.填空 1.函数中的形参和调用时的实参都是数组名时,传递方式为();形参实参都是 变量时,传递方式为()。 2.一个函数在它的函数体内调用它自身称为()调用。 3.函数体包括函数的说明部分和()。 4.定义在一个程序块(函数)中的变量,称为()变量,它的作用范围只是定义 它的程序块。

5.在函数原型声明中,必须声明函数参数的类型,但可以省略()。 6.C语言源程序中主函数名由系统规定为(),程序员是不能改变的。 7.已知函数首部定义为:intstat(inta,float*p) 则此函数的两个参数类型分别是()、()。

8.在c语言中,进行函数调用是,实参和实参之间有严格的规定,主要有三种要求分别是: ()相等,()一致,并()对应。

9.若自定义的函数要求返回一个值,则应在该函数中有一条()语句。

10.若函数头部定义为intfoo(),则该函数中return语句返回的数据类型是( )。

11.若函数头部定义为structstu*foo(),则该函数中return语句返回的数据类型是( )。

12.若函数头部定义为int*foo(),则该函数中return语句返回的数据类型是( )。

13.若函数头部定义为floatfoo(),则该函数中return语句返回的数据类型是( )。

14.若函数头部定义为charfoo(),则该函数中return语句返回的数据类型是( )。

15.若函数头部定义为char*foo(),则该函数中return语句返回的数据类型是( )。

16.若函数头部定义为voidfoo(inta[]),在主程序中有如下语句:

inta[5]={1};…foo(a[5]);这句函数调用的语句是()。(填“ 正确”“错误”)

17.若函数头部定义为voidfoo(int*a),在主程序中有如下语句: intarray[5]={1};…foo(array);这样的语句是()。(填“正 确”“错误”)

18.若函数头部定位为voidfoo(char*str),在主程序中有如下语句: chararray[5]=\"good\";…foo(array);这样的语句是()。(填 “正确”“错误”)

19.若一个函数中的主要语句是这样的,

inta=3;if(a>3)return-1;return0;那么这个函数的返回值是()。

20.若函数头部定义为voidfoo(int*a),主程序中定义intarray[10],现在要将arra y数据传进数组进行处理,正确函数调用语句是() 。 解答: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.

二.阅读程序写结果 1.#include longfun(intx,intn); intmain() {

intx=3,n=3;longp; p=fun(x,n);

printf(\"p=%ld\\n\ return0;}

longfun(intx,intn) { inti;

longp=1;for(i=0;ip*=x; returnp; }

2.#include intisDigit(charch); intmain() {

charch;

while((ch=getchar())!='\\n') {

if(isDigit(ch)) putchar(ch); }

printf(\"\\n\"); return0;}

intisDigit(charch) { if(ch>='0'&&ch<='9') return1;else return0;} 输入:Abc1d23eF45g<回车> 3.#include voidodddivisor(intn); intmain() { intn; scanf(\"%d\ odddivisor(n); return0;}

voidodddivisor(intn) {

inti;

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

if(n%i==0)printf(\"%5d\ printf(\"\\n\"); }

输入:15<回车> 4.#include voidprint(); inta=5;intmain() {

inta=1,b=2;a=a+b; print();

printf(\"%d%d\\n\ return0;} voidprint() {

intb=3;printf(\"%d%d\\n\ }

5.#include intfun1(intx); voidfun2(intx); intmain() {

intx=1;x=fun1(x); printf(\"%d\\n\ return0; }

intfun1(intx) { x++;

fun2(x); returnx; } voidfun2(intx) { x++; } 6.#include intfun1(inta,intb,intc); intmain() { inta=11,b=21,c=31;fun1(a,b,c); printf(\"%d%d%d\\n\ return0;}

intfun1(inta,intb,intc) {

a=a+10;b=b+10;c=c+10;returnc; }

7.#include voidfun(intx); intmain() {

fun(7);

printf(\"\\n\"); return0;} voidfun(intx) {

if(x/2>1)fun(x/2); printf(\"%5d\ }

8.#include voidfun(inta[]); intmain()

{

inti,a[5]={1,2,3}; fun(a);

for(i=0;i<5;i++) printf(\"%5d\ printf(\"\\n\"); return0;}

voidfun(inta[]) { inti;

for(i=0;i<5;i++) a[i]+=5;}

9.#include voidfun(intk); voidmain() { intw=5; fun(w); printf(\"\\n\"); } voidfun(intk) { if(k>0) fun(k-1); printf(\"%d\ } 10.#include voidf1(void); inta=1;voidmain() {

inta=2;f1(); {

inta=3;printf(\"a2=%d\\n\ }

printf(\"a3=%d\\n\ }

voidf1(void) {

printf(\"a1=%d\\n\ }

11.#include

voidf(inta,intb,int*c) {

a=20;b=10; *c=a+b; }

voidmain()

{

inta=10,b=20,c=30,d=40;f(a,b,&c); printf(\"%d,%d,%d\\n\ }

12.#include voidswap(inta,intb); voidmain() {

inta=2,b=3;printf(\"a=%d,b=%d\\n\ swap(a,b);

printf(\"a=%d,b=%d\\n\ }

voidswap(inta,intb) { intc; c=a; a=b; b=c; } 13.#include voidfun(inta,intb,intc); voidmain() { intx=10,y=20,z=30; fun(x,y,z); printf(\"%d,%d,%d\\n\ }

voidfun(inta,intb,intc) {

a=456;b=567;c=678;} 14.#include floatf(intn) {

inti;floats=0.0;for(i=1;ivoidmain() {

inti;floata=0.0;for(i=1;i<3;i++) a=a+f(i);

printf(\"a=%.4f\\n\ }

15.#include intf(inta); voidmain() {

inta=2,i;

for(i=0;i<3;i++) printf(\"%d\ }

intf(inta) {

intb=0,c=3;b++; c++;

return(a+b+c); }

16.#include intfun(); voidmain() {

inti,x;

for(i=0;i<=2;i++) x=fun(); printf(\"%d\\n\ } intfun() { intx=3;x++; returnx; } 17.#include floatadd(floatx,floaty); voidmain() {

floata,b,c;

a=1.0;b=2.0;c=add(a,b); printf(\"%f\\n\ }

floatadd(floatx,floaty) {

floatz; z=x+y; return(z); }

18.#include

voidfun(intx,intcp,intdp) {

cp=x++; dp=++x; }

voidmain(void) {

inta,c=80,d=-20;a=30;fun(a,c,d);

printf(\"%d,%d\\n\ }

19.#include intf(inta,intb); voidmain() {

inti=2,p; p=f(i,i+1);

printf(\"%d\\n\ }

intf(inta,intb) { intc; if(a>b)

c=1;elseif(a==b) c=0;else c=-1;return(c); } 20.#include intfun(intn) { if(n==1)return1;elsereturnfun(n-1)+3;} voidmain() { inti,j=0;for(i=1;i<4;i++) j=j+fun(i); printf(\"j=%d\\n\ }

21.#include voidf(intx,inty) { intt; if(x{t=x;x=y;y=t;} }

voidmain() {

inta=4,b=3,c=5;f(a,b); f(a,c); f(b,c);

printf(\"%d,%d,%d\ }

22.#include intage(intn) { intc; if(n==1)

c=10; else

c=age(n-1)+2; return(c); }

voidmain() {

printf(\"%d\ }

23.#include

voidhello_world(void) {

printf(\"Hello,world!\\n\"); }

voidthree_hellos(void) { intcounter; for(counter=1;counter<=3;counter++) hello_world(); } voidmain(void) { three_hellos(); } 24.#include intf(inta,intb); voidmain() {

intx,i=1,k=3;x=f(i,k); printf(\"x=%d\\n\ }

intf(inta,intb) {

intM=0;while(b!=0){ M=M+a; b--; }

returnM; }

25.#include f(intb[],intm,intn) {

inti,s=0;for(i=m;iintmain()

{

intx,a[]={1,2,3,4,5,6,7,8,9},*p=a; x=f(p,3,7);

printf(\"x=%d\\n\ return0;}

26.#include voidfun(inti,intj) {

intx=7;printf(\"i=%d;j=%d;x=%d\\n\ }

intmain() {

inti=2,x=5,j=7;fun(j,6);

printf(\"i=%d;j=%d;x=%d\\n\ return0;} 27. #include voidf(inta[]) { inti=0; while(a[i]<=10) { printf(\"%d\ i++; } } intmain() {

inta[]={1,7,17,9,11,34}; f(a+1); }

28.#include

voidadd(intx,inty,intz) {

z=x+y; x=x*x; y=y*y;

printf(\"(2)x=%dy=%dz=%d\\n\ }

intmain() {

intx=2,y=3,z=0; printf(\"(1)x=%dy=%dz=%d\\n\ add(x,y,z);

printf(\"(3)x=%dy=%dz=%d\\n\ return0; } 29.

#include

intx1=30,x2=40; voidsub(intx,inty) { x1=x; x=y; y=x1; }

intmain() {

intx3=10,x4=20; sub(x3,x4); sub(x2,x1);

printf(\"%d,%d,%d,%d\\n\ return0; }

30.#include intx; voidcube() { x=x*x*x; } intmain() { x=5; cube(); printf(\"%d\\n\ return0; }

31.#include

invert(int*s,inti,intj) { intt; if(iinvert(s,i+1,j-1); t=*(s+i);

*(s+i)=*(s+j); *(s+j)=t; } }

voidmain() {

inta[6]={10,6,23,-90,0,3},i; invert(a,0,5);

for(i=0;i<6;i++)printf(\"%d,\ printf(\"\\n\"); }

32.intfunc(inta[][3]) {

inti,j,sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++){ a[i][j]=i+j; if(i==j)

sum=sum+a[i][j]; }

returnsum; }

intmain() {

inta[3][3]={1,3,5,7,9,11,13,15,17}; intsum;

sum=func(a); printf(\"sum=%d\ return0; } 33.#include inti=10;voidfun(); voidmain() {inti; for(i=2;i>0;i--) fun(); } voidfun() {

i*=2;printf(\"i=%d\\n\ } 34.

#include intfun(intn) {

if(n<=1) return1; else

returnfun(n-1)*n; }

voidmain() {

inti,j=0;

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

printf(\"j=%d\\n\ } 35.

#include intfuna(inta,intb) { intt; if(a>b) t=a/b; else t=a%22; returnt; }

voidmain() {

inta=33,b=22,c; c=funa(a,b);

printf(\"c=%d\\n\ } 36.#include voidfun(inti); voidmain() {inti; for(i=2;i>0;i--) fun(i); } voidfun(inti) { i*=2;printf(\"+%d+\ }

37.#include voidfun(intn); voidmain() {

intx=879;fun(x); }

voidfun(intn) {

inta,b,c,t;

a=n%10;b=(n/10)%10;c=(n/100)%10;if(a38.#include intfuna(inta,intb) { intt; if(a>b) {

t=a; a=b; b=t; }

returnt; }

voidmain() {

inta=33,b=22,c; c=funa(a,b);

printf(\"c=%d\\n\ } 39.

#include intswap(intx,inty) { intz; z=x%10; x=y%10; y=z; z=x; returnz; } voidmain() { inta=38,b=29,c; c=swap(a,b);

printf(\"%d%d\\n\ }

40.#include voidfun(intn) {

if(n==1)printf(\"*\\n\"); else {

printf(\"-\"); fun(n-1); } }

voidmain() {

inti,j=0;for(i=1;i<4;i++) fun(i);

printf(\"XiaoXin!\"); } 解答: 1.p=27

2.运行结果:12345 3.35 4.53 32 5.2

6.112131 7.37 8.67855 9.012345 10.a1=1 a2=3 a3=2 11.10,20,30 12.a=2,b=3 a=2,b=3 13.10,20,30 14.a=1.0000 15.567 16.4 17.3.000000 18.80,-20 19.-1 20.j=12 21.4,3,5 22.18 23.Hello,world! Hello,world! Hello,world! 24.x=3; 25.x=22

26.i=7;j=6;x=7 i=2;j=7;x=5 27.7

28.(1)x=2y=3z=0 (2)x=4y=9z=5 (3)x=2y=3z=0 29.10,20,40,40 30.125

31.3,0,-90,23,6,10 32.sum=6 33.i=20i=40 34.j=9 35.c=1 36.+4++2+ 37.8 38.c=33 39.389

40.

* -* --*

XiaoXin! 三.补充程序

1.定义了一个max函数,找两个整数的最大值,其位置在main之后. #include\"stdio.h\"

________________________ intmain() {

intx,y,z;

printf(\"inputtwonumbers:\\n\"); scanf(\"%d%d\

________________________; printf(\"maxmum=%d\ return0;} intmax(inta,intb) { ________________________; if(a>b)w=a; elsew=b; ________________________; } 2.用函数nzp判别一个整数a的值,若大于0则输出该值,若小于等于0则输出0值。 #include\"stdio.h\" ________________________nzp(________________________) {

if(v>0)________________________ else

printf(\"%d\ }

intmain() { inta;

printf(\"inputnumbera:\\n\"); scanf(\"%d\

________________________ return0;}

3.主函数调f1计算n阶乘. #include\"stdio.h\"

________________________ intmain() { intn; longs;

scanf(“%d”,&n);

________________________ printf(\"\\ns=%ld\\n\ return0;} longf2(intn) {

________________________ inti;

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

________________________ }

4.主函数调fun计算1+1/2!+1/3!+...+1/30!的和. #include\"stdio.h\"

________________________ intmain() { intn; floats; ________________________ printf(\"1+1/2!+1/3!...+1/30!=%f\\n\ return0;} floatfun() { intn; floatt=1; ________________________ for(n=1;n<=30;n++) {

t*=1/n; s+=t; }

________________________ }

5.数组a中存放了一个学生5门课程的成绩,求平均成绩。 #include\"stdio.h\"

________________________ intmain() {

floatsco[5],av; inti;

printf(\"\\ninput5scores:\\n\"); for(i=0;i<5;i++) scanf(\"%f\ ________________________

printf(\"averagescoreis%5.2f\ return0;}

floataver(floata[])

{ inti;

floats=a[0];

________________________ for(i=1;i<5;i++) s=s+a[i];

av=s/5;________________________ }

6.用递归法计算n!

#include\"stdio.h\"

________________________ intmain() { intn; longy;

printf(\"\\ninputainteagernumber:\\n\"); scanf(\"%d\ ________________________ printf(\"%d!=%ld\ return0;} ________________________ff(intn) { longf; if(n<0)printf(\"n<0,inputerror\"); elseif(n==0||n==1)f=1; elsef=ff(n-1)*n; ________________________ }

7.输入正方体的长宽高l,w,h。求体积及三个面x*y,x*z,y*z的面积。 #include\"stdio.h\"

ints1;________________________ intvs(inta,intb,intc) {

________________________ v=a*b*c; s1=a*b; s2=b*c; s3=a*c;

________________________ }

intmain() {

intv,l,w,h;

printf(\"\\ninputlength,widthandheight\\n\"); scanf(\"%d%d%d\ ________________________

printf(\"v=%ds1=%ds2=%ds3=%d\\n\ return0;}

8.输入两个正整数num1,num2,求其最大公约数. #include\"stdio.h\"

________________________ intmain() { intd;

intnum1,num2;printf(\"pleaseinputtwonumbers:\\n\"); scanf(\"%d,%d\ ________________________ printf(\"gongyueshu:%d\\n\ return0;}

intgongyue(inta,intb) {

________________________ while(b) { temp=a%b; a=b; b=temp; } ________________________ } 9.利用递归函数调用方式,输出6个数字。 #include\"stdio.h\" ________________________ intmain() {

intw=5;fun(w); printf(\"\\n\"); return0;}

________________________fun(________________________) {

if(k>0)________________________; printf(“%d”,k); }

10.主函数调printstar打印一串星形图案. #include\"stdio.h\"

________________________ intmain() {

________________________; return0; }

________________________printstar(________________________) {

printf(“*************\\n”); } 解答:

1.intmax(inta,intb); z=max(x,y); intw; returnw; 2.void intv

printf(\"%d\ nzp(a); 3.longf2(intn); s=f2(n); longc=1; returnc;

4.floatfun(void); s=fun(); floats=0; returns; 5.floataver(floata[]); av=aver(sco); floatav; returnav; 6.longff(intn); y=ff(n); long returnf; 7.ints2,s3; intv; returnv; v=vs(l.w,h);

8.intgongyue(inta,intb); d=gongyue(num1,num2); inttemp; returna; 9.voidfun(intk); void intk; fun(k-1);

10.voidprintstar(void); printstar(); void void 四.改错题 解答: 五.编程一 解答: 六.编程二

1.编程实现:任意输入两个正整数,求它们的最大公约数和最小公倍数。要求最大公约数 通过自定义函数来输出。

2.编程实现:求出10~10000之内的所有素数。要求素数判断通过自定义函数来实现。 3.编程实现:输出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字立 方和等于该数本身。例如:153是一个“水仙花数”,因为。要求水仙花数的判断通过自定 义函数来实现。

4.编程实现:打印出2~1000之间的所有完数。所谓完数,是指这样的数,该数的各因子之 和正好等于该数本身,例如:6=1+2+3;28=1+2+4+7+14;因此,6、28都是完数。要求完数的 判断通过自定义函数来实现。

5.编程实现:打印出10~9999之间的所有回文数,要求每10个数一行输出。要求回文数的判 断通过自定义函数来实现。

6.编程实现:打印出1~9999之间的所有同构数,所谓同构数是指一个数如果出现在该数平 方的右端,该数就是同构数。如5,25都是同构数。要求同构数的判断通过自定义函数来实现 。

7.给定一5*5的整型矩阵,求所有正对角线元素之和,并以矩阵的形式输出矩阵的值。要求 :对角线元素之和及矩阵输出分别通过两个自定义函数来实现。

8.编程实现:输入一4*4的矩阵的值,求出每行的最大值并输出其所在列号。要求:通过通 过自定义函数实现矩阵的输入输出。 9.编程实现:任意给定一个十进制的整数,将其转换成二进制,按位将其存放到数组中, 然后输出,要求数制转换通过自定义函数来实现。 10.编程实现:任意输入一个正整数,编程求出它是几位数并将其逆序输出。要求通过自定 义函数实现求是几位数,该函数原形为:intni(intx,inta[]);函数返回值是该数是几位 数,x为给定的数,a中存放该数的各个位。 n11.编写程序从键盘输入x和n的值,求x(n为大于等于零的整数),要求用 n递归函数求x。 12.编写实现:输入两个正整数m,n(m>n),计算从m个元素中任意取n个元素的组合,计算机 公式为: 要求通过递归函数求阶乘。

13.编程实现:从键盘任意输入10个不相同的整数,然后,输入要查找的数x,如果在这10个 数中找到x,则打印“Found!”;如果找不到,则打印“Notfound!”。要求通过自定义函数 实现查找功能。

14.从键盘输入某班20个学生的成绩和学号,然后从键盘任意输入一个学生的学号,查找出 他的成绩并输出,若未找到,给出相应提示。要求通过自定义函数实现查找功能。

15.编程实现:从键盘任意输入某班20个学生的姓名和成绩,输出最高分及不及格学生的人 数。要求分别用两个自定义函数求最高分和不及格人数。

16.编程实现:输入2个降序排列的整数数列,将这两个数列合并存放到另一个数组中,要求 每个数都一次到位,不得在新数组中重新排序。要求数列合并通过自定义函数来实现。

17.编程实现:输入N名职工的姓名及计算机水平考试的成绩,输出及格人数和及格的职工信 息。要求:职工信息的输入和输出分别通过自定义函数来实现。

18.编程实现:从键盘输入10名学生的信息,包括学号、姓名、成绩,用一个排序函数sort 完成学生成绩降序排列,并输出学生排序后的结果。

19.编程实现:任意输入一组不多于20个的升序排列的若干个整数,任意输入不多于10个的 整数(-1作为输入结束标志),将其插入到该序列中,使其依然有序。要求:通过自定义函 数实现将一个整数插入到一个有序序列中,使其依然有序。

20.一个班级有30个学生,每个学生有学号、姓名及数学、语文、计算机成绩、平均成绩。 要求编程实现以下功能:

1)从键盘上输入30个学生的信息,平均成绩通过公式:平均成绩=(数学+语文+计算机

)/3计算得出。

2)输出所有平均成绩大于等于85的学生姓名(要求用自定义函数实现该功能)。 解答: 1.

#include\"stdio.h\"

intGreatComDiv(intm,intn); intLeaseComMul(intm,intn); voidmain() {intm,n,t;

printf(\"请输入m和n的值:\"); scanf(\"%d%d\ if((m<=0)||(n<=0))

{printf(\"输入错误!请重新输入!\\n\"); scanf(\"%d%d\ }

if(mreturnn; }

intLeaseComMul(intm,intn) {intgreatcomdiv;

greatcomdiv=GreatComDiv(m,n); returnm*n/greatcomdiv; } 2.

#include\"stdio.h\" intsushu(intn); voidmain() {intn;

printf(\"inputn:\\n\"); scanf(\"%d\

if(sushu(n))printf(\"%d是素数\\n\ elseprintf(\"%d不是素数\\n\ }

intsushu(intn) {inti;

for(i=2;iif(n%i==0)return0; return1; } 3.编程实现:输出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字立 方和等于该数本身。例如:153是一个“水仙花数”,因为。要求水仙花数的判断通过自定 义函数来实现。

#include\"stdio.h\" intfun(intn); voidmain() {inti;

for(i=100;i<=999;i++)

if(fun(i))printf(\"%d\\n\ }

intfun(intn) {inta,b,c;

a=n/100;b=n/10%10;c=n%10; if(a*a*a+b*b*b+c*c*c==n)return1; return0; 4.#include\"stdio.h\" intwanshu(intn); voidmain() {intn; printf(\"inputn:\\n\"); scanf(\"%d\ if(wanshu(n))printf(\"%d是完数\\n\ elseprintf(\"%d不是完数\\n\ } intwanshu(intn) {inti,s=0; for(i=1;i<=n/2;i++) if(n%i==0)s+=i; if(s==n)return1; elsereturn0; } 5.

方法一:

#include\"stdio.h\" inthuiwen(intn); voidmain() {intn;

printf(\"inputn:\\n\"); scanf(\"%d\

if(huiwen(n))printf(\"%d是回文数\\n\ elseprintf(\"%d不是回文数\\n\ }

inthuiwen(intn) {inta[6],i=0,j;

while(n!=0)//从第一个开是放元素 {i++;

a[i]=n%10;n=n/10;} for(j=1;jif(a[j]!=a[i-j+1])return0;return1;} 方法二、#include

intrev(inta);-----------------------------------------------------------

}

---------------1分 voidmain()

{intx,y,i=0; for(x=1;x<1000;x++)------------------------------------------------------ --------2分 {y=rev(x); if(x==y)

{printf(\"%6d\------3分 i++;

if(i%10==0) printf(\"\\n\");---------------------------------------------------------- --2分 } } }

intrev(inta)

{intm,b=0;-------------------------------------------------------------- -------------1分 while(a!=0) {m=a%10; b=b*10+m;

a=a/10;--------------------------------------------------------------- ------------5分 } returnb;------------------------------------------------------------------ -------------1分 6. #include\"stdio.h\" inttgshu(intn); voidmain() {intn; printf(\"inputn:\\n\"); scanf(\"%d\ if(tgshu(n))printf(\"%d是同构数\\n\ elseprintf(\"%d不是同构数\\n\ }

inttgshu(intn) {intd=1,nn,k=0,t; nn=n*n; t=n;

while(t!=0) { d=d*10; t=t/10; }

if(nn%d==n)return1; elsereturn0; } 7.

#include\"stdio.h\" #definen5

voidout(inta[n][n]); inthe(inta[n][n]); voidmain()

{inta[n][n],i,j,s;

printf(\"input5*5elements\\n\"); for(i=0;iscanf(\"%d\ printf(\"\\n\");

8.

s=he(a);

printf(\"he=%d\\n\out(a); }

voidout(inta[n][n]) {inti,j;

for(i=0;ifor(j=0;jprintf(\"%6d\ printf(\"\\n\"); } }

inthe(inta[n][n])

{inti,sum=0;for(i=0;ifor(i=0;ik=0;for(j=1;jprintf(\"第%d行最小值为:%5d,它是第%2d列\\n\}

printf(\"\\n\"); out(a); }

voidinp(inta[n][n]) {

inti,j;

for(i=0;iscanf(\"%d\ }

voidout(inta[n][n]) {inti,j;

for(i=0;ifor(j=0;jprintf(\"%6d\ printf(\"\\n\"); } }

9.#include\"stdio.h\"

intchange(intx,inta[])//返回值为二进制的位数 {intn=-1;while(x!=0){n++; a[n]=x%2;x=x/2;} returnn; }

voidmain()

{intx,a[20],i,n; printf(\"inputx\\n\"); scanf(\"%d\ n=change(x,a); for(i=n;i>=0;i--) printf(\"%1d\ printf(\"\\n\"); } 10. #include\"stdio.h\" intni(intx,inta[])//返回值为数的位数 {intn=-1;while(x!=0){n++; a[n]=x%10;x=x/10;} returnn; }

voidmain()

{intx,a[20],i,n; printf(\"inputx\\n\"); scanf(\"%d\ n=ni(x,a);

for(i=0;i<=n;i++) printf(\"%1d\ printf(\"\\n\"); }

11.#include\"stdio.h\" intexp(intx,intn); voidmain() {intx,n;

printf(\"inputx,n:\\n\"); scanf(\"%d%d\ printf(\"%d\\n\ }

intexp(intx,intn) {if(n==1)returnx; returnx*exp(x,n-1);

}

12.#include\"stdio.h\" longintjch(intn)

{if(n==1)return1;elsereturnn*jch(n-1); }

voidmain() {intm,n,zuhe;

printf(\"inputtwointegersm,n(m>n)\\n\"); scanf(\"%d,%d\ if(m>=n)

zuhe=jch(m)/(jch(n)*jch(m-n));

printf(\"%d,%d的组合为:%d\ } 13.

#include\"stdio.h\"

voidserach(inta[],intx) { inti; for(i=0;i<10;i++) if(a[i]==x) {printf(\"Found\\n\"); return; } printf(\"Notfound!\\n\"); } voidmain() {inti,a[10],x;

printf(\"input10integers\\n\"); for(i=0;i<10;i++) scanf(\"%d\ printf(\"inputx\\n\"); scanf(\"%d\ serach(a,x); } 14.

#include\"stdio.h\" #include\"string.h\" typedefstruct {charno[10]; intscore; }studtype;

voidsearch(studtypea[],charxno[]) { inti;

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

if(strcmp(a[i].no,xno)==0){printf(\"%d\\n\ return;

}

printf(\"Notfound!\\n\"); }

voidmain()

{studtypestu[20]; charxno[10]; inti;

printf(\"input20no,score\\n\"); for(i=0;i<20;i++)

scanf(\"%s%d\ printf(\"inputxno\\n\"); scanf(\"%s\ search(stu,xno); }

15.编程实现:从键盘任意输入某班20个学生的姓名和成绩,输出最高分及不及格学生的人 数。要求分别用两个自定义函数求最高分和不及格人数。 #defineN20#include typedefstruct { charname[10];/*姓名*/ intscore;/*成绩*/ }datatype; intmax(datatypestu[]);/*最高分函数声明*/ intnum(datatypestu[]);/*不及格人数函数声明*/ voidmain() { datatypestu[N]; inti,max_score,n;

printf(\"请输入%d名职工姓名成绩:\\n\ for(i=0;iscanf(\"%s%d\ max_score=max(stu); n=num(stu);

printf(\"最高分:%d;不及格人数%d\ }

intmax(datatypestu[])/*最高分函数定义*/ {intm,i;

m=0; for(i=1;iif(stu[i].score>stu[m].score)m=i; returnstu[m].score; }

intnum(datatypestu[])/*不及格人数函数定义*/ {

inti,n=0;for(i=0;i16.编程实现:输入2个降序排列的整数数列,将这两个数列合并存放到另一个数组中,要求 每个数都一次到位,不得在新数组中重新排序。要求数列合并通过自定义函数来实现。 #defineM4 #defineN5

#include

voidmerge(inta[],intb[],intc[]); voidmain() {

inti,a[M],b[N],c[M+N];

printf(\"请输入%d个降序排列的整数:\\n\ for(i=0;iprintf(\"请输入%d个降序排列的整数:\\n\ for(i=0;ib[j]) c[k++]=a[i++]; elsec[k++]=b[j++]; while(i17.编程实现:输入N名职工的姓名及计算机水平考试的成绩,输出及格人数和及格的职工信 息。要求:职工信息的输入和输出分别通过自定义函数来实现。 #defineN10#include //#include typedefstruct {

charname[10];/*姓名*/ floatscore;/*成绩*/ }datatype;

voidinput(datatypework[]);/*input函数声明*/ voidprint(datatypework[]);/*print函数声明*/ voidmain() {

datatypework[N]; input(work); print(work); }

voidinput(datatypework[])/*input函数定义*/ { inti;

printf(\"请输入%d名学生的姓名成绩:\\n\ for(i=0;iscanf(\"%s%f\ }

voidprint(datatypework[])/*print函数定义*/ { inti;

for(i=0;iif(work[i].score>60)printf(\"%10s\\n\ }

18.编程实现:从键盘输入10名学生的信息,包括学号、姓名、成绩,用一个排序函数sort 完成学生成绩降序排列,并输出学生排序后的结果。 #defineN10#include //#include typedef { charnum[20];/*学号*/ charname[20];/*姓名*/ floatscore;/*成绩*/ }stutype; voidinput(stutypestu[]);/*input函数声明*/ voidsort(stutypestu[]);/*sort函数声明*/ voidprint(stutypestu[]);/*print函数声明*/ intmain() {

stutypestu[N]; input(stu); sort(stu); print(stu); return0; }

voidinput(stutypestu[])/*input函数定义*/ { inti;

printf(\"请输入%d名学生信息(学号姓名成绩):\\n\ for(i=0;iscanf(\"%s%s%f\ }

voidsort(stutypestu[])/*sort函数定义*/ {

inti,k,j; stutypet;

for(i=0;ifor(j=i+1;jif(stu[k].scoret=stu[i];

stu[i]=stu[k]; stu[k]=t; } } }

voidprint(stutypestu[])/*print函数定义*/ { inti;

printf(\"****名次学号姓名成绩****\\n\"); for(i=0;i voidins(inta[],int*n,intx); voidmain() {inta[30],x,m,i; m=-1; printf(\"输入一组不多于20个的升序排列的若干个整数,-1作为输入结束标志\\n\"); scanf(\"%d\

while(x!=-1) {m++; a[m]=x;

scanf(\"%d\ }

printf(\"输入一组不多于10个的升序排列的若干个整数,-1作为输入结束标志\\n\"); scanf(\"%d\

while(x!=-1) {ins(a,&m,x); scanf(\"%d\ }

for(i=0;i<=m;i++) printf(\"%5d\ }

voidins(inta[],int*n,intx) {inti=*n;

while(a[i]>x&&i>=0){a[i+1]=a[i]; i--; }

a[i+1]=x; (*n)++; }

20.一个班级有30个学生,每个学生有学号、姓名及数学、语文、计算机成绩、平均成绩。 要求编程实现以下功能:

1)从键盘上输入30个学生的信息,平均成绩通过公式:平均成绩=(数学+语文+计算机 )/3计算得出。

2)输出所有平均成绩大于等于85的学生姓名(要求用自定义函数实现该功能)。 #include\"stdio.h\"

#definen30 typedefstruct {charno[11],name[9]; intmath,chiness,comp; floatave; }studtype;

voidout(studtypea[]) { inti;

for(i=0;iif(a[i].ave>=85)printf(\"%10s\\n\ } voidmain() {studtypestu[n]; inti; printf(\"inputno,name,math,chiness,computer\\n\"); for(i=0;i1.数组是由固定数目的()的变量按一定顺序排列而构成的。 2.设有数组定义:chararray[]=“China”;则数组所占的存储空间为()个字节 。

3.一个二维字符数组a[10][20]能够存储()个字符串。

4.假定在一维数组b[10]中,元素b[5]的指针为p,则p+4所指向的元素为()。 5.一维数组的下标从()开始。

6.设有数组a[10];则首地址可以写成()。

7.设有数组inta[10],数组元素a[5]用指针表示的形式是()。

8.设有数组inta[10][15],数组元素a[5][3]用指针表示的形式是()。 9.定义3行4列的整型二维数组a的语句是()。

10.定义intb[]={5,6,7,8},y,*p=b;执行y=*p++以后,y的值为()。 11.按下面的语句定义数组a后,a[2][0]的值为()。 inta[3][2]={2,4,6,8,10}; 12.假设要把“student!”存入一个字符数组,则该数组长度应该至少为() 。

13.在C语言中,如果采用语句inta[2][3]={1,2,3,4,5}完成一个二维数组的定义和初 始化,那么a[0][1]的值为()。

14.在C语言中,如果采用语句inta[2][3]={1,2,3,4,5}完成一个二维数组的定义和初

始化,再定义int*b=a[0],那么*(b+2)的值为().

15.若inta[][3]={1,2,3,4,5,6,7,8,9};则*(*a+1)的值是()。 16.按下面的语句定义数组b后,b[2][1]的值为()。 intb[][2]={2,1,4,3,5,6}。

17.设inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,则*p+4=()。 18.定义2行3列5层的整型三维维数组a的语句是()。 19.若有inta[3]={10,12,30};则*(a+2)+3=()。 20.若有inta[3]={10,12,30};则a+1是()的地址。

21.假设int型变量占两个字节的存储单元,若有定义:intx[10]={0,2,4};则数组x在内存 中所占字节数为()。

22.若有定义inta[][3]={1,2,3,4,5,6,7};,则a数组第一维的大小是( )。

23.数组inta[3][3];共定义了()个数组元素。 24.C语言中,二维数组的存放方式为按()存放。(填“行”或“列”)

25.定义inta[10]={11,12,13,14,15},*p=&a[5];假设&a[0]和&a[1]的值分别是0x2000和0 x2004,则p的值是()。 26.定义inta[10]={11,12,13,14,15},*p=&a[3];假设&a[0]和&a[1]的值分别是0x2000和0 x2004,则表达式a[0]+*p的值是()。 27.对一维数组初始化时,若有inta[10]={0,1,2,3,4},则a[5]的值是( )。 28.已知:inta[][3]={1,3,5,7,9,11};此时数组元素a[1][2]的值为( )。 29.定义chara[7]=\"abcdef\";charb[4]=\"ABC\执行语句strcpy(a,b);printf(\"%s\输出结果是()。 30.定义inta[10]={1,3,5,7,9,11,13,15,17,19},*p=a;执行语句printf(\"%d\输出 结果是()。 31.已知inta[5]={2,3,4,5,6};int*p=a+2;则表达式*p*a[3]的值是( )。

32.定义chara[7]=\"123456\";charb[4]=\"ABC\执行语句strcpy(a,b);printf(\"%c\6]),输出结果是()。

33.对整形数组inta[5]={1,2,3};则执行语句a[2]=a[2]+a[1]*(*(a+3));a[2]的值为( )

34.定义chara[5]={65,66,67},*p=a;则执行语句printf(\"%s\输出结果为( )。

35.对于定义

structTData{ inta[2]; charc; };

structTDataslist[3]={{{1,2},’A’},{{3,4},’B’}}}; slist[1].a[0]的值为()。

36.已知:inta[][3]={1,3,5,7,9,11};则*(a[1]+1)的值为( )。

37.已知:inta[2][3]={1,3,5,7,9,11,13},*p;p=&a[2];p=p+3;则*p的值为( )。

38.定义chara[7]=\"123\";charb[4]=\"ABC\执行语句strcat(a,b);printf(\"%s\输 出结果是()。

39.对整形数组inta[5]={3,3,3};则执行语句a[2]=a[1]>0?(a[4]+1):(a[2]+2);a[2]的值 为();

40.定义inta[]={5,6,7,8},*p=a;执行*(p++);以后,a[0]的值为( )。 解答: 1.同类型 2.6 3.10 4.b[9] 5.0 6.a

7.*(a+5)

8.*(*(a+5)+3) 9.inta[3][4] 10.5 11.10 12.9 13.2 14.3 15.2 16.6 17.4 18.inta[2][3][5] 19.33 20.a[1] 21.20 22.3 23.9 24.行 25.0x2014 26.25 27.0 28.11 29.ABC 30.8 31.20 32.6 33.3 34.BC 35.4 36.5 37.11 38.123ABC 39.1 40.5

二.阅读程序写结果 1.#include

voidmain() {

inta[2][3]={{3,2,7},{4,8,6}}; inti,j,m=0;for(i=1;i<=1;i++) for(j=0;j<=i;j++) m=m+a[i][j];

printf(\"m=%d\ }

2.#include voidmain(void) {

intarray[10]={1,2,4,5,6,0,0,0,0,0},i; printf(\"\\n\"); for(i=0;i<10;i++)

printf(\"%3d\ printf(\"\\n\"); for(i=9;i>=2;i--) array[i]=array[i-1]; array[2]=3;for(i=0;i<10;i++) printf(\"%3d\ printf(\"\\n\"); } 3.#include voidmain(void) { chara[]=\"ABCDEFGH\ char*p1,*p2;intk; p1=a;p2=b;

for(k=0;k<=7;k++) if(*(p1+k)==*(p2+k)) printf(\"%c\ printf(\"\\n\"); }

4.#include #include voidmain() {

chara[30]=\"Hello\"; charb[10]=\"Students\"; charc[10]=\"Teachers\"; strcat(a,c);

printf(\"%s,%s.\\n\ }

5.#include

voidinv(intx[],intn); voidmain() {

inti,a[10]={3,7,9,11,0,6,7,5,4,2}; inv(a,10);

printf(\"Thearrayhasbeenreverted.\\n\"); for(i=0;i<10;i++) printf(\"%d,\ printf(\"\\n\"); }

voidinv(intx[],intn) {

intt,i,j,m=(n-1)/2;for(i=0;i<=m;i++) {

j=n-1-i; t=x[i]; x[i]=x[j]; x[j]=t; } } 6.#include voidmain() { floata[3][3]={1,2,3,4,5,6,7,8,9},sum=0;inti; printf(\"pleaseinputrectangleelement:\\n\"); for(i=0;i<3;i++) sum=sum+a[i][i]; printf(\"duijiaoxianheis%6.2f\ } 7.#include intmain() {

inti=1,n=3,j,k=3;inta[5]={1,4,5}; while(i<=n&&k>a[i])i++; for(j=n-1;j>=i;j--) a[j+1]=a[j]; a[i]=k;

for(i=0;i<=n;i++) printf(“%2d”,a[i]); return0;}

8.#include voidmain() {

inta[10]={0,1,2,3,4,5,6,7,8,9},b[10],i,sum=0;for(i=1;i<10;i++) {

b[i]=a[i-1]+a[i]; sum=sum+b[i]; }

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

if(i%3==0)sum=sum+b[i];

printf(\"sum=%3d\ }

9.#include voidmain() {

inta[5]={2,6,1,3,4},n=5,i,j,t; for(i=0,j=1;ja[j]=a[i]; i++; }

for(i=0;i10.#include voidfuna(intx[],intn); voidmain() { inti,a[5]={3,7,9,11,0}; funa(a,5); for(i=0;i<5;i++) printf(\"%d,\ printf(\"\\n\"); } voidfuna(intx[],intn) {

intt,i,j,m=(n-1)/2;for(i=0;i<=m;i++) {

j=n-1-i; t=x[i]; x[i]=x[j]; x[j]=t; } }

11.#include voidmain() {

inta[5]={24,15,33,64,45},n=5,i,j,t; for(i=0;ia[i]=a[i]%10;for(i=n;i>0;i--) printf(\"%d,\ }

12.#include voidmain() {

inta[5],i,j,t;

for(i=4;i>=0;i--) scanf(\"%d\ for(i=0;i<5;i++)

a[i]=a[i]+10;for(i=0;i<5;i++) printf(\"%d,\ }

输入:4231241516<回车> 13.#include voidmain() {

chara[][5]={\"Zhong\ printf(\"%s\\n%s\\n\ }

14.#include voidmain() { inta[3][3]={0,1,2,3,4,5,6,7,8},i,j,t; for(i=0;i<3;i++) for(j=0;j<3;j++) a[i][j]+=a[i][0]; for(i=0;i<3;i++) printf(\"%d,\ } 15.#include voidmain() { inta[3][3]={1,2,3,4,5,6,7,8,9},i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) a[i][j]+=a[i][2]; while(i>0){ i--;

printf(\"%d,\ } }

16.#include voidmain() {

inti,j;

chara[10]={\"ABCDEFGHIJ\ for(i=0;i<10;i++)

a[i]=a[i]+3;printf(\"%c\\n\ }

17.#include intmain() {

inti,a[10]={0,1,2,3,4,5,6,7};

for(i=1;i<9;i++) a[i]=a[i-1]+a[i+1];

printf(\"%d%d\\n\ return0;}

18.#include intmain() {

inti,a[]={1,2,3,4,5,6,7,8,9,10}; for(i=0;i<5;i++)

a[i]=i+2;for(i=9;i>=0;i--)

if(a[i]%3==0)printf(\"%d\\n\ return0;}

19.#include intmain() {

intnum=13,len=0,i=0,a[30]; do { a[len]=num%2;num=num/2;len++; }while(num); for(i=0;i intmain() {

inta[5]={6,9,12,16}; intx,i=3;scanf(\"%d\ while(i>=0&&xa[i+1]=a[i]; i--; }

a[i+1]=x;

for(i=0;i<5;i++) printf(\"%5d\ printf(\"\\n\"); return0;}

输入:10<回车> 21.#include intmain() {

inta[3][3]={{2,3},{4,5,6},{7,8}}; inti=0,j=0,m; m=a[0][0];

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

for(j=0;j<3;j++) if(a[i][j]printf(\"m=%d\\n\ return0;}

22.#include #include intmain() { inti;

charstr[20]=\"abcdef\"; strcpy(str,\"opqrst\"); str[5]='\\0';

for(i=0;i #include intmain() { chara[10]=\"AB\ inti=0;while(b[i]) { a[i]=b[i]; i++; }

a[i]='\\0'; puts(b); return0;}

24.#include #include intmain() { inti;

charstr1[30]=\"abc\ for(i=1;i<3;i++)

strcat(str1,str2[i]); puts(str1); return0;}

25.#include intmain() { inti;

chara[]=\"Time\

for(i=0;a[i]!='\\0'&&b[i]!='\\0';i++){ if(a[i]==b[i])

if(a[i]>='a'&&a[i]<='z') printf(\"%c\ else

printf(\"%c\ elseprintf(\"*\"); }

return0;}

26.#include intmain() {

chara[4][10]={\"1234\ inti=3;char(*p)[10]=a; printf(\"outputstring:\\n\"); for(p=a;p #include intmain() { charstr1[30],str2[]=“yourbook”; scanf(“%s”,str1); strcpy(str1,str2); printf(“\\n%s\\n%d\\n”,str1,strlen(str2)); return0;} 输入:youareastudent<回车> 28.#include #include intmain()

{chars1[10]=“java”,s2[10]=“basic”,s[10]; if(strcmp(s1,s2)){strcpy(s,s1);puts(s);}

printf(“%d,%s\\n”,strlen(s2),strcat(s2,s1)); return0;}

29.#include #include intmain() {

char*p=“abcdefgh”,c[10]={“XYZ”}; p+=3;

puts(strcat(c,p));

printf(“%d\\n”,strlen(c)); return0;}

30.#include intmain() {

inta[6][6],i,j; for(i=1;i<6;i++)

for(j=1;j<6;j++) a[i][j]=(i/j)*(j/i); for(i=1;i<6;i++) {

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

printf(\"%2d\ printf(\"\\n\"); }

return0;}

31.#include intmain() {

inti,f[10];

f[0]=f[1]=1;for(i=2;i<10;i++) f[i]=f[i-2]+f[i-1]; for(i=0;i<10;i++){ if(i%4==0)printf(\"\\n\"); printf(\"%3d\ } return0;} 32.#include #include intmain() { chara[]=\"morming\ inti,j=0;for(i=1;i<7;i++) if(a[j]33.#include #include voidmain() {

chars[12]=“abcdef”; scanf(“%s”,s); strcat(s,”xyz”); printf(“%s\\n”,s); }

34.#include voidmain() {

inta[3][3]={{3,4},{5,6},{7,8}}; inti,j,t=0;for(i=1;i<3;i++) for(j=0;jt=t+a[i][j];

printf(“t=%d\\n”,t); }

35.#include voidmain() {

inti,t,a[5]={1,2,3,4,5}; t=a[0];

for(i=1;i<5;i++) a[i-1]=a[i]; a[4]=t;

for(i=0;i<5;i++) printf(\"%d\ printf(\"\\n\"); }

36.#include voidmystrcpy(chars1[],chars2[]); voidmain() { chara[50]=\"Iamateacher.\"; charb[]=\"Youareastudent.\"; printf(\"a=%s\\n\ mystrcpy(a,b); printf(\"a=%s\\n\ } voidmystrcpy(chars1[],chars2[]) {

inti=0;

while(s2[i]!='\\0') {

s1[i]=s2[i]; i++; }

s1[i]='\\0'; }

37.#include voidmain() {

inti,j,k=0,a[3][3]={1,2,3,4,5,6}; for(i=0;i<3;i++)

for(j=i;j<3;j++)k=k+a[i][j]; printf(“??%d”?à,k); }

38.#include voidmain() {

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

for(i=0;i<5;i++) a[i]=i*(i+1); for(i=0;i<4;i++)

j+=a[i]*3;printf(\"%d\\n\ }

39.#include voidmain() {

charc,string[81]=\"Howareyou?\";

inti,n=0,k=0;for(i=0;c=string[i];i++) {

if(c=='')k=0;elseif(k==0){ k=1;n++; } }

printf(\"%d\\n\ } 40.#include #include voidmain() { chars[16]=“12345\\0\\\”; printf(“%d,%d\\n”,strlen(s),sizeof(s)); } 解答: 1.m=12 2.1245600000 1234560000 3.CDG

4.HelloTeachers,Students. 5.Thearrayhasbeenreverted. 2,4,5,7,6,0,11,9,7,3,

6.pleaseinputrectangleelement: duijiaoxianheis15.00 7.1345 8.sum=114 9.22121

10.0,11,9,7,3, 11.5,4,3,5,4, 12.26,25,34,41,52 13.ZhongGong Gong 14.0,10,20 15.18,11,4 16.J 17.2027 18.9

6 6 3 19.1101 20.69101216 21.m=0 22.opqr 23.LMNP 24.abchiklm 25.t*M 26.4cyi 27.yourbook 9 28.java

9,basicjava 29.XYZdefgh 8 30.10000 01000 00100 00010 00001 31.1123 581321 32.mo 33.hijxyz 34.t=20 35.23451

36.a=Iamateacher. a=Youareastudent. 37.17 38.63 39.3 40.5,16 三.补充程序

1.求一个3*3矩阵对角线元素之和。 #include\"stdio.h\" intmain() {

floata[3][3],sum=0;inti,j;

printf(\"pleaseinputrectangleelement:\\n\"); for(i=0;________________________;i++) for(j=0;j<3;j++)

scanf(\"%f\ for(i=0;________________________;i++) ________________________;

printf(\"duijiaoxianheis%6.2f\

return0;}

2.将一个数组逆序输出. #include\"stdio.h\" #defineN5 intmain() {

inta[N]={9,6,5,4,1},i,temp; printf(\"\\noriginalarray:\\n\"); for(i=0;iprintf(\"%4d\ for(i=0;________________________;i++) {

temp=________________________; a[i]=a[N-i-1];

a[N-i-1]=________________________; } printf(\"\\nsortedarray:\\n\"); for(i=0;iprintf(\"inputscore\\n\");

for(i=0;________________________;i++) {

for(j=0;j<5;j++) {

scanf(\"%d\ s=s+a[j][i]; }

v[i]=s/5.0;________________________; }

l=(v[0]+v[1]+v[2])/3.0;printf(\"math:%f\\nclanguag:%f\\ndbase:%f\\n\_,v[2 ]);

printf(\"total:%f\\n\ return0;}

4.将字符串st2内容连接到串st1中,并计算串st1字符长度。 ________________________ #include\"stdio.h\" intmain() {

intlen;

charst1[30]=\"Mynameis\"; charst2[10];

printf(\"inputstringst2name:\\n\"); gets(________________________); ________________________; len=________________________; puts(st1);

printf(“串st1字符长度%d\\n”,len); return0;}

5.将十进制整数base转换成2进制。 #include\"stdio.h\" intmain() {

inti=0,base,j,num[20]; scanf(“%d”,&base); do{ num[i]=________________________; base=________________________; i++; }while(base!=0); for(________________________;________________________;j--) printf(“%d”,num[j]); return0;} 6.输入一个2×3矩阵,并3行2列输出矩阵。 #include intmain() {

inti,j;

floats[2][3];

printf(“pleaseinput6numbers:\\n”); for(i=0;________________________;i++) for(j=0;j<3;j++)

________________________;

printf(“\\nthefinalmatrixis:\\n”); for(i=0;i<3;i++) {

________________________ printf(\"%f\ ________________________ }

return0;}

7.从键盘输入10个学生的成绩,求平均分并输出大于平均分的所有成绩。#include

intmain() { inti;

________________________

floata=0.0;printf(\"Input10student'sscores:\\n\"); for(i=0;i<10;i++)

________________________; for(i=0;i<10;i++) a=a+s[i];

________________________;

printf(\"average=%2.1f\\nscores(>average):\\n\ for(i=0;i<10;i++)

if(s[i]>a)________________________; return0;}

8.将一个2行3列数组a的元素,存到一个3行2列二维数组b中,并输出数组a,b. #include intmain() {

inta[2][3]={{1,2,3},{4,5,6}}; intb[3][2],i,j; printf(\"arraya:\\n\"); for(i=0;i<=1;i++) { for(j=0;j<=2;j++) { printf(\"%5d\ ________________________; } printf(\"\\n\"); }

printf(\"arrayb:\\n\");

for(i=0;________________________;i++) {

for(j=0;________________________;j++) printf(\"%5d\ ________________________; }

return0;}

9.计算矩阵上三角阵(不包括对角线元素)各元素之和,并8行2列输出矩阵a. #include intmain() {

inta[4][4]={{2,3,4},{5,6,7},{8,9,1}}; inti,j,t=0;for(I=0;i<4;i++)

for(____________________;________________________;j++) t+=________________________; printf(\"t=%d\\n\ for(i=0;i<4;i++) {

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

{

printf(“%3d”,a[i][j]);

if((j+1)%2==0)printf(“\\n”); }

________________________; }

return0;}

10.计算和存储数列前20项,每行输出5项。 #include\"stdio.h\" intmain() {

________________________; inti;

a[0]=a[1]=1;for(________________________;i<20;i++) a[i]=a[i-1]+a[i-2];

for(i=0;________________________;i++) { printf(“%6d”,a[i]); ________________________; } return0;} 解答: 1.i<3 &a[i][j] i<3 sum+=a[i][j] 2.a[i]

ia[j][i] s=0 v[1]

4.#include\"string.h\" st2

strcat(st1,st2); strlen(st1); 5.base%2; base/2; j=i-1 j>=0 6.i<2

scanf(\"%f\ for(j=0;j<2;j++) printf(\"\\n\"); 7.ints[10];

scanf(\"%d\ a=a/10;

printf(\"%5d\8.b[j][i]=a[i][j]; i<3 j<2

printf(\"\\n\"); 9.j=i+1 j<4 a[i][j]

if((i+1)%2==0)printf(\"\\n\"); 10.inta[20] i=2 i<20

if((i+1)%5==0)printf(\"\\n\"); 四.改错题 解答: 五.编程一 解答: 六.编程二 解答: 第八章结构体 一.填空 1.引用结构体变量成员的一般形式是:结构体变量名__________。 2.定义枚举类型的关键字是__________。 3.设char、int、float分别占1、2、4个字节,假设有如下定义: structstudent {charname[10]; intnl; floatave; }qq;

则变量qq在内存中所占的字节数是__________。 4.设char、int、float分别占1、2、4个字节,假设有如下定义: unionstudent {charname[10]; intnl; floatave; }qq;

则变量qq在内存中所占的字节数是__________。

5.设char、int、float分别占1、2、4个字节,假设有如下定义: unionstu {chara; intb; floatc; };

struct{ floatc;

unionstux; }y;

那么变量y占用的存储空间分别为__________个字节。 6.设有定义structdate {intday; charmonth; intyear; }dd,*pd=ⅆ

请写出:使用指针变量pd引用结构体成员dd.day的另一种描述形式__________。 7.结构体变量各成员占用的内存单元起始地址__________。(填“相同”或“不同”) 8.共用体变量各成员占用的内存单元起始地址__________。(填“相同”或“不同”) 9.设char、int、float分别占1、2、4个字节,假设有如下定义: unionstud_type {

charname[5]; intnum; floatscore; }]; unionstud_typestu[10]]; 则程序运行时,系统将为stu分配__________个字节的内存空间。 10.设char、int、float分别占1、2、4个字节,假设有如下定义: structstud_type { charname[5]; intnum; floatscore; };

structstud_typestu[10];

则程序运行时,系统将为stu分配__________个字节的内存空间。 11.设char、float和double型数据占用的内存空间字节数分别是1、4和8,则变量stu1在内 存中占用的字节数是__________。 structstud_type {

charname[10]; floatscore[5]; doubleaverage; }stu1;

12.写出一个单链表结点的结构体类型定义:结点名为worker,分量num为整型,分量next为 指向下一结点的指针________________________________________。

13.写出一个货品信息的结构体类型定义:结点名为goods_type,第一个分量货品号num为整 型,第二个分量货品名name为长度为20的字符型数组,第三个货品库存量amount为整型。__ ______________________________________。

14.在C语言中,可以给某个已有的数据类型重新命名。将int型重新命名为INTEGER,应该表 示为______________________________。

15.在C语言中,给某个已有的数据类型重新命名的形式为:__________类型名新名称。 16.结构体变量成员的引用方式是使用__________运算符。 17.结构体指针变量成员的引用方式是使用__________运算符。

18.设structstudent{intno;charname[12];floatscore[3];}sl,*p=&sl;用指针 法给sl的成员no赋值1234的语句是____________________。 19.typedef的功能是____________________。

20.设char、int分别占1、2个字节,假设有如下定义:

unionstudent{intn;chara[100];}b;则sizeof(b)的值是__________。 解答: 1.?成员名 2.enum 3.16 4.10 5.8

6.pd->day或(*pd).day 7.不同 8.相同 9.50 10.110 11.38 12.structworker{intnum;structworker*next;}; 13.structgoods_type{intnum;charname[20];intamount;}; 14.typedefintINTEGER; 15.typedef 16.? 17.-> 18.p->no=1234或(*p).no=1234 19.给某个已有的数据类型重新命名 20.100 二.阅读程序写结果 1.#include structstri_type {

charch1;charch2;struct { inta; intb; }ins; };

intmain() {

structstri_typeci; ci.ch1='a';ci.ch2='A'; return0;}

2.#include structstud_type {

charnum[11]; charname[11]; floatscore[3];

floataverage; };

intmain() {

structstud_typestu={\"200601\

stu.average=(stu.score[0]+stu.score[1]+stu.score[2])/3;printf(\"average=%5.2f\\n\ return0;}

3.#include unionout {

inta[2]; struct { intb; intc; }in; intd; }; intmain() { unionoute; inti; e.d=3;for(i=0;i<2;i++) printf(\"%5d\ printf(\"\\n\"); return0;} 4.#include

#definePI3.14structcir_type {

floatr; doublearea; };

intmain() {

structcir_typecir={5.0},*p=○ p->area=PI*p->r*p->r;

printf(\"area=%.3lf\\n\ return0;}

5.#include structint_char { inti; charch; };

intmain() {

structint_charx={9,'z'};

printf(\"%d\%5c\\n\ return0;}

6.#include intmain() {

structdata { intm; intn; union { inty; intz; }da; };

structdataintdata; intdata.m=3;intdata.n=6; return0;} 7.#include intmain() { inti; floatsum_average=0;structstudent { intnum; charname[10]; intscore[2]; floataverage; };

structstudentdata[2]={{1,\"zhangsan\ for(i=0;i<2;i++) {

data[i].average=(data[i].score[0]+data[i].score[1])/2.0;sum_average=sum_average+data[i].average; }

sum_average=sum_average/2;for(i=0;i<2;i++) if(sum_average>data[i].average)

printf(\"%5d%10s%5.2f\ return0;}

8.#include structint_data {intd1,d2;}; intmain() {

structint_datadata[2]={{2,3},{5,6}}; inti;

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

{

scanf(\"%d%d\ sum=data[i].d1+data[i].d2+sum; }

printf(\"sum=%d\\n\ return0;}

输入:20304050<回车> 9.#include intmain() {

unionexa {

struct { inta; intb; }out; intc; intd; }e; e.c=2;e.d=5;printf(\"%d,%d\\n\ return0;} 10.#include structst { inta; intb; union { inte; intf; }c; };

intmain() {

structsty; y.a=10; y.b=y.c.e; return0;}

11.#include structsta { inta; charb; };

structstb {

inta; charb;

structstac; };

intmain() {

structstby;

y.a=10; y.b='X'; return0; } 12.#include unionst {

inta[2]; intb[2]; intc; }; intmain() { unionsty; y.a[0]=10; y.b[1]=20; y.c=30; printf(\"%d,%d\\n\ return0; } 13.#include structtwo { intn; charch; };

voidmain() {

structtwoex1={5,'t'};

printf(\"%d,%c\\n\ }

14.#include structtwo { intn; charch; };

voidfunc(structtwoex2); voidmain() {

structtwoex1={6,'v'}; func(ex1);

printf(\"%d,%c\\n\ getchar(); }

voidfunc(structtwoex2){

ex2.n=ex2.n+20;ex2.ch=ex2.ch-1;} 15.#include unionexa{ struct{ inta; intb; }out; intc; intd; };

voidmain() {

unionexae; e.c=1;e.d=3; } 16.#include structstu { inta; intb; structpoi { intx; inty; }ins; };

voidmain() {

structstuouts;

outs.a=11;outs.b=4;

printf(\"%d,%d\ }

17.#include structabc {

inta,b,c; };

intmain() {

structabcs[2]={{1,2,3},{4,5,6}}; intt;

t=s[0].a+s[1].c; printf(\"t=%d\\n\ return0;}

18.#include structst

{

intx,y;

}data[2]={1,10,2,20}; intmain() {

structst*p=data; printf(\"%d\\n\ printf(\"%d\\n\ return0; } 19.

#include structn { intx; charc; }; voidfunc(structnb) { b.x=20; b.c='y'; } intmain() { structna={10,'x'}; func(a); printf(\"%d,%c\ return0;} 20.

#include intmain() {

structEXAMPLE {

struct { intx; inty; }in; inta; intb; }e;

e.a=1; e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b;

printf(\"%d,%d\ return0; } 解答: 1.162,A

2.average=78.33 3.32

4.area=78.500 5.29x 6.-3-3

7.1zhangsan65.00 8.sum=150 9.5,20 10.10,10 11.20,X 12.30,20 13.15,s 14.6,v 15.3,3 16.15,7 17.t=7 18.102 19.10,x 20.2,3 三.补充程序 1.该程序完成的功能是从屏幕上输入日期(年、月、日),计算其为该年的第几天。 #include structdate_type {intyear; intmonth; intday; };

intmain() {

intdays=0,i;

structdate_typedate;

intmon_day[12]={31,28,31,30,31,30,31,31,30,31,30,31}; printf(\"请输入日期(年月日):\\n\");

scanf(\"%d%d%d\ for(i=1;i_______________________________; days=days+date.day;

if((date.year%4==0&&date.year%100!=0||date.year%400==0)&&date.month>=3) ____________________________;

printf(\"所输入日期是该年第%d天\\n\ return0;}

2.该程序完成的功能是从屏幕上输入日期(年、月、日),计算其为该年的第几天。 #include structdate_type {intyear; intmonth; intday;

};

intmain() {

intdays=0,i;

___________________________;

intmon_day[12]={31,28,31,30,31,30,31,31,30,31,30,31}; printf(\"请输入日期(年月日):\\n\");

scanf(\"%d%d%d\ for(i=1;________________;i++) days=mon_day[i-1]+days; days=days+date.day;

if((date.year%4==0&&date.year%100!=0||date.year%400==0)&&_______________ _)

days=days+1;

printf(\"所输入日期是该年第%d天\\n\ return0;} 3.该程序完成的功能是从屏幕上输入日期(年、月、日),计算其为该年的第几天。 #include structdate_type {intyear; intmonth; intday; }; intmain() { intdays=0,i; structdate_typedate;

intmon_day[12]={31,28,31,30,31,30,31,31,30,31,30,31}; printf(\"请输入日期(年月日):\\n\");

scanf(\"%d%d%d\ for(i=1;____________________;i++) days=mon_day[i-1]+days; days=days+date.day;

if((date.year%4==0&&date.year%100!=0||___________________)&&date.month>=3)days=days+1; printf(\"所输入日期是该年第%d天\\n\ return0;}

4.该程序实现从键盘输入1名职工的信息:职工号、姓名、月工资。由print函数完成这名 职工信息的输出。

#include structemployee_type {

charnum[20]; charname[20]; floatpay; };

voidprint(structemployee_typeemp1); intmain()

{

structemployee_typeemp;

printf(\"请输入职工信息(职工号姓名月工资):\\n\"); scanf(\"%s%s%f\ print(_____________________); return0;}

voidprint(__________________________) {

printf(\"****职工号姓名月工资****\\n\");

printf(\"%8s%8s%10.2f\\n\ }

5.该程序完成从键盘输入10名学生信息(学号、姓名、成绩),用一个排序函数sort完成按 学生成绩降序排列,并输出学生成绩排行榜。 #include #defineN10

structstud_type {charname[10]; intnum; floatscore; }; voidsort(structstud_typestu[],intn); intmain() {inti; structstud_typestu[N]; printf(\"Pleaseinput%dstudent’snamenumscore:\\n\ for(i=0;iprintf(\"Thesortis:\\n\"); for(i=0;iprintf(\"%8s%5d%8.2f\\n\ return0;}

voidsort(__________________) {inti,k,j;

structstud_typet; for(i=0;ifor(j=i+1;jif(stu[k].score6.该程序完成从键盘输入10名学生信息(学号、姓名、成绩),用一个排序函数sort完成按 学生成绩降序排列,并输出学生成绩排行榜。 #include #defineN10

structstud_type {charname[10]; intnum; floatscore; };

voidsort(structstud_typestu[],intn); intmain() {inti;

structstud_typestu[N];

printf(\"Pleaseinput%dstudent’snamenumscore:\\n\ for(i=0;iscanf(\"%s%d%f\ sort(____________); printf(\"Thesortis:\\n\"); for(i=0;iif(stu[k].score7.该程序完成从键盘输入10名学生信息(学号、姓名、成绩),用一个排序函数sort完成按 学生成绩降序排列,并输出学生成绩排行榜。 #include #defineN10

structstud_type {charname[10]; intnum; floatscore; };

voidsort(structstud_typestu[],intn); intmain()

{inti;

________________________;

printf(\"Pleaseinput%dstudent’snamenumscore:\\n\ for(i=0;iscanf(\"%s%d%f\ sort(stu,N);

printf(\"Thesortis:\\n\"); for(i=0;iprintf(\"%8s%5d%8.2f\\n\ return0;}

voidsort(___________________) {inti,k,j;

structstud_typet; for(i=0;ifor(j=i+1;j #defineN10

structstud_type {charname[10]; intnum; floatscore; };

voidsort(structstud_typestu[],intn); intmain() {inti;

structstud_typestu[N];

printf(\"Pleaseinput%dstudent’snamenumscore:\\n\ for(i=0;iscanf(\"%s%d%f\ sort(stu,N);

printf(\"Thesortis:\\n\"); for(i=0;iprintf(\"%8s%5d%8.2f\\n\ return0;}

voidsort(___________________)

{inti,k,j;

________________; for(i=0;ifor(j=i+1;jif(stu[k].scoreif(___________) {t=stu[i]; stu[i]=stu[k]; stu[k]=t; } } }

9.该程序完成从键盘输入10名学生信息(学号、姓名、成绩),用一个排序函数sort完成按 学生成绩降序排列,并输出学生成绩排行榜。 #include #defineN10 structstud_type {charname[10]; intnum; floatscore; }; voidsort(structstud_typestu[],intn); intmain() {inti; _______________________;

printf(\"Pleaseinput%dstudent’snamenumscore:\\n\ for(i=0;iscanf(\"%s%d%f\ sort(stu,N);

printf(\"Thesortis:\\n\"); for(i=0;iprintf(\"%8s%5d%8.2f\\n\ return0;}

voidsort(structstud_typestu[],intn) {inti,k,j;

structstud_typet; for(i=0;ifor(j=i+1;jif(stu[k].score} } }

10.从键盘输入一整数,显示与之对应的星期值,当输入-1时结束。 #include intmain() {

enumweek_type {

mon=1,tue,wed,thu,fri,sta,sun }workday; inti; do {

printf(\"Pleaseinputinteger(end:-1)\\n\"); scanf(\"%d\ workday=(________________)i; switch(________________) { casesun:printf(\"Sunday\\n\"); break; casemon:printf(\"Monday\\n\"); break; casetue:printf(\"Tuesday\\n\"); break; casewed:printf(\"Wednesday\\n\"); break;

casethu:printf(\"Thursday\\n\"); break;

casefri:printf(\"Friday\\n\"); break;

casesta:printf(\"Saturday\\n\"); break;

default:printf(\"Inputerror\\n\"); break;

case-1:printf(\"Goodbye!\\n\"); }

}while(________________); return0;} 解答:

1.&date.year,&date.month,&date.day days=mon_day[i-1]+days days=days+1 days

2.structdate_typedate i=3

days

3.&date.year,&date.month,&date.day i4.emp.num,emp.name,&emp.pay emp

structemployee_typeemp1 emp1.num,emp1.name,emp1.pay

5.stu[i].name,&stu[i].num,&stu[i].score stu[i].name,stu[i].num,stu[i].score structstud_typestu[],intn k=j 6.stu,N

t=stu[i]

stu[i]=stu[k] stu[k]=t 7.structstud_typestu[N] structstud_typestu[],intn k=i k=j 8.stu[i].name,&stu[i].num,&stu[i].score structstud_typestu[],intn structstud_typet k!=i 9.structstud_typestu[N] stu[i].name,stu[i].num,stu[i].score k=j

stu[k]=t 10.&i

enumweek_type workday i!=-1 四.改错题 解答: 五.编程一 解答: 六.编程二 解答:

第九章指针 一.填空

1.假定在一维数组b[10]中,元素b[5]的指针为p,则p+4所指向的元素为__________。 2.指针变量是一种专门存放__________的变量。

3.函数中的形参和调用时的实参都是变量时,传递方式为值传递;形参和实参都是数组名 时,传递方式为__________。

4.设有数组a[10];则数组元素a[3]的地址可以写成__________。

5.定义intb[10];若元素b[5]的指针为p1,元素b[9]的指针为p2,则p2-p1的值为______

____。

6.int*p,a;则语句p=&a;中的运算符&是__________符号。

7.设inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,则*p+4=__________。

8.定义inta[10]={11,12,13,14,15},*p=&a[5];假设&a[0]和&a[1]的值分别是2000和200 2,则p的值是__________。

9.对变量的访问方式有直接访问和间接访问两种。其中,将变量a的地址存放在另外一个变

量p中,访问时先从p中取出变量a的地址,再按照a的地址访问a的值,该方式称为__________ 访问。

10.int*p的含义是____________________。

11.定义inta[10]={11,12,13,14,15},*p=&a[5];则表达式a[0]+*p的值是__________。 12.定义inta[10]={1,3,5,7,9,11,13,15,17,19},*p=a;执行语句printf(\"%d\输出 结果是__________。

13.定义intm=5,n=9,t,*p=&m,*q=&n;顺序执行语句t=*p;*p=*q;*q=t;此时m的值是_______ ___。

14.已知inta[5]={2,3,4,5,6};int*p=a+2;则表达式*p*a[3]的值是_____ _____。 15.假定在一维数组array[10]中,元素array[5]的指针为p,则p-4所指向的元素为________ __。 16.数组名代表的是____________________。 17.若inta[3][3]={1,2,3,4,5,6,7,8,9};则*(*(a+2)+1)的值是__________。 18.若inta[][3]={1,2,3,4,5,6,7,8,9};则*(*a+1)的值是__________。 19.若有inta[3]={10,12,30};则a+1是数组元素__________的地址。 20.函数调用时参数有值传递和__________传递两种参数传递方式。 解答: 1.b[9] 2.地址 3.地址传递 4.&a[3]或a+3 5.4

6.取地址 7.4 8.2010 9.间接

10.定义指针变量p,p指向整型变量。 11.11 12.8 13.9 14.20

15.array[1]

16.数组元素的首地址 17.8 18.2 19.a[1] 20.地址

二.阅读程序写结果 1.#include intmain()

{

inti=0,a[5]={11,12,13},*q; for(q=a;q*q+=5;printf(\"%5d\ }

printf(\"\\n\"); return0;}

2.#include voidfun(int*p); intmain() {

inta[5]={1,2,3,4,5},*r=a; fun(r);

printf(\"%d\\n\ return0;} voidfun(int*p) { p=p+2;printf(\"%d\\n\ } 3.#include intmain() { inta[3][3]={0,1,2,3,4,5,6,7,8}; int*p,(*q)[3]; inti=0;for(q=a;qfor(p=*q;p<=*q+i;p++) printf(\"%5d\ printf(\"\\n\"); }

return0;}

4.#include #include intmain() {

charstr[20]=\"Iamastudent.\ char*q=\"Youareateacher.\"; p=p+7;q=q+10;strcpy(p,q); puts(str); return0;}

5.#include voidswap(intx,inty) { intz; z=x; x=y;

y=z; }

voidpswap(int*x,int*y) { intz; z=*x; *x=*y; *y=z; }

voidmain() {

inta=3,b=2;printf(\"first:a=%d,b=%d\\n\ swap(a,b);

printf(\"second:a=%d,b=%d\\n\ pswap(&a,&b);

printf(\"third:a=%d,b=%d\ } 6.#include voidf(inta,intb,int*c,int*d) { a=30;b=40;*c=a+b; *d=*d-a; } voidmain() { inta=10,b=20,c=30,d=40;f(a,b,&c,&d); printf(\"%d,%d,%d,%d\ }

7.#include

voidast(int*cp,int*dp) {

intx=4,y=3;*cp=++x+y; *dp=x-y; }

voidmain() {

intc,d; ast(&c,&d);

printf(\"%d\\n%d\\n\ }

8.#include voidmain() {

chars[]=\"ABCD\ for(p=s+1;p9.#include voidmain() {

char*p=\"Iamastudent.\"; p=p+3;printf(\"%s\ }

10.#include voidmain() {

char*p=\"Thisisaprograme.\"; p=p+10;printf(\"%s\ }

11.#include voidadd(int*p,intn) {

int*pend=p+n; for(;p intf(intx,int*y); voidmain() {

inta,b,c;

a=3;b=5;c=f(a,&b);

printf(\"%d,%d,%d\\n\ }

intf(intx,int*y) {

inta=2;x=x+a; *y=x+a; return(a); }

13.#include voidfun(intx,int*y); intmain() {

inta=2,b=3,*c=&b; fun(a,c);

printf(\"a=%d,b=%d,c=%d\\n\ return0;}

voidfun(intx,int*y) {

inta=4;*y=x+a; x=*y; }

14.#include

voidsub(intx,inty,int*z) {

*z=y-x; }

intmain() {

inta,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf(\"%4d,%4d,%4d\\n\ return0;} 15.#include intmain() { chara[]=\"language\ p=a; while(*p!='u') { printf(\"%c\ p++; }

return0;}

16.#include intstre(charstr[]) {

intnum=0;while(*(str+num)!='\\0') num++; returnnum; }

intmain() {

charstr[10],*p=str; gets(p);

printf(\"%d\\n\ return0;}

输入:happy<回车> 17.#include voidf(intx,int*y) {

x=x%10;*y=*y/10+x;

}

intmain() {

inta=88,b=99,*c; c=&b; f(a,c);

printf(\"%d,%d\\n\ return0;}

18.#include voidmain() {

chara[][7]={\"Teacher\ char*p=a[0];

p=p+3;printf(\"%s\\n%s\\n\ }

19.#include voidmain() { chara[][7]={\"Teacher\ char(*p)[7]=a; printf(\"%s\\n%s\\n\ } 20.#include voidast(intx,inty,int*a,int*b) { *a=x+y; *b=*a-y; }

voidmain() {

inta,b,c,d;

a=10;b=20;ast(a,b,&c,&d); printf(\"%d,%d\\n\ } 解答:

1.16171855 2.3 1 3.0 34 678

4.Iamateacher. 5.first:a=3,b=2 second:a=3,b=2 third:a=2,b=3 6.10,20,70,10 7.8

2 8.BCD CD D

9.mastudent. 10.programe. 11.1112131415 12.3,7,2

13.a=2,b=6,c=6 14.-5,-12,-7 15.LANG 16.5 17.88,17

18.TeacherTom cherTom 19.TeacherTom Tom 20.30,10 三.补充程序 1.该程序实现输入两个整数,按先小后大的顺序输出,调用函数实现交换位置。 #include voidswap(int*x,int*y); intmain() { intx,y; printf(\"请输入两个数(空格分隔):\"); scanf(\"%d%d\ if(x>y)

swap(_________);

printf(\"%4d%4d\\n\ return0; }

voidswap(int*p1,int*p2) { intp;

_________; _________; _________; }

2.该程序实现输入两个整数,按先小后大的顺序输出,调用函数实现交换位置。 #include

voidswap(int*x,int*y); intmain() {

intx,y;

printf(\"请输入两个数(空格分隔):\"); scanf(\"%d%d\

if(_________) swap(&x,&y);

printf(\"%4d%4d\\n\ return0; }

voidswap(_____________) {

_________; p=*p1;

*p1=*p2;*p2=p; }

3.该程序实现输入两个整数,按先小后大的顺序输出,调用函数实现交换位置。 #include

voidswap(_______________); intmain() { intx,y; printf(\"请输入两个数(空格分隔):\"); scanf(\"%d%d\ if(x>y) swap(______________); printf(\"%4d%4d\\n\ return0; } voidswap(int*p1,int*p2) { _________________; p=*p1;

*p1=*p2;*p2=p; }

4.该程序实现输入两个整数,按先小后大的顺序输出,调用函数实现交换位置。 #include

voidswap(_______________); intmain() {

intx,y;

printf(\"请输入两个数(空格分隔):\"); scanf(\"%d%d\ if(__________) swap(&x,&y);

printf(\"%4d%4d\\n\ return0; }

voidswap(int*p1,int*p2) { intp;

___________;

*p1=*p2;*p2=p; }

5.该程序实现输入两个整数,按先小后大的顺序输出,调用函数实现交换位置。 #include

voidswap(int*x,int*y); intmain() {

intx,y;

printf(\"请输入两个数(空格分隔):\"); scanf(\"%d%d\ if(x>y)

swap(__________);

printf(\"%4d%4d\\n\ return0; }

voidswap(int*p1,int*p2) { intp; p=*p1; _________; _________; } 6.利用指针变量自增的方式输出一维数组b中的所有元素。 #include #defineSIZE3 intmain() {

inti,b[]={1,2,3}; int*p;

for(_______;________;_________) printf(\"*p=%d\\n\ }

7.输入一个八进制数并转换为十进制数。八进制转换为十进制数的方法是按权相加,即将 八进制每位上的数乘以位权,然后相加之和即是十进制数。利用数组存放八进制数的各位数 码。

#include #defineN6 intmain() {

intn,temp; chars[N],*p=s;

printf(\"请输入八进制数:\"); gets(_____);

for(_________;(*p)!='\\0';_________) {

temp=*p-'0'; n=n*8+temp;

}

printf(\"对应的十进制数:%d\\n\ return0;}

8.输入一个八进制数并转换为十进制数。八进制转换为十进制数的方法是按权相加,即将 八进制每位上的数乘以位权,然后相加之和即是十进制数。利用数组存放八进制数的各位数 码。

#include #defineN6 intmain() {

intn,temp; chars[N],*p=s;

printf(\"请输入八进制数:\"); gets(_________);

for(n=0;______________;p++) { temp=*p-'0'; _____________; } printf(\"对应的十进制数:%d\\n\ return0;} 9.判断一个字符串是否为回文(指从左至右和从右至左读都是一样的字符串)。 #include #defineN11intmain() { inti=0,n=0; chara[N]=\"\";

char*p1,*p2;printf(\"请输入小于%d位的整数:\ scanf(\"%s\

for(_______;(*p2)!='\\0';p2++) n++; p1=a;

p2=a+n-1;for(i=1;p1if(__________) break;

___________; ___________; }

if(i>n/2)

printf(\"Yes,%s是回文!\\n\ else

printf(\"No,%s不是回文!\\n\ return0; }

10.判断一个字符串是否为回文(指从左至右和从右至左读都是一样的字符串)。 #include

#defineN11intmain() {

inti=0,n=0; chara[N]=\"\";

char*p1,*p2;printf(\"请输入小于%d位的整数:\ scanf(\"%s\

for(p2=a;(*p2)!='\\0';p2++) ________; p1=a;

p2=a+n-1;for(i=1;p1if(*p1!=*p2)________; _________; _________; }

if(i>n/2) printf(\"Yes,%s是回文!\\n\ else printf(\"No,%s不是回文!\\n\ return0; } 解答: 1.&x,&y p=*p1 *p1=*p2 *p2=p 2.x>y x,y

int*p1,int*p2 intp

3.int*x,int*y &x,&y &x,&y intp

4.int*x,int*y x>y x,y p=*p1 5.&x,&y x,y *p1=*p2 *p2=p 6.p=b

pn=0 p++ n 8.p

(*p)!='\\0' n=n*8+temp; n 9.p2=a

*p1!=*p2 p1++ p2-- 10.n++ break p1++ p2-- 四.改错题 解答: 五.编程一 解答: 六.编程二 解答: 第十章文件 一.填空 解答: 二.阅读程序写结果 解答: 三.补充程序 解答: 四.改错题

1.下列给定程序中,函数fun()的功能是:从字符串s中,取出所有大写字母。程序的功能 是从文件中读出字符串,进行如上处理后,输出到屏幕上。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 #include voidfun(chars) {

inti,j;

for(i=j=0;s[i]!='\\n';i++) if(s[i]>='A'||s[i]<='Z') s[j]=s[i]; s[j]='\\0'; }

intmain() {

chars[80]; FILE*fp;

if(fp=fopen(\"d:\\\\content.txt\ {

printf(\"Cannotopenfile\\nPressanykeytoexit!\"); return1;}

fgets(s,30,fp); fun(s);

printf(\"Thestringafterdeleted:\"); puts(s);

printf(\"\\n\\n\"); return0; fclose(fp); }

2.下列给定程序中,函数fun()的功能是:从字符串s中,将大写字母转换成小写字母。程序 的功能是从键盘读入一个字符串,进行如上处理后,写入D盘上指定文件中。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 #include voidfun(chars[]) { inti; for(i=0;s[i]!='\\n';i++) if(s[i]>='A'&&s[i]<='Z') s[i]=s[i]+32;s[i]='\\0'; } intmain() { char*s; FILEfp; gets(s); if((fp=fopen(\"d:\\\\content.txt\ {

printf(\"Cannotopenfile\\nPressanykeytoexit!\"); return1;} fun(s);

fputs(fp,s); printf(\"\\n\\n\"); fclose(fp); return0;}

3.程序功能说明:该程序完成从文本文件中读入10名学生信息(学号、姓名、成绩),并用 格式输出显示到屏幕上。 #include #defineN=10 structstud_type {charname[10]; intnum;

floatscore;} voidmain() {inti;

structstud_typestu[N]; FILE*fp;

If((fp=fopen(''d:\\\\student.txt'',''w''))==NULL) {

printf(''Cannotopenfile\\nPressanykeytoexit!''); getch(); }

for(i=0;iscanf(fp,\"%s%d%f\ for(i=0;iprintf(\"%8s%5d%8.2f\\n\ fclose(fp);

4.程序功能说明:从键盘上输入10名学生信息(学号、姓名、成绩),写入磁盘文件D盘文 件student.txt中。 #include #defineN10

structstud_type {char*name; intnum; floatscore;} voidmain() {inti; structstud_typestu[N]; FILE*fp; If((fp=fopen(''d:\\student.txt'',''w''))==NULL) { printf(''Cannotopenfile\\nPressanykeytoexit!''); getch(); }

for(i=0;iscanf(\"%s%d%f\ for(i=0;iprintf(fp,\"%8s%5d%8.2f\\n\ fclose(fp); } 5.

从键盘输入10个学生的信息,然后把它们存入磁盘文件中。程序中有5处错误,请改正 。

#include

#defineN10 structstudent {

charname[10]; intnum; intage;

charaddr[15]; }s[N]; voidsave() intmain() {

inti;

printf(\"pleaseinputstudentinformation:\\n\"); for(i=0;iscanf(\"%s%d%d%s\ save();

printf(\"dataissaved\\n\"); return0; } voidsave() {

FILEfp; inti;

if((fp=fopen(\"student.dat\ {

printf(\"cannotopenfile\\n\"); return; } for(i=0;i #include intmain() {

FILEfp; charch;

if((fp=fopen(\"d:\est.txt\ {

printf(\"Cannotopenfile\\nPressanykeyexit!\"); getch(); return1; }

printf(\"inputastring:\\n\"); ch=getchar(); while(ch!=\\n) {

fputs(ch,fp); ch=getchar(); }

rewind(fp); ch=fgetc(fp); while(ch!=\"EOF\") {

putchar(ch);

ch=fgetc(fp); }

printf(\"\\n\"); fclose(fp); return0; }

7.以下程序中有五处错误,请改正。 #include #include intmain() {

FILE*fp; charch;

if(fp=fopen(\"d:\\\est.txt\ {

printf(\"Cannotopenfile\\nPressanykeyexit!\"); getch(); return1; } printf(\"inputastring:\\n\"); ch=getchar(); while(ch!=‘\\0’) { fputc(fp,ch); ch=getchar(); } rewind(fp); ch=fgetc(fp); while(ch!=end) {

putchar(ch); ch=fgetc(fp); }

printf(\"\\n\"); fclose(); return0; }

8.将d:\\lang\c文件夹下的文件deposit.c内容输出到屏幕上。有5处错误,请改正。 #include #include intmain() {charch; FILEfp;

if((fp=fopen(“d:\\\\lang\\\c\\\\deposit.c”,”r”))=NULL) {printf(“Cannotopenfile\\n”); break; }

while((ch=getchar())!=EOF) putchar(ch); fclose(ch); return0;}

9.将d:\\lang\c文件夹下的文件deposit.c内容全部以小写字母输出到屏幕上。 #include #include voidmain() {charch; FILE*fp;

if((fp=fopen(\"d:\\lang\c\\deposit.c\ {printf(\"Cannotopenfile\\n\"); return1; }

while(ch=fgetc(fp)!=EOF) { if((ch>='A'||ch<='Z'))ch=ch+32;puts(ch); } fclose(fp); return0;} 10.以下程序中用户由键盘输入一个文件名,然后输入一串字符(用#结束输入)存放到此文 件文件中形成文本文件,并将字符的个数写到文件尾部。 #include #include voidmain() { FILE*fp;

charch,fname[32];intcount=0; printf(\"Inputthefilename:\"); scanf(\"%s\

if((fp=fopen(\"fname\ {

printf(\"Can'topenfile:%s\\n\ exit(0); }

printf(\"Enterdata:\\n\"); while((ch=getchar())!=\"#\"){ fputc(fp,ch); count++; }

fprintf(\"\\n%d\\n\ fclose(fp); }

11.下面程序的功能是从filename1中将文件拷贝到filename2,其中源文件和目标文件名均 从键盘输入。有五处错误,请改正。 #include #include voidmain()

{

FILE*fp1,fp2; charch,*fname1,*fname2; printf(\"Inputthesourcefilename:\"); scanf(\"%s\

if((fp1=fopen(fname1,\"r\"))==NULL) {

printf(\"Can'topensourcefile:%s\\n\ exit(0); }

printf(\"Inputthetargatefilename:\"); scanf(\"%s\

if((fp2=fopen(fname2,\"w\"))==NULL) {

printf(\"Can'topentargatefile:%s\\n\ exit(0); }

while((ch=fgetc(*fp1))=EOF) fputc(ch,fp2); fclose(fp1); fclose(fp2); } 12.下面程序的功能是从filename1中将内容读出,显示在屏幕上。其中文件名由键盘输入。 有五处错误,请改正。 #include #include voidmain() { FILEfp1; charch,*fname1; printf(\"Inputthefilename:\"); scanf(\"%s\

if((fp1=fopen(fname1,’r’))==NULL) {

printf(\"Can'topensourcefile:%s\\n\ exit(0); }

while(ch=fgetc(fp1)!=EOF) put(ch); fclose(fp1); }

13.下列程序中存在5处C语言语法错误,请识别并改正。程序的功能是在已建立的文件write string.txt中追加一个字符串,并将文件整个内容输出。 #include #include intmain {

FILE*fp;

charch,st[20];

if((fp=fopen(\"d:\\\\lang\\\c\\\\writestring.txt\ {

printf(\"Cannotopenfilestrikeanykeyexit!\"); getchar(); return1; }

printf(\"inputastring:\\n\"); scanf(\"%c\ fgets(fp,st); rewind();

while(ch=fputc(fp)!=EOF) putchar(ch); printf(\"\\n\"); fclose(fp); return0; }

14.以下程序的功能:把文件source.txt的内容输出到屏幕上。(共5个错误点) #include #include intmain() { char*fp; charch; fp=fopen(\"source.txt\ if(fp=NULL) { printf(\"\\nCannotopenfile\\nStrikeanykeyexit!\\n\"); getchar(); exit(1); }

ch=fgetc(fp); if(ch!=EOF) {

printf(\"%c\ ch=fgetc(fp); }

fclose(*fp); }

15.以下程序的功能:把文件source1.txt和文件source2.txt的内容相连,输出到屏幕上。 共5个错误点,请改正。 #include #include intmain() {

FILE*fp1,fp2; charch;

fp1=fopen(\"source1.txt\ fp2=fopen(\"source2.txt\ if(fp1==NULL&&fp2==NULL) {

printf(\"\\nCannotopenfile\\nStrikeanykeyexit!\\n\"); getchar(); exit(1); }

ch=fgetc(fp2); if(ch!=EOF) {

fputc(ch,fp1); ch=fgetc(fp2); }

fclose(fp1,fp2); return0; }

16.下面程序的功能是统计文件中字符的个数,其中有5处错误,请查找并改正(每个2分) #include #include voidmain() { FILE*fp;intcount; charch; *fp=fopen(\"source.txt\ if(*fp=NULL) { printf(\"\\nCannotopenfile\\nStrikeanykeyexit!\\n\"); getchar(); exit(1); }

ch=fgetc(fp); while(ch!=EOF) {

count++;

ch=fgetc(fp); }

printf(\"\\n字符个数=%f\\n\ fclose(fp); return0;}

17.以下程序的功能:把文件source.txt的内容读出,压缩掉其中的空格,存入文件target. txt中,其中有5出错误,请检查并改正。 #include #include intmain() {

FILE*fp1,fp2; charch;

fp1=fopen(\"source.txt\ fp2=fopen(\"target.txt\ if(fp1=NULL||fp2=NULL)

{

printf(\"\\nCannotopenfile\\nStrikeanykeyexit!\\n\"); getchar(); exit(1); }

ch=fgetc(fp1); if(ch!=EOF) {

while(ch!='')fputc(ch,fp2); ch=fgetc(fp1); }

fclose(fp1,fp2); return0; }

18.程序功能说明:该程序完成从文本文件中读入10名学生信息(学号、姓名、成绩),求成 学生平均分,显示在屏幕上。其中有5处错误,请检查并改正。 #include #defineN10; structstud_type {charname[10]; intnum; floatscore;}; voidmain() {inti; structstud_typestu[N]; floats=0;FILE*fp; If((fp=fopen(''d:\\\\student.txt'',''w''))==NULL) {

printf(''Cannotopenfile\\nPressanykeytoexit!''); getch(); }

for(i=0;ifscanf(fp,\"%s%d%f\ s=s+&stu[i].score; }

for(i=0;iprintf(\"%8s%5d%8.2f\\n\ printf(\"平均分=%8.2f\\n\ }

19.以下程序的功能:把字符串“helloworld”及文件source.txt的内容相连,输出到文件 target.txt中。(共5个错误点,请改正) #include #include intmain() {

FILE*fp1,*fp2;

charch;

charstr=\"helloworld\";

fp1=fopen(\"d:\\source.txt\ fp2=fopen(\"d:\arget.txt\ if(fp1==NULL&&fp2==NULL) {

printf(\"\\nCannotopenfile\\nStrikeanykeyexit!\\n\"); getchar(); exit(1); }

fputs(str,fp2);

while(ch=fgetc(fp1)!=EOF) {

fputc(ch,fp2); }

fclose(fp1);fclose(fp2); return0; } 20.下面程序的功能是统计文件中大写字符的个数,其中有5处错误,请查找并改正。 #include #include intmain() { FILE*fp;intcount; charch; *fp=fopen(\"source.txt\ if(*fp=NULL) {

printf(\"\\nCannotopenfile\\nStrikeanykeyexit!\\n\"); getchar(); return1; }

ch=fgetc(fp); if(ch!=EOF) {

if(ch>=’A’&&ch<=’Z’)count++; ch=fgetc(fp); }

printf(\"\\n大写字符个数=%f\\n\ fclose(); return0;} 解答:

1.(1)if((fp=fopen(''d:\\\\content.txt'',''r''))==NULL) (2)voidfun(char*s)

(3)for(i=j=0;s[i]!=′\\0′;i++) (4)if(s[i]>='A'&&s[i]<='Z') (5)s[j++]=s[i];

2.(1)for(i=0;s[i]!='\\0';i++) (2)chars[80]; (3)FILE*fp;

(4)if((fp=fopen(\"d:\\\\content.txt\ (5)fputs(s,fp);

3.(1)#defineN10(2)structstud_type {charname[10]; intnum;

floatscore;};

(3)If((fp=fopen(''d:\\\\student.txt'',''r''))==NULL)

(4),(5)fscanf(fp,\"%s%d%f\4.(1)charname[30](2)structstud_type {charname[10]; intnum; floatscore;}; (3)If((fp=fopen(''d:\\\\student.txt'',''w''))==NULL) (4)scanf(\"%s%d%f\ (5)fprintf(fp,\"%8s%5d%8.2f\\n\5.voidsave(); scanf(\"%s%d%d%s\ FILE*fp; if(fwrite(&s[i],sizeof(structstudent),1,fp)=0)fclose(); 6.①FILE*fp; ②if((fp=fopen(\"d:\\\est.txt\ ③while(ch!=’\\n’) ④fputc(ch,fp); ⑤while(ch!=EOF)

7.if((fp=fopen(\"d:\\\est.txt\ while(ch!=‘\\n’) fputc(ch,fp); while(ch!=EOF) fclose(fp); 8.FILE*fp;

if((fp=fopen(\"d:\\\\lang\\\c\\\\deposit.c\ return1;while((ch=fgetc(fp))!=EOF) fclose(fp); 9.intmain()

if((fp=fopen(\"d:\\\\lang\\\c\\\\deposit.c\ while((ch=fgetc(fp))!=EOF)

if((ch>='A'&&ch<='Z'))ch=ch+32;putchar(ch); 10.scanf(\"%s\

if((fp=fopen(fname,\"w+\"))==NULL) while((ch=getchar())!='#') fputc(ch,fp);

fprintf(fp,\"\\n%d\\n\

11.1、FILE*fp1,*fp2;2、charch,fname1[32],fname2[32]; 3、printf(\"Can'topentargatefile:%s\\n\ 4、5、while((ch=fgetc(fp1))!=EOF) 12.1、FILE*fp1;

2、charch,fname1[32];

3、if((fp1=fopen(fname1,\"r\"))==NULL) 4、while((ch=fgetc(fp1))!=EOF) 5、putchar(ch);

13.1、if((fp=fopen(\"d:\\\\lang\\\c\\\\writestring.txt\ 2、scanf(\"%s\ 3、fgets(st,fp); 4、rewind(fp);

5、while((ch=fputc(fp))!=EOF) 14.FILE*fp;

fp=fopen(\"source.txt\ if(fp==NULL) while(ch!=EOF) fclose(fp); 15.FILE*fp1,*fp2;fp1=fopen(\"source1.txt\ if(fp1==NULL||fp2==NULL) while(ch!=EOF) fclose(fp1);fclose(fp2); 16.intmain() intcount=0;fp=fopen(\"source.txt\ if(fp==NULL) printf(\"\\n字符个数=%d\\n\17.FILE*fp1,*fp2;if(fp1==NULL||fp2==NULL) while(ch!=EOF)

if(ch!='')fputc(ch,fp2); fclose(fp1);fclose(fp2);

18.(1)#defineN10(2)If((fp=fopen(''d:\\\\student.txt'',''r''))==NULL) (3)fscanf(fp,\"%s%d%f\ (4)s=s+stu[i].score; (5)fclose(fp);

19.charstr[]=\"helloworld\";

fp1=fopen(\"d:\\\\source.txt\ fp2=fopen(\"d:\\\arget.txt\ if(fp1==NULL||fp2==NULL) while((ch=fgetc(fp1))!=EOF) 20.fp=fopen(\"source.txt\ if(fp==NULL) while(ch!=EOF)

printf(\"\\n大写字符个数=%d\\n\ fclose(fp); 五.编程一 解答: 六.编程二

解答:

因篇幅问题不能全部显示,请点此查看更多更全内容

Top