浙江大学远程教育学院
《程序设计基础(C)》课程作业答案
第1章C语言的基本构成
程序调试题
1.编辑、调试以下程序
步骤1:在Visual C++环境下新建文件可用[开始]→[程序]→[Microsoft Visual C++6.0] →[Microsoft Visual C++6.0] →[文件] →[新建]→[文件] →[C++ Sourse File],输入文件名ex1-1.c,程序代码如下:
请思考文件ex1-1.c由几个函数构成2个?调用了那几个系统函数main,系统标识符scanf,printf?此程序中用到了哪几个保留字int?哪几个用户自定义标识符add,x,y,z,a,b,c?
步骤3:
编译并运行程序,程序运行时输入两个整数,20 40 ,观察程序运行的结果。20+40=60 2.编辑、调试以下程序
步骤1:在Visual C++环境下新建文件可用[开始]→[程序]→[Microsoft Visual C++6.0] →[Microsoft Visual C++6.0] →[文件] →[新建]→[文件] →[C++ Sourse File],输入文件名ex1-2.c
步骤2:在文本编辑器中输入以下C程序
码为:
步骤4:[文件] →[新建]→[文件] →[C++ Sourse File],输入文件名ex1-2-3.c,源程序代码为:
步骤5:点击编译图标,编译程序1-2.c
步骤4:点击执行图标,执行程序1-2.c ,当程序运行时,键盘输入20 40,按回车。
20 40
20 && 40=1
20 || 40=1
您可以输入其它的整数,观察程序的执行结果。
第2章输入输出程序设计
1.用printf输出一个中空的五角星。printf(“hello\n”);
2.仿照例子 2.2,定义一个字符数组,从键盘输入一字符串,然后输出的程序。char
str[80]=”hello,world”; printf(“%s\n”,str);
3.从键盘输入十六进制整数,转化为八进制数输出。Scanf(“%x”,&a);printf(“%o\n”,a) 4.只定义两个整型数据并赋值,实现两个整型数的互换。int x=3,y=6;temp=x;x=y;y=temp; 5.从键盘上输入一个整数,分别输出8、16进制数的程序。int a;scanf(“%d”,&a);printf”%-4o%-4x”,a,a);
6.从键盘上输入一个整数,分别输出它的个位数,十位数,百位数。int a;scanf(“%d”,&x);y1=y%10;y=y/10;y2=y%10;y=y/10;y3=y/10;
7.以下程序输出结果是(i=9;j=10 )。
#include
void main()
{
int i=010,j=10;
printf("%d,%d\n",++i,j-- );
}
8.运行程序,屏幕提示“您是一个学生吗”,您输入?y?或?n?进行回答,屏幕输出您的选项。
char,a;printf(“您是个学生吗\n”);scanf(“%s”,&a);if(a=?y?)printf(“您是个学生\n”);else printf(“您不是个学生\n”)
9.从键盘输入一个角度x,求10*sin(x)的值。#include
scanf(%f”,&a);b=10*sin(a);printf(“b=%f\n”,b)
第3章循环程序设计
1.以下for语句的循环次数是多少?
int i,j=3;
for(;i=j;i--,j--) printf("%d",i);
2.下面的语句显示输出6行6列的整数数组h的主对角线上的所有元素,请补充完整:
for(int i=0;i< 6 ; i++ )
printf("%d", a[i][i] )
3.写出以下程序运行的结果,此程序实现了什么功能?计算数组中0的个数
#include
void main()
{ int a[10]={2,4,0,-5,10,6,-8,9,6,7};
int i, count=0;
for(i=0;i<10;i++)
if(a[i]==0) count++;
else continue;
printf("%d\n ", count);
}
4.写出以下程序的功能。反序
#include
void main()
{
int a[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-1];
a[10-k-1]=tmp;
}
}
5.写出以下程序运行后的输出结果。
#include
void main()
{
int i,j;
for(i=0;i<6;i++)
{
for(j=0;j
printf(" ");
for(j=0;j<2*(5-i)-1;j++)
printf("*");
printf("\n");
}
}
*********
*********
*********
*********(省略两行)
6.请改正下列程序的错误,改正后的程序写在右边的空白处,并上机调试检验。
(1)
#include
void main( )
{
int i,s;
i=1; s=0;
while(i<=100)
{ s=s+i;
i++;}
printf(“1+2+3+….+99+100=%d\n”,s);
}
(2)
#include
void main( )
{
int i,s;
i=1;
s=0;
while(i<=100)
{s=s+i;
i++;}
printf(“1+2+3+….+99+100=%d\n”,s);
}
(3)
#include
void main( )
{
int i=1,s;
s=0
while(i<=100) ;
{
s=s+i;
i++;
}
printf(“1+2+3+….+99+100=%d\n”,s);
}
7.输入一个基数,例如输入9,输出为:求1*3*……*9的值。输出为:1*3*5*7*9=945i=1;s=1;for(i=1;i<=9;i=i+2){s=s*i;}
8.输入一个5~10之间的整数n,求1!+2!+3!+...+n!。例如输入5,输出为:1!+2!+3!+ (5)
=153#include
int main()
{
int i;
int s=0;
int a;
int j,js;
printf("请输入一个5~10之间的整数:\n");
scanf("%d",&a);
for(i=1;i<=a;i++)
{
for(j=1,js=1;j<=i;j++)
{
js*=j;
}
s+=js;
}
printf("%d的阶乘和=%d\n",a,s);
return 0;
}
9.在屏幕上输出以下内容
1
12
123
1234
12345
123456
1234567
12345678
123456789 #include
int main()
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf("%1d ",j);
printf("\n");
}
return 0;
}
10.求2+4+6+……+98+100的和,用多种for表达式来完成。for(i=2;i<=100;i+=2) sum+=i; 11.输入一行字符,统计它有多少个字母?#include
#include
int main()
{
char str[80];
gets(str);
int i=0;
int num=0;
while(str[i]!='\0'){
if(str[i]>'a'&&str[i]<'z'||str[i]>'A'&&str[i]<'Z');
num++;
i++;
}
printf("%d\n",num);
return 0;
}
第4章分支程序设计
1.输入若干整数给x,使用if语句输出x的绝对值,当输入0时结束。#include
{
int x;
scanf("%d",&x);
for(;x;scanf("%d",&x))
{
if(x<0) x=-x;
printf("%d",x);
}
return 0;
}
2.输入一批数,输出比相邻数大的数,当输入0时结束。#include
int main()
{
int a[10];
int i,num=0;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
if(a[0]>a[1]) num++;
else if(a[9]>a[8]) num++;
else
for(i=1;i<9;i++)
{
if(a[i-1]a[i+1]) num++;
}
printf("比相邻数大的数据个数=%d\n",num);
return 0;
}
3.将输入字符的大写字符转换成小写字符输出,小写字符原样输出#include
int main()
{
char ch;
scanf("%c",&ch);
if(ch>'A'&&ch<'Z') ch=ch+32;
printf("%c\n",ch);
return 0;
}
4.输入一批字符,按回车时结束,统计小写字符、大写字符、数字字符、或其它字符的个数。#include
int main()
{
int xiaoxie=0;
int daxie=0;
int num=0;
int others=0;
char a;
while((a=getchar())!='\n')
{
if(a>'a'&&a<'z') xiaoxie++;
else if(a>'A'&&a<'Z') daxie++;
else if(a>'0'&&a<'9') num++;
else others++;
}
printf("小写=%d 大写=%2d 数字=%d 其他=%d\n",xiaoxie,daxie,num,others); return 0;
}
5.编写程序,计算分段函数:
10101110
325><<≤???????-+=x x x x x x y
if(x<=1) y=x+5;else if(x<10) y=2x;else y=3/(x-10);
6
if(x>90) printf(“wufenzhi=5);else(x>80)……..
7、用switch 完成:读入一个实数x ,再输入一整数,若输入是1,则计算sin(x),若输入2,
则计算cos(x),若输入3,则计算tan(x),若输入其他值,则显示错误信息。#include
int main()
{
int a=4;
float x;
printf("请输入一个实数\n");
scanf("%f",&x);
printf("请输入需要的计算1-sin;2-cos;3-tan\n");
scanf("%d",&a);
switch(a)
{
case 1:printf("%f\n",sin(x));break;
case 2:printf("%f",cos(x));break;
case 3:printf("%f",tan(x));break;
default:printf("信息出错\n");
}
return 0;
}
8、用switch完成:输入星期1 到星期5,输出它们对应的颜色
星期1:blue
星期2:red
星期3:white
星期4:yellow
星期5:green #include
int main()
{
char day;
scanf("%c",&day);
switch(day)
{
case 'm':printf("bule\n");break;
case 't':printf("red\n");break;
default:printf("error\n");break;
}
return 0;
}
9、用switch
#include
int main()
{
char ch;
scanf("%c",&ch);
switch(ch)
{
case 'A':printf("A=优秀\n");break;
case 'B':printf("B=良好\n");break;
default:printf("error");break;
}
return 0;
}
ch=getchar();putchar(ch);putchar('e');
第5章数组及其应用
1.从键盘输入12个数,分别为:900,2,3,58,34,76,87,72,90,20,78,30,找出最大和最小数。#include
int main()
{
int i,a[12],max,min;
printf("请输入12个数:\n");
for(i=0;i<12;i++)
scanf("%d",&a[i]);
printf("显示输入的数组:\n");
for(i=0;i<12;i++)
printf("%d ",a[i]);
printf("\n");
if(a[1]>a[0])
{
max=a[1];
min=a[0];
}
else
{
min=a[1];
max=a[0];
}
for(i=2;i<12;i++)
{
if(a[i]>max)
max=a[i];
if(a[i] min=a[i]; } printf("max=%d min=%d\n",max,min); return 0; } 2.采用遍历查找,在数组a[SIZE]={2, 3,20,58, 72, 76,78,87,90,900}中,找出偶数。 #include int main() { int i,a[12],y; printf("请输入12个数:\n"); for(i=0;i<12;i++) scanf("%d",&a[i]); printf("显示输入的数组:\n"); for(i=0;i<12;i++) printf("%d ",a[i]); printf("\n"); printf("偶数有:\n"); for(i=0;i<12;i++) { if(a[i]%2==0) printf("%d \n",a[i]); } return 0; } 3.采用折半查找,在数组a[SIZE]={2, 3,20,58, 72, 76,78,87,90,900}中,找到87,然后进行删除。#include #define SIZE 10 int main() { int i,m,low=0,high=SIZE-1,mid,found=0; int a[SIZE]={2,3,20,58,72,76,78,87,90,900}; scanf("%d",&m); while((low<=high)&&(found==0)) { mid=(low+high)/2;