程序设计基础(c)作业_第1页
程序设计基础(c)作业_第2页
程序设计基础(c)作业_第3页
程序设计基础(c)作业_第4页
程序设计基础(c)作业_第5页
已阅读5页,还剩13页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

第1章c语言的基本构成

一、选择题

1.(A)是构成C语言程序的基本单位。

(A)函数(B)过程

(C)子程序(D)文件

2.(C)是C语言提供的合法的数据类型关键字。

(A)Float(B)signed

(C)integer(D)Char

3.以下选项中不合法的用户标识符是(A)。

(A)abc.c(B)file

(C)Main(D)PRINTF

4.以下选项中不合法的用户标识符是(C)。

(A)123(B)printf

(C)A$(D)Dim

5.合法的C语言长整型常数是(A)。

(A)0L(B)5712700

(C)0.054838743(D)2.1869el0

6.C语言中,要求运算数必须是整型的运算符是(A)。

(A)%(B)/

(C)<(D)!

7.以下选项中正确的整型常量是(A)。

(A)12.(B)—20

(C)1,000(D)0458

8.以下选项中不正确的实型常量是(B)。

(A)2.607E-1(B)0.8103e2.

(C)77.77(D)456e-2

9.C语言中运算对象必需是整型的运算符是(D)。

(A)\(B)+

(C)*(D)%

二、程序调试题

1.编辑、调试以下程序

步骤1:在VisualC++环境下新建文件可用[开始]f[程序]—[MicrosoftVisualC++6.0]-

[MicrosoftVisualC++6.0]—[文件]-[新建]—[文件]-[C++SourseFile],输入文件

名exl-l.c,程序代码如下:

#include<stdio.h>/*文件预处理,包含标准输入输出库,程序可调用输入、输出函

数*/

intadd(intx,inty)

intz;

z=x+y;

returnz;

}

intmain()

{

intadd(int,int);/*函数的说明,告诉系统在主函数中要调用add函数*/

inta,b,c;/*变量的定义*/

scanf("%d%d\n”,&a,&b);

c=add(a,b);/*函数调用*/

printf("%d+%d=%d\n”,a,b,c);

/*调用系统输出函数printf,%(1为格式控制符,依次用后面的变量值填充,以整数形

式输出*/

请思考文件exl-l.c由几个函数构成?调用了那几个系统函数?此程序中用到了哪几个

保留字?哪几个用户自定义标识符?

保留字:int,标识符:add,main,scanf,printf,a,b,c0

步骤3:

编译并运行程序,程序运行时输入两个整数,2040,观察程序运行的结果。20+40

=60

2.编辑、调试以下程序

步骤1:在VisualC++环境下新建文件可用[开始]f[程序]一[MicrosoftVisualC++6.0]

[MicrosoftVisualC++6.0]—[文件]f[新建][文件]-[C++SourseFile],输入文

件名exl-2.c

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

#include<stdio.h>/*文件预处理,包含标准输入输出库,程序可调用输入、输出函

数*/

#include<ex1-2-2.c>

intmain()

(

intand(int,int);/*函数的说明,告诉系统在主函数中要调用and函数*/

intor(int,int);/*函数的说明,告诉系统在主函数中要调用and函数*/

inta,b,c;/*变量的定义*/

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

c=and(a,b);/*函数调用*/

printf("%d&&%d=%d\n”,a,b,c);

/*调用系统输出函数printf,%d为格式控制符,依次用后面的变量值填充,以整数形式

输出*/

c=or(a,b);/*函数调用*/

printf("%d||%d=%d\n”,a,b,c);

步骤3:[文件]-[新建]-[文件]-[C++SourseFile],输入文件名exl-2-2.c,源程序代

码为:

intand(inta,intb)

{

intc;

c=a&&b;

returnc;

}

步骤4:[文件]-[新建]-[文件]-—[C++SourseFile],输入文件名exl-2-3.c,源程序代码为:

intor(inta,intb)

intc;

c=a||b;

returnc;

}

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

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

2040

20&&40=1

20||40=1

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

第2章输入输出程序设计

1.用printf输出一个中空的五角星。

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

3.从键盘输入十六进制整数,转化为八进制数输出。

4.只定义两个整型数据并赋值,实现两个整型数的互换。

5.从键盘上输入一个整数,分别输出8、16进制数的程序。

6.从键盘上输入一个整数,分别输出它的个位数,十位数,百位数。

7.以下程序输出结果是()。

#include<stdio.h>

voidmain()

(

inti=010,j=10;

printf("%d,%d\nn,++i,j一一);

)

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

9.从键盘输入一个角度x,求10*sin(x)的值。

第3章循环程序设计

1.执行语句for(i=0;i++<5;);后,变量i的值是(b)。

(A)6(B)5

(C)4(D)0

2.若inti=0;下列语句计算1+2+…+10的是()o

(A)while(s+=i);(B)for(;i<=10;i++,s+=i)

(C)for(;i<=10;s+=i,i++)(D)for(;i<9;i++,s+=i)

3.若inti,x;贝(J语句for(i=x=0i<9;i+=++x);的循环体要执行()次。

10.以下不是死循环的语句是()o

(A)for(;;x++);(B)while(1){x++};

(C)do{i++;}while(1)(D)for(x=-10;x++;)

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

inti,j=3;

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

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

for(inti=0;i<;)

printf("%d”,)

6.写出以下程序运行的结果,此程序实现了什么功能?

#include<stdio.h>

voidmain()

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

inti,count=0;

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

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

elsecontinue;

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

)

7.写出以下程序的功能。

#include<stdio.h>

voidmain()

(

inta[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-l];

a[10-k-l]=tmp;

)

)

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

#include<stdio.h>

voidmain()

(

inti,j;

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

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

printf(nn);

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

printf(H*n);

printf(n\nH);

)

)

#include<stdio.h>

#include<math.h>

voidmain()

(

intizj;

for(i=4;i>-5;i--)

(

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

printf(nn);

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

printf(n*n);

printf("\n");

)

)

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

(1)

#include<stdio.h>

voidmain()

I

inti,s;

i=l;s=0;

while(i<=100);

s=s+i;

i++;

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

I

(2)

#include<stdio.h>

voidmain()

I

inti,s;

i=l;

s=0;

while(i<=100)

s=s+i;

i++;

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

I

(3)

#include<stdio.h>

voidmain()

inti=l,s;

while(i<=100);

i++:

}

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

)

10.输入一个基数,例如输入9,输出为:求1*3*……*9的值。输出为:1*3*5*7*9=945

11.输入一个5〜10之间的整数n,求l!+2!+3!+...+n!。例如输入5,输出为:1!+2!+3!+...+5!

=153

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

1

12

123

1234

12345

123456

1234567

12345678

123456789

13.求2+4+6+....+98+100的和,用多种for表达式来完成。

14.输入一行字符,统计它有多少个字母?

第4章分支程序设计

1.输入若干整数给X,使用if语句输出x的绝对值,当输入0时结束。

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

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

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

数。

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

x+5x<1

2x1<x<10

3x>10

6.根据输入的百分制按五分制的成绩输出。百分制与五分制之间的关系见下表。

百分制五分制

90〜1005

80〜894

70〜793

60〜692

<601

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

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

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

星期1:blue

星期2:red

星期3:white

星期4:yellow

星期5:green

9、用switch完成:从键盘输入A、B、C、D四个等级中的一个,转化输出

等级输出

A优秀

B良好

C中等

D及格

E不及格

第5章数组及其应用

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

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

3.采用折半查找,在数组2母17固={2,3,20,58,72,76,78,87,90,900}中,找到87,然后进行删

除。

第6章函数及其应用

练习与实践

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

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

#include<stdio.h>

floataver(inta[])

(

intk,sum=0;

floatave;

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

sum+=*(a+k);

ave=(float)sum/10;

return(ave);

)

intmain()

(

floatave;

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

ave=aver(b);

nn

printf(ave=%f\nrave);

}

提示:数组b的首地址传递给形参a,*(a+k)就是数组元素b[k].

2.阅读程序,写出程序的执行结果。

#includeb<stdio.h>

ac

voiidtbcharstr[1)

na

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

if(str[a]!=*cz)

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

str[b]=*\0*;

}

intmain()

{

charstr[]="abcdef";

abc(str);

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

return0;

提示:数组str的首地址传递给形参str,str[a]就是实参中的数组元素str[a],当

数组元素不为,c,时进行复制。

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

#include<stdio.h>

intsort(intb[],intn,intx)

(

intk;

for(k=n-l;k>=0;k一一)

if(b[k]<x)

b[k+l]=b[k];

else

break;

b[k+1]=x;

return0;

}

intmain()

{

inti,j;

staticinta[5]={8,5,4,1,6};

intb[8];

b[0]=a[0];

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

(

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

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

printf(n%dH,b[i]);

printf(n\nn);

}

return0;

}

提示:循环体中

if(b[k]<x)

b[k+l]=b[k];

else

r㊀ak,

如果b[k]<;成立,执行语句b[k+l]=b[k];表示数组元素b向后移,不满足时插入X,

即从大到小排序。

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

#include<stdio.h>

intfun(intx)

{intp;

if(x==0||x==l)

return3;

else

p=x-fun(x-2);

returnp;

}

intmain()

(

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

return0;

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

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

#include<stdio.h>

intf(intn)

(

if(n>=10)

f(n/10);

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

return0;

)

intmain()

(

f(1234);

printf(n\n");

return0;

)

提示:在函数f中,程序运行借助了堆栈,依次入栈的数据分别为1234、123、12,最后

n=l,n对8取余输出,然后数据依次出栈对8取余输出。

二、程序设计

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

提示:for(y=1,i=O;i<n;i++)

y=y*x;

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

提示:for(s=0,i=0;i<n;i++)

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

if(i==j)

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

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

提示:先求字符串str的长度n,for(i=0标n/2;i++){a[i]与a[n-l-i]交换}

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

字符串;否则返回空的值。

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

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

str[m+i]='\O';

5.编写一个程序,从键盘输入的字符串,删去非数字字符,转换成整型数输出。

提示:for(s=0,i=0,j=0;str[i];i++)

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

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

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

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

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

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

#include<stdio.h>

intx;

voidfun()

(

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

)

voidmain()

(

intx=l;

(

externintx;

printf(”%d,“,++x);

)

fun();

)

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

(

externintx;

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

)

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

if(x==l)

{intx=2;

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

}

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

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

#include<stdio.h>

intkk()

{intx=4;

staticinty;

y=5;

x*=2;

y*=2;

return(x+y);

)

voidmain()

{intj,s=0;

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

s=kk();

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

)

提示:虽然两次调用函数kk(),但变量定义语句staticinty;只执行一次,而变量赋值语句

每次都要执行。

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

#include<stdio.h>

intt()

(

intx=0;

staticinty=4;

y+=++x;

returnx+y;

)

voidmain()

{

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

)

提示:语句printf("%d\n",(t(),t()));中(t(),t())属于“,”号表达式,即两次调

用函数t(),在函数七()中,y为静态内部变量,因而语句staticinty=4;只执行一次。

第8章文件

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

请补全程序。

#include<stdio.h>

intmain()

(

FILE*fp;

charex;

if((fp=fopen(£1)))==NULL)

return0;

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

fputc(ex,fp);

(2);

return1;

)

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

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

#include<stdio.h>

intmain()

{FILE*fp;

longnum=0;

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

(

printf("Can'topenfi1e!\n");

exit(0);

)

while((lj)

fgetc(fp);

num++;

}

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

fclose(fp);

return1;

)

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

3.以下程序由终端键盘输入一个文件名,然后把从终端键盘输入的字符,依次存放到该文件

中,用#作为结束输入的标志,请补全程序。

#include<stdio.h>

voidmain()

(

FILE*fp;

charch,fname[10];

printf("Inputthenameoffi1e\n");

gets(fname);

if{(fp=)==NULL)

{

printf("Cannotopen\n");

exit(0);

)

printf("Enterdata\n");

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

fputc(,fp);

fclose(fp);

)

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

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

程序。

#include<stdio.h>

structrec

{inta;

floatb;};

voidrecout(FILE*fp)

{structrecr;

do

{fread((1),sizeof(structrec),(2),fp);

if((3))

(4);

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

}while(1);

)

voidmain()

{FILE*fp;

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

recout(fp);

fclose(fp);

)

提示:在fread语句中,(1)中为存放所读出结构数据的内存地址,当然此数据是赋给变量r,(2)中

是读出结构体变量数据的个数,(3)是与循环中止有关的判断,(4)为中止循环。

5.从键盘输入一个字符串,并逐个将字符串的每个字符传送到磁盘文件“ll.txt”中,字符串

的结束标记为

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

提示:

7.把文本文件ll.txt中的数字字符复制到文本文件12.txt中。

8.x从。到360度的sin(x)值写入到文件16.txt中,并将大于0的值显示在屏幕上。

第9章指针与数组

1.下列程序输出的结果是()。

#include<stdio.h>

voidf(int*x)

(

*x=10;

)

voidmain()

(

inta,*p=&a;

f(P);

printf(n%dn,++(*p));

)

(A)输出的值是随机值(B)因输出语句错误而不能执行者

(C)输出值为10(D)输出值为11

提示:指针x指与指针p指向同一个变量,10赋给指针x所指的地址上的内容,++(*p)

是指指针p所指地址上内容++。

2.下列程序片段中不正确的字符串赋值或初始化方式是()=

(A)char*str;str="string";

(B)charstr[7]={'s7t','r','i',,n','g','\0'};

(C)charstr[10];str="string";

(D)charstr[]="string";

提示:字符串赋值只能在初始化时进行。

3.如有定义:intx=2,*p=&x;以下哪些表达式的含义是不正确的。

(A)*&p(B)*&x(C)&*p(D)&*x

提示:指针可以作取地址运算,变量不能作取内容运算。

4.如有定义inta[5];(其中:0<=i<5),不能表示数组元素的是()。

(A)*(a+i)(B)a[5](C)a[0](D)a[i]

提示:数组元素的下标从0开始。

5.若有以下定义和语句,inta[10],i;且0<=i<10,则对数组元素地址的正确表示是()。

(A)a++(B)(a+1)(C)*(a+1)(D)&a

提示:一旦数组定义,数组的首地址是一个常量,不能作++运算,而a+i表示数组第i个元

素的地址。

6.有以下定义及语句,则对数组a元素的不正确引用的表达式是()。

inta[4][5];*p[2],j;

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

p[j]=a[j];

(A)p[0][0](B)*(a+3)[4]

(C)*(p[lJ+2)(D)*(&a[0][0]+3)

提示:p为指针数组,此题中a[i][j]>p[i][j].*(p[i]+j)>*(*(p+i)+j)也都能表示数组元素,&a[OJ[O]

等同于a[0]+0。

二、程序阅读与填空题

1.分析下列程序,输出结果是()=

#include<stdio.h>

voidmain()

(

int*pl,x=10;

float*p2,y=2.5;

pl=&x;

p2=&y;

printf(n%d,%f\n",++(*pl),(*p2)++);

)

提示:++都作用在内容上,前一项是先++再输出,后一项是先输出再++。

2.下列程序输出结果是()。

#include<stdio.h>

voidmain()

(

inta[]={1,2,3,4,5,6},*p=a;

printf("%d,%d\nn,*p,*(p+3));

)

提示:语句*(p+3)+=2;指p+3的地址上的内容加2,然后输出p及p+3的地址上内容。

3.下列程序输出结果是()。

#include<stdio.h>

voidmain()

{

inta[]={1,2,3,4,5,6};

intx,y,*p;

P=&a[0];

x=*(p+2);

y=*(p+4);

printf("*p=%d,x=%d,y=%d\n",*p,x,y);

)

提示:p+2是指&a[2]。

4.下列程序输出结果是()。

#include<stdio.h>

voidmain()

(

inta[]={10,20,30,40,50,60};

int*p;

P=a;

printf("*%d,\n",*p);

printf(”*%d,\n",*(++p));

printf("*%d,\n",*++p);

printf(”*%d,\n”,*(p一));

P+=3;

printf(n*%d,%d\nn,*p,*(a+3));

)

提示:*(++p)、*++p都表示指针p向大地址方向移动,然后再取内容,要注意的是后一语句的输出

受前一语句的影响。

5.下列程序输出的结果是()。

#include<stdio.h>

voiddel(char*str)

(

inta,b;

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

if(*(str+a)!=1)

*(str+b++)=*(str+a);

str[b]='\01;

)

voidmain()

(

charstr[]="abodefn;

del(str);

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

)

提示:在函数del中str+a地址上的内容不为字符,c,时不复制,实际上是指删除指针str所指的字

符串中的字符,cJ

6.以下程序输出的结果是()。

#include<stdio.h>

#include<string.h>

voidfun(char*w,intm)

(

chars,*pl,*p2;

pl=w;

p2=w+m-1;

while(pl<p2)

{s=*pl++;*pl=*p2一;*p2=s;}

)

voidmain()

(

chara[]="ABCDEFG";

fun(a,strlen(a));

puts(a);

)

提示:当执行s=*pl++;语句时,指针pl所指的地址上内容赋给s时,指针pl后移,语句*pl=*p2--;

指针p2所指的内容赋给pl所指的地址上后,p2前移后再执行*p2=s语句。

7.以下程序输出的结果是()。

#include<stdio.h>

voidmain()

(

inta[3][3]={{2,0,8},{4},{6}};

inti,*p=&a[0][0];

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

if(i==0)

a[i][i+l]=*p+l;

else

++P;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论