C语言程序设计课后练习题答案带原题

阅读: 评论:0

2024年2月4日发(作者:)

C语言程序设计课后练习题答案带原题

一、简答题

1、程序设计(Programming)是根据要解决的问题,使用某种程序设计语言,设计出能够完成这一任务的计算机指令序列。程序设计是指设计、编制、调试程序的方法和过程。

程序=算法+数据结构+程序设计方法+语言工具和环境

2、程序设计语言,通常简称为编程语言,是一组用来定义计算机程序的语法规则。它是一种被标准化的交流技巧,用来向计算机发出指令。

语言处理程序把源程序翻译成语义等价的计算机能够识别的低级语言,它是在高级语言(或汇编语言)与计算机之间起到翻译作用的程序。经过语言处理程序处理后得的程序称目标程序。

3、程序设计的基本原则:正确性、有效性、鲁棒性、可理解性、可维护性、可移植性。

4、算法(Algorithm)是为解决某一具体问题而采取的确定的、有限的方法和步骤。

5、算法的基本特征:

有穷性(有限性)、确定性(唯一性)、可行性(能行性)、有0到多个输入、一个算法执行结束之后必须有数据处理结果输出。

6、自然语言描述法:用人们日常使用的语言来描述算法,称为算法的自然语言描述,特点是:存在很大缺陷,如果算法中含有多分支或循环操作,则很难表述清楚。此外,使用自然语言描述算法还很容易造成歧义;

程序流程图描述法:程序流程图(Program Flow Chart)是软件开发者最熟悉的一种算法表达工具,它独立于任何程序设计语言。它的优点是直观、清晰、易于掌握,便于转化成任何计算机程序设计语言。因此,它是软件开发者常用的算法表示方式;缺点:程序流程图的符号在使用过程中不容易规范,特别是在标准中没有严格规定流程线的用法,流程线能够指示流程控制方向的随意转移,很容易造成算法中操作步骤的执行次序混乱,而且不便于开发人员交流。

N-S图描述法:N-S图是1973年由美国学者和erman提出的一种新的流程图形式,N和S是两学位者姓氏的首字母。在这种流程图中,摒弃了带箭头的流程线。算法的具体内容都写在一个矩形柜内,框内又可以包含其他的从属框。

7、略

8、结构化程序设计是一种面向过程的设计思想,把程序定义为"数据结构+算法",它包括三种基本结构:顺序结构、选择结构和循环结构。

9、(1)使用程序设计语言中的顺序、选择、循环等有限的控制结构表示程序的控制逻辑;

(2)选用的控制结构只允许有一个入口和一个出口;

(3)程序语句组成容易识别的语句序列块,每块只允许有一个入口和一个出口;

(4)复杂结构的程序设计时,仅用嵌套的基本控制结构进行组合嵌套来实现;

(5)严格控制无条件转移(goto)语句的使用。

一、选择题

1-8、CABDDCCC

二、填空题

1、main {}

2、/* */

3、头文件

4、数据类型

5、函数首部 函数体

三、简答与程序设计

1、略

2、略

3、#include "stdio.h"

void main()

{

printf("********************************n");

printf(" C语言的学习要努力!n");

printf("********************************n");

}

4、#include "stdio.h"

void main()

{

int a,b;

printf("输入两个数值分别给 a,b:");

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

printf("%d-%d=%dn",a,b,a-b);

}

一、选择题

1~5:CBBCB

6~10:CDCCD

11-12:DB

二、填空题

1、16

2、b=i+1 c

3、i<=9 j%3!=0

4、1 3 2

5、j<=i f=f*j

三、程序设计题

1、void main()

{ int a,b;

scanf("%d",&a);

if(a/10000==a%10&&(a/1000%10)== (a%100)/10)

printf("%d",a);

}

2、void main()

{ int i=1,s=0,flag=1;

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

{ s=s+i*flag;

flag=flag*(-1);

}

printf("%d",s);

}

3、void main()

{ int n,i,s=1;

scanf ("%d", &n);

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

{ s=s*i;

}

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

}

4、#include

#include

int fun(float a,float b,float c)

{

if(b*b+c*c==a*a||a*a+c*c==

b*b||b*b+a*a==c*c)

return 1;

}

void main( )

{ float a,b,c;

printf("Please input three numbers:n"); scanf("%f%f%f",&a,&b,&c);

if( fun(a,b,c) == 1)

printf("Yesn");

else

printf("Non");

getch( ); }

5、void main()

{ int a,i,j,n,s=0,w=0;

scanf("%d,%d",&a,&n);

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

{ w=0;

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

{ w=w*10+a;}

s=s+w;

}

printf("%dn",s);

}

6、void main()

{int a,b,c;

for(a=1; ;a++)

{ b=(int)sqrt(a+100);

c=(int)sqrt(a+268);

if(b*b==a+100&& c*c==a+268)

{printf("%dn",a); break;}

}

}

7、void main()

{int x,y,z; /*x表示鸡翁,y表示鸡雏*/

for(y=1;y<=300;y++)

{ if(y%3!=0) continue;

for(x=1;x<=20;x++)

{if(100-x-y<0) continue;

if(x*5+(100-x-y)*3+y/3==100)

printf("%d,%d,%dn",x,100-x-y,y);

}

}

}

8、void main()

{ int i,s=0,w=0,n;

scanf("%d",&n);

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

{ w=0;

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

{w=w+j;}

s=s+w;

}

printf("%dn",s);

}

一、选择题

1-5、CCBDC 6-10、BCAAD 11-15、AABCC 16-20、ADDDD

二、填空题

1、i==j a[i][j]

2、j

3、k=i j=i max=a[k] a[k]=a[j] a[j]=max

4、b[i][j+1]=a[i][j] i=0 i<2 printf("n")

5、a[N][N] (i+1)*N-j

6、58

7、1 2 3

0 5 6

0 0 9

8、5 7 4 8 9 1

1 5 7 4 8 9

9 1 5 7 4 8

8 9 1 5 7 4

4 8 9 1 5 7

7 4 8 9 1 5

9、1 0 0 1 0

10、21

三、程序设计

1、#include "stdio.h"

void main()

{ int i,ave,sum=0,a[10];

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

{

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

sum=sum+a[i];

ave=sum/10;

}

printf("ave=%dn",ave);

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

{

if(a[i]

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

}

}

2、#include "stdio.h"

void main()

{

int i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105,162,18};

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

{ p=i;q=a[i];

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

if(q

if(p!=i)

{

s=a[i];a[i]=a[p];a[p]=s;

}

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

}

printf("ninput number:n");

scanf("%d",&n);

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

if(n>a[i])

{for(s=9;s>=i;s--) a[s+1]=a[s];

break;}

a[i]=n;

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

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

printf("n");

}

3、#include "stdio.h"

void main()

{

int i,n,a[5]={0};

printf("输入0到4之间的数,以-1结束!n");

scanf("%d",&n);

while(n!=-1)

{

switch(n)

{

case 0:a[0]++;break;

case 1:a[1]++;break;

case 2:a[2]++;break;

case 3:a[3]++;break;

case 4:a[4]++;break;

default:break;

}

scanf("%d",&n);

}

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

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

printf("n");

}

}

4、#include "stdio.h"

#define SIZE 30

void main()

{

float b[SIZE/5],sum=0;

int a[SIZE],i,j,k;

for(k=2,i=0;i

{ a[i]=k; k+=2; }

for(k=0,i=0;i

{ sum+=a[i];

j=i+1;

if((i+1)%5==0)

{ b[k]=sum/5;

sum=0;

k++;}

}

printf("The result is:n");

for(i=0;i

printf("%5.2f ",b[i]);

printf("n");

}

5、#include "stdio.h"

#define N 10

void main()

{

int i,j,a[N][N]={0};

for(i=0;i

for(j=0;j

{

if((i==j)||(j==0))

a[i][j]=1;

}

for(i=2;i

for(j=1;j

{

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

}

for(i=0;i

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

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

printf("n");

}

}

6、#include "stdio.h"

void main()

{

int

day[2][13]={{0,31,28,31,30,31,30,31,30,31,30,31,30},{0,31,29,31,30,31,30,31,30,31,30,31,30}};

int year,month,leap=0;

printf("请输入年份:");

scanf("%d",&year);

printf("请输入月份:");

scanf("%d",&month);

if(year%400==0||year%4==0&&year%100!=0)

leap=1;

printf("%d年%d月有%d天!n",year,month,day[leap][month]);

}

7、#include "stdio.h"

void main()

{ int i,j,a[5][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};

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

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

{

if(i>=j)

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

}

printf("n");

}

}

一、选择题

1~5:DBDAD

6~10:BCDCD

11~15:ADACA

16~20:DACBC

二、填空题

1、4 2

2、3 5

3、9911

4、7777654321

5、16

6、*pmax=*px

7、10

8、efgh

9、s-1 *s++

10、p+n

三、程序设计题

1、#include "stdio.h"

void main()

{

float f,*fpointer;

fpointer=&f;

scanf("%f",fpointer);

printf("%f",*fpointer);

}

2、#include

void output(char *s)

{

int i;

for(i=0;i<=strlen(s);i=i+2)

printf("%c",*(s+i));

}

void main( )

{char *s;

gets(s);

output(s);

}

3、void Input(int a[], int n)

{int i;

for(i=0;i

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

}

void Process(int a[], int n)

{int i,k,w,t,max,min;

max=min=a[0];

for(i=1;i

{if(max

if(min>a[i]) {min=a[i];w=i;}

}

t=a[k];a[k]=a[w];a[w]=t;

}

void Output(int a[], int n)

{int i;

for(i=0;i

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

}

void main( )

{int num[10],n=10;

Input(num, n);

Process (num, n);

Output(num, n);

}

4、#include

void main()

{

char *str;

int k;

printf("请输入字符串:");

scanf("%s",str);

k=strlen(str);

/*for(i=0;i

{

ch=str[i];

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

str[k-i-1]=ch;

}*/

printf("字符串逆序输出:");

while(k--)

{

printf("%c",*(str+k));

}

}

5、void main()

{char str[100];

int i,a[20],j=0;

scanf(“%s”,str)

for(i=0;str[i]!=‘0’;i++)

{ a[j]=0;

while(str[i]>=‘0’&&str[i]<=‘9’)

{a[j]=a[j]*10+str[i]- ‘0’; i++;}

j++;

}

}

6、#include

#include

int main()

{

char *str;

int count[5]={0,0,0,0,0};//创建计数器数组并初始化

char *p=str;//指针p指向字符串数组str

int i,n;

gets(str);

n=strlen(str);//确定输入字符串的长度

for(i=0;i

{

if(*(p+i)>='A'&&*(p+i)<='Z')

{

count[0]++;//统计大写字母数目

}

else if(*(p+i)>='a'&&*(p+i)<='z')

{

count[1]++;//统计小写字母数目

}

else if(*(p+i)>='0'&&*(p+i)<='9')

{

count[2]++;//统计数字数目

}

else if(*(p+i)==32)

{

count[3]++;//统计空格数目

}

else

{

count[4]++;//统计其他字符数目

}

}

printf("大写字母 小写字母 数字 空格

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

{

printf("%dt ",count[i]);//打印各统计数目 }

}

7、#include

main()

{

int n;

int array[100];

int a=0,b,c;

其他字符:n");

int i,j;

scanf("%d",&n);

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

array[i]=i;

c=n;

b=0;

do

{

for (i=1,j=0;i<=n;i++)

{

if(array[i]%3==0&&array[i]!=0)

{array[i]=0;j++;}

else if(array[i]==0);

else

array[i]=array[i]+c-j;

}

b=c/3;

c=c-j;

a=a+c;

}while(b);

for (i=1,j=0;i<=n;i++)

{

if(array[i]%3==0&&array[i]!=0)

{array[i]=0;j++;}

else if(array[i]==0);

else

array[i]=array[i]+c-j;

}

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

{

if(array[i]!=0) printf("it's %d!n",i);

}

}

8、#include

adjustAry5(int source[5][5] ){

int N=5,LOOP=4;

int *pMax,*pAry[4];

int i,j,k,z,ibreak,zbreak,tmp;

pMax=pAry[0]=&source[0][0];

for(i=0;i

for(j=0;j

if(source[i][j] > *pMax){

pMax=&source[i][j];

}else if (source[i][j] < *pAry[0]){

pAry[0]=&source[i][j];

}

}

}

if(pMax==&source[0][0]){

pMax=pAry[0];

}

tmp=source[0][0];source[0][0]=*pAry[0];*pAry[0]=tmp;pAry[0]=&source[0][0];

tmp=source[2][2];source[2][2]=*pMax;*pMax=tmp;pMax=&source[2][2];

for(k=1;k

pAry[k]=pMax;

ibreak=0;

for(i=0;i

for(j=0;j

if((source[i][j]<*pAry[k]) && (source[i][j] >= *pAry[k-1])){

zbreak=0;

for(z=k-1;z>-1;z--){

if((pAry[z]== (&source[i][j]) )){

zbreak=1;

break;

}

}

if(zbreak==1) continue;

pAry[k]=&source[i][j];

if(*pAry[k]==*pAry[k-1] ){

ibreak=1;

break;

}

}

}

if(ibreak==1) break;

}

switch(k){

case 1:

tmp=source[0][4];source[0][4]=*pAry[k];*pAry[k]=tmp;pAry[k]=&source[0][4];

break;

case 2:

tmp=source[4][0];source[4][0]=*pAry[k];*pAry[k]=tmp;pAry[k]=&source[4][0];

break;

case 3:

tmp=source[4][4];source[4][4]=*pAry[k];*pAry[k]=tmp;pAry[k]=&source[4][4];

break;

}

}

}

void print_array5(int source[5][5]){

int i,j;

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

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

printf("%2dt",source[i][j]);

}

printf("n");

}

printf("n");

}

void main()

{

int i,j;

int

b[5][5]={{35,34,33,32,31},{30,29,28,27,26},{25,24,23,22,21},{20,19,18,17,16},{15,14,13,12,11} } ;

printf("Please input data? (Array[5][5])n");

print_array5(b);

adjustAry5(b);

print_array5(b);

}

9、void main(){

int n;

char

*name[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};

for(n=1;n<=12;n++)

printf("%sn",name[n-1]);

}

10、void main(){

int n;

char

*name[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};

scanf("%d",&n);

printf("%sn",name[n-1]);

}

11、#define M 3

#define N 4

void main(){

int a[M][N];

int i,j;

for(i=0;i

for(j=0;j

{

scanf("%d",*(a+i)+j);

}

for(i=0;i

{

for(j=0;j

{

printf("%4d ",*(*(a+i)+j));

}

printf("n");

}

}

12、#include

int s[4][5];

void fun1()//输入4个学生的5门成绩

{

int i,j;

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

{

printf("请输入第%d位学生的成绩",i+1);

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

{

scanf("%d",*(s+i)+j);

}

}

}

void fun2()//求第一门成绩的平均分

{

float avg=0.0;

int i,sum=0;

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

{

sum=sum+*(*(s+i));

}

avg=sum/4.0;

printf("第一门课程的平均分是%fn",avg);

}

void fun3()

/*找出有2门以上课程不及格的学生,输出他们的学号、全部课程成绩和平均分;*/

{

int count[4]={0,0,0,0};//统计4个学生不及格课程的数目

float avg[4]={0.0};//存放每个学生的平均分

int sum;

int i,j;

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

{

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

{

if(*(*(s+i)+j)<60)

count[i]++;

}

}

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

{

sum=0;

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

{

sum=sum+*(*(s+i)+j);

}

avg[i]=sum/5.0;

}

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

{

if(count[i]>=2)

{

printf("有2门以上课程不及格的学生学号是%dn",i+1);

printf("其全部课程成绩如下n");

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

{

printf("第%d门成绩是:%dn",j+1,*(*(s+i)+j));

}

printf("平均分是:%fn",avg[i]);

}

}

}

void fun4()

/*平均成绩在90分以上或全部课程在85分以上的学生*/

{

float avg[4]={0.0};

int flag[4]={0};//标记5门课程成绩是否都在85分以上

int sum;

int i,j;

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

{

sum=0;

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

{

sum=sum+*(*(s+i)+j);

}

avg[i]=sum/5.0;

}

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

{

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

{

if(*(*(s+i)+j)>=85)

flag[i]++;

}

}

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

{

if(avg[i]>=90.0||flag[i]==5)

printf("平均成绩在90分以上或全部课程在85分以上的学生学号是:%dn",i+1);

}

}

void main()

{

fun1();

fun2();

fun3();

fun4();

}

一、选择题

1~5: BDABD

6~10:ADBCB

二、填空题

1、55

2、42

3、5

4、14, 10

5、HELLO WORLD

三、程序设计题

1、#include "stdio.h"

#define MOD(x,y) ((x)%(y))

void main()

{

int x,y;

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

printf("%dn",MOD(x,y));

}

2、

file1.c文件中程序

#define PRINTINT(x) printf("%dn",x);

#define PRINTFLOAT(x) printf("%fn",x);

#define PRINTCHAR(x) printf("%cn",x);

file2.c文件中程序

#include "stdio.h"

#include "D:JMSOFTCYuYanfile1.c"

void main()

{

int i=10;

float f=11.2;

char ch='A';

PRINTINT(i);

PRINTFLOAT(f);

PRINTCHAR(ch);

}

3、#include

#define FLAG 1

void main( )

{

char *s , ch;

gets(s);

#if FLAG

while(*s)

{ if(*s >= 'a' && *s <= 'z')

printf("%c",*s - 32);

else

printf("%c",*s);

s++;

}

#else

while(*s)

{ if(*s >= 'A' && *s <= 'Z')

printf("%c",*s+32);

else

printf("%c",*s);

s++;

}

#endif

}

4、format.h文件中的内容

#define D "%d"

#define F "%f"

#define C "%c"

#define O "%o"

#define X "%x"

#define S "%s"

file.c文件中的内容

#include "stdio.h"

#include "D:JMSOFTCYuYanformat.c"

void main()

{

int i=10;

printf(D,i);

}

5、#include "string.h"

#define CHANGE 1

void main()

{char str[80],c;int i=0;

printf("请输入报文:");

gets(str);

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

{

#if CHANGE

if(str[i]==90||str[i]==122) str[i]=str[i]-25;

else if(str[i]>=65&&str[i]<90||str[i]>=97&&str[i]<122) str[i]=str[i]+1;

#endif

i++;

}

puts(str);

}

一、选择题

1~5:ABBCB

6~10:BDBBB

二、填空题

1、11

2、30

3、4

4、97

5、3

6、Zhao

三、程序设计题

1、#include

typedef struct

{

int year;

int month;

int day;

}date;

int days(date d)

{

int num = 0;

int m, da, i;

if (( %4 == 0 && %100!=0)||( % 400 == 0))

{

for (m = 1; m <= ; m++)

{

if (m == 2)

da = 29;

else if (m==4||m==6||m==8||m==11)

da = 30;

else

da = 31;

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

{

num++;

if ( m == && i == )

return num;

}

}

}

else

{

for (m = 1; m <= ; m++)

{

if (m == 2)

da = 28;

else if (m==4||m==6||m==8||m==11)

da = 30;

else

da = 31;

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

{

num++;

if ( m == && i == )

return num;

}

}

}

}

void main()

{

date d;

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

printf("%d年%d月%d日是该年的第%d天",,,,days(d));

}

2、#define N 13

struct person

{

int number;

int nextp;

}

link[N+1];

void main()

{

int I,count,h;

for(I=1;I<=N;I++)

{

if(I==N)

link[I].nextp=1;

else

link[I].nextp=I+1;

link[I].number=I;

}

count=0;

h=N;

printf("出来的顺序是:");

while(count

{

I=0;

while(I!=3)

{

h=link[h].nextp;

if(link[h].number)

I++;

}

printf("%5d",link[h].number);

link[h].number=0;

count++;

}

printf("n最后留下来的是:");

for(I=1;I<=N;I++)

if(link[I].number)

printf("%3d",link[I].number);

}

3、#include "stdio.h"

#define N 5

struct student {

char num[10];

char name[10];

int score;

}stu[N];

void main()

{

int i,max,flag;

for(i=0;i

{

printf("请输入第%d位学生信息:",i+1);

scanf("%s",stu[i].num);

scanf("%s",stu[i].name);

scanf("%d",&stu[i].score);

}

max=stu[0].score;

for(i=1;i

{

if(max>stu[i].score)

{

max=stu[i].score;

flag=i;

}

}

printf("成绩最低的学生信息是:");

printf("学号%s,姓名%s,分数%dn",stu[flag].num,stu[flag].name,stu[flag].score);

}

4、#include "stdio.h"

#include"malloc.h"

#include"string.h"

#define LEN sizeof(struct number)

struct number

{ int n;

struct number *next;

};

struct number *create( )

{ struct number * head;

struct number * p1,*p2;

char ch;

int a=0;

head=NULL;

printf("是否输入新数据?(y/n):");

while(toupper(ch=getche())=='Y')

{ p1=(struct number *)malloc(LEN);

a++;

printf("n请输入数据:");

scanf("%d",&p1->n);

printf("是否输入新数据?(y/n):");

if(a==1)

{ head=p1;

p2=p1;

}

else

{ p2->next=p1;

p2=p1;

}

p1->next=NULL;

}

return(head);

}

struct number *reverse(struct number *head)

{

struct number *p,*q,*r;

p=head;

q=p->next;

while(q!=NULL)

{

r=q->next;

q->next=p;

p=q;

q=r;

}

head->next=NULL;

head=p;

return head;

}

void print(struct number *head)

{ struct number *p;

p=head;

while(p!=NULL)

{ printf("%dn",p->n);

p=p->next;

}

}

void main()

{ struct number *p;

p=create();

printf("逆置前链表中的数据是:");

print(p);

p=reverse(p);

printf("逆置后链表中的数据是:");

print(p);

}

5、#include

#define MAXSIZE 10

enum{

January = 1, February, March,

April, May, June,

July, August, September,

October, November, December

};

char month[12][MAXSIZE] = {

"January", "February", "March",

"April", "May", "June",

"July", "August", "September",

"October", "November", "December"

};

void ShowMonth(int mon);

int main()

{

ShowMonth(September);

ShowMonth(3);

ShowMonth(13);

return 0;

}

void ShowMonth(int mon)

{

printf("%i:t", mon);

if((mon<1) || (mon>12)) printf("Invalid month!n");

else printf("%sn", month[mon-1]);

}

一、选择题

1-5、BADCB 6-10、DBCAC 11-15、BBBBB 16-19、ADAB

二、填空题

1、"" fgetc(fpr)

2、Progra

3、2 6

4、I love right

5、second

三、程序设计题

1、#include "stdio.h"

void main( )

{ FILE *fp;

char str[80], ch;

printf("Please input a string(#):");

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

{ printf("File open for writing error!");

exit(0);

}

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

{ if (ch >= 'A' && ch <= 'Z')

fputc(ch + 32, fp);

else if (ch >= 'a' && ch <= 'z')

fputc(ch - 32, fp);

}

fclose(fp);

}

2、#include "stdio.h"

void main( )

{ FILE *fin, *fout;

char s1[80], s2[80], ch;

printf("Please input the name of source file:");

gets(s1);

if ((fin = fopen(s1, "r")) == NULL)

{ printf("File open for reading error!");

exit(0);

}

printf("Please input the name of target file:");

gets(s2);

if ((fout = fopen(s2, "w")) == NULL)

{ printf("File open for writing error!");

exit(0);

}

while (!feof(fin))

{ ch = fgetc(fin);

fputc(ch, fout);

}

fclose(fin);

fclose(fout);

}

3、#include "stdio.h"

struct student{

int num;

char name[20];

float ave,total,score[3];

};

void main( )

{

FILE *fp;

int i,j;

float f,ave,total;

struct student stu[5];

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

{ printf("文件打不开。n");

exit(1);

}

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

{ printf("请输入第%d个学生的姓名、学号及三科学习成绩:", i+1);

scanf("%s%s", stu[i].num, stu[i].name);

stu[i].total = 0;

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

{ scanf("%f", &f);

stu[i].score[j] = f;

stu[i].total += f;

}

stu[i].ave= stu[i].total / 3.0;

}

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

{fprintf( fp, "%10d%15s", stu[i].num, stu[i].name);

for( j=0; j<3; j++) fprintf( fp, "%8.2f", stu[i].score[j] );

fprintf( fp, "%8.2fn", stu[i].ave);

}

}

4、#include "stdio.h"

struct teacher

{ long number;

char name[6];

int age;

float salary;

}t;

void main( )

{ FILE *fp;

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

{ printf("File open for reading error!");

exit(0);

}

while (!feof(fp))

{ fread(&t, sizeof(struct teacher), 1, fp);

if ( > 1000 && < 2000)

printf("%ld %s %d %f", , , , );

}

fclose(fp);

}

第3章 数据类型、运算符与表达式

习 题 答 案

一、 选择题

1. 以下表示正确常量的是( )。

(A) E-5 (B) 1E5.1 (C) 'a12' (D) 32766L

【答案】D

2. 若有定义:int a=1,b=2,c=3,d=4,x=5,y=6; 则表达式 (x=a>b)&&(y=c>d) 的值为((A)0 (B) 1 (C) 5 (D) 6

【答案】A

3. 以下( )是正确的字符常量。

(A)"c" (B) ''' (C) 'W' (D) "32a"

。 )

【答案】C

4. 以下( )是不正确的字符串常量。

(A) 'abc' (B) "12'12" (C) "0"

【答案】A

(D) " "

5. 以下是正确的浮点数的是( )。

(A)e3 (B) .62 (C) 2e4.5 (D) 123

【答案】B

6. 若有定义:int a=2; 则正确的赋值表达式是( )。

(A)a-=(a*3) (B) double(-a) (C) a*3 (D) a*4=3

【答案】A

7. 若有定义:int x=1111,y=222,z=33;则语句printf("%4d+%3d+%2d", x, y, z);运行后的输出结果为( )。

(A)111122233 (B)1111,222,33

(C)1111 222 33 (D)1111+222+33

【答案】D

8. 已有如下定义和输入语句:

int a,b;

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

若要求a、b的值分别为11和22,正确的数据输入是哪一个?( )

(A)11 22 (B)11,22 (C)a=11,b=22 (D)11;22

【答案】B

9. 已有如下定义和输入语句,

int a; char c1,c2;

scanf("%d%c%c",&a,&c1,&c2);

若要求a、c1、c2的值分别为40、A和A,正确的数据输入是( )。

(A) 40AA (B) 40 A A (C) 40A A (D) 40,A,A

【答案】A

10. 语句a=(3/4)+3%2;运行后,a的值为( )。

(A) 0 (B) 1 (C) 2 (D) 3

【答案】B

11. char型变量存放的是( )。

(A) ASCII代码值 (B) 字符本身

(C) 十进制代码值 (D) 十六进制代码值

【答案】A

12. 在下列运算符中,优先级最高的运算符是( )。

(A) <= (B) != (C) ! (D) ||

【答案】C

13. 设单精度型变量f、g的值均为2.0,使f为4.0的表达式是( )。

(A) f+=g (B) f-=g+2 (C) f*=g-6 (D) f/=g*10

【答案】A

14. 若有定义:int i=7,j=8;则表达式 i>=j||i

(A) 1 (B) 变量i的值 (C) 0 (D) 变量j的值

【答案】A

15. 若希望当a的值为奇数时,表达式的值为"真",a的值为偶数时,表达式的值为"假"。则不能满足要求的表达式是( )。

(A) a%2==1 (B) !(a%2==0) (C) !(a%2) (D) a%2

【答案】C

16. 若有定义:int x=3,y=4,z=5;则值为0的表达式是( )。

(A) 'x'&&'y' (B) x<=y (C) x||y+z&&y-z (D) !((x

【答案】D

17. 若有定义:float x=3.5;int z=8;则表达式 x+z%3/4 的值为( )。

(A) 3.75 (B) 3.5 (C) 3 (D) 4

【答案】B

18. 已知char a='R'; 则正确的赋值表达式是( )。

(A) a=(a++)%4 (B) a+2=3 (C) a+=256-- (D) a='078'

【答案】A

19. 若有定义:int b=7; float a=2.5,c=4.7;则表达式a+(b/2*(int)(a+c)/2)%4的值是(

(A) 2.5 (B) 3.5 (C) 4.5 (D) 5.5

【答案】C

20. 若已定义:int i=3,k; 则语句 k=(i--)+(i--); 运行后k的值为( )。

(A) 4 (B) 5 (C) 6 (D) 7

【答案】C

21. 若已定义:int a=5;float b=63.72; 以下语句中能输出正确值的是( )。

(A) printf("%d %d",a,b); (B) printf("%d %.2f",a,b);

(C) printf("%.2f %.2f",a,b); (D) printf("%.2f %d",a,b);

【答案】B

22. C语言中,能正确表示条件10

(A) 1010 || x<20

(C) x>10 && <20 (D) (x>10) && (x<20)

【答案】D

23. 若表达式!x的值为1,则以下哪个表达式的值为1( )。

(A) x==0 (B) x==1 (C) x=!1 (D) x!=0

【答案】A

24. 语句x=(y=3,b=++y);运行后,x、y、b的值依次为( )。

(A)4,4,3 (B)3,3,3 (C)4,4,4 (D)4,3,4

【答案】C

25. 若有定义:int x,c;则语句x=(c=3,c+1);运行后,x,c的值分别是( )。

(A)3,3 (B)4,4 (C)3,3 (D)4,3

【答案】D

26. 语句a=(6/8)+6%5;运行后,a的值为( )。

(A)1 (B)2 (C)1.75 (D)1.2

)。

【答案】A

27. 若有定义:int x,y;则表达式(x=2,y=5,x*2,y++,x+y)的值是( )。

(A)7 (B)8 (C)9 (D)10

【答案】B

28. 对代数式(4ad)/(bc),不正确的C语言表达式是( )。

.(A)a/b/c*d*4 (B)4*a*d/b/c (C)4*a*d/b*c (D)a*d/c/b*4

【答案】C

29. 若x和y为整数,以下表达式中不能正确表示数学关系|x-y|<10的是( )。

(A)abs(x-y)<10 (B)(x-y)>-10&&(x-y)<10

(C)!(x-y)<-10||!(y-x)>10 (D)(x-y)*(x-y)<100

【答案】C

30. 若有以下程序段,则z的二进制值是( )。

int x=3,y=6,z;

z=x^y<<2;

(A)00010100 (B)00011011

(C)00011000 (D)00000110

【答案】B

二、 填空题

1. 表达式3/5的值是: ,3.0/5的值是 ,3%5的值是 。

【答案】0 0.6 3

2. 以下程序运行的结果是: 。

void main()

{

char c;

c=’B’+32;

printf(“%cn”,c);

}

【答案】b

3. 若有定义:int a=5,b=4;char c1='A',c2='B';则表达式a+b%5+c2-c1的值是 。

【答案】10

4. 若有定义:int b; 则语句b=9/5+ 9%5;运行后,b的值为

【答案】5

5. 若已定义:int a=9,b=11,c; 则语句c=a>b; 运行后c的值为 。

【答案】0

6. 若有定义:int a=2,b=3; float x=3.5,y=2.5;则表达式(float)(a+b)/2+(int)x%(int)y的值是 。

【答案】3.5

7. 已知double a=5.2; 则语句a+=a-=(a=4)*(a=3);运行后a的值为

【答案】-18.0

8. 若有定义:int x,y;则表达式(x=2,y=5,x++,x+y++)的值是 。

【答案】8

9. 若有定义:int m=3,n=5;则表达式(m+1,n+1,(--m)+(n--))的值是 。

【答案】7

10. 若有定义:int x=3,y=4;则表达式 !x||y 的值为 。

【答案】1

11. 若有定义:int a=5,b=2,c=1;则表达式a-b

【答案】0

12. 若有定义:int a=2,b=2,c=2; 则语句 ++a||++b&&++c;运行后b的值为 。

【答案】2

13. 以下程序段中,要将a的值的低4位取反,b的值应取 。

unsigned char a=0x39,b;

b= ;

a=a^b;

【答案】15或0xf

14. pow(3.0,2.0)的函数值是 。

【答案】9.0

15. 若有定义:int k,i=3,j=3; 则表达式 k=(++i)*(j--) 的值是 。

【答案】12

三、程序设计题

1. 编写程序,从键盘输入大写字母,用小写字母输出。

【参考答案】

void main

{

char c1;

printf(“input a uppercase:”);

scanf(“%c”,&c1);

c1=c1+32; /*在ASCII表中,小写字母的ASCII值比对应的大写字母大32*/

printf("%cn", c1);

}

2. 编写程序,从键盘输入一个矩形的长度和宽度,输出面积和周长。

【参考答案】

void main

{

float len,wid,size; /*len,wid,size分别表示矩形的长、宽、面积*/

printf("input length:");

scanf("%f",&len);

printf("input width:");

scanf("%f",&wid);

size=len*wid;

printf("size of the rectangle is: %fn", size);

}

3. 编写一个程序,从键盘输入华氏温度,将其转换成摄氏温度值后输出。转换的公式为:C=(F-32)/1.8

【参考答案】

void main

{

float c,f;

}

4. 编写程序,输入两个字符,利用条件运算符,输出其中较小字符的ASCII 码值。

【参考答案】

void main()

{

char c1,c2;

}

5. 用C赋值语句表示以下计算式:

1)Area=r2+2rh

int i;

printf("input two letters:");

scanf("%c,%c",&c1,&c2); /*注意:输入的两个字符之间要用逗号隔开*/

i= c1

printf("minimum ASCII is %dn",i);

printf("input Fahrenheit temperature f:");

scanf("%f",&f);

c=(f-32)/1.8;

printf("Centigrade temperature c is: %fn", c);

2m1m2g2)Torque=m1m2

3)Side=a2b22abcos(x)(velocity)24)Energy=mass[acceleration×height+]

2【参考答案】

1)Area=PI*r*r+2*PI*r*h

2)Torque=((2*m1*m2)/(m1+m2))*g

3)Side=sqrt(a*a+b*b-2*a*b*cos(x))

4)Energy=mass(acceleration*height+velocity*velocity/2)

第6章 函数

习题解答

一、 选择题

1.下列关于函数定义的描述中,错误的是( )。

A.定义函数时函数的存储类型可以省略

B.定义函数时函数名和函数类型必须指明

C.定义函数时必需有函数体

D.定义函数时必需指明函数参数

【答】D

2.下列关于函数(原型)声明的描述中,错误的是( )。

A.函数声明可放在函数体内,也可放在函数体外

B.函数声明既要给出函数名和类型,又要指出函数参数

C.函数调用前必须给出被调函数的函数声明,否则出错

D.被调函数的定义在主调函数前面时,可以不用函数声明

【答】C

3.以下正确的定义函数首部的形式是( )。

A.float func(int n;float x)

B.float func(int n,float x);

C.float func(int n;float x);

D.float func(int n,float x)

【答】D

4.下列关于函数参数的描述中,错误的是( )。

A.定义函数时可以有参数,也可以没有参数

B.在传值调用时,实参只能是变量名,不可以是表达式

C.函数的形参在该函数被调用前是没有确定值的

D.要求函数的形参和对应的实参个数应相等、类型应赋值兼容 【答】B

5.下列说法中,不正确的是( )。

A.实参可以为任意类型

B.形参与对应实参的类型要赋值兼容

C.形参可以是常量、变量或表达式

D.实参可以是常量、变量或表达式

【答】C

6.下面函数调用语句中,实参的个数是( )。

func(n1,n2+n3,func(n4,n5,n6));

A.6 B.5 C.4 D.3

【答】D

7.设有下面函数调用语句,则其所调函数fun中形参的个数是( )。

fun(f(n1,n2),n3,n4 + n5);

A.5 B.4 C.3 D.2

【答】C

8.下面说法中正确的是( )。

A.实参占用存储单元,形参不占用存储单元

B.相对应的实参与形参共用同一存储单元

C.相对应的实参与形参同名时,它们共用同一存储单元

D.相对应的实参与形参占用不同的存储单元

【答】D

9.实参为简单变量,其与对应形参之间的数据传递方式为( )。

A. 由用户另外指定传递方式

B. 双向值传递

C. 单向值传递

D. 地址传递

【答】C

10.实参用数组名,则传递给对应形参的是( )。

A.数组的地址

B.数组的长度

C.数组中每一个元素的地址

D.数组中每一个元素的值

【答】A

11.下列关于函数调用的描述中,错误的是( )。

A.在函数调用中,形参是变量名,实参可以是变量、常量和表达式

B.在函数调用中,形参是指针时,实参必须是地址值

C.在传址调用方式中,可以在被调用函数中改变调用函数的参数值

D.在传值调用方式中,可以在被调用函数中改变调用函数的参数值

【答】D

12.下列关于函数返回值的论述中,错误的是( )。

A.函数返回值能够实现函数间的数据传递

B.函数返回值是由return<表达式>实现的

C.函数返回的值和值的类型是由返回语句中表达式的值和类型决定的

D.一个函数可有多条返回语句,但只可有一个返回值

【答】C

13.函数返回值的类型由( )。

A.调用该函数的函数类型决定 B.return语句中表达式的类型决定

C.主函数决定 D.该函数的函数类型决定

【答】D

14.下列关于函数的论述中正确的是( )。

A.不允许函数嵌套定义,但允许函数嵌套调用

B.不允许函数嵌套调用,但允许函数嵌套定义

C.函数的定义和调用都允许嵌套

D.函数的定义和调用都不允许嵌套

【答】A

15.下列关于函数调用的论述中不正确的是( )。

A.函数间允许嵌套调用 B.函数间允许间接递归调用

C.函数间允许直接递归调用 D.函数间不允许直接递归调用

【答】C

16.以下说法不正确的是( )。

A.所有的形式参数都是局部变量

B.不同函数中允许说明并使用相同名字的变量

C.函数内定义的变量其有效范围不超出该函数

D.函数内的复合语句中说明的变量在该函数范围内有效

【答】D

17.在本程序中能被所有函数使用的变量,其存储类别是( )。

A.auto(自动) B.static(静态) C.register(寄存器) D.exern(外部)

【答】 D

18.在函数中未说明存储类别的局部变量,其隐含的存储类别是( )。

A.auto(自动) B.static(静态) C.register(寄存器) D.exern(外部)

【答】A

19.下列关于变量的论述中,不正确的是( )。

A.外部变量定义与外部变量声明,两者的含义不同

B.外部变量与静态外部变量的存储类型不同(即它们被分配的存储区不同)

C.在同一函数中,既可使用本函数中的局部变量又可使用与局部变量不同名的全局变量

D.在同一程序中,外部变量与局部变量同名时,则在局部变量作用范围内外部变量不起作用

【答】 B

20.运行以下程序, 其输出结果是( )。

void swap28(int n0,int n1)

{

int temp;

temp=n0;

n0=n1;

n1=temp;

}

void swapl4(int n[])

{

int temp;

temp=n[0];

n[0]=n[1];

n[1]=temp;

}

void main()

{

int a[2]={2,8},b[2]={1,4};

swap28(a[0],a[1]);

swapl4(b);

printf(“%d %d %d %d\n”,a[0],a[1],b[0], b[1]);

}

A.2814 B.2841 C.8241 D.8214

【答】 B

二、填空题

1.若自定义函数要求返回一个值,则在该函数体中应有一条 【1】 语句;若自定义函数要求不返回值,则在该函数说明时加一类型说明符 【2】 。

【答案】

【1】带有表达式的return

【2】void

2.函数调用时的实参与对应的形参都是数组时,参数传递方式为 【1】 ;都是普通变量时,参数传递方式为 【2】 。

【答案】

【1】传地址

【2】传值

3.静态局部变量的作用域是 【1】 。

【答案】

【1】定义它的函数或复合语句的内部

4.函数形参的作用域是 【1】 。全局的外部变量与函数体内定义的局部变量同名时,在函数体内, 【2】 变量起作用。

【答案】

【1】整个函数体内

【2】局部

5.下列函数sub( )的功能是求两个参数的差,并将差值返回调用函数。该函数中错误的部分是 【1】 ,改正后应为 【2】 。

void sub(double x, double y)

{

double z;

z= x – y;

return z;

}

【答案】

【1】void sub(double x, double y)

【2】double sub(double x, double y)

6. 为了使下面程序能够正确运行,程序的第2行应填写的内容是 【1】 ,当输入的数值为66和99时,该程序输出的结果是 【2】 。

#include

【1】

main()

{

double x1,x2;

scan(“%lf,%lf”,&x1,&x2) ;

printf(“%lfn”,max(x2,x1)) ;

getch( ) ;

}

double max(double y1,double y2)

{

return(y1>y2 ? y1–y2 : y2-y1);

}

【答案】

【1】double max(double ,double ) ;

【2】 33.000000

7. 下面程序,在函数sum( ) 中求(m + n)/3 + (m - n)/3的值,在主函数中为m、n

输入10、7,并输出计算结果,请填空。

#include

void main()

{

int m,n;

【1】

printf(“Please input m,n:”);

scanf(“%d,%d”, 【2】 );

printf(”The sum=%d\n”,sum(m,n));

}

int sum(int i,int j)

{

int k;

k= 【3】 ;

return k;

}

【答案】

【1】int sum( );

【2】&m,&n

【3】(i+j)/3+(i-j)/3

8. 下面程序功能是求两个浮点数的和,程序内容如下, 请填空。

#include

double add(double x,double y,double p)

{

p=x+y;

【1】

}

void main()

{

double a=55.44, b=44.55 ;

double k;

add(a,b, 【2】 );

printf(“%.2lf\n”,k);

}

【答案】

【1】return(p);

【2】k

注:输出的k值是不确定的!

9.下面程序的运行结果是 【1】 。

#include

void func(int br[])

{ int i=1;

while(br[i]<=10)

{

printf("%5d",br[i]);

i++;

}

}

void main()

{

int ar[]={2,4,8,10,8,4,11,9,7};

func(ar + 1);

printf("n");

getch();

}

【答案】

【1】 8 10 8 4

10. 函数acopyb将整型数组aarra的内容逆序复制到整型数组barra中(-32768作为数组

元素值的结束标志),请填空。

#include

void acopyb(int aa ,int ba )

{

int i=0,j=0;

while(aa[j]!=-32768) j++;

ba[j]=aa[j]; j--;

while(aa[i]!=-32768)

{

【2】

j--;

i++;

}

}

void main()

{

static int aarra[]={1,3,5,7,9,2,4,6,8,10,-32768};

int barra[20];

int i=0;

acopyb( 【1】 );

while(barra[i]!=-32768)

printf("%3d", 【3】 );

printf("n");

getch();

}

【答案】

【1】aarra ,barra

【2】ba[j]=aa[i];

【3】barra[i++]

11. 在 【1】 处填写适当内容,使下面程序的输出结果为264。

#include

int func(int m, int n)

{

return (m * n);

}

void main()

{

int a=3,b=11,c=8,d;

d=func(func( 【1】 ),c);

printf("%dn",d);

getch();

}

【答案】

【1】a ,b或者b , a

12.下面程序的输出结果为 【1】 。

#include

#define N 10

void output(int *p,int n)

{

int i;

for(i=0;i

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

printf("n");

}

void main()

{

int x[N],i, *q;

for(i=0;i

q=x;

output(q,N);

for(i=0;i

}

【答案】

【1】0 2 4 6 8 10 12 14 16 18

0 2 4 6 8 10 12 14 16 18

13. 函数small()从5x5矩阵(即从5行、5列二维数组)中,找出主对角线上元素的最小值。在主函数中为数组输入数据。请填写适当内容。

#include

int small(int a[5][5])

{

int i,vm;

vm = a[0][0];

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

if(vm > a[i][i])

vm = 【1】

return(vm);

}

void main()

{

int i,j,vmin;

int array[5][5];

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

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

scanf(”%d”, 【2】 );

vmin = small(array);

printf(”vmin = %dn”, vmin);

}

【答案】

【1】a[i][i];

【2】&array[i][j]

14. 函数max_value()求3x4矩阵所有元素中的最大值。请在下面程序中【1】 、 【2】处填写适当内容。

#include

void main( )

{

int max_value(int array[][4]);

int a[3][4]=({1,3,5,7},{2,4,6,8},{15,17,34,12});

printf(”max value is %dn”, 【1】 );

}

int max_value(int array[][4])

{

int i,j,max;

max = array[0][0];

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

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

if(array[i][j] > max)

【2】 =array[i][j];

return(max);

}

【答案】

【1】max_value(a)

【2】max

15.下面程序的功能是调用选择排序法函数select( ),对数组中的整数按从小到大的顺序排列,请填写适当内容。

#include

void main( )

{

void select(int a[],int n);

int b[10],i;

printf("Input 10 numbers:");

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

scanf("%d", 【1】 );

printf("n");

select( 【2】 ,10);

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

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

}

void select(int a[],int n)

{

int i,j,k,temp;

for(i = 0;i < n - 1;i++)

{

k = i;

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

if(a[j] < a[k]) .

k=j;

if(k 【3】 i)

{

temp = a[k];

a[k] = 【4】 ;

a[i] = temp;

}

}

}

【答案】

【1】&b[i]

【2】b

【3】!=

【4】a[i]

16.下面程序的运行结果是 【1】 ,函数sort( )采用的算法是 【2】 。

#include

#define M 5

#define N 6

void sort(int a[],int n)

{int i, j,temp;

for(i=0;i

{

for (j=i+1;j

if(a[i] < a[j])

{

temp = a[i];

a[i] = a[j];

a[j] = temp;

}

}

for(i=0;i

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

printf("n");

}

void main()

{

int i;

int x[]={7,3,9,5,1};

int y[]={46,55,91,64,82,73};

sort(x,M);

sort(y,N);

for(i=0;i

printf("%5d",x[i]);

printf("n");

for(i=0;i

printf("%5d",y[i]);

printf("n");

}

【答案】

【1】 9 7 5 3 1

91 82 73 64 55 46

9 7 5 3 1

91 82 73 64 55 46

【2】函数sort( )采用的是冒泡排序法。

17.下面程序的功能是利用函数的递归调用求1!+2!+3!+ …… +9!,请填写适当内容。

#include

long int fracsum(int n)

{

if(n==1)

return ( 1 );

else

return (n* 【1】 );

}

void main()

{

int i=1;

long int sum;

sum= 【2】

while(i<=9)

{

sum+= 【3】 ;i++;

}

printf("%ldn",sum );

}

【答案】

【1】fracsum( n-1)

【2】0

【3】fracsum(i)

18.下面程序的功能是 【1】 ,程序运行结果是 【2】 。

#include

void main( )

{ int fib(int n);

int i;

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

{ if(i%5==0) printf("n") ;

printf("%10d",fib(i));

}

printf("n");

getch();

}

int fib(int n)

{ if(n==0 || n==1) return n;

else

return fib(n-2)+fib(n-1);

}

【答案】

【1】计算斐波那契(Fibonacci)数列前10项的值。

【2】 0 1 1 2 3

5 8 13 21 34

19.运行下面程序,函数func( )中输出的结果是 【1】 ,主函数中输出的结果是【2】 。

#include

int n=10;

int func(int p)

{

n += p;

p += n;

printf("%d,%dn",p,n);

return (n);

}

void main()

{

int m=6, pand=8;

pand=func(m);

printf("n%d,%d,%dn",m,pand,n);

getch();

}

【答案】

【1】22 16

【2】6 16 16

20.运行下面程序,输出的结果是 【1】 。

#include

int m,n;

int fun( )

{

m=88;

n=99;

return ( n);

}

void main()

{

int m=55, n=66;

printf("n%d,%d,%d,%dn",m, fun( ), m, n);

getch();

}

【答案】

【1】 55,99,55,66

21.运行下面程序,输出的结果是 【1】 。

#include

int m=9;

int func(int a, int b )

{

int m=1;

printf("n%dn",++m);

return (a*b-m);

}

void main()

{

int x=2, y=35;

printf("n%dn",func(x,y)/m);

getch();

}

【答案】

【1】2 和 7

22.运行下面程序,函数fun( )中输出的结果是 【1】 ,主函数中输出的结果是【2】 。

#include

void fun(int s[])

{ static int i=0;int j;

do

{

s[i]+=s[i+1];

}while( ++i<3 );

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

}

void main()

{

int i,a[10]={0,1,2,3,4};

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

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

printf("n");

getch();

}

【答案】

【1】13534

13574

【2】13574

23.运行下面程序,输出的结果是 【1】 。#include

int n=98;

int fun()

{

static int n=1;

n+=2;

return (n);

}

void main()

{

n+=2;

printf("n%d, %dn",++n,fun() );

printf("n%d, %dn",n++,fun() );

getch();

}

【答案】

【1】101, 3

101, 5

三、程序设计题

1. 输入任意3个整数,利用函数的嵌套调用,求出3个数中的最小值。

参考程序代码如下:

#include

void main()

{

int mintwo(int, int);

/*函数声明 */

int minthree(int,int,int);

/*函数声明 */

int x,y,z,min;

printf("nPlease input three integer:n");

scanf("%d,%d,%d",&x,&y,&z);

min=minthree(x,y,z);

printf("nMin is %d",min);

}

int mintwo(int a,int b)

{

return(a

/*使用条件表达式,并将计算结果返回 */

}

int minthree(int a,int b,int c)

{

int z;

z=mintwo(a,b);

/*嵌套调用函数mintwo()*/

z=mintwo(z,c);

return(z);

}

2. 由键盘输入两个整数,编写两个函数,分别求这两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。

参考程序代码如下:

#include

long int gcd(long int,long int);

/* 函数声明 */

long int lcm(long int,long int);

/* 函数声明 */

void main()

{

long int a,b;

printf(" n Please enter the integer a,b :");

scanf("%ld,%ld",&a,&b);

printf("na=%ld,b=%ldn",a,b);

printf("The greatest common divisor of ");

printf(" %ld and %ld is %ldn",a,b,gcd(a,b)); /*调用函数gcd()求最大公约数*/

printf("The least common multiple of ");

printf(" %ld and %ld is %ldn",a,b,lcm(a,b));

/*调用函数lcm()求最小公倍数 */

}

long int gcd(long int a,long int b)

{

long int item, c;

if(a < b)

{

item=a;a=b;b=item;

}

do

{

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

} while(c!=0);

return a;

/* 返回a 与 b的最大公约数 */

}

long int lcm(long int a,long int b)

{

long int item, i;

if(a < b)

{

item=a; a=b; b=item;

}

for(i=1; ; i++)

{

item=i*a;

if(item % b == 0) return item;

/* 返回a 与 b的最小公倍数 */

}

}

3.编写一个函数,用阶乘倒数之和求e的近似值,即e = 1 + 1/2!+ 1/3!+ … + 1/n! 。

参考程序代码如下:

#include

void main()

{

long int fac(int n);

/*求阶乘函数fac()的声明*/

long int n, i;

float e=0, p;

printf("nPlease input a integer:");

scanf("%ld",&n);

if(n<0)

{

printf("n Negative argument!n");

exit(-1);

/*正常退出*/

}

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

{

p=fac(i);

/*函数调用 */

e=e+1.0/p;

/*求和*/

}

printf("n sum: %15.12fn",e);

}

long int fac(int n)

/*求阶乘的递归函数定义*/

{

if(n==0‖n == 1)

/* 递归结束条件*/

return(1);

return (n*fac(n-1));

/*递归调用*/

}

4. 求方程ax²+ bx + c = 0的根,用三个函数分别求当b²-

4ac大于0、等于0和小于0时的根并输出结果。从主函数输入a、b、c的值。

参考程序代码如下:

#include

#include

void solut(double,double,double);

/* 以下4行均为函数声明 */

void solut1(double,double,double);

void solut2(double,double);

void solut3(double,double,double);

void main()

{

double a,b,c;

/*为了不失一般性,一元二次方程的系数设置为double型*/

printf(" Please enter a,b,c :n");

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

printf("na=%lf,b=%lf,c=%lfn",a,b,c);

if(a == 0)

printf("The eguation is not quadratic !n");

else

solut(a,b,c);

}

void solut(double a,double b,double c)

{

double disc;

disc=b*b-4*a*c;

if(disc > 0)

solut1(disc,a,b);

/* 调用函数solut1,求两个不等实根 */

else

if( disc == 0 )

solut2(a,b);

/* 调用函数solut2,求两个相等实根 */

else

solut3(disc,a,b);

/* 调用函数solut3,求虚根 */

}

void solut1(double disc,double a,double b)

{

double x1,x2;

x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);

printf("Has distinct real roots:nx1= %lf,x2= %lfn",x1,x2);

}

void solut2(double a,double b)

{

double x1,x2;

x1=x2=-b/(2*a);

printf("Has two equal roots:n x1= %lf,x2= %lfn",x1,x2);

}

void solut3(double disc,double a,double b)

{

double realp,imagp;

realp=-b/(2*a);

imagp=sqrt(-disc)/(2*a);

printf("Has two complex roots:n");

printf("%lf + %lfin",realp,imagp);

printf("%lf - %lfin",realp,imagp);

}

5. 编写程序,使能对分数进行加、减、乘、除四则运算的练习。即要求:对输入的

两个分数可以进行加、减、乘、除运算的选择,并将运算结果以分数形式输出。

参考程序一代码如下:

#include

long int a,b,c,d,x,y,z;

/* 定义全局变量 */

char op;

void main()

{

int fxz( ), fhj( );

/* 两个无参函数声明 */

printf("P1ease input two data for example b/a,d/c n");

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

if(a==0 || c==0)

exit(0);

fsz();

/* 函数调用 */

fhj();

/* 函数调用 */

printf("n%ld / %ld %c %ld / %ld= %ld / %ld",b,a,op,d,c,y,x);

}

int fsz( )

/* 定义选择四则运算函数,该函数对全局变量进行操作 */

{

if(op=='+') {y=b*c+d*a; x=a*c; return;}

if(op=='-') {y=b*c-d*a; x=a*c; return;}

if(op=='*') {y=b*d; x=a*c; return;}

if(op=='/') {y=b*c; x=a*d; return;}

C语言程序设计课后练习题答案带原题

本文发布于:2024-02-04 05:59:59,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170699759952332.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   程序   输出   算法   定义   输入   变量   程序设计
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23