当前位置:文档之家› 程序设计基础(C)离线作业答案

程序设计基础(C)离线作业答案

浙江大学远程教育学院

《程序设计基础(C)》课程作业答案

第1章C语言的基本构成

程序调试题

1.编辑、调试以下程序

步骤1:在Visual C++环境下新建文件可用[开始]→[程序]→[Microsoft Visual C++6.0] →[Microsoft Visual C++6.0] →[文件] →[新建]→[文件] →[C++ Sourse File],输入文件名ex1-1.c,程序代码如下:

请思考文件ex1-1.c由几个函数构成2个?调用了那几个系统函数main,系统标识符scanf,printf?此程序中用到了哪几个保留字int?哪几个用户自定义标识符add,x,y,z,a,b,c?

步骤3:

编译并运行程序,程序运行时输入两个整数,20 40 ,观察程序运行的结果。20+40=60 2.编辑、调试以下程序

步骤1:在Visual C++环境下新建文件可用[开始]→[程序]→[Microsoft Visual C++6.0] →[Microsoft Visual C++6.0] →[文件] →[新建]→[文件] →[C++ Sourse File],输入文件名ex1-2.c

步骤2:在文本编辑器中输入以下C程序

码为:

步骤4:[文件] →[新建]→[文件] →[C++ Sourse File],输入文件名ex1-2-3.c,源程序代码为:

步骤5:点击编译图标,编译程序1-2.c

步骤4:点击执行图标,执行程序1-2.c ,当程序运行时,键盘输入20 40,按回车。

20 40

20 && 40=1

20 || 40=1

您可以输入其它的整数,观察程序的执行结果。

第2章输入输出程序设计

1.用printf输出一个中空的五角星。printf(“hello\n”);

2.仿照例子 2.2,定义一个字符数组,从键盘输入一字符串,然后输出的程序。char

str[80]=”hello,world”; printf(“%s\n”,str);

3.从键盘输入十六进制整数,转化为八进制数输出。Scanf(“%x”,&a);printf(“%o\n”,a) 4.只定义两个整型数据并赋值,实现两个整型数的互换。int x=3,y=6;temp=x;x=y;y=temp; 5.从键盘上输入一个整数,分别输出8、16进制数的程序。int a;scanf(“%d”,&a);printf”%-4o%-4x”,a,a);

6.从键盘上输入一个整数,分别输出它的个位数,十位数,百位数。int a;scanf(“%d”,&x);y1=y%10;y=y/10;y2=y%10;y=y/10;y3=y/10;

7.以下程序输出结果是(i=9;j=10 )。

#include

void main()

{

int i=010,j=10;

printf("%d,%d\n",++i,j-- );

}

8.运行程序,屏幕提示“您是一个学生吗”,您输入?y?或?n?进行回答,屏幕输出您的选项。

char,a;printf(“您是个学生吗\n”);scanf(“%s”,&a);if(a=?y?)printf(“您是个学生\n”);else printf(“您不是个学生\n”)

9.从键盘输入一个角度x,求10*sin(x)的值。#include float a,b;

scanf(%f”,&a);b=10*sin(a);printf(“b=%f\n”,b)

第3章循环程序设计

1.以下for语句的循环次数是多少?

int i,j=3;

for(;i=j;i--,j--) printf("%d",i);

2.下面的语句显示输出6行6列的整数数组h的主对角线上的所有元素,请补充完整:

for(int i=0;i< 6 ; i++ )

printf("%d", a[i][i] )

3.写出以下程序运行的结果,此程序实现了什么功能?计算数组中0的个数

#include

void main()

{ int a[10]={2,4,0,-5,10,6,-8,9,6,7};

int i, count=0;

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

if(a[i]==0) count++;

else continue;

printf("%d\n ", count);

}

4.写出以下程序的功能。反序

#include

void main()

{

int a[10]={2,4,0,-5,10,6,-8,9,6,7},tmp,k;

for (k=0;k<10/2;k++)

{

tmp=a[k];

a[k]=a[10-k-1];

a[10-k-1]=tmp;

}

}

5.写出以下程序运行后的输出结果。

#include

void main()

{

int i,j;

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

{

for(j=0;j

printf(" ");

for(j=0;j<2*(5-i)-1;j++)

printf("*");

printf("\n");

}

}

*********

*********

*********

*********(省略两行)

6.请改正下列程序的错误,改正后的程序写在右边的空白处,并上机调试检验。

(1)

#include

void main( )

{

int i,s;

i=1; s=0;

while(i<=100)

{ s=s+i;

i++;}

printf(“1+2+3+….+99+100=%d\n”,s);

}

(2)

#include

void main( )

{

int i,s;

i=1;

s=0;

while(i<=100)

{s=s+i;

i++;}

printf(“1+2+3+….+99+100=%d\n”,s);

}

(3)

#include

void main( )

{

int i=1,s;

s=0

while(i<=100) ;

{

s=s+i;

i++;

}

printf(“1+2+3+….+99+100=%d\n”,s);

}

7.输入一个基数,例如输入9,输出为:求1*3*……*9的值。输出为:1*3*5*7*9=945i=1;s=1;for(i=1;i<=9;i=i+2){s=s*i;}

8.输入一个5~10之间的整数n,求1!+2!+3!+...+n!。例如输入5,输出为:1!+2!+3!+ (5)

=153#include

int main()

{

int i;

int s=0;

int a;

int j,js;

printf("请输入一个5~10之间的整数:\n");

scanf("%d",&a);

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

{

for(j=1,js=1;j<=i;j++)

{

js*=j;

}

s+=js;

}

printf("%d的阶乘和=%d\n",a,s);

return 0;

}

9.在屏幕上输出以下内容

1

12

123

1234

12345

123456

1234567

12345678

123456789 #include

int main()

{

int i,j;

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

{

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

printf("%1d ",j);

printf("\n");

}

return 0;

}

10.求2+4+6+……+98+100的和,用多种for表达式来完成。for(i=2;i<=100;i+=2) sum+=i; 11.输入一行字符,统计它有多少个字母?#include

#include

int main()

{

char str[80];

gets(str);

int i=0;

int num=0;

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

if(str[i]>'a'&&str[i]<'z'||str[i]>'A'&&str[i]<'Z');

num++;

i++;

}

printf("%d\n",num);

return 0;

}

第4章分支程序设计

1.输入若干整数给x,使用if语句输出x的绝对值,当输入0时结束。#include int main()

{

int x;

scanf("%d",&x);

for(;x;scanf("%d",&x))

{

if(x<0) x=-x;

printf("%d",x);

}

return 0;

}

2.输入一批数,输出比相邻数大的数,当输入0时结束。#include

int main()

{

int a[10];

int i,num=0;

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

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

if(a[0]>a[1]) num++;

else if(a[9]>a[8]) num++;

else

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

{

if(a[i-1]a[i+1]) num++;

}

printf("比相邻数大的数据个数=%d\n",num);

return 0;

}

3.将输入字符的大写字符转换成小写字符输出,小写字符原样输出#include

int main()

{

char ch;

scanf("%c",&ch);

if(ch>'A'&&ch<'Z') ch=ch+32;

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

return 0;

}

4.输入一批字符,按回车时结束,统计小写字符、大写字符、数字字符、或其它字符的个数。#include

int main()

{

int xiaoxie=0;

int daxie=0;

int num=0;

int others=0;

char a;

while((a=getchar())!='\n')

{

if(a>'a'&&a<'z') xiaoxie++;

else if(a>'A'&&a<'Z') daxie++;

else if(a>'0'&&a<'9') num++;

else others++;

}

printf("小写=%d 大写=%2d 数字=%d 其他=%d\n",xiaoxie,daxie,num,others); return 0;

}

5.编写程序,计算分段函数:

10101110

325><<≤???????-+=x x x x x x y

if(x<=1) y=x+5;else if(x<10) y=2x;else y=3/(x-10);

6

if(x>90) printf(“wufenzhi=5);else(x>80)……..

7、用switch 完成:读入一个实数x ,再输入一整数,若输入是1,则计算sin(x),若输入2,

则计算cos(x),若输入3,则计算tan(x),若输入其他值,则显示错误信息。#include #include

int main()

{

int a=4;

float x;

printf("请输入一个实数\n");

scanf("%f",&x);

printf("请输入需要的计算1-sin;2-cos;3-tan\n");

scanf("%d",&a);

switch(a)

{

case 1:printf("%f\n",sin(x));break;

case 2:printf("%f",cos(x));break;

case 3:printf("%f",tan(x));break;

default:printf("信息出错\n");

}

return 0;

}

8、用switch完成:输入星期1 到星期5,输出它们对应的颜色

星期1:blue

星期2:red

星期3:white

星期4:yellow

星期5:green #include

int main()

{

char day;

scanf("%c",&day);

switch(day)

{

case 'm':printf("bule\n");break;

case 't':printf("red\n");break;

default:printf("error\n");break;

}

return 0;

}

9、用switch

#include

int main()

{

char ch;

scanf("%c",&ch);

switch(ch)

{

case 'A':printf("A=优秀\n");break;

case 'B':printf("B=良好\n");break;

default:printf("error");break;

}

return 0;

}

ch=getchar();putchar(ch);putchar('e');

第5章数组及其应用

1.从键盘输入12个数,分别为:900,2,3,58,34,76,87,72,90,20,78,30,找出最大和最小数。#include

int main()

{

int i,a[12],max,min;

printf("请输入12个数:\n");

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

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

printf("显示输入的数组:\n");

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

printf("%d ",a[i]);

printf("\n");

if(a[1]>a[0])

{

max=a[1];

min=a[0];

}

else

{

min=a[1];

max=a[0];

}

for(i=2;i<12;i++)

{

if(a[i]>max)

max=a[i];

if(a[i]

min=a[i];

}

printf("max=%d min=%d\n",max,min);

return 0;

}

2.采用遍历查找,在数组a[SIZE]={2, 3,20,58, 72, 76,78,87,90,900}中,找出偶数。

#include

int main()

{

int i,a[12],y;

printf("请输入12个数:\n");

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

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

printf("显示输入的数组:\n");

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

printf("%d ",a[i]);

printf("\n");

printf("偶数有:\n");

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

{

if(a[i]%2==0)

printf("%d \n",a[i]);

}

return 0;

}

3.采用折半查找,在数组a[SIZE]={2, 3,20,58, 72, 76,78,87,90,900}中,找到87,然后进行删除。#include

#define SIZE 10

int main()

{

int i,m,low=0,high=SIZE-1,mid,found=0;

int a[SIZE]={2,3,20,58,72,76,78,87,90,900};

scanf("%d",&m);

while((low<=high)&&(found==0))

{

mid=(low+high)/2;

if(m

high=mid-1;

else if(m>a[mid])

low=mid+1;

else found=1;

}

if(found==1)

{

printf("%d \n",mid);

for(i=mid;i

a[i]=a[i+1];

for(i=0;i

printf("%d,",a[i]);

printf("\n");

}

else

printf("not find\n");

return 0;

}

第6章函数及其应用

练习与实践

一、阅读程序,写出程序运行的结果。

1.写出以下程序的执行结果。81.000000

#include

float aver(int a[])求平均的函数

{

int k,sum=0;

float ave;

for(k=0;k<10;k++)

sum+=*(a+k);指针与数组

ave=(float)sum/10;

return (ave);

}

int main( )

{

float ave;

static b[]={78,89,98,76,78,45,88,81,92,85};

ave=aver(b);调用函数

printf("ave=%f\n",ave);

}

提示:数组b的首地址传递给形参a,*(a+k)就是数组元素b[k]. 2.阅读程序,写出程序的执行结果。abdef,删除字符串中的字母c #include

void abc( char str[] )

{int a, b ;

for(a = b = 0 ; str[a]!='\0'; a++ )

if(str[a]!= 'c’)

str[b++] = str[a];

str[b]='\0';

}

int main( )

{

char str[] ="abcdef" ;

abc(str);

printf("str[ ]=%s " , str );

return 0;

}

提示:数组str的首地址传递给形参str,str[a]就是实参中的数组元素str[a],当数组元素不为’c’时进行复制。

3.写出以下程序的执行结果。

5 5

4 4 4

1 1 1 1

1 1 1 1 1

#include

int sort(int b[],int n,int x)

{

int k;

for(k=n-1;k>=0;k--)

if(b[k]

b[k+1]=b[k];

else

break;

b[k+1]=x;

return 0;

}

int main( )

{

int i,j;

static int a[5]={8,5,4,1,6};

int b[8];

b[0]=a[0];

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

{

sort(b,i,a[i]);

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

printf("%d ",b[i]);

printf("\n");

}

return 0;

}

提示:循环体中

if(b[k]

b[k+1]=b[k];

else

break;

如果b[k]

4.写出以下程序的执行结果。7

#include

int fun(int x)

{ int p;

if(x==0||x==1)

return 3;

else

p=x-fun(x-2);

return p;

}

int main( )

{

printf("\n%d",fun(9));

return 0;

}

提示:fun(9)=9-fun(7),...,fun(1)=3

5.写出以下程序的执行结果,并说明其作用是什么?1432

#include

int f(int n)

{

if(n>=10)

f(n/10);

printf("%d",n%8);

return 0;

}

int main( )

{

f(1234);

printf("\n");

return 0;

}

提示:在函数f中,程序运行借助了堆栈,依次入栈的数据分别为1234、123、12,最后n=1,n对8取余输出,然后数据依次出栈对8取余输出。

二、程序设计

1.编写一个函数,计算x的n次的平方。

提示:for(y=1,i=0;i

y=y*x;

2.编写一个函数,计算对角线上元素之和。

提示:for(s=0,i=0;i

for(j=0;j

if(i==j)

s=s+a[i][j];

3.编写一个函数int invert(char str[ ]),将一个字符串的内容颠倒过来。

提示:先求字符串str的长度n,for(i=0;i

#include

#include

int invert(char str[])

{

int len,i;

char temp;

len=strlen(str);

for(i=0;i

{

temp=str[i];

str[i]=str[len-1-i];

str[len-1-i]=temp;

}

return 0;

}

int main( )

{

char str[80];

printf("请输入一组字符串\n");

scanf("%s",&str);

invert(str);

printf("转换后的字符串为:%s\n",str);

return 0;

}

4.编写函数,删除字符串中,从指定位置m开始的n个字符。删除成功,函数返回被删除字符串;否则返回空的值。

提示:for(k=m , i=0 ; str[i] ; i++)

str[m+i]=str[m+n+i];

str[m+i]=?\0?;

#include

#include

int del(char str[],char x,int n)

{

int len,i,j;

len=strlen(str);

for(i=0;i

{

if(str[i]==x)

{

for(j=i;j

str[j]=str[j+n];

}

}

return 0;

}

int main( )

{

int n;

char str[80];

char x;

printf("请输入一组字符串,需删除的字符及个数:\n");

scanf("%s %c %d",&str,&x,&n);

del(str,x,n);

printf("删除后的字符串为:%s\n",str);

return 0;

}

5.编写一个程序,从键盘输入的字符串,删去非数字字符,转换成整型数输出。提示:for(s=0 , i=0 , j=0 ; str[i];i++)

if(str[i]>=?0?&&str[i]<=?9?)

s=s*10+str[i]-…0?;

#include

#include

int ctoi(char str[])

{

int s,i;

for(s=0,i=0;str[i];i++)

{

if(str[i]>'0'&&str[i]<'9')

s=s*10+str[i]-'0';

else

s=s*1;

}

return s;

}

int main( )

{

int s;

char str[80];

printf("请输入一组字符和数字:\n");

scanf("%s",&str);

s=ctoi(str);

printf("删除并转换后的数组为:%d\n",s);

return 0;

}

6.用递归的方法编写一个函数sum(int n),求1至n的累加和。

提示:f(n)=n+f(n-1)

#include

int f(int n)

{

if (n==1)

{

return 1;

}

else

{

return n+f(n-1);

}

}

int main( )

{

int n;

printf("请输入需求和的个数:\n");

scanf("%d",&n);

printf("求和=%d\n",f(n));

return 0;

}

第7章变量存储类型与多文件系统

1.写出以下程序的执行结果。1,1

#include

int x;

void fun( )

{

printf("%d ",x++);

}

void main( )

{

int x=1;

{

extern int x;

printf("%d,",++x);

}

fun( );

}

提示:在函数fun中及语句块

{

extern int x;

printf("%d,",++x);

}

中使用的x是外部变量,在语句块:

if(x==1)

{int x=2;

printf("%d,",x++);

}

中使用的是刚刚定义x=2的变量。

2.写出以下程序的执行结果。18,18

#include

int kk( )

{ int x = 4 ;

static int y ;

y = 5 ;

x*= 2 ;

y*= 2;

return(x+y);

}

void main()

{ int j , s = 0 ;

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

{

s = kk ( );

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

}

}

提示:虽然两次调用函数kk(),但变量定义语句static int y ;只执行一次,而变量赋值语句每次都要执行。

3.写出以下程序的执行结果。

#include

int t( )

{

int x = 0 ;

static int y = 4 ;

y += ++x ;

return x+y;

}

void main( )

{

printf("%d \n",( t( ), t( ),t(),t() ));

}

提示:语句printf("%d \n",(t( ), t( )));中(t( ),t( ))属于“,”号表达式,即两次调用函数t( ),在函数t( )中,y为静态内部变量,因而语句static int y = 4 ;只执行一次。

第8章文件

1.下述程序从终端读入文本(用$作为文本结束标志)复制到一个名为out.dat的新文件中,请补全程序。

#include

int main()

{

FILE *fp;

char cx;

if((fp=fopen("out.txt","r+"))==NULL)

return 0;

while((cx=getchar( ))!='$')

fputc(cx,fp);

fclose(fp);

return 1;

}

提示:第1个空格是打开文件读,第2个空格是关闭文件。

2.下面的程序用来统计文件中字符的个数,请补全程序。

#include

#include

int main( )

{ FILE *fp;

long num=0;

if((fp=fopen("fname.dat","r"))==NULL)

{

printf("Can't open file!\n");

exit(0);

}

while( !feof(fp) )

{

fgetc(fp);

num++;

}

printf("num=%d\n",num);

fclose(fp);

return 1;

}

提示:第1个空格表示文件没有结束,循环将持续。

3. 以下程序由终端键盘输入一个文件名,然后把从终端键盘输入的字符,依次存放到该文件中,用#作为结束输入的标志,请补全程序。

#include

#include

void main( )

{

FILE *fp;

char ch,fname[10];

printf("Input the name of file\n");

gets(fname);

if((fp=fopen(fname,”r+”))==NULL)

{

printf("Cannot open\n");

exit(0);

}

printf("Enter data\n");

while((ch=getchar( ))!='#')

fputc(ch,fp);

fclose(fp);

}

提示:文件名是从键盘读入的,因而文件名是用变量表示的,文件是打开写。

4.下述程序从一个二进制文件中读入结构体数据,并把读出的数据显示在屏幕上。请补全程序。

#include

struct rec

{ int a;

float b;};

void recout(FILE *fp)

{struct rec r;

do

{fread( (1)&r ,sizeof(struct rec), (2) 1 ,fp);

if( (3) feof(fp) )

(4) break ;

printf("%d,%f",r.a,r.b);

}while(1);

}

void main()

{ FILE *fp;

fp=fopen("file.dat","rb");

recout(fp);

fclose(fp);

}

提示:在fread语句中,(1)中为存放所读出结构数据的内存地址,当然此数据是赋给变量r,(2)中是读出结构体变量数据的个数,(3)是与循环中止有关的判断,(4)为中止循环。

5.从键盘输入一个字符串,并逐个将字符串的每个字符传送到磁盘文件"l1.txt"中,字符串的结束标记为"#"。

#include

#include

int main()

{

FILE *fp;

int i;

char str[80];

gets(str);

if((fp=fopen("11.txt","r+"))==NULL)

{

printf("Cannot open\n");

exit(0);

}

for(i=0;str[i]!='#';i++)

fputc(str[i],fp);

fclose(fp);

return 0;

}

6.有一文本文件l1.txt,请编写一个程序将文件中的英文字母及数字字符显示在屏幕上。提示:#include

#include

int main()

相关主题
文本预览
相关文档 最新文档