第一章基础知识
一.填空 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 intx,y,t; x=7;y=9;if(x #include charch1='E'; if(ch1>='A') ch1++; else ch1+=32; printf(\"ch1=%c\\n\ } 4. #include 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(c 输入:212223<回车> 6.#include 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 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 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 inti=0,a=2;if(i==0) printf(“**”); else printf(“$$”); printf(“*”); } 11. #include 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 printf(\"\\n\"); return0; } 14.#include 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 {inta=1;switch(a){ case0:printf(\"**0**\");break; case1:printf(\"**1**\");break; case2:printf(\"**2**\");break; } return0;} 16.#include {intx,y; scanf(\"%d\ y=x>12?x+10:x-12;printf(\"%d\\n\ return0;} 输入:12<回车> 17.#include 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 inta=20;switch(a%3){ case0:printf(\"0\"); case1:printf(\"1\"); case2:printf(\"2\"); default:printf(\"3\"); } printf(\"4\"); } 20.#include 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=x 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(max 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 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 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 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 第五章循环结构 一.填空 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 intnumber,digit; number=1234;while(number!=0) { digit=number%10; printf(\"%d\ number=number/10; } } 2.#include for(i=1;i 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 intcounter=1;while(counter<=5){ printf(\"%d\\n\ counter++; } } 5.#include 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 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 inti,j; i=1;while(i<5){ for(j=1;j<2*i+1;j++) printf(\"%c\ printf(\"\\n\"); i++; } return0;} 8.#include 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 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 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 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 if(s>10)break; } printf(\"i=%d,s=%d\\n\ return0;} 14.#include 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 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 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 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 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 for(________________________;i<=x;________________________) { while________________________ { printf(“*%d”,i); ________________________; } } return0;} 7.输出九九乘法表. #include 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 printf(\"sum%10.1f\\n\ } 2.#include floate=1,term=1;for(i=1;i<=100;i++) {term=term*i; e=e+1./term; } printf(\"e=%10.6f\\n\ } 3.#include 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 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 #include 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 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 printf(\"%5d\ if(n%8==0)printf(\"\\n\"); } } 9.#include 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 intSn=0,a,n,i=0,t; printf(\"Sn=a+aa+aaa+…+aaa…a\\npleaseinputa,n:\"); scanf(\"%d,%d\ while(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 intx=3,n=3;longp; p=fun(x,n); printf(\"p=%ld\\n\ return0;} longfun(intx,intn) { inti; longp=1;for(i=0;i 2.#include 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) { inti; for(i=3;i<=n/2;i=i+2) if(n%i==0)printf(\"%5d\ printf(\"\\n\"); } 输入:15<回车> 4.#include inta=1,b=2;a=a+b; print(); printf(\"%d%d\\n\ return0;} voidprint() { intb=3;printf(\"%d%d\\n\ } 5.#include intx=1;x=fun1(x); printf(\"%d\\n\ return0; } intfun1(intx) { x++; fun2(x); returnx; } voidfun2(intx) { x++; } 6.#include intfun1(inta,intb,intc) { a=a+10;b=b+10;c=c+10;returnc; } 7.#include fun(7); printf(\"\\n\"); return0;} voidfun(intx) { if(x/2>1)fun(x/2); printf(\"%5d\ } 8.#include { 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 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 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) { a=456;b=567;c=678;} 14.#include inti;floats=0.0;for(i=1;i inti;floata=0.0;for(i=1;i<3;i++) a=a+f(i); printf(\"a=%.4f\\n\ } 15.#include 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 inti,x; for(i=0;i<=2;i++) x=fun(); printf(\"%d\\n\ } intfun() { intx=3;x++; returnx; } 17.#include 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 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 21.#include voidmain() { inta=4,b=3,c=5;f(a,b); f(a,c); f(b,c); printf(\"%d,%d,%d\ } 22.#include 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 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 inti,s=0;for(i=m;i { 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 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 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 31.#include invert(int*s,inti,intj) { intt; if(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 i*=2;printf(\"i=%d\\n\ } 34. #include 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 voidmain() { inta=33,b=22,c; c=funa(a,b); printf(\"c=%d\\n\ } 36.#include 37.#include intx=879;fun(x); } voidfun(intn) { inta,b,c,t; a=n%10;b=(n/10)%10;c=(n/100)%10;if(a38.#include t=a; a=b; b=t; } returnt; } voidmain() { inta=33,b=22,c; c=funa(a,b); printf(\"c=%d\\n\ } 39. #include printf(\"%d%d\\n\ } 40.#include 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(m 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;i #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;i 8. s=he(a); printf(\"he=%d\\n\out(a); } voidout(inta[n][n]) {inti,j; for(i=0;i inthe(inta[n][n]) {inti,sum=0;for(i=0;i printf(\"\\n\"); out(a); } voidinp(inta[n][n]) { inti,j; for(i=0;i voidout(inta[n][n]) {inti,j; for(i=0;i 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 printf(\"请输入%d名职工姓名成绩:\\n\ for(i=0;i printf(\"最高分:%d;不及格人数%d\ } intmax(datatypestu[])/*最高分函数定义*/ {intm,i; m=0; for(i=1;i intnum(datatypestu[])/*不及格人数函数定义*/ { inti,n=0;for(i=0;i #include voidmerge(inta[],intb[],intc[]); voidmain() { inti,a[M],b[N],c[M+N]; printf(\"请输入%d个降序排列的整数:\\n\ for(i=0;i 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;i voidprint(datatypework[])/*print函数定义*/ { inti; for(i=0;i 18.编程实现:从键盘输入10名学生的信息,包括学号、姓名、成绩,用一个排序函数sort 完成学生成绩降序排列,并输出学生排序后的结果。 #defineN10#include stutypestu[N]; input(stu); sort(stu); print(stu); return0; } voidinput(stutypestu[])/*input函数定义*/ { inti; printf(\"请输入%d名学生信息(学号姓名成绩):\\n\ for(i=0;i