1、C 语言程序设计实训教程习题和实验解答2.1 C 语言概述【习题解答】1 结构化程序有三大基本结构:顺序、分支和循环.2算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。 。有穷性:一个算法应包含有限的操作步骤而不能是无限的。 确定性:算法中每一个步骤应当是确定的,而不能应当是含糊的,有零个或多个输入输出,有一个或多个输出。有效性:算法中每一个步骤应当能有效地执行,并得到确定的结果。对于程序设计人员,必须会设计算法,并根据算法写出程序。可以用自然语言、流程图、伪代码和计算机语言表示算法。3.C 语
2、言的主要特点有:语言简洁、紧凑,使用方便、灵活。ANSI C 一共只有 32 个关键字;控制语句丰富,程序书写自由,主要用小写字母表示,压缩了一切不必要的成分;运算符丰富,共有 34 种;数据结构类型丰富;具有结构化的控制语句;语法限制不太严格,程序设计自由度大;C 语言允许直接访问物理地址,能进行位(bit )操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。因此有人把它称为中级语言;生成目标代码质量高,程序执行效率高;与汇编语言相比,用 C 语言写的程序可移植性好。4.用传统流程图表达如下:2.2 数据类型与表达式【习题解答】一、选择题1.C 2.B 3.A 4.B 5.A 6.B
3、 7.D 8.B 9.D 10.C二、填空题1.整型、实型、字符型、枚举类型2.3.0000003.逗号运算符4.三,自右向左5.1,06.32767三、编程题1.已知球的半径为 1.5cm,计算球的体积。#include void main()float r=1.5,volume;volume=4.0/3*r*r*r;printf(“%fn”,volume);2.输入两个数 a 和 b,求 a 除以 b 的商和余数?#include void main()int a,b,c,d;scanf(“%d,%d”,c=a/b;d=a%b;printf(“%d,%d”,c,d);3.输入三个学生的成绩
4、,求这三个学生的总成绩和平均成绩。#include void main()int a,b,c,sum;float average;printf(“please input students score:”);scanf(“%d,%d,%d”,sum=a+b+c;average=sum/3.0;printf(“sum=%d,average=%fn”,sum,average);【实验解答】1.c=102. 程序功能为输入两个数,求两数的差c=103. #include void main()int a,b ,c;a=b=5 ;c=a+b ;printf(“a+b=%d”,c) ;4.运行结果 i=
5、8,j=10,m=9,n=10,u=9,v=-10(回车)5.x=16,y=24,z=246. 100 68100 68d D100 68d D120 112x p出错304 3210 A7.编写一个 C 程序,输入 a,b,c 三个整数,求这三个数之和。具体要求:1) 在 Turbo C 环境或其他编译环境下编辑该程序,然后进行编译连接。2) 运行该程序,检查你所编写的程序是否正确。#include void main()int a,b,c,sum;scanf(“%d,%d,%d”,sum=a+b+c;printf(“sum is : %dn”,sum);2.3 顺序结构程序设计【习题解答】
6、一、选择题1. B 2. C 3. A 4.A 5.D 6.B二、填空题1. y=2 2.666.006.00 ( 表示空格)3. k=11,k8=13,k16=b。 4. !!ahpuahpu5. 5,4,c=3 6. i=56,j=789.000000,x=12345.000000,y=a,c=72三、编程题1.已知 x=3.2,y=7 ,z=2,计算 y/3*x-2 的值。#includevoid main()float x=3.2;int y=7,z=2;printf(“%f”, y/3*x-2);2.输入一个华氏温度,要求输出摄氏温度(结果保留 2 位)。公式为 c=5/9*(f-3
7、2)。#include void main() float f,c;scanf(“%f”,c=5.0/9*(f-32);printf(“c=%.2f”,c);3.从键盘输入一个小写字母,用大写形式输出该字母。#include void main()char a,b;printf(“please input a little letter:”);scanf(“%c“,b=a-32;printf(“%c“,b);4.把 16 进制数 12a 以 10 进制形式输出。#include void main()int a=0x12a;printf(“%d“,a);5.输入两个整数,将其值交换。#incl
8、ude void main()int a,b,t; scanf(“a=%d,b=%d“,t=a;a=b;b=t;printf(“a=%d,b=%d“,a,b);【实验解答】实验 顺序结构程序设计1. 结果为 0,因为 a,b 被定义为实型,而却以整型输入,类型不匹配。2. 错误之处: s=3 /(a+b)*(a+b); 应改为:s=3.0/(a+b)*(a+b);3. 运行结果 -1,177777,ffff,65535b=-24.编程并上机调试运行1) 设圆半径为 r=1.5,求圆周长、面积。要求用 scanf 函数输入数据,输出时取小数点后两位。#include void main() fl
9、oat r,l,s,v;scanf(“%f“,l=2*3.14*r;s=3.14*r*r;printf(“l=%.2f,s=%.2f,v=%.2f“,l,s);2) 输入一个 3 位十进制整数,分别输出百位、十位以及个位上的数。#include void main()int a,b,c,d;scanf(“%d“,b=a/100;c=a/10%10;d=a%10;printf(“%d %d %d“,b,c,d);3) 从键盘输入一个带 2 位的实数,将其整数部分和小数部分分离后输出。例如:输入 321.54,输出 321.54=321+0.54。#include void main()int a
10、;float b,c;scanf(“%f“,a=(int)b;c=b-a;printf(“%.2f=%d+%.2f“,b,a,c);4) 用 getchar 函数读入两个字符,然后分别用 putchar 和 printf 函数输出这两字符。#include void main()char a,b;a=getchar();b=getchar();putchar(a);putchar(b);printf(“n%c%c“,a,b);2.4 选择结构程序设计【习题解答】一、选择题1. A。 2. D。 3. A。 4. B。 5. C。 6. A。二、填空题1. (x20scanf(“%d%d%d“,
11、max=a;if(max void main() float a,b,c,l;printf(“please input a,b,cn“);scanf(“%f,%f,%f“,if(a+b)cprintf(“l=%fn“,l);elseprintf(“It is not triangle!n“);3.从键盘上输入一个整数判断其奇偶以及正负。#include “stdio.h“void main() int a;scanf(“%d“,if(a0)if(a%2=0) printf(“It is PLUS even number“);elseprintf(“It is PLUS odd number“)
12、;else if(a0) printf(“2“);else if(b*b-4*a*c=0) printf(“1“);else printf(“0“);5.从键盘输入表示年份的整数,判断是否为闰年。#include “stdio.h“void main() int year;scanf(“%d“,if(year%400=0)|(year%4=0elseprintf(“It is not runnian“);【实验解答】实验名称 选择结构程序设计1. if(0void main()int n;printf(“Input a num(0void main()int score;scanf(“%d“,
13、if(score100)printf(“Error!“);elsescore=score/10;switch(score)case 10:case 9:printf(“An“);break;case 8:printf(“Bn“);break;case 7:printf(“Cn“);break;case 6:printf(“Dn“);break;default:printf(“En“);3) 输入四个数,要求按从大到小顺序输出。#includevoid main()int a,b,c,d,t;scanf(“%d%d%d%d“,if(avoid main()int a,b,c,t;int max,
14、min;scanf(“%d%d%d“,max=min=a;if(max=0float s=0;for(i=1;ivoid main()int i,j;for(j=5;j=1;j-)for(i=1;ivoid main()float s=100,m=100,i;for(i=2;ivoid main()int m,n,i,t;scanf(“%d %d“,if (mvoid main()long s=1,i,t=1;for(i=2;ivoid main() int i,j;for(i=1;i=j)printf(“ “);elseprintf(“*“);printf(“n“);3) 猴子吃桃。猴子第一
15、天摘若干桃子,当即吃了一半,又加一个。第二天吃了剩下桃子一半又多一个。以后每天早上都吃前一天剩下的一半多一个。第十天,只剩一个。问第一天共摘多少个桃子。#include void main()int s=1,i;for(i=2;ivoid main()int i,j;for(i=1;ivoid main()int i,j;for(i=10;ivoid main()int i,j,k;for(i=0;ivoid main()char c;int letter=0,space=0,digtal=0,other=0;while(c=getchar()!=n)if(c=Afor(i=1;ivoid m
16、ain()int n,i=2;scanf(“%d”,printf(“%d=“,n);while(n1)if(n%i=0)printf(“%d*”,i);n=n/i;else i+;printf(“b “);5.利用循环语句编写程序:对一个正整数,将各位数字反序后的数组成一个整数输出。例如:输入 12345,输出 54321。#include void main()long m,n,sum=0;scanf(“%ld”,while(m0)n=m%10;m=m/10;sum=sum*10+n;printf(“%ld”,sum);6.一个素数加上 1000 以后是 37 的倍数,求满足这个条件的最小素
17、数。#include void main()int n=1,i;while(1)n+;for(i=2;in/2)break;7.”完数” 。找 1000 以内的所有完数。一个数如果恰好等于它的因子之和,这个数就称为 ”完数”。#include void main()int i,j,sum,m;for(i=2;ivoid main() int a100;int i,j,n,t,num=0;scanf(“%d”,for(i=0;i#includevoid main() char a50;int i,j,n,t,num=0;gets(a);n=strlen(a);for(i=0;i=aint i,j
18、,m,d20;scanf(“%ld”,m=0;while(n!=0) n=n/10;m+;for(i=0,j=m-1;ivoid main() int a10,i;for(i=0;i=10)printf(“5 is not in data.n”);5.任意输入 20 个正整数,找出其中的素数,将这些素数由小到大排序并输出。#includevoid main() int a20,b20,i,j,k,m;for(i=0;i=ai-1) bk=ai;k+;for(i=0;ivoid main() int a45,i,j,k,m;for(i=0;iaij) m=aik;aik=aij;aij=m;fo
19、r(i=0;ivoid main() int i,j,t,n,a100;scanf(“%d”,for(i=0;ivoid main() int i,j,a88;for(i=0;ivoid main() int i,j,a44,b44,s=0;for(i=0;ivoid main() long a20=1,1;int i;for(i=2;ivoid main() long a20=1,1;int i;for(i=2;ivoid main() int a10;int i,j,t;for(i=0;i#includevoid main() char a100,b50;int i,j,t;gets(a)
20、;gets(b);t=strlen(a);for(i=0;bi!=0;i+,t+) at=bi;at=0;puts(a);3) 输入一行字符串,统计其中的单词个数,单词之间用空格隔开。如:输入 I am a boy !其中单词的个数为 4 个(不考虑大写字母) 。#include#includevoid main() char a100;int i,t;gets(a);t=0;for(i=0;ai!=0;i+) if(ai=ascanf(“%d,%d”,for(i=0;imax) max=aij;anj=j;for(k=0,flag=1;kakanj) flag=0;if(flag) ani=
21、i;printf(“a%d%d=%dn”,ani,anj,max);break;if(!flag) printf(“没有鞍点 ”);5) 已有一个排序好的数组(从小到大排序) ,现输入一个数,要求按原来排序的规律将它插入数组中。#includevoid main() int a50,n,x;int i;scanf(“%d”,for(i=0;ix)break;if(i= =n)ai=x;elsefor(j=n-1;j=i;j-)aj+1=aj;ai=x;for(i=0;i=n;i+)printf(“%5d”,ai);6) 比较用户输入的字符串是否为表示同意的 yes(用户可以用大写或小写) 。#include “string.h“#include “stdio.h“void main() int k; char s15,s2=“yes“;printf(“input a string:n“);gets(s1);