2023年程序设计基础作业答案_第1页
2023年程序设计基础作业答案_第2页
2023年程序设计基础作业答案_第3页
2023年程序设计基础作业答案_第4页
2023年程序设计基础作业答案_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

千里之行,始于足下让知识带有温度。第第2页/共2页精品文档推荐程序设计基础作业答案《程序设计基础(C)》作业

第1章C语言的基本构成

一、挑选题

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

(A)函数(B)过程

(C)子程序(D)文件

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

(A)Float(B)signed

(C)integer(D)Char

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

(A)abc.c(B)file

(C)Main(D)PRINTF

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

(A)l23(B)printf

(C)A$(D)Dim

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

(A)0L(B)5712700

(C)(D)

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

(A)%(B)/

(C)/*文件预处理,包含标准输入输出库,程序可调用输入、输出函数*/#include

intmain()

{

intand(int,int);/*函数的说明,告知系统在主函数中要调用and函数*/intor(int,int);/*函数的说明,告知系统在主函数中要调用and函数*/inta,b,c;/*变量的定义*/

scanf("%d%d",

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

printf("%d

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

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

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

}

intand(inta,intb)

{

intc;

c=a

returnc;

}

intor(inta,intb)

{

intc;

c=a||b;

returnc;

}

步骤5:点击编译图标,编译程序

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

2040

20

printf("\t**\n");

printf("\t**\n");

printf("\t********\n");

printf("\t**\n");

printf("\t**\n");

printf("\t**\n");

printf("\t***\n");

printf("\t****\n");

printf("\t**\n");

}

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

#include

intmain(){

chars[255];

printf("请输入:");

scanf("%s",s);

printf("你输入的是:%s\n",s);

return0;

}

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

#include

intmain(){

inta;

printf("请输入一个十六进制数:");

scanf("%x",

printf("这个数转化为八进制数为%o\n",a);

return0;

}

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

#include

intmain(){

inta=10;

intb=20;

a=a^b;

b=b^a;

a=a^b;

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

return0;

}

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

#include

intmain(){

inta;

printf("请输入一个十进制数:");

scanf("%d",

printf("这个数转化为八进制数为%o\n",a);

printf("这个数转化为八进制数为%x\n",a);

return0;

}

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

#include

intmain()

{

inta;

scanf("%d",

printf("百位数为%d\n",a/100);

printf("十位数为%d\n",a%100/10);

printf("个位数为%d\n",a%10);

return0;

}

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

#include

voidmain()

{

inti=010,j=10;

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

}

8.运行程序,屏幕提醒“您是一个同学吗”,您输入’y’或’n’举行回答,屏幕输出您的选项。

#include

intmain()

{

chars;

printf("你是学生吗(Y/N):");

scanf("%s",

if(s=='Y'||s=='y')

{

printf("你是学生~~\n");

}

else

{

printf("你不是学生~~\n");

}

return0;

}

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

#include

#include

intmain()

{

inta;

scanf("%d",

doubler=10*sin(a);

printf("%f\n",r);

return0;

}

第3章循环程序设计

1.执行语句for(i=0;i++

voidmain()

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

inti,count=0;

for(i=0;i

voidmain()

{

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

for(k=0;k

voidmain()

{

inti,j;

for(i=0;i

voidmain(){inti,s;i=1;s=0;while(i

voidmain()

{

inti,s;

i=1;

s=0;

while(i

voidmain()

{

inti=1,s;

while(i

intmain()

{

inta,b;

b=1;

scanf("%d",

for(inti=1;i

intmain()

{

inta,b,c;

b=1;

c=0;

scanf("%d",

for(inti=1;i

intmain()

{

for(inta=1;a

intmain()

{

intsum=0;

for(inta=2;a

intmain()

{

intcount=0;

chars[255];

scanf("%s",s);

for(inti=0;i='a'

}

}

printf("%d",count);

return0;

}

第4章分支程序设计

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

#include

intmain()

{

intx;

scanf("%d",

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

}

else

{

printf("%d\n",-x);

}

}

return0;

}

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

#include

intmain()

{

inta;

intb=0;

scanf("%d",

b=a;

for(;a;scanf("%d",

}

b=a;

}

return0;

}

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

#include

intmain()

{

charc;

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

{

if(c>='A'

}

putchar(c);

}

return0;

}

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

#include

intmain()

{

charc;

intdx=0,xx=0,sz=0,qt=0;

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

{

if(c>='A'

}

elseif(c>='a'

}

elseif(c>='0'

}

else

{

qt++;

}

}

printf("包含大写字母%d个,小写字母%d个,数字%d个,其他字符%d个.\n",dx,xx,sz,qt);

return0;

}

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

10101110

325>

intmain()

{

doublex,y;

scanf("%f",

if(x

intmain()

{

inta;

scanf("%d",

if(a>90)

{

printf("5\n");

}

elseif(a>80)

{

printf("4\n");

}

elseif(a>70)

{

printf("3\n");

}

elseif(a>60)

{

printf("2\n");

}

else

{

printf("1\n");

}

return0;

}

7、用switch完成:读入一个实数x,再输入一整数,若输入是1,则计算sin(x),若输入2,则计算cos(x),若输入3,则计算tan(x),若输入其他值,则显示错误信息。

#include

#include

intmain()

{

inta,b;

scanf("%d,%d",

switch(a)

{

case1:printf("y=sin(x)=%f",sin(b));break;

case2:printf("y=cos(x)=%f",cos(b));break;

case3:printf("y=tan(x)=%f",tan(b));break;

default:printf("error");break;

}

return0;

}

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

星期1:blue

星期2:red

星期3:white

星期4:yellow

星期5:green

#include

intmain()

{

inta;

scanf("%d",

switch(a)

{

case1:printf("星期一:blue\n");break;

case2:printf("星期二:red\n");break;

case3:printf("星期三:white\n");break;

case4:printf("星期四:yellow\n");break;

case5:printf("星期五:green\n");break;

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

}

return0;

}

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

#include

intmain()

{

chara;

scanf("%s",

switch(a)

{

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

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

case'C':printf("中等\n");break;

case'D':printf("及格\n");break;

case'E':printf("不及格\n");break;

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

}

return0;

}

第5章数组及其应用

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

#include

intmain()

{

inta[12];

for(inti=0;imax)

{

max=a[j];

}

if(a[j]

#defineSIZE100

intmain()

{

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

for(inti=0;i

#defineSIZE11

#defineFOUND87

intmain()

{

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

intlow=0,high=SIZE-1,mid;

mid=(low+high)/2;

while(lowFOUND)

{

high=mid;

mid=(high+low)/2;

}

else

break;

}

for(intj=mid;j

floataver(inta[])

{

intk,sum=0;

floatave;

for(k=0;k

voidabc(charstr[])

{inta,b;

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

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

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

str[b]='\0';

}

intmain()

{

charstr[]="abcdef";

abc(str);

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

return0;

}

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

str[]=abdef

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

#include

intsort(intb[],intn,intx)

{

intk;

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

if(b[k]

intfun(intx)

{intp;

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

return3;

else

p=x-fun(x-2);

returnp;

}

intmain()

{

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

return0;

}

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

7

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

#include

intf(intn)

{

if(n>=10)

f(n/10);

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

return0;

}

intmain()

{

f(1234);

printf("\n");

return0;

}

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

1432

二、程序设计

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

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

intmain()

{

intx,n,y,i;

scanf("%d^%d",

for(y=1,i=0;i

intmain()

{

inta[10][10];

inti=0,j=0;

intsum=0;

for(i=0;i

intinvert(charstr[])

{

charch;

inti;

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

for(intj=0;j

intmain()

{

charstr[255];

intindex,num;

gets(str);

scanf("%d,%d",

inti=0,j=0;

charch;

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

for(j=0;ji)

{

str[0]='\0';

}

puts(str);

return0;

}

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

if(str[i]>=’0’

#include

intmain()

{

charstr[255];

gets(str);

inti=0,j=0;

ints=0;

charch;

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

{

if(ch>='0'

}

}

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

return0;

}

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

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

#include

intsum(intn)

{

inta=0;

if(n==1)

{

a=1;

else

{

a=n+sum(n-1);

}

returna;

}

intmain()

{

intn;

scanf("%d",

ints=sum(n);

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

return0;

}

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

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

#include

intx;

voidfun()

{

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

}

voidmain()

{

intx=1;

{

externintx;

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

}

fun();

}

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

{

externintx;

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

}

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

if(x==1)

{intx=2;

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

}

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

1,1

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

#include

intkk()

{intx=4;

staticinty;

y=5;

x*=2;

y*=2;

return(x+y);

}

voidmain()

{intj,s=0;

for(j=0;j

intt()

{

intx=0;

staticinty=4;

y+=++x;

returnx+y;

}

voidmain()

{

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

}

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

7

第8章文件

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

#include

intmain()

{

FILE*fp;

charcx;

if((fp=fopen("","a+"))==NULL)

return0;

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

fputc(cx,fp);

fclose(fp);

return1;

}

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

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

#include

intmain()

{FILE*fp;

longnum=0;

if((fp=fopen("","r"))==NULL)

{

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

exit(0);

}

while(!feof(fp))

{

fgetc(fp);

num++;

}

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

fclose(fp);

return1;

}

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

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

#include

voidmain()

{

FILE*fp;

charch,fname[10];

printf("Inputthenameoffile\n");

gets(fname);

if((fp=fopen("","a+"))==NULL)

{

printf("Cannotopen\n");

exit(0);

}

printf("Enterdata\n");

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

fputc(ch,fp);

fclose(fp);

}

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

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

#include

structrec

{inta;

floatb;};

voidrecout(FILE*fp)

{structrecr;

do

{fread(

if(feof(fp))

break;

printf("%d,%f",,;

}while(1);

}

voidmain()

{FILE*fp;

fp=fopen("","rb");

recout(fp);

fclose(fp);

}

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

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

#include

#include

voidmain()

{

FILE*fp;

charch;

fp=fopen("","ab+");

if(fp==NULL)

{

printf("Openfilefailed!");

exit(0);

}

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

{

fputc(ch,fp);

}

fclose(fp);

}

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

提醒:

#include

#include

voidmain()

{

FILE*fp;

charch;

fp=fopen("","rb");

if(fp==NULL)

{

printf("Openfilefailed!");

exit(0);

}

while(!feof(fp))

{

ch=fgetc(fp);

if(ch>='A'

}

}

fclose(fp);

}

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

#include

#include

voidmain()

{

FILE*fin,*fout;

charch;

fin=fopen("","rb");

fout=fopen("","ab+");

if(fin==NULL||fout==NULL)

{

printf("Openfilefailed!");

exit(0);

}

while(!feof(fin))

{

ch=fgetc(fin);

if(ch>='0'

}

}

fclose(fin);

fclose(fout);

}

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

#include

#include

#include

#definePI

voidmain()

{

FILE*fp;

doubley;

fp=fopen("","ab+");

if(fp==NULL)

{

printf("Openfilefailed!");

exit(0);

}

for(inti=0;i0)

{

fprintf(stdout,"%lf\n",y);

}

}

fclose(fp);

}

第9章指针与数组

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

#include

voidf(int*x)

{

*x=10;

}

voidmain()

{

inta,*p=

f(p);

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

}

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

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

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

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

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

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

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

(D)charstr[]="string";

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

3.如有定义:intx=2,*p=*p[2],j;

for(j=0;j

voidmain()

{

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

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

}

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

1,4

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

#include

voidmain()

{

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

intx,y,*p;

p=

x=*(p+2);

y=*(p+4);

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

}

提醒:p+2是指

int*p;

p=a;

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

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

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

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

p+=3;

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

}

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

*10

*20

*30

*30;

*50,40

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

#include

voiddel(char*str)

inta,b;

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

if(*(str+a)!='c’)

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

str[b]='\0';

}

voidmain()

{

charstr[]="abcdef";

del(str);

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

}

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

str[]=abdef

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

#include

#include

voidfun(char*w,intm)

{

chars,*p1,*p2;

p1=w;

p2=w+m-1;

while(p1{s=*p1++;*p1=*p2--;*p2=s;}

}

voidmain()

{

chara[]="ABCDEFG";

fun(a,strlen(a));

puts(a);

}

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

AGAAGAG

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

#include

voidmain()

{

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

inti,*p=

for(i=0;ia[mid])

low=mid;

else

returnmid;

}

return(-1);

}

提醒:用low、high、mid分离表示数组a低地址端、高地址端、中间元素的下标,只要低地址端下标小于高地址端下标循环向来持续,假如中间元素大于所查找的数,表示所查找的数在以low、high为边界的左侧,假如中间元素小于所查找的数,表示所查找的数在以low、high为边界的右侧,如都不是表示已找到。

9.下述函数从一个数组v中删除值为key的元素。数组的元素个数由指针n指明,请填空。

voiddelnode(doublev[],int*n)

{inti,j,k=-1;

for(i=*n-1;i>=0;i--)

if(v[i]==key)

{

k++;

for(j=i;j=0)

*n=*n-k

}

提醒:因为在第1个for循环中为i--,因而循环一定是从数组下标最大的元素*n-1开头,循环的条件是i>=0,假如找到要删除的元素,后面的元素依次向前移,向来移到最后v[*n-1],k标记删除的次数,*n

存放最后数组中元素的个数。

三、编程题

1.用指针的办法编写一函数,交换从键盘读入的两个整型数a,b。

voidswap(int*p1,int*p2)

{

inttemp;

temp=*p1;*p1=*p2;*p2=temp;

}

#include

温馨提示

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

评论

0/150

提交评论