2011C程序实验报告wo带答案

更新时间:2023-08-26 07:03:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验一 C语言程序初步

一、实验目的

1. 熟悉Turbo C与Visual C++程序运行环境。 2. 初步了解C源程序的特点。

3. 掌握如何编辑、编译、链接和运行一个C程序。 4. 掌握C语言程序的书写格式和C语言程序的结构。 5. 了解C语言中数据类型的含义。 6. 掌握C语言中常用的运算符。 7. 掌握C语言表达式的运算规则。 8. 理解C语言中输出输入使用方法。

9. 熟练掌握C语言中输入输出格式控制符。 二、实验要求

1. 分析整理运行结果,完成实验报告,要求报告书写字迹清晰,格式规范。 2. 实验报告中应包含运行结果及结果分析。 3. 最后给出实验总结及体会。

printf(“\n”); 三、实验内容与步骤

printf(“ very good! ”); 1.C语言上机步骤:

printf(“\n”); (1)进入系统

printf(“*********************”);

在Windows桌面或“程序”菜单中

}

找到Visual C++ 6.0双击运行。

运行结果:*********************

(2)常用操作 very good!

熟悉常用的操作:文件、编辑和组建菜单。 结果分析:\n是换行 (3)操作步骤

① 进入Visual C++ 6.0界面; (3)#include<stdio.h> ② 文件新建,选择文件存放位置,void main( )

{ 输入文件名称。

int a,b,sum; ④ 点击“确定”后,开始编辑程序;

a=12;b=45; ⑤ 编辑好程序之后,选择组建 编

sum=a+b;

译,对程序进行编译、连接,无误后,

printf(“sum is %d\n”,sum);

选择组建 执行。 a=10;b=34;

sum=a*b;

2.读下面程序,写出运行结果,并对结果进printf(“sum is %d\n”,sum); 行分析。 } (1)#include<stdio.h> 运行结果:sum is 57 void main() { 结果分析:重新赋值后取新值 printf(“*****************\n”); printf(“This is a c program. \n”); (4)#include<stdio.h> } void main( ) 运行结果:***************** { int a,b,c; 结果分析:字符串原样输出 scanf(“%d,%d”,&a,&b); 将程序中的\n去掉后,运行结果为: if(a>b)

c=a; 运行结果:

else c=b; 结果分析:\n是换行

printf(“max=%d”,c);

} (2)#include<stdio.h>

运行结果:输入5,3 输出max=5 void main( )

结果分析:输入两个数,输出大数 {

printf(“*********************”);

1

(5)#include<stdio.h> void main( ) {

char c1,c2; c1=97; c2=98;

printf(“%c %c\n”,c1,c2); printf(“%d %d\n” ,c1,c2); } 运行结果:a b

结果分析:字符型和整型可相互转换

(6)#define PRICE 30 #include<stdio.h> void main( ) {

int num,total1,total2; num=10;

total1=num*PRICE; total2=num*30;

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

运行结果:total1=300

结果分析:define是宏定义,定义字符常量

(7)#include<stdio.h> void main( ) {

int a,b;

a=2147483647; b=a+1;

printf(“a=%d,,b=%d”,a,b); }

运行结果:a=22175,b=22176 结果分析:超出整数范围

(8)#include<stdio.h> void main( ) {

float x; int i; x=3.6; i=(int)x;

printf(“x=%f,i=%d”,x,i); }

运行结果:x=3.600000,i=3 结果分析:(int)x 强制类型转换

(9)#include<stdio.h> void main( ) {

int i,j,m,n=2; i=8;

2

j=10; m=++i; n+=j++;

printf(“%d,%d,%d,%d\n”,i,j,m,n); }

运行结果:9,11,9,12 结果分析:++i是先加1再参加运算

3. 上机输入下面程序 (1)main( ) {int a,b; float c;

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

printf(“a=%-4d,b=%4d,c=%f,c=%.2f\n”,a,b,c); }

1) 要使a=3,b=4,c=12.3456,在键盘上应如何输入?

2) 若将输入函数改为scanf(“%d, %d ,%f”,&a,&b,&c);应该如何输入数 据?

(2)main( )

{

int a; float b; char c;

scanf(“%4d%5f%3c”,&a,&b,&c);

printf(“a=%d,a=%o,a=%x,b=%8.3f,b=%4.0f,c=%c\n”,a,a,a,b,b,c); }

要使a=77,b=4.56,c= A ,在键盘上应如何输入?

4. 程序改错

上机调试下面的程序,记录系统给出的出错信息,改正后写在对应错误代码行后面。 下面的程序企图计算由键盘输入的任意两个整数的平均值: #include<stdio.h> void main( ) { int x,y,a;

————>float x,y,a; scanf(“%x,%y”,&x,&y);

————> scanf(“%f,%f”,&x,&y); a=(x+y)/2;

printf(“The average is:%d\n”,a);

————>“The average is:%f\n” }

运行结果:输入3,5输出4.000000 结果分析:若a定义为整型,可能出现3,4

的平均值为3,自动取整

实验二 顺序结构程序设计

一、实验目的

1. 熟悉C语言顺序结构程序设计方法。 2. 掌握顺序程序设计流程。

3. 熟练掌握逻辑运算符和关系运算符用法。 二、实验要求

1. 分析整理运行结果,完成实验报告,要求报告书写字迹清晰,格式规范。 2. 实验报告中应包含运行结果及结果分析。 3. 最后给出实验总结及体会 三、实验内容与步骤

1.运行下面程序给出输出的结果。 (1)#include "stdio.h"

void main()

{

int a,b;

float x,y;

char c1,c2; scanf(“a=%d,b=%d”,&a,&b); scanf(“%f, %f”,&x,&y); scanf(“%c%c”,&c1,&c2);

printf(“a=%d,b=%d,x=%f,y=%4.2f,c1=

%c,c2=%c\n”,a,b,x,y,c1,c2);

}

运行结果:输入a=3,b=4空3.4,4.5ab

输出a=3,b=4,x=3.400000,y=4.50,c1=a,c2=b 结果分析:scanf中的字符在输入时也要原样输入 (2)#include<stdio.h> void main( )

{

int x = 10,y;

y = 5 + (x + + , x + 8) ;

printf ( " %d , %d " , x ,y ) ; } 运行结果:11,24 结果分析:x++,x为11,y=x+5 +8=19+5=24 (3)#include<stdio.h> main() { int x=1,y=2,z,a,b,c,d; z=++x||++y; printf(“x=%d\n”,x); printf(“y=%d\n”,y); a=-1; b=-2 ; c=++a&&b++; printf(“a=%d\n”,a); printf(“b=%d\n”,b); x=-8; y=0<=x<=10;

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

}

3

运行结果:x=2

y=2 a=0 b=-2 结果分析:||前表达式为真后面不计算 (4)#include<stdio.h>

main( ) { int a=10,b=0 ; if(a==12) {

a=a+1;

b=b+1 ; } else { a=a+4;

b=b+4; } printf(“%d;%d\n”,a,b); } 运行结果:14;4 结果分析:if后面的表达式为真执行if后语句,为假执行else后语句 (5)#include<stdio.h> main()

{ int x=40,y=4,z=4; x=y==z; printf(“%d\n”,x); x=x==(y=z); printf(“%d\n”,x); } 运行结果:x=1 结果分析:区分=或= = 2. 程序填空

任意输入一个有五位数字的正整数x,

分别输出每一数位上的数字(由高到低分别用b5,b4,b3,b2,b1表示)。

#include<stdio.h> void main( ) {

int b1,b2,b3,b4,b5; scanf( “ %ld ”,&x); b4=(x/1000)%10; b3=b2=(x/10)%10; printf(“the number is \n”,x); printf(“its bit is:%d,%d,%d,%d,%d\n”, b5,b4,b3,b2,b1); }

运行结果:输入23456

输出the number is23456

结果分析:b1~b5分别表示个,十,百,千,万

3、程序改错。

上机调试下面的程序,记录系统给出的出错信息,改正后写在对应错误代码行后面。 (1)输入三角形三边长,求三角形面积。 #include “math.h” void main() {

float a,b,c,area;

————> float a,b,c,area,s; scanf(“%f ,%f,%f”,a,b,c);

————> scanf(“%f ,%f,%f”,&a,&b,&c); s=1.0/2*(a+b+c);

area=sqrt(s*(s-a)*(s-b)*(s-c);

————> area=sqrt(s*(s-a)*(s-b)*(s-c)); printf(“area=%d”,area)

————> printf(“area=%f”,area) }

运行结果:输入3,4,5输出area=6.000000 结果分析:sqrt是库函数,表示开方。

(2)下面的C程序,目的是想计算由键盘输入的任意两个整数的积。 #include (stdio.h);

————>#include “stdio.h” void main();

————> void main()

%y)

> scanf(“%d,%d”,&x,&y) ; ————> c=x*y;

4

printf(“c=%f”,c)

————> printf(“c=%d”,c) ; }

运行结果:输入2,3输出6 结果分析:注意有些地方需要加分号,有些

地方不需要

4、程序设计

(1)编写程序,用getchar函数读入两个字符c1、c2,然后分别用putchar函数和printf函数输出这两个字符。比较用printf和putchar函数输出字符的特点。

#include<stdio.h> void main() {

char c1,c2; c1=getchar(); c2=getchar(); putchar(c1); putchar(c2); printf(“%c”,c1); printf(“%c”,c2); }

输入ab

输出abab

(2)编程实现:输入一个摄氏温度c ,要求输出华氏温度。公式为f=5/9*c+32。

#include<stdio.h> main() {

float c,f;

scanf(“%f”,&c); f=5/9*c+32 printf(“%f”,f); }

输入9

输出37.00000

(3)编程实现:任意输入一个大写字母,以小写字母输出。

#include<stdio.h> main () {

char c;

scanf(“%c”,&c); c=c+32;

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

输入A 输出a

(4)鸡兔同笼。已知鸡兔总头数为h(设为30),总脚数为f(设为90),求鸡兔各有多

少只?(不做了)

(5)编写一个程序,输入一个三位正整数,然后反向输出对应的数,如输入123,则输出321。

#include<stdio.h> main()

{ int a,b,c,d;

scanf("%d",&a); b=a/100; c=a/10%10; d=a%10;

printf("%d%d%d",d,c,b); }

输入563 输出365

(6)编写程序,已知三角形的底边和高,求三角形的面积。678仅做一题。

#include<stdio.h> main() {

int d,h,area;

scanf(“%f%f”,&d,&h); area=1.0/2*d*h; printf("%f ",area);

}

输入3 4

输出6.000000

(7)编写程序,已知矩形的两条边,求矩形的面积和周长。

#include<stdio.h> main() {

float a,b,c,s;

scanf(“%f%f”,&a,&b); c=2*(a+b); s=a*b;

printf("%f ,%f",c,s);

}

输入1 3

输出8.000000,3.000000

(8)编写程序,已知圆的半径,圆周率为3.14,求圆的周长和圆的面积。

#include<stdio.h> main() {

float r,c,s;

scanf(“%f”,&r); c=2*3.14*r; s=3.14*r*r;

printf(“%f%f”,c,s); }

5

输入1

输出6.2800003.140000

5.选做题

(1)编写程序,已经一个球的半径,求球的表面积和体积。

(2)编写一个程序,从键盘输入圆锥体的半径r和高度h,计算其体积。

(3)试编程,已知圆柱的底面半径和高,求圆柱体的体积和表面积。

(4)试编程,求长方体的体积。

实验三 选择结构程序设计

一、实验目的

1. 了解条件与程序流程的关系。 2. 掌握if语句的用法 3. 熟练掌握if语句嵌套

4. 掌握条件运算符的使用方法

5. 熟练掌握if语句嵌套、switch语句及条件运算符的使用方法 二、实验要求

1. 分析整理运行结果,完成实验报告,要求报告书写字迹清晰,格式规范。 2. 实验报告中应包含运行结果及结果分析。 3. 最后给出实验总结及体会。 三、实验内容及步骤

1.读下面程序,写出运行结果,并

对结果进行分析。

(1)#include<stdio.h>

void main( )

{ int a=3,b=4,s; s=a; if(a<b)

s=b;

s*=s;

printf(“%d\n”,s);

}

运行结果:16

结果分析:if后面表达式真时执行下面语句

.

(2)#include<stdio.h> void main( ) { int a=0,b=0,c=0; if(++a>0||++b>0) ++c; printf(“\na=%d,b=%d,c=%d”,a,b,c); }

运行结果:a=1,b=0,c=1

结果分析:当++a>0为真时++b>0不执行 (3)#include<stdio.h> main() { int a,b,c,u,v,w; u=v=w=0; a=-1,b=3,c=3; if(c>0) u=a+b; if(a<=0) { if(b>0)

if(c<=0)

v=a-b;

}

else if(c>0) v=a-b;

else w=c;

printf(“output:u=%d,v=%d,w=%d”,u,v,w);

6

} 运行结果:output:u=2,v=0,w=0 结果分析:由于c=3,所以if(c<=0)为假不执行下面的语句,由于a=-1(a<=0)为真else后不执行。 2.程序填空 输入任一字符,如果它是一个大写字母,则把它变成小写字母;如果它是一个小

写字母,则把它变成大写字母;其它字符不变。 #include<stdio.h> void main( ) {

char ch;

printf(“Please input ch:”);

scanf(“%c”,&ch); ch=ch+32; else if(ch>= a &&ch<= z ) printf(“%c”,ch); } 3.程序设计

(1)输入两个数,求出大数并输出。

#include<stdio.h> main() { int a,b,c; scanf("%d%d",&a,&b); if(a>b) c=a; else c=b; printf("%d",c); } 输入2 3 输出3

(2) 输入两个实数,按代数值由小到大的顺序输出这两个数。 #include<stdio.h> main()

{

int a,b,c;

scanf("%d%d",&a,&b); if(a>b)

{

c=a; a=b; b=c;

}

printf("%d%d",a,b); }

输入12 21 输出12 21

(3)编写程序,输入a、b、c三个数,输出最大者。

#include<stdio.h> main() {

int a,b,c,d;

scanf("%d%d%d",&a,&b,&c); if(a>b) d=a; else d=b; if(d<c) d=c;

printf("%d",d); }

输入12 45 32 输出45

(4)编写一个程序,将输入的三个数从小到大排列出来。

#include<stdio.h> main() {

int a,b,c,t;

scanf("%d%d%d",&a,&b,&c); if(a>b) {

t=a; a=b; b=t; } if(a>c) {

t=a; a=c; c=t; }

if(b>c) {

t=b; b=c; c=t;

7

}

printf("%d%d%d",a,b,c); }

输入 4 10 9 输出 4 9 10

(5)由键盘输入三个数,计算以这三个数为边长的三角形面积。(对满足三角形条件进行判断)

#include<stdio.h> main() {

float a,b,c,s,s1;

scanf("%f,%f,%f",&a,&b,&c); if((a+b)>c&&(a+c)>b&&(b+c)>a)

{

s=(a+b+c)/2.0;

s1=s*(s-a)*(a-b)*(a-c); s=sqrt(s1);

printf("三角形面积为:%f\n",s); } else

printf("此三边构不成三角形"); }

输入3 4 5

输出三角形面积为:6.000000

(6)由键盘输入三个整数a、b、c,输出其中最大的数。(用if嵌套实现)

#include<stdio.h> main() {

int a,b,c;

scanf("%d%d%d",&a,&b,&c); if(a>b) if(a>c)

printf(“%d”,a);

else

printf(“%d”,c);

else

if(b>c)

printf(“%d”,b);

else

printf(“%d”,c);

}

输入1 2 3 输出3

(7)编写一个程序,将输入的三个数从小到大排列出来。(用if嵌套实现)

#include<stdio.h> main() {

int a,b,c;

scanf("%d%d%d",&a,&b,&c);

if(a<b) if(a<c) if(b<c)

printf(“%d%d%d”,a,b,c); else

printf(“%d%d%d”,a,c,b); else

printf(“%d%d%d”,c,a,b); else

if(b<c)

if(a<c)

printf(“%d%d%d”,b,a,c);

else

printf(“%d%d%d”,b,c,a); else

printf(“%d%d%d”,c,b,a);

}

输入3 2 1 输出123

(8)试着用多种方法实现

x(x 1)计算函数 y

2x 1

(1 x 10)

3x 11(10 x)

main() {

int x,y; scanf("%d",&x); if(x<1) y=x; else

if(x<10) ①

y=2*x-1; else printf("%d",y); }

②if(x<10) if(x<1) y=x; else y=2*x-1;

else y=3*x-11;

③if(x<1) y=x; if(x>=1&&x<10)

if(x>=10) y=3*x-11; ④if(x>=10) y=3*x-11; else

if(x>=1) y=2*x-1;

8

else y=x; ⑤if(x>=1)

if(x<10) y=2*x-1; else y=3*x-11;

else y=x; 输入5 输出9

4. 选做题

(1)某书店卖书时有以下规定:购书在20000元以上者,打7.5折;购书在10000元以上者,打8折;购书在2000元以上者,打8.5折;购书在100元以上者,打9折。假设某一种书的定价为24元,编写一个程序,计算一位顾客只购买这种书的应付款数。

(2)写一程序,判断某一年是否是闰年。

实验四 循环程序设计

一、实验目的

1. 掌握while循环、do-while循环和for循环实现循环嵌套的程序设计方法。 2. 较灵活地运用do-while循环和for循环实现循环算法的程序设计。 3. 熟练掌握cintinue语句和break语句的用法。 二、实验要求

1. 分析整理运行结果,完成实验报告,要求报告书写字迹清晰,格式规范。 2. 实验报告中应包含运行结果及结果分析。 3. 最后给出实验总结及体会

三、实验内容与步骤

1、读下面程序,写出运行结果,并对结果

进行分析。

(1)main()

{

int n=1,s=0;

while(n<10)

{

s=s+n;

n++;

}

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

} 运行结果:s=45,n=10 结果分析:最后一次循环s=s+9;n=10; . (2)main() { int sum=0,i=11; do { sum=sum+i; i++; }

while(i<=10);

prinf(“sum=%d,i=%d\n”,sum,i);

}

运行结果:sum=11,i=12

结果分析:do…while当条件开始为假也执

行一次

(3)main()

{

int y;

for(y=9 ;y>0;y--)

if(y%3==0)

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

运行结果:9 6 3

结果分析:0~9能被3整除的数

(4) main( ) { int k=1,s=0; do

9

{ k=k*k+(k+1)/2; s=k+s; }while(s%2==0);

printf(“%d\n”,s);

}

运行结果:7 结果分析:第1次循环k=2,s=2第2次循环k=5,s=7 (5) main() { int i,j,k,x=0; for(i=0;i<2;i++) { x++;

for(j=0;j<3;j++) { if(j%2) continue; x++; } x++; } k=i+j;

printf("k=%d,x=%d\n",k,x); } 运行结果:k=5,x=8 结果分析:if(j%2)表示if(j%2!=0)

(6) main() {

int x,y;

for(y=1,x=1;y<=50;y++)

{

if(x>=10) break;

if(x%2==1)

{ x=x+5;

continue;

} x=x-3;

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

运行结果:x=10,y=6 结果分析:continue是结束本次循环,break是结束整个循环 2、程序填空

(1)下面程序的功能是:输出100以内同时能被3和7整除的所有整数,请填空。 #include <stdio.h> main() { int i, j;

for ( i=1;; i++ )

{ if (i%3!=0||i%7!=0) continue; printf ( "%d\t",i ); } }

运行结果:21 42 63 84 结果分析:i%3 i%7有一个不为0都不能输出 (2)判断m是否素数 main() {

int m,i,k;

scanf(“%d”,&m); for(i=2;i<m;i++)

break;

if(i>=m)

printf(“%d是一个素数\n”,m);

else

printf(“%d不是一个素数\n”,m); }

运行结果:输入7,输出7不是一个素数 结果分析:m对2~m-1取余,若都不能整除则为素数

(3)下面程序的功能是:计算1到10之间奇数之和及偶数之和,请填空。 #include <stdio.h> main()

{ int a, b, c, i;

for ( i=0;i<=10;i=i+2 ) { a=a+i; if(i<10) c=c+b;} }

printf ( "偶数之和=%d\n",a ); printf ( "奇数之和=%d\n",c); }

运行结果:偶数之和=30

结果分析:a表示偶数和,b表示奇数,c表示奇数和

10

3.程序改错

上机调试下面的程序,记录系统给出的出错信息,改正后写在对应错误代码行后面。 下述程序按公式:求 10 1

①main() k 1k

②{ float s=0; ③ int k;

④ for(k=1;k<=10;k++;)

————> for(k=1;k<=10;k++) ⑤s+=1/k;

————> s+=1.0/k; ⑥ printf(“sum=%f\n”,s); ⑦}

运行结果:sum=2.928968 结果分析:for的第三个表达式后无 “;”

4.程序设计

(1)分别用do~while循环和for循环 100

编程序计算 s n

n 1

①#include <stdio.h> main() {

int n=1,s=0; do {

s=s+n; n++;

} while(n<=100) printf("%d\n",s); }

②#include <stdio.h> main() {

int n,s=0;

for(n=1;n<=100;n++) s=s+n;

printf("%d\n",s); }

输出5050

(2)分别用do~while循环和for循环编程计算n!

①#include <stdio.h> main() {

int i=1,n,s=1; scanf("%d",&n); do {

s=s*i; i++;

} while(i<=n) printf("%d",s); }

②#include <stdio.h> main() {

int i,n,s=1;

scanf("%d",&n); for(i=1;i<=n;i++) s=s*i;

printf("%d",s); } 输入5 输出120

(3)运用while循环编程打印出所有的“水仙花数” 。所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153=13+53+33,则153是水仙花数。

#include <stdio.h> main() {

int i,a,b,c;

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

a=i/100; b=i/10%10; c=i%10;

if(i==a*a*a+b*b*b+c*c*c); printf("%d",i); } }

输出 153,470,471

(4)分别用do~while循环和for循环编程求1!+2!+…+n!

①#include <stdio.h> main() {

int i=1,s=0,f=1,n; scanf("%d",&n); do {

f=f*i; s=s+f; i++;

}while(i<=n) printf("%d",s); }

②#include <stdio.h> main()

{

int i,s=0,f=1,n; scanf("%d",&n); for(i=1;i<=n;i++) {

f=f*i; s=s+f; }

printf("%d",s); }

输入4 输出33

(5) 分别用while循环、do~while循环和for循环编程有一分数序列:

23581,2,3,5,138,21

13

...求这个数列的前20项之和。

①#include <stdio.h> main() {

int a,b,t,i=1; float s=0; a=1; b=2;

while(i<=20) {

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

printf("%f",s); }

②#include <stdio.h> main() {

int a,b,t,i=1; float s=0; a=1; b=2; do {

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

} while(i<=20) printf("%f",s); }

③#include <stdio.h> main() {

11

int a,b,t,i; float s=0; a=1; b=2;

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

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

printf("%f",s);

}

输出32.660259

(6)试编程判断某数是否是完数的程序,

完数是指这个数等于它的所有因子之和,例

如,6的因子为1、2、3,而6=1+2+3,因

此6是完数。

#include "stdio.h" main()

{ int shu,sum=0,i;

scanf("%d",&shu); for(i=1;i<shu;i++) if(shu%i==0) sum=sum+i; if(shu==sum) printf("yes"); else printf("no");

}

输入6 输出yes

(7)编程求100以内的所有素数 #include <stdio.h> main() {

int a,b=0,i;

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

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

if(i%a==0) break; }

if(i==a) printf("%d\n",i); }

}

(8)编程求100以内的所有素数之和。 #include <stdio.h> main() {

int a,i,sum=0;

12

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

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

if(i%a==0) break; }

if(i==a) sum=sum+i; }

printf("%d",sum); }

5.选做题

(1)编程求1000以内的所有完数

(2)输入两个整数,求其最大公约数和最小

公倍数。

(3)编程求1000以内的所有完数和

(4)百马百担问题,有100匹马,驼100

担货,大马驼3担,中马驼2担,两批小马

驼1担,问有大中小马各多少?

(5)编程输出以下图案

* * * * * * * * * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

实验五 数组

一、实验目的

1. 掌握一维数组、的定义,赋值和输入输出的方法。 2. 掌握排序算法

3. 掌握二维数组的定义,赋值和输入输出的方法。 4. 掌握二维数组相关的基本算法 5. 掌握字符数组的定义和使用方法。 6. 掌握字符数组的基本算法。 二、实验要求

1. 分析整理运行结果,完成实验报告,要求报告书写字迹清晰,格式规范。 2. 实验报告中应包含运行结果及结果分析。 3. 最后给出实验总结及体会 三、实验内容与步骤

1.运行下面的C 程序。分析运行结果。 (1)main( ) {

char p1[20]="abcd";

char p2[20]="ABCD",str[50]="xyz";

strcpy(str+2,strcat(p1+2,p2+1)) printf("%s",str); } 运行结果:xycdBCD 结果分析:strcpy字符串复制, strcat字符串连接

(2)#include <stdio.h>

void main()

{

int num[5]={1,2,3,4,5};

int i;

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

printf(“%4d”,num[i]);

} 运行结果:1 2 3 4 5 -36 结果分析:没有num[5]这个数组元素 2.程序填空 (1)将一个字符串按逆序重新存放,并输出。 #include "stdio.h" main()

{

char a[20];

int n,i,t;

gets(a); for(i=0;i<n/2;i++)

puts(a);

}

运行结果:输入abcde输出edcba

结果分析:strlen求字符串长度

13

(2)给出以下形式数据,计算各行之和,124

615800并存入一个一维数组中。 main() { int a[3][3]={{1,2,4},{6,1,5},{8,0,0}},b[3]={0};

int i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) for(i=0;i<3;i++) } 运行结果:7 12 8 结果分析:数组b中元素用来表示a中各行元素之和 3.程序改错 上机调试下面的程序,记录系统给出的出错信息,改正后写在对应错误代码行后面。 (1)已知二维数组形式如下:求主对角线上元素之和。

59101246781123201 324014①main() ②{int a[i][j];

————> int a[4][4]; ③ int i,j,sum; ————> int i,j,sum=0; ④ for(i=0;i<4;i++) ⑤ for(j=0;j<4;j++) ⑥ scanf(“%d”,a[i][j]);

————> scanf(“%d”,&a[i][j]); ⑦ for(i=0;i<4;i++) ⑧ sum=sum+a[i][j];

————> sum=sum+a[i][i]; ⑨ printf(“SUM=%d”,sum); ⑩}

运行结果:sum=45 结果分析:一条对角线

(2)从键盘输入一个字符串“how are you”,并将字符串原样输出。

①main() ②{char f[ ];

————> char f[20 ]; ③scanf(“%s”,f)

————>gets(f); ④printf(“%s”,f); ⑤} 运行结果:输入how are you输出how are you 结果分析:gets字符串输入函数

(3)比较两个字符串的大小,如果相等输出equal,如果不相等输出unequal.

①main()

②{char s1[10],s2[10]; ③ gets(s1);get2(s2);

④ if(s1=s2) printf(“equal”); ————> if( (s1,s2)==0) ⑤ else printf(“unequal”); ⑥ }

运行结果:输入the回车the输出equal 结果分析:strcmp字符串比较函数

4.程序设计

(1)定义一个数组长度的整型数组,例:int a[10]。

1)使用循环分别为数组元素赋初值。 2)实现数组元素初始值的输入。 3)分别对数组元素静态初始化。 4)实现数组元素值的输出。

1)int a[10];

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

scanf(“%d”,&a[i]);

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

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

(2)求出10个数的平均数和最大数。

#include<stdio.h> main() {

14

int a[10],i,s=0,m; float b;

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

{

scanf("%d",&a[i]); printf("%d ",a[i]); s=s+a[i]; } b=s/10.0; m=a[0];

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

{

if(m<a[i])

m=a[i];

}

printf("%d,%f",b,m); }

(3)从键盘中输入十个数,按照由小到大的顺序排序,并输出结果。

#include<stdio.h> main() {

int a[10],i,,j,n,t; for(i=0;i<=9;i++) scanf("%d",&a[i]); for(i=0;i<9;i++) for(j=i+1;j<=9;j++) if(a[i]>a[j]) {

t=a[i]; a[i]=a[j]; a[j]=t; }

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

(4)编程将二维数组a的行和列元素互换,存到二维数组b中。

#include<stdio.h> main() {

int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j;

printf(“array a:\n”); for(i=0;i<=1;i++) {

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

printf(“%d”,a[i][j]); b[j][i]=a[i][j]; }

printf(“\n”); }

printf(“array b:\n”); for(i=0;i<=2;i++)

{

for(j=0;j<=1;j++) printf(“%d”,b[i][j]); printf(“\n”);

} }

(5)编程打印以下的杨辉三角形(要求打印出10行) 1 1 1 1 2 1 1 3 3 1

1 4 6 4 1 1 5 10 10 5 1

#include<stdio.h> main() {

int i,j;

int a[10][10]; for(i=0;i<10;i++) {

a[i][0]=1; a[i][i]=1; }

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

a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<10;i++) {

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

printf("\n"); } }

(6)编写程序,求一个3*3距阵的两条对脚线元素之和。 #include<stdio.h> main()

{ int a[3][3]={ 1,2,3, 4,5,6, 7,8,9 }; int i,j,s=0; for(i=0;i<=2;i++) for(j=0;j<=2;j++) if(i==j||i+j==2) s=s+a[i][j]; printf("%d",s); }

5.选做题

已有一个已排好序的数组,今输入一个数,如何按原来排序的规律将它插入数组中。

15

实验六 函数的定义与应用

一、实验目的

1. 掌握C语言函数定义及调用的规则。 2. 了解递归函数的定义方法。

3. 掌握数组作为函数参数的定义方法 4. 熟练灵活运用函数解决实际问题 二、实验要求

1. 分析整理运行结果,完成实验报告,要求报告书写字迹清晰,格式规范。 2. 实验报告中应包含运行结果及结果分析。 3. 最后给出实验总结及体会 三、实验内容与步骤

1、读下面程序,写出运行结果,并对结果进行分析。

float y; (1)void f(int x,int y)

y=fac(n); {

printf(“%d!=%f\n”,n,y); x=x+1;

} y=y+1;

运行结果:4!=24.000000 }

main() 结果分析:递归求阶乘 { int a=1,b=2; (4)int func(int a,int b) f(a,b); { printf(“%d,%d\n”,a,b); return(a+b); } } 运行结果:1,2 main() 结果分析:函数的值传递是单向的。 { int x=2,y=5,z=8,r;

r=func(func(x,y),z); (2)void fun(int a)

printf(“%d\n”,r); {

} a=a+3;

运行结果:15 printf(“%d,”,a);

} 结果分析:函数本身也可是作为参数 main() { (5)fun(int a,int b,int c) int a=3; { fun(a); c=a*b; printf(“%d\n”,a); } } main( ) 运行结果:6,3 { 结果分析:函数的值传递是单向的值传递 int c; fun(2,3,c);

printf(“%d\n”,c); (3)float fac(int n)

} {

运行结果:887 float f;

if(n<0) 结果分析:函数的值传递是单向的值传递

printf(“error!”); 所以C并没有赋上真正的值

else

if(n==0||n==1) 2.程序填空 f=1;

(1)从键盘输入任意一个数,用函数计算

else

它的阶乘 f=fac(n-1)*n;

int f(int a) return(f);

{ }

int i,t=1; main()

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

t=t*i; int n=4;

16

; }

main() {

int x;

scanf(“%d”,&x); printf(“%d”,f(x)); }

运行结果:输入4输出24 结果分析:return返回函数值

3.程序改错

上机调试下面的程序,记录系统给出的出错信息,改正后写在对应错误代码行后面,并指出出错原因。 (1)用函数求两实数之积 ① float up(float,float); ② main() ③{float a,b;

④scanf(“%f,%f”,&a,&b);

⑤printf(“%f”,up(float a,float b)); } ————> printf(“%f”,up( a, b)); } ⑥float up(float x,float y) ⑦ {return(x*y);}

运行结果:输入1,2输出2.000000 结果分析:函数调用时实际参数前不加类型 (2)函数求两整数的最大值

①max(int a,int b);

————> max(int a,int b) ②{return(a>b?a:b);} ③main() ④{int x,y;

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

⑥printf(“max=%d\n”,max(x,y));} 运行结果:输入12,输出max=2 结果分析:定义函数时函数首部无分号 (3)用函数求两实数之和

① #include<stdio.h> ② main()

③ {int add(float,float);

————>{float add(float,float); ④ float a=10.0,b=20.0,c; ⑤ c=add(a,b);

⑥ printf(“c=%f\n”,c);} ⑦ float add(float i,float j) ⑧ {float k; ⑨ k=i+j; ⑩ return(k);

运行结果:c=30.000000 结果分析:函数值类型要对应 4.程序设计

17

(1)编写自定义函数用以求三个整数中最大的数,a、b、c作为参数传递给函数,最大数在主函数中输出。 程序代码:

int max(int a,int b,int c) { int d=a; if(d<b) d=b; if(d<c) d=c; return(d); }

main() {int a,b,c;

scanf(“%d%d%d”,&a,&b,&c); printf(“%d”,max(a,b,c)); }

(2)有一个函数,定义如下: 2x-1 (x<0) 2x (10>x>=0)

3x+1 (x>=10)

程序代码:

int f(int x) {int y;

if(x<0) y=2*x-1; else if(x<10) y=2*x;

else y=3*x+1; return(y); }

main() {int x,y;

scanf("%d",x); y=f(x);

printf("%d",y); }

(3)试着编写一函数求1+2+3…+n 程序代码:

int sum(int n) { int s=0,i;

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

return(s);

}

main() { int n;

scanf("%d",&n); printf("%d",sum(n)); }

(4)编写一个函数,求出一个正整数的所有因子。如72=2*2*2*3*3 程序代码:

#include "stdio.h" void yinzi(int n) { int i=2;

printf("%d=",n);

while(n!=1) { if(n%i==0)

{ printf("%d",i); n=n/i;

if(n!=1) printf("*"); }

else i++; } }

main() { int n;

scanf("%d",&n); yinzi(n); }

(5)试着编写一函数判断某数是否是水仙花数

程序代码:

int shuixian(int n ) {int a,b,c; a=n/100; b=n/10%10; c=n%10;

if(a*a*a+b*b*b+c*c*c==n) return(1);

else return(0); }

main() {int n;

scanf("%d",&n);

if(shuixian(n)==1) printf("yes"); else printf("no"); }

(6)试着编写一函数判断某数是否是完数 程序代码:

void wanshu(int n) { int i,m=0

for(i=1;i<n;i++) if(n%i==0) m=m+i;

if(m==n) printf(“yes”); else printf(“no”); }

main() { int n;

scanf(“%d”,&n); wanshu(n); } (7)试着编写一函数判断某数是否是素数,然后调用求出100以内所有素数 程序代码:

int sushu(int n) {int i;

18

for(i=2;i<n;i++) if(n%i==0) break;

if(i>=n) printf("%d\n",n); }

main() { int n;

for(n=2;n<=1000;n++) sushu(n);

}

(8)若将某一素数的各位数字的顺序颠倒后得到的数仍是素数,则此素数为可逆素数。编写一个判断某数是否为素数的函数,在主函数中输入一个整数,在调用此函数进行判断。 程序代码:

#include "stdio.h" int sushu(int n) {int i;

for(i=2;i<n;i++) if(n%i==0) break; if(i>=n) return(1); else return(0); }

main()

{ int n,a=0,b; scanf("%d",&n); if(sushu(n)==1) { while(n!=0) { b=n%10; n=n/10; a=a*10+b; }

if(sushu(a)==1) printf("是可逆素数"); else printf("不是可逆素数"); }

else printf("不是素数"); }

实验七 指针的定义和简单使用

一、实验目的

1. 掌握指针的概念,熟悉指针的定义和使用方法。 2. 掌握指针与函数的关系。

3. 熟练掌握掌握指针与数组的关系。 4. 掌握字符指针的使用方法。 二、实验要求

1. 分析整理运行结果,完成实验报告,要求报告书写字迹清晰,格式规范。 2. 实验报告中应包含运行结果及结果分析。 3. 最后给出实验总结及体会 三、实验内容

1.读下面程序,写出运行结果,并对结果进

行分析。

(1)main( )

{

int a[ ]={2,4,6,8,10},y=1,x,*p;

p=&a[1];

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

y+=*(p+x);

printf(“%d\n”,y);

} 运行结果:19

结果分析:1+a[2]+a[3] +a[4 ]

(2)void fun(int *n)

{

while((*n)- -);

printf(“%d”,++(*n));

}

void main( ) { int a=100; fun(&a); } 运行结果:0

结果分析:*n为100当其为0结束循环,结

束后值为-1

(3)main( )

{

char a[10]={9,8,7,6,5,4,3,2,1},*p=a+5;

printf(“%d”,*- -p);

}

运行结果:5

结果分析:*--p为a+4

(4)void fun(int * a,int * b)

{

int *k;

k=a;a=b;b=k;

}

void main( )

{

19

int a=3,b=6,*x=&a,*y=&b; fun(x,y) printf(“%d,%d”,a,b); } 运行结果:3,6 结果分析:交换地址 (5)main( ) {

int a[ ]={1,2,3,4,5,6,7,8,9,0},*p; p=a; printf(“\n%d”,*p+9); } 运行结果:10 结果分析:*p为1 (6)#include <stdio.h> main() { char *s=“COMPUTER”; char c; printf(“which style you want to

\n”); printf(“capital (c) or uncapital (u);”); c=getchar(); if(c== c ) puts(s);

else

{s=“computer”; puts(s); }

}

运行结果:which style you want to capital(c) or uncapital(u);

输入c输出COMPUTER

输入u输出computer 结果分析:puts字符串输出函数 (7)#include <stdio.h> main( ) { static char a[ ]=”language”,b[ ]=”program”;

本文来源:https://www.bwwdw.com/article/af4i.html

Top