C语言程序设计案例教程(含实验)
设计性实验的程序参考答案
实验项目一 C程序的编辑、编译、连接和运行
题目:编写程序,要求屏幕上显示如下信息:
***********************
* This is a C program .*
***********************
程序:
#include
void main()
{
printf(“***********************”);
printf(“* This is a C program .*”);
printf(“***********************”);
}
实验项目二数据类型、运算符、表达式
题目
(1)程序填空:输入1 个实数x,计算并输出其平方根(保留1 位小数)。
填空
1.double x,root;
2.root=sqrt(x);
(2)输入一个大写英文字母,输出相应的小写字母。
填空
1.ch=ch+32;
实验项目三顺序结构程序设计
题目
(1)编写程序,输入三角形的三边长a、b、c,求三角形面积area。
程序代码:
#include
#include
main()
{
float a,b,c,s,arer;
printf(" 请输入三角形的三个边a,b,c:\n");
scanf("%f,%f,%f",&a,&b,&c);
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("三角形的边为a=%7.2f, b=57.2f, c=%7.2f\n",a,b,c);
printf("三角形的面积area=%7.2\n ",area);
(2)设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
程序代码:
#include
main()
{
float h,r,l,s,sq,vq,vz;
float pi=3.1415926;
printf(" 请输入圆半径 r,圆柱高 h: ");
scanf("%f,%f",&r,&h);
l=2*pi*r;
s=r*r*pi;
sq=4*pi*r*r;
vq=4.0/3.0*pi*r*r?*r;
vz=pi*r*r*h;
printf("圆周长为:l=%6.2f\n",l);
printf("圆面积为:s=%6.2f\n",s);
printf("圆球表面积为:sq=%6.2f\n",sq);
printf("圆球体积为:vq=%6.2f\n",vq) ;
printf("圆柱体积为:vz=%6.2\n ",vz);
(3)分别用getchar函数和scanf函数读入2个字符给变量c1、c2,然后分别用putchar函数和printf函数输出这两个字符。
程序代码:
#include
main()
{
char c1,c2;
printf(" 请输入两个字符 c1,c2:");
c1=getchar();
c2=getchar();
printf("用putchar语句输出结果为:");
putchar(c1);
putchar(c2);
printf("用printf语句输出结果为:");
printf("%c %c\n",c1,c2);
}
实验项目四分支结构程序设计
题目
(1)程序填空。输入四个整数,输出其中的最小值。
填空:
min=a;
if(b else if(c else if(d (2)计算如下函数Y的值。 X (X<1) {Y= 2X-1 (1≤X<10) 3X-11 (X>=10) 程序代码: #include main() { int x,y; printf(" 请输入x:"); scanf("%d",&x); if(x<1) y=x; else if(x<10) y=2*x-1; else y=3*x-11; printf("x=%d,y=%d",x,y); } (3)给出一个百分制成绩,输出对应的等级分。共分A、B、C、D、E五个等级。90分以上为A,81-89分为B,70-79分为C,60-69分为D,60分以下为E。要求分别用if语句和switch 语句实现。 程序代码: ①用if-else 语句实现: #include main() { int g; Loop: printf(" 请输入g:"); scanf("%d",&g); if(g<0||g>100) goto Loop; if(g>90) printf("A"); sele if(g>80) printf("B"); else if(g>70) printf("C"); else if(g>60) printf("D"); else printf("E"); } ②用switch 语句实现: #include main() { int g; Loop: printf(" 请输入g:"); scanf("%d",&g); if(g<0||g>100) goto Loop; switch(g/10) { case 10: case 9: printf("A"); case 8: printf("B"); case 7: printf("C"); case 6: printf("D"); default:printf("E"); } } (4)编写程序,输入奖金数a,计算并输出税率、应缴税款和实得奖金数。 奖金税率 a<500 0.00 500≤a<1000 0.05 1000≤a<2000 0.08 2000≤a<5000 0.10 5000≤a 0.15 提示:a=奖金数rate=税率值 tax=应缴税款 profit=实得奖金数。 计算公式: tax = a* rate , profit= a – tax 程序代码: #include main() { float a,rate,tax,profit; scanf("%f ",&a); if(a<500) rate=0.0; else if (a<1000) rate=0.05; else if (a<2000) rate=0.08; else if (a<5000) rate=0.1; else rate=0.15; tax= a*rate; profit=a-tax; printf(" rate=%10.2f,tax=%10.2f, profit=%10.2f\n", rate, tax, profit); } 实验项目五循环结构程序设计 题目 (1)猴子吃桃子。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第2天早上将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个。到第10天早上想再吃时,只剩下一个桃子。问第一天共摘多少个桃子?(要求使用While循环语句实现)。 算法提示 设 total:桃子的总数 x1 :前一天的桃子数 x2 : 后一天的桃子数 day:天数 计算公式: x1=(x2+1)*2 第1天的桃子数是第2天桃子数加1后的2倍。 程序代码: #include void main() { int x1,x2,day,total; day=9; x2=1; while(day>0) { x1=(x2+1)*2; x2=x1; day=day-1; } Total=x1; printf(" total=%d\n", x1); } (2)求200—300之间的素数。 程序代码: #include void main() { int m,n,flag; printf("\n The primers from 200 to 300 is: \n"); for(n=201;n<300;n+=2) { flag=1; for(m=2;m<=n/2;m++) if(n/m==0) { flag=0; break; } if(flag==0) continue; printf("%d ",n); } printf("\n"); } (3)程序填空 ①求1-1/2+1/3-1/4+??,输入1 个正整数n(n<=100),计算并输出1-1/2+1/3 -1/4+??的前n 项和(保留3 位小数)。 程序代码: #include void main( ) { int i, n, flag; float sum; scanf("%d", &n); /*----以下为所填语句------*/ sum=0; flag=1; for(i=1;i<=n;i++) { sum+=flag*1.0/i; flag=-flag; } printf("%.3f\n", sum); } ②统计字符。输入一个正整数repeat (0 输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。程序代码: #include void main( ) { int ri, repeat; int blank, digit, letter, other; char c; scanf("%d", &repeat); getchar(); for(ri=1; ri<=repeat; ri++) { c = getchar(); /*----以下为所填语句------*/ blank=digit=letter=other=0; while(c!='\n') { if(c>='a'&&c<='z'||c>='A'&&c<='Z') letter++; else if(c>='0'&&c<='9') digit++; else if(c==' ') blank++; else other++; c = getchar(); } printf("letter=%d, blank=%d, digit=%d, other=%d\n", letter, blank, digit, other); } } ③找最大值。输入一个正整数repeat (0 输入 4个整数 输出其中的最大值。 例:输入 3 (repeat=3) 12 6 1 90 10 40 30 20 -1 -3 -4 -5 输出 max is 90 (12 6 1 90 中的最大值是90) max is 40 (10 40 30 20 中的最大值是40) max is -1 (-1 -3 -4 -5 中的最大值是-1) 程序代码: #include void main( ) { int ri, repeat; int a, b, c, d, max; scanf("%d", &repeat); /*----以下为所填语句------*/ for(ri=1; ri<=repeat; ri++) { scanf("%d%d%d%d", &a, &b, &c, &d); /*----以下为所填语句------*/ max=a; if(max if(max if(max printf("max is %d\n", max); } } (4)编写程序:输出“九九乘法表”。 程序代码: #include void main() { int i,j; for(i=1;i<9;i++); for(j=1;j<=i;j++); { if(i==j) printf("\n"); printf("%d*%d= %d ",i, j, i*j); } } 实验项目六函数及其应用 题目 (1)程序填空。计算代数多项式1.1+2.2x+3.3x2+4.4x3+5.5x4的值。 例:输入 1.5 输出 54.52 程序代码: #include float f(float); void main() { float x,y; scanf(“%f”,&x); /*----以下为所填语句------*/ y=f(x); printf("%.2f\n",y); } /*----以下为所填语句------*/ float f(float x) { float sum=0,t=1; int i; for(i=1;i<=5;i++){ sum+=(i+1.0*i/10)*t; t*=x; } return sum; } (2)编写程序,求 s=1!+2!+3!+....+10!之和。要求定义递归函数fact(n)求n!,程序的输出形式为:1!+2!+3!+4+5!+6!+7!+8!+9!+10! = s,其中,s为求和值。 实验提示 求n!的递归公式为: 1 (n=0、n=1) fact(n)= fact(n)=n*fact(n-1) (n>1) 注意:s 和fas(n)均为长整型。! 程序代码: #include void main() { long int fas(int); int i, m; long int s=0; for(i=1;i<=10;i++) { m=fas(i); s=s+m; print(“%d!+”,i); } print(“\b=%d\n”,s); } long int fas(int x) { if (x==0||x==1) return(1); else return(x*fas(x-1)); } (3)编写程序,N名裁判给某歌手打分(假定分数都为整数)。评分原则是去掉一个最高分,去掉一个最低分,剩下的分数取平均值为歌手的最终得分。裁判给分的范围是: 60 <= 分数〈=100,裁判人数N=10。要求:每个裁判的分数由键盘输入。 实验提示 定义两个函数: ●max():返回两个数中较大的值; ●min():返回两个数中较小的值。 程序代码: #include Int m=0;n=100; void main() { int i,x,sum; sum=0; for(i=1;i<=10;i++) { LOOP: scanf(“%d”,&x) ; if(x<60||x>100) goto LOOP; m=max(x,m); n= min(x,n); sum=sum+x; } print(“%d”,(sum-m-n)/8); } int max (int x) { if (x>m) m=x; return(m); } int min (int x) { if (x return(n); } (4)编写程序,用递归法将一个十进制整数转换成二进制数。 程序代码: #include void DtoB(int n); void main() { int n; scanf("%d",&n); printf("%d-----)",n); DtoB(n); printf("\n"); } void DtoB(int n) { if(n) { DtoB(n/2); printf("%d",n%2); } } 实验项目七数组及其应用 题目 (1)程序填空。 ①求n个数中较大值及其下标。输入一个正整数n (1 程序代码: #include void main( ) { int ri, repeat; int i, index, n; int a[10]; scanf("%d", &repeat); for(ri=1; ri<=repeat; ri++){ scanf("%d", &n); for(i=0; i scanf("%d", &a[i]); /*----以下为所填语句------*/ index=0; for(i=1; i if( a[index] printf("max=%d,index=%d\n", a[index],index); } } ②逆序输出。输入一个正整数repeat (0 输入一个正整数n (1 程序代码: #include void main( ) { int ri, repeat; int i, n, temp; int a[10]; scanf("%d", &repeat); for(ri=1; ri<=repeat; ri++){ scanf("%d", &n); for(i=0; i scanf("%d", &a[i]); /*----以下为所填语句------*/ for(i=0; i { temp=a[i]; a[i]=a[n-1-i]; a[n-1-i]=temp; } for(i=0; i printf("%d ", a[i]); printf("\n"); } } ③找鞍点(选作)。 输入1 个正整数n(1≤n≤6)和n 阶方阵a 中的元素,如果找到a 的鞍点(鞍点的元素值在该行上最大, 在该列上最小), 就输出它的下标, 否则,输出"NO"(设a 最多有1 个鞍点)。 程序代码: #include "stdio.h" void main( ) { int ri,repeat; int flag,i,j,k,row,col,n,a[6][6]; scanf("%d",&repeat); for(ri=1;ri<=repeat;ri++){ scanf("%d",&n); for(i=0; i for(j=0; j scanf("%d",&a[i][j]); /*----以下为所填语句------*/ for(i=0; i { row=i;col=0; for(j=1; j if(a[row][col] col=j; flag=1;