c语言3次上机Word下载.docx

上传人:b****5 文档编号:17996865 上传时间:2022-12-12 格式:DOCX 页数:16 大小:57.71KB
下载 相关 举报
c语言3次上机Word下载.docx_第1页
第1页 / 共16页
c语言3次上机Word下载.docx_第2页
第2页 / 共16页
c语言3次上机Word下载.docx_第3页
第3页 / 共16页
c语言3次上机Word下载.docx_第4页
第4页 / 共16页
c语言3次上机Word下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

c语言3次上机Word下载.docx

《c语言3次上机Word下载.docx》由会员分享,可在线阅读,更多相关《c语言3次上机Word下载.docx(16页珍藏版)》请在冰豆网上搜索。

c语言3次上机Word下载.docx

Printf("

\nNowa=%d,b=%d\n"

a,b);

}

#defineSUM(a+b)

#defineDIF(a-b)

#defineSWAP(a,b)t=b,b=a,a=t

inta,b,t;

printf("

scanf("

SWAP(a,b);

2.源程序修改替换

下面是用函数实现求三个数中最大数、计算两数之和的源程序。

在这个源程序中存在若干语法和逻辑错误,要求:

(1)对这个例子程序进行调试修改,使之能够正确完成指定任务。

(2)用带参数的宏替换函数max,来实现求最大数的功能。

inta,b,c;

floatd,e;

Enterthreeintegers:

%d,%d,%d"

&

b,&

c);

\nthemaximumofthemis%d\n"

max(a,b,c));

Entertwofloatingpointnumbers:

%f,%f"

d,&

e);

\nthesumofthemis%f\n"

sum(d,e));

intmax(intx,inty,intz)

intt;

if(x>

y)

t=x;

else

t=y;

if(t<

z)

t=z;

returnt;

floatsum(floatx,floaty)

returnx+y;

(1)

intmax(intx,inty,intz);

floatsum(floatx,floaty);

inta,b,c;

floatd,e;

intt;

if(x>

=y)t=x;

elset=y;

if(t<

=z)t=z;

returnt;

returnx+y;

(2)#definemax(a,b,c)a>

b?

(a>

c?

a:

c):

(b>

b:

c)

3.跟踪调试程序

下面程序的功能是利用R计算圆的面积s,以及面积s的整数部分。

现要求:

(1)修改程序,使程序编译通过且能运行。

(2)单步执行。

进入函数decimal_fraction时,watch窗口中x为何值?

在返回main时,watch窗口中i为何值?

(3)排除错误,使程序能正确输出面积s值的整数部分,不会输出错误信息assertionfailed。

程序代码:

#defineR

floatr,s;

ints_integer=0;

printf("

inputanumber:

"

%f"

r);

#ifdefR

s=3.14159*r*r;

areaofroundis:

%f\n"

s);

s_integer=integer_fraction(s);

theintegerfractionofareais%d\n"

s_integer);

assert((s-s_integer)<

1.0);

#endif

intinteger_fraction(floatx)

inti=x;

returni;

assert.h>

intinteger_fraction(floatx);

#ifdefR

s=3.14159*r*r;

s_integer=integer_fraction(s);

assert((s-s_integer)<

#endif

inti=x;

returni;

(2)314.159000314(r=10)

(3)

(1)已经解决

实验2数组实验

(一)实验目的

(1)掌握数组的说明、初始化和使用。

(2)掌握一维数组作为函数参数时实参和形参的用法。

下面是用来将数组a中元素按升序排序后输出的源程序。

分析源程序中存在的问题,并对源程序进行修改,使之能够正确完成任务。

voidmain(void)缺少声明

inta[10]={27,13,5,32,23,3,17,43,55,39};

voidsort(int[],int);

位置错误

inti;

sort(a[0],10);

for(i=0;

i<

10;

i++)

%6d"

a[i]);

\n"

voidsort(intb[],intn)

inti,j,t;

for(i=0;

n-1;

for(j=0;

j<

n-i-1;

j++)

if(b[j]<

b[j+1])应为大于号

t=b[j],b[j]=b[j+1],b[j+1]=t;

voidsort(intb[],int);

sort(a,10);

if(b[j]>

b[j+1])

{t=b[j],b[j]=b[j+1],b[j+1]=t;

2.源程序完善、修改、替换

(1)下面的源程序用于求解瑟夫问题:

M个人围成一圈,从第一个人开始依次从1至N循环报数,每当报数为N时报数人出圈,直到圈中只剩下一个人为止。

请在源程序中的下划线处填写合适的代码来完善该程序。

#defineM10

#defineN3

inta[M],b[M];

/*数组a存放圈中人的编号,数组b存放出圈人的编号*/

inti,j,k;

M;

i++)/*对圈中人按顺序编号1—M*/

a[i]=i+1;

for(i=M,j=0;

i>

1;

i--){

/*i表示圈中人个数,初始为M个,剩1个人时结束循环;

j表示当前报数人的位置*/

for(k=1;

k<

=N;

k++)/*1至N报数*/

if(++j>

i-1)j=0;

/*最后一个人报数后第一个人接着报,形成一个圈*/

b[M-i]=j?

a[j-1]:

a[i-1];

/*将报数为N的人的编号存入数组b*/

if(j)

for(k=--j;

i;

k++)/*压缩数组a,使报数为N的人出圈*/

a[k]=a[k+1];

i<

M–1;

i++)/*按次序输出出圈人的编号*/

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

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

/*输出圈中最后一个人的编号*/

(2)上面的程序中使用数组元素的值表示圈中人的编号,故每当有人出圈时都要压缩数组,这种算法不够精炼。

如果采用做标记的办法,即每当有人出圈时对相应数组元素做标记,从而可省掉压缩数组的时间,这样处理效率会更高一些。

因此,请采用做标记的办法修改

(1)中的程序,并使修改后的程序与

(1)中的程序具有相同的功能。

voidmain()

inti,k,n,a[M];

i++)

a[i]=i+1;

k=0;

{

n=0;

while(n<

N){

while(a[k]==0)

k=(k+1)%M;

n++;

}

k--;

if(k<

0)k=M-1;

%-6d"

a[k]);

a[k]=0;

3.跟踪调试源程序

在下面所给的源程序中,函数strncat(s,t,n)本来应该将字符数组t的前n个字符连接到字符数组s中字符串的尾部。

但函数strncat在定义时代码有误,不能实现上述功能。

请按下面的要求进行操作,并回答问题和排除错误。

(1)单步执行源程序。

进入函数strncat后观察表达式s、t和i。

当光条落在for语句所在行时,i为何值?

当光条落在strncat函数块结束标记(右花括号})所在行时,s、t分别为何值?

(2)分析函数出错的原因,排除错误,使函数正确实现功能,最后写出程序的输出结果。

voidstrncat(char[],char[],int);

chara[50]="

Theadoptedsymbolis"

b[27]="

abcdefghijklmnopqrstuvwxyz"

;

strncat(a,b,4);

%s\n"

a);

voidstrncat(chars[],chart[],intn)

inti=0,j;

while(s[i++]);

for(j=0;

n&

&

t[j];

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

s[i]='

\0'

23

s=0x0012ff4c"

t=0x0012ff30"

(2)错因:

a的终结符没有被覆盖,连入的b的第四个字母被终结符覆盖

#include<

i--;

s[i++]='

程序设计

编写并上机调试运行能实现以下功能的程序。

(1)已知三角形的面积是

,其中

,a,b,c为三角形的三边。

定义两个带参数的宏,一个用来求s,另一个用来求area,试编写一程序,用带参数的宏来计算三角形的面积。

(2)使用条件编译方法编写一程序,其功能要求是,输入一行电报文字,可以任选两种输出:

一为原文输出;

二为变换字母的大小写(如小写‘a’变成大写‘A’,大写‘D’变成小写‘d’),其他字符不变。

用#define命令控制是否变换字母的大小写。

例如,#defineCHANGE1则输出变换后的文字,若#defineCHANGE0则原文输出。

(3)编写一个程序,从键盘读取数据,对一个34矩阵进行赋值,求其转置矩阵,然后输出原矩阵和转置矩阵。

(1)

math.h>

#defines(a,b,c)(a+b+c)/2

#definearea(a,b,c,s)sqrt(s*(s-a)*(s-b)*(s-c))

floata,b,c;

%f,%f,%f"

theareais%f\n"

area(a,b,c,s(a,b,c)));

(2)

#defineCHANGE1

intj;

chars[100];

gets(s);

#ifCHANGE

for(j=0;

j<

100;

j++){

if(s[j]>

='

A'

s[j]<

Z'

)s[j]=s[j]+32;

elseif(s[j]>

a'

z'

)s[j]=s[j]-32;

elses[j]=s[j];

puts(s);

当#defineCHANGE1时

当#defineCHANGE0时

(3)

#include"

stdio.h"

#defineSIZE3

{floatx[SIZE][SIZE+1];

floaty[SIZE+1][SIZE];

inti,j;

for(i=0;

i<

SIZE;

i++){

for(j=0;

SIZE+1;

j++)

{scanf("

x[i][j]);

y[j][i]=x[i][j];

for(j=0;

printf("

x[%d][%d]=%.2f\t"

i,j,x[i][j]);

}

for(i=0;

i++)

y[%d][%d]=%.2f\t"

j,i,y[j][i]);

实验心得与体会

通过编译,调试,从错误中学习各种细节,补充自己平时没注意的知识。

并了解到一个好的设计思路不仅能处理一些实用的问题,还能节约设计程序所用的时间和运行程序所花的时间。

并且掌握了带参数的宏定义、条件编译的使用,掌握了字符串数组和字符数组在输入数字存储时的区别,和数组输入输出的大致使用,掌握了一维数组作为函数参数时实参和形参的用法。

 

选做题

给定n位(n≤100)正整数a,去掉其中任意k个数字(k≤n)后,剩下的数字按原次序排列组成一个新的正整数。

对于给定的n位正整数a和正整数k,设计一个算法找出剩下数字组成的新数最大的删除方案。

具体任务为,对于给定的正整数a,编程计算删除k个数字后得到的最大数。

数据输入:

由键盘输入两个数据,两个数据之间以空格隔开,前面一个数据是正整数a,第2个是正整数k。

结果输出:

程序运行结束时,将计算出的最大数输出到屏幕

#include<

intf_max(chara[],intb,inti)

intj,k=0;

charc;

c=a[0];

for(j=1;

=b;

if(c<

a[j])

{

c=a[j];

k=j;

returnk+i+1;

intm=0,i=0,j=0,k;

chara[100];

charb[100];

inputa,k:

while((a[m]=getchar())!

'

m++;

a[m]='

k);

while((m-i)>

(m-k-j))

i=f_max(&

a[i],k+j-i,i);

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

j++;

for(;

=m-k;

b[j]=a[i];

i++;

b[j]='

puts(b);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1