版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
浙江大学远程教育学院
《程序设计基础(C)》课程作业
姓名:王春强学号:
年级:2016春学习中心:桐庐学习中心
第1章C语言的基本构成
程序调试题
1.编辑、调试以下程序
步骤1:在VisualC++环境下新建文件可用[开始]f[程序]f[MicrosoftVisualC++6.0]—
[MicrosoftVisualC++6.0]—[文件]f[新建]—[文件]f[C++SourseFile],输入文件
名exl-Lc,程序代码如下:
#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(,z%d+%d=%d\n,z,a,b,c);
/*调用系统输出函数printf,%€1为格式控制符,依次用后面的变量值填充,以整数形
式输出*/
}
请思考文件exl-l.c由几个函数构成?调用了那几个系统函数?此程序中用到了哪几个
保留字?哪几个用户自定义标识符?
答:
1.有2个函数构成,主函数main。及自定义函数add。
2.调用的系统函数有输入函数scanf。及输出函数printf()
3.保留字有:int,return
4.自定义标识符有:a,b,c,z,x,y
步骤3:
编译并运行程序,程序运行时输入两个整数,2040,观察程序运行的结果。
答:
结果是20+40=60
截图如下:
■LZ\C++\ueoug\exi-i.exe
2040
20+40=60
Pressanykeytocontinue
2.编辑、调试以下程序
步骤1:在VisualC++环境下新建文件可用[开始]f[程序]f[MicrosoftVisualC++6.0]
->[MicrosoftVisualC++6.0]f[文件][新建][文件]f[C++SourseFile],输入文
件名exl-2.c
步骤2:在文本编辑器中输入以FC程序
#include<stdio.h>/*文件预处理,包含标准输入输出库,程序可调用输入、输出函
数*/
#include<exl-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(z,%d&&%d=%d\n”,z1,b,c);
/*调用系统输出函数printf,%d为格式控制符,依次用后面的变量值填充,以整数形式
输出*/
c=or(a,b);/*函数调用*/
printf(〃%d%d=%d\n〃,zi,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
您可以输入其它的整数,观察程序的执行结果。
答:(增加语句:#include<ex1-2-3.0)
输入2040;2020;3060如下:
1*D:\C++\Debug\exl-2.exe"
2040
20&&40=1
20::40=1
Pressanykeytocontinue
•"D:\C++\Debug\exl-2.exe"
2020
20&&20=1
20::20=1
Pressanykeytocontinue
"D:\C-4--i-\Debug\exl-2.exe"
3060
30&&60=1
30;:60=1
Pressanykeytocontinue
第2章输入输出程序设计
1.用printf输出一个中空的五角星。
答:
#include<stdio.h>
voidmain()
(
printf("^\n");
)
截图如下:
・"D:\C+-J-\Debug\cy.exe"
Pressanykeytocontinue
2.仿照例子2.2,定义一个字符数组,从键盘输入一字符串,然后输出的程序。
答:
#include<stdio.h>
voidmain()
(
charstr[80];
printf("请输入您的名字\n");
scanf("%s",str);
printf("学生:%s,正在就读计算机专业\n”,str);
)
截图:
■'*D:\C++\Debug\cy.exe"
请蕾您的名字
基里%佳峰,正在就读计算机专业
Pressanykeytocontinue
3.从键盘输入十六进制整数,转化为八进制数输出。
答:
#include<stdio.h>
voidmain()
(
inta;
printf("请输入十六进制整数\n”);
scanf(H%x**,&a);
printf("转换成的八进制数为:%o\n”,a);
截图如下:
■*D:\C-r4-\Debug\cy.exe*
请输入十六进制整数
土换成的八进制数为:15
Pressan9keytocontinue
4.只定义两个整型数据并赋值,实现两个整型数的互换。
答:
#include<stdio.h>
voidmain()
(
inta=13,b=25;
printf("原定义的数是:a=%d,b=%d\n”,a,b);
a=aAb;
b=bAa;
a=aAb;
printf("互换后的数是:a=%d,b=%d\n",a,b);
)
截图:
原定义的数悬:a=13,b=25
互换后的数禀:a=25,b=13
Pressanykeytocontinue
5.从键盘上输入一个整数,分别输出8、16进制数的程序。
答:
#include<stdio.h>
voidmain()
inta;
printf「请输入一个整数\n");
scanf(n%dn,&a);
printf「转换成的十六进制数是%x,转换成的八进制数是%o\n”,a,a);
截图如下:
Ik'D:\C++\Debug\test.exe
请输入一个整数
苣换成的十六进制数是b,转换成的八进制数是13
Pressanykeytocontinue
6.从键盘上输入一个整数,分别输出它的个位数,十位数,百位数。
答:
#include<stdio.h>
voidmain()
{
inta,b,c,d;
scanf(**%d,\&a);
b=a%10;
c=(a/10)%10;
d=((a/100)%10);
printf("个位数是:%d,十位数是:%d,百位数是:%d\nn,b,c,d);
)
截图如下:
578
个位数是:8,十位数是:乙百位数是:5
Pressanykeytocontinue.
7.以下程序输出结果是(9,10)。
#include<stdio.h>
voidmain()
(
inti=010,j=10;
printf(%d\n**,++i,j一一);
)
8.运行程序,屏幕提示“您是一个学生吗”,您输入y或E进行回答,屏幕输出您的选项。
答:
#include<stdio.h>
voidmain()
(
chara;
printf「您是一个学生吗?请输入了或T进行回答\n");
scanf(n%cu,&a);
if(a=='y')
printf「您是学生\iT);
elseif(a==,n,)
printf("您不是学生\n”);
else
printf,请重新输入\n");
截图:
1*D:\C++\Debug\test.exe"
您是一个学生吗?请输入,,或",进行回答
y
您是学生
Pressanykeytocontinue
9.从键盘输入一个角度x,求10*sin(x)的值。
答:
#include<stdio.h>
#include<math.h>
voidmain()
(
doublex;
scanf(n%lf'\&x);
printf("10*sin(x)的值为:%lf\n**,10*sin(x));
)
截图:
"L/.\VTT—
3
10*sin〈x〉的值为:1.411200
Pressanykeytocontinue,
第3章循环程序设计
1.以下for语句的循环次数是多少?
intirj=3;
for(;i=j;i-,j--)printf("%d”,i);
答:循环次数3次
2.下面的语句显示输出6行6列的整数数组h的主对角线上的所有元素,请补充完整:
for(inti=0;i<6;i++)
nn
printf(%dzh[i][i])
3.写出以下程序运行的结果,此程序实现了什么功能?
#include<stdio.h>
voidmain()
{inta[10]={2,4,0,-5,10,6,-8,9,6Z7};
intI,count=0;
for(i=0;i<10;i++)
if(a[i]==0)count++;
elsecontinue;
printf(n%d\n”,count);
结果是1,功能是输出数字“0”的数量
4.写出以下程序的功能。
#include<stdio.h>
voidmain()
(
inta[10]={2,4Z0,-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;
}
)
答:功能是倒置数组
5.写出以下程序运行后的输出结果。
#include<stdio.h>
voidmain()
(
inti,j;
for(i=0;i<6;i++)
{
for(j=0;j<i;j++)
printf(****);
for(j=0;j<2*(5-i)-l;j++)
printf(n*H);
printf(n\nH);
答:输出倒三角形五星阵
★★★★★★★★★
★★★★★★★
*****
***
★
6.请改正下列程序的错误,改正后的程序写在右边的空白处,并上机调试检验。
(1)
#include<stdio.h>
©蠲main()
inti,s;
i=1;s=0;
while(i<=100);
printf(44I+2+3+….+99+100=%d\n”,s);
)
答:改正后为:
#include<stdio.h>
voidmain()
(
inti,s;
i=l;s=0;
while(i<=100)
(
s=s+i;
i++;
)
printf("1+2+3+....+99+100=%d\n",s);
)
截图如下:
■"D:\VC++\Debug\testl.exe"
1+2+3+-".+99+100=5050
Pressanykeytocontinue
(2)
#include<stdio.h>
voidmain()
I
inti,s|
s=0;
while(i<=100)
s=s+i;
printf("1+2+3+....+99+100=%d\n”,s);
I
答:改正如下:
#include<stdio.h>
voidmain()
(
inti9s;
i=l;
s=0;
while(i<=100)
(
s=s+i;
i++;
printf(nl+2+3+....+99+100=%d\nu,s);
)
截图如下:
■U:\VL++\ueDug\Tesri.exe
1+2+3+".+99+100=5050
Pressanykeytocontinue
(3)
#include<stdio.h>
voidmain()
I
inti=l,s;
while(i<=100);
I____
s=s+i;
i++;
8_________________
printfC41+2+3+.…+99+100=%d\n”,s);
答:改正如下:
#include<stdio.h>
voidmain()
(
inti=l,s=0;
while(i<=100)
{
s=s+i;
i++;
}
printf("l+2+3+....+99+100=%d\n",s);
}
截图如下:
■*D:\VC++\Debug\testl.exe,"
1+2+3.+99+100=5050
Pressanykeytocontinue
7.输入一个基数,例如输入9,输出为:求1*3*……*9的值。输出为:1*3*5*7*9=945
答:
#include<stdio.h>
voidmain()
longints=l,i=l,a;
printfT请输入一个整数:\暧);
scanf(n%dn,&a);
while(i<=a)
s=s*i;
i=i+2;
)
printf(nl*3*...*%d=%d\nn,a,s);
)
截图如下:
请输入一个整数:
11
1*3*...*11=10395
Pressanykeytocontinue
8.输入一个5~10之间的整数n,求1!+入+3!+…+n!°例如输入5,输出为:1!+2!+3!+…+5!
=153
答:
#include<stdio.h>
voidmain()
(
longints=O,i=l,t=l,a;
printf「请输入一个5・10的整数:\nM);
scanf(n%du,&a);
while(i<=a)
(
t=t*i;
s=s+t;
i++;
}
printf(Hl!+2!+3!+...+%d=%d\nH,a,s);
)
截图:
请输入一个5T。的整数:
5
1?+2?+3?+-+5=153
Pressanykeytocontinue
9.在屏幕上输出以下内容
1
12
123
1234
12345
123456
1234567
12345678
123456789
答:
#include<stdio.h>
voidmain()
(
inti=l,s;
while(i<=9)
(
for(s=l;s<=i;s++)
printfs);
printf("\n");
i++;
)
截图:
1
12
123
1234
12345
123456
1234567
12345678
123456789
Pressanykeytocontinue
10.求2+4+6+......+98+100的和,用多种for表达式来完成。
答:方法1
#include<stdio.h>
voidmain()
(
inti,s=0;
for(i=2;i<=100;i+=2)
s=s+i;
printf(M2+4+...+100=%d\nn,s);
方法2
#include<stdio.h>
voidmain()
(
inti=0,s=0;
for(;i<=10();)
(
s+=i;
i+=2;
)
printf(n2+4+...+100=%d\nn,s);
)
方法3
#include<stdio.h>
voidmain()
(
inti,s;
for(i=2,s=0;i<=100;s+=i,i+=2);
printf(u2+4+...+100=%d\nn,s);
)
截图
■u:\vc++\ueoug\resTi.exe
2+4+...+100=2550
Pressanykeytocontinue
10.输入一行字符,统计它有多少个字母?
答:
#include<stdio.h>
voidmain()
(
charstring[100],c;
inttotal=99,count=0,scount=0;
while(count<total){
c=getchar();
if(c==,\n,)
break;
string[count]=c;
if((c>='a'&&c<='z,)||(c>=,A,&&cv='Z')){
scount++;
count++;
}
printf(H%s,count=%d\n*1,string,scount);
第4章分支程序设计
1.输入若干整数给X,使用if语句输出x的绝对值,当输入0时结束。
答:
#include<stdio.h>
#include<math.h>
voidmain()
(
doublex;
printfC输入若干整数(0表示结束):\n”);
scanf(,,%lf'\&x);
while(l){
if(x!=0){
printf("%lf的绝对值为%H\iT,x,fabs(x));
scanf(,,%If,,&x);
}else{
break;
截图:
输入若干整数〈。表示结束):
-4-567-110-46
-4.000000的绝对值为4.000000
-5.000000的绝对值为5.000000
6.000000的绝对值为6.000000
7.000000的绝对•僮为7.000000
-11.000000的绝对值为11..000000
Pressanykeytocontinue.
2.输入•批数,输出比相邻数大的数,当输入。时结束。
答:
#include<stdio.h>
#include<math.h>
voidmain()
inta,b9c;
printf("请输入整数:\nM);
scanf(u%dM,&a);
while(a)
(
scanf(n%dn,&b);
if(b==O)
break;
if(a<b)
a=b;
printf("最大整数为:%d\n*\a);
)
截图:
请输入整数:
4661131-2320
最大整数为:32
Pressanykeytocontinue
3.将输入字符的大写字符转换成小写字符输出,小写字符原样输出。
答:
#include<stdio.h>
voidmain()
(
chara;
scanf(H%cM,&a);
if(a>=,A'&&av='Z')
printf("转换后的字母为:%c\n*\a+32);
else
printf("转换后的字母为:%c\n*\a);
截图:
,换后的字母为:h
Pressanykeytocontinue
4.输入一批字符,按回车时结束,统计小写字符、大写字符、数字字符、或其它字符的个
数。
答:
#include<stdio.h>
voidmain()
charc;
inta=0,b=0,m=0,n=0;
while(l)
(
scanf(H%cH,&c);
,
if(c==*\n)
break;
if(c>=,A,&&cv='Z')
b++;
elseif(c>=,a*&&c<=,z*)
a++;
elseif(c>='O'&&cv='9')
m++;
else
n++;
printf("小写字符有%d个,大写字符有%d个,数字字符有%d个,其它字符有%d个
)
截图:
dsada£FJSHFH98SD&&^zz$zA&DS988
小写字符有6个,大写字符有[0个,数字字符有5个,其它字符有[。个
Pressanykeytocontinue.
5.编写程序,计算分段函数:
x+5x<1
y=<2x1<x<10
3x>10
,x-10
答:
#include<stdio.h>
voidmain()
(
doublex,y;
scanf(H%lfM,&x);
if(x<=l)
y=x+5;
elseif(x>10)
y=3/(x-10);
else
y=2*x;
printf(Hy=%lf\nH,y);
}
截图:
・、・J,I\JJU,JC3
20
y=0.300000
Pressanykeytocontinue
6.根据输入的百分制按五分制的成绩输出。百分制与五分制之间的关系见下表。
百分制五分制
90~1005
80〜894
70〜793
60〜692
<601
答:
#include<stdio.h>
voidmain()
(
intx,y;
print*"请输入分数:");
scanf(H%dM,&x);
if(x>100&&x<0)
printf("成绩输入错误=%小,);
else
(
if(x<=100&&x>=90)
y=5;
elseif(x<=89&&x>=80)
y=4;
elseif(x<=79&&x>=70)
y=3;
elseif(x<=69&&x>=60)
y=2;
elseif(x<=59&&x>=0)
y=i;
printf(八五分制成绩=%3\11"/);
截图:
■"U:\vc++\Uebug\testl.exe^
Pressanykeytocontinue
7、用switch完成:读入一个实数x,再输入一整数,若输入是1,则计算sin(x),若输入2,
则计算cos(x),若输入3,则计算tan(x),若输入其他值,则显示错误信息。
答:
#include<stdio.h>
#include<math.h>
voidmain()
(
doublex;
ints;
printf("请输入一个实数,一个整数\11");
scanf(H%lf\&x);
scanf(M%du,&s);
switch(s){
case1:
printf(Hsin(x)=%If\nH,siii(x));
break;
case2:
printf(Hcos(x)=%lf\n*\cos(x));
break;
case3:
printf(Mtan(x)=%lf\nM,tan(x));
break;
default:
printf("输入错误");
break;
截图:
请输入一个实数,一个整数
0.53
tan<x>=0.546302
Pressanykeytocontinue
8、用switch完成:输入星期1到星期5,输出它们对应的颜色
星期1:blue
星期2:red
星期3white
星期4:yellow
星期5:green
答:
#include<stdio.h>
voidmain()
(
ints;
prints输入星期1到星期5\n”);
scanf(H%dM,&s);
switch(s){
case1:
printf("今天的颜色是:blue\nn);
break;
case2:
priiUf,今天的颜色是:red\nM);
break;
case3:
printf("今天的颜色是:white\n");
break;
case4:
printf("今天的颜色是:yellow\n");
break;
case5:
printf("今天的颜色是:greennH);
break;
default:
printfC输入错误");
break;
截图:
输入星期1到星期5
4
今天的颜色是:yelien.
Pressanykeytocontinue
9、用switch完成:从键盘输入A、B、C、D四个等级中的一个,转化输出
等级输出
A优秀
B良好
C中等
D及格
E不及格
答:
#include<stdio.h>
voidmain()
{
printfT从键盘输入A、B、C、D四个等级中的一个!\nn);
switch(getchar()){
case'A':
printf(“优秀n\”);
break;
case'B':
printf「良好n\”);
break;
case*C*:
printf(“中等\n”);
break;
case*D*:
printf("及格\n");
break;
case*E*:
prints”不及格\n");
break;
default:
printf("输入错误");
break;
)
}
截图
[—tJU,八
从键盘输入A、B、C、D四个等级中的一个!
:尤秀
Pressanykeytocontinue.
第5章数组及其应用
1.从键盘输入12个数,分别为:900,2,3,58,34,76,87,72,90,20,78,30,找出最大和最小数。
答:
#include<stdio.h>
voidmain()
(
inta[12];
intmax,min;
inti,m;
printer请输入12个整数\iT);
for(i=0;i<12;i++)
{
scanf(u%dn,&a[i]);
max=a[O],min=a[O];
for(i=l;K12;i++)
(
if(max<a[i])
max=a[i];
if(min>a[i])
min=a[i];
printf("最大数为:%d,最小数为:%d\n,\max,min);
截图:
请输入12个整数
90023583476877290207830
最大数为:9。。,最小数为:2
Pressanykeytocontinue
2.采用遍历查找,在数组a[SIZE]={2,3,20,58,72,76,78,87,90,900}中,找出偶数。
答:
#include<stdio.h>
#defineSIZE10
voidmain()
(
inta[SIZE]={2,3,20,58,72,76,78,87,90,900};
inti;
printf(Ma[SIZE]={2,3,20,58,72,76,78,87,90,900}中偶数为八暧);
for(i=l;i<10;i++){
if(a[i]%2==0)
printf(M%-4dM,a[i]);
截图
a[SIZE]=<2,3,20.58.72.76.78,87,90,900)中偶数为:
205872767890900Pressanykeyto
3.采用折半查找,在数组a[SIZE]={2,3,20,58,72,76,78,87,90,900}中,找到87,然后进行删
除。
答:
#include<stdio.h>
#deHneSIZE10
voidmain()
(
inta[SIZE]={2,3,20,58,72,76,78,78,90,900};
intij=0,k,nevvSize;
newSize=SIZE;
k=newSize;
printf("原来的数组:”);
for(i=();i<newSize;i++){
if(i==newSize-l){
printf(',%d\nH,a[i]);
}else{
printf(H%d,H,a[i]);
}
)
i=G+k)/2;
while(j<=k)
(
if(a[i]>78)
k=i-l;
elseif(a[i]<78)
j=i+l;
else(
for(j=i;j<newSize-l;j++)
a[j]=a[j+l];
newSize—;
k=newSize;
j=0;
)
i=(j+k)/2;
)
printer新的数组:”);
for(i=0;i<newSize;i++){
if(i==newSize-l){
printf(H%d\nM,a[i]);
}else{
printf(n%d;\a[i]);
截图
原来时数组:2,3,20,58,72,76,78,78.90,9。。
新的数组:2,3,20,58,72,76,90,900
Pressanykeytocontinue
第6章函数及其应用
练习与实践
一、阅读程序,写出程序运行的结果。
1.写出以下程序的执行结果。
#include<stdio.h>
floataver(inta[])
(
intk,sum=0;
floatave;
for(k=0;k<10;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);
printf(nave=%f\nn,ave);
)
提示:数组b的首地址传递给形参a,*(a+k)就是数组元素b(k].
答:这是求平均数,结果为:81.00000
2.阅读程序,写出程序的执行结果。
#include<stdio.h>
voidabc(charstr[])
{inta,b;
for(a=b=0;str[a]!=T\01;a++)
if(str[a]!=1cz)
str[b++]=str[a];
str[b]=1\01;
)
intmain()
(
charstr[]=nabodef";
abc(str);
printf("str[]=%s",str);
return0;
提示:数组str的首地址传递给形参str,str[a]就是实参中的数组元素str[a],当
数组元素不为,c,时进行复制。
答:结果为:str[]=abdef
3.写出以下程序的执行结果。
#include<stdio.h>
intsort(intb[]Aintn,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,iza[i]);
for(j=0;j<=i;j++)
printf(n,b[i]);
printf(”\n");
}
return0;
}
提示:循环体中
if(b[k]<x)
b[k+l]=b[k];
else
如果;版成立,执行语句b[k+l]=b[k];表示数组元素b向后移,不满足时插入X,
即从大到小排序。
答:结果是:
55
444
1111
11111
4.写出以下程序的执行结果。
#include<stdio.h>
intfun(intx)
{intp;
if(x==0||x==l)
return3;
else
p=x-fun(x-2);
returnp;
)
intmain()
(
printf(n\n%d",fun(9));
return0;
)
提示:fun(9)=9-fun(7),..fun(1)=3
答:结果是:7
5.写出以下程序的执行结果,并说明其作用是什么?
#include<stdio.h>
intf(intn)
{
if(n>=10)
f(n/10);
nn
printf(%dzn%8);
return0;
}
intmain()
{
f(1234);
printf(n\nn);
return0;
}
提示:在函数f中,程序运行借助了堆栈,依次入栈的数据分别为1234、123、12,最后
n=l,n对8取余输出,然后数据依次出栈对8取余输出。
答:结果是:1432
二、程序设计
1.编写一个函数,计算x的n次的平方。
提示:for(y=l,i=0;i<n;i++)
y=y*x;
答:
#include<stdio.h>
doubless(doublex,intn)
doubley=l;
inti;
for(i=l;i<=n;i++)
return(y);
intmain()
(
doublea;
intb;
printf("请输入x和次数n:”);
scanf("%lf%d",&a,&b);
printf("%lf的%d次方为:%If\n”,a,b,ss(a,b));
return0;
)
截图:
请输入x和次数n:1・5
1.500加0的10次方为:57.665039
Pressanykeytocontinue
2.编写•个函数,计算对角线上元素之和。
提示:for(s=0,i=0;i<n;i++)
for(j=0;j<ny++)
if(i==j)
s=s+a[i][j];
答:
#include<stdio.h>
intmain()
(
ints,ij,n=3;
inta[3][3]={
{1,2,3},
{4,5,6},
{7,8,9}
);
for(s=0,i=0;i<n;i++)
fora=0;j<n;j++)
if(i==j)
s=s+a[i][j];
printf("对角线元素之和为s=%d\n",s);
截图:
对角线元素之和为3=后
Pressanykeytocontinue
3.编写一个函数intinvert(charstr[]),将一个字符串的内容颠倒过来。
提示:先求字符串str的长度n,for(i=0;i<n/2;i++){a[i]与交换}
答:
#include<stdio.h>
intinvert(charstr[])
(
intn=strlen(str);
inti;
chartemp;
for(i=0;i<n/2;i++)
(
temp=str|i);
str[i]=str[n-i-l];
str[n-i-l]=temp;
}
)
voidmain()
(
chara[12]=Habcdefgl23u;
printf("颠倒前:%s\n”,a);
invert(a);
printf("颠倒后:%s\n”闺;
}
截图
颠倒即:abcde£gl23
颠倒后:321g£edeba
Pressanykeytocontinue
4.编写函数,删除字符串中,从指定位置m开始的n个字符。删除成功,函数返回被删除
字符串;否则返回空的值。
提示:for(k=m,i=0;strfi];i++)
str[m+ij=str[m+n+ij;
str[m+i]=,\0,;
答:
#include<stdio.h>
intcutstring(intm,intn,charstr[]){
int1=strlen(str);
if(m+n-l>=l)
return0;
intk,i;
charnstr[nj;
for(k=m,i=0;str[i];i++){
str[m+i]=str[m+n+i];
)
str[m+i]=,\0*;
return0;
)
voidmain()
(
intm,n;
charstr[H]=nddksosekcin;
printf(H%s\nM,str);
printf(nPleaseinputmandn:\nn);
scanf(M%d%dn,&m,&n);
cutstring(m,n,str);
prmtf(H%s\n,\str);
)
5.编写一个程序,从键盘输入的字符串,删去非数字字符,转换成整型数输出。
提示:for(s=0,i=0,j=0;str[i];i++)
if(str[i]>=>0,&&str[i]<=,9,)
s=s*lO+str[i]-'O';
答:
#include<stdio.h>
voidmain()
(
charstr[ll];
ints,ij;
for(i=0;i<10;i++)
scanf(M%cn,&str[i]);
for(s=0,i=0,j=0;str[i];i++)
if(str[i]>=,0,&&str[i]<=,9,)
s=s*10+str[i]-,0,;
printf(M%d\nH,s);
截图:
dse3256tr?
32567
Pressanykeytocontinue
6.用递归的方法编写一个函数sum(intn),求1至n的累加和。
提示:f(n)=n+f(n-l)
答:
#include<stdio.h>
intsum(intn)
(
ints=0,i;
for(i=l;i<=n;i++)
s=s+i;
return(s);
)
voidmain()
(
inta;
printfC请输入整数n:H);
scanf(H%dM,&a);
printf(Hl+2+...+%d=%d\nn,a,sum(a));
)
截图:
请输入整数n:50
1+2+...+50=1275
Pressanykeytocontinue
第7章变量存储类型与多文件系统
1.写出以下程序的执行结果。
#include<stdio.h>
intx;
voidfun()
(
printf(**%d",x++);
)
voidmain()
(
intx=l;
(
externintx;
printf(H,++x);
fun();
提示:在函数fun中及语句块
{
externintx;
printf(n%d,++x);
)
中使用的x是外部变量,在语句块:
if(x==l)
{intx=2;
print—”%d,“,x++);
)
中使用的是刚刚定义x=2的变量。
答:结果是1,1
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\nn,s);
提示:虽然两次调用函数kk(),但变量定义语句staticinty;只执行一次,而变量赋值语句
每次都要执行。
答:结果是s=28
3.写出以下程序的执行结果。
#include<stdio,h>
intt()
(
intx=0;
staticinty=4;
y+=++x;
returnx+y;
}
voidmain()
(
printf(n%d\n%(t(),t()));
)
提示:语句printf("带d\n",(t(),t()));中(t(),t())属于“,”号表达式,即两次调
用函数t(),在函数t()中,y为静态内部变量,因而语句staticinty=4;只执行一次。
答:结果是7
第8章文件
1.下述程序从终端读入文本(用$作为文本结束标志)复制到•个名为。ut.dat的新文件中,
请补全程序。
#include<stdio.h>
intmain()
{
FILE*fp;
charex;
if((fp=fopen((1)))==NULL)
return0;
while((cx=getchar())!='$,)
fputc(ex,fp);
(2);
return1;
)
提示:第1个空格是打开文件读,第2个空格是关闭文件。
答:1,"out.txt/',〃r+〃2.fclose(fp)
2.下面的程序用来统计文件中字符的个数,请补全程序。
#include<stdio.h>
intmain()
{FILE*fp;
longnum=0;
HnnT
if((fp=fopen(fname.datzr'))==NULL)
{
printf("Can'topenfile!\nn);
exit(0);
)
while((1))
{
fgetc(fp);
num++;
)
printf(”num=%d\n”,num);
fclose(fp);
return1;
|
提示:第1个空格表示文件没有结束,循环将持续。
答:!feof(fp)
3.以下程序由终端键盘输入一个文件名,然后把从终端键盘输入的字符,依次存放到该文件
中,用#作为结束输入的标志,请补全程序。
#include<stdio.h>
voidmain()
FILE*fp;
charch,fname[10];
printf("Inputthenameoffile\n'*);
gets(fname);
if((fp=)==NULL)
{
printf("Cannotopen\nH);
exit(0);
)
printf("Enterdata\nn);
while((ch=getchar())!=*#*)
fputc(,fp);
fclose(fp);
)
提示:文件名是从键盘读入的,因而文件名是用变量表示的,文件是打开写。
答:1.fopen("fname””+”)
2.ch
4.下述程序从一个二进制文件中读入结构体数据,并把读出的数据显示在屏幕上。请补全
程序。
#include<stdio.h>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版市政基础设施文明施工与环境保护责任协议3篇
- 2025年陕西燃气集团工程有限公司招聘笔试参考题库含答案解析
- 2025年度个人门面房出租合同(含家具配置及经营指导协议)4篇
- 2025年度个人信用卡透支担保合同协议书4篇
- 2025年度个人医疗健康保险缴费协议书4篇
- 2025年全球及中国智能直播一体机行业头部企业市场占有率及排名调研报告
- 2024年六五环境日网络知识竞赛测试题库及答案
- 设计合同协议书
- 2025年度个人挖机租赁合同变更通知合同4篇
- 二零二五年度车辆收费员薪资待遇及福利协议材料详尽条款4篇
- 第1课 隋朝统一与灭亡 课件(26张)2024-2025学年部编版七年级历史下册
- 2025-2030年中国糖醇市场运行状况及投资前景趋势分析报告
- 冬日暖阳健康守护
- 水处理药剂采购项目技术方案(技术方案)
- 2024级高一上期期中测试数学试题含答案
- 盾构标准化施工手册
- 天然气脱硫完整版本
- 山东省2024-2025学年高三上学期新高考联合质量测评10月联考英语试题
- 不间断电源UPS知识培训
- 三年级除法竖式300道题及答案
- 人教版八级物理下册知识点结
评论
0/150
提交评论