1、浙江大学远程教育学院程序设计基础(C) 课程作业姓名: 学 号:年级: 2013(春)计算机科学与技术(专本( 业余)学习中心: 南京学习中心第章 语言的基本构成、程序调试题1 编辑、调试以下程序步骤 1:在 Visual C+环境下新建文件可用 开始 程序Microsoft Visual C+6.0 Microsoft Visual C+6.0 文件 新建文件 C+ Sourse File,输入文件名 ex1-1.c,程序代码如下:include /*文件预处理,包含标准输入输出库,程序可调用输入、输出函数*/int add(int x,int y) int z; z=x+y; return
2、 z; int main( ) int add(int,int); /* 函数的说明,告诉系统在主函数中要调用 add 函数 */int a,b,c; /* 变量的定义*/scanf(“%d %dn“,c=add(a,b); /* 函数调用 */ printf(“%d+%d=%dn“,a,b,c); /* 调用系统输出函数 printf,%d 为格式控制符,依次用后面的变量值填充,以整数形式输出 */请思考文件 ex1-1.c 由几个函数构成?由个函数构成调用了那几个系统函数?调用 2 个系统函数,分别是 scanf 和 printf此程序中用到了哪几个保留字?哪几个用户自定义标识符?保留字:
3、int,return 自定义表示符:z,x,y,a,b,c步骤 3:编译并运行程序,程序运行时输入两个整数,20 40 ,观察程序运行的结果。20+40=602 编辑、调试以下程序步骤 1:在 Visual C+环境下新建文件可用 开始 程序Microsoft Visual C+6.0 Microsoft Visual C+6.0 文件 新建文件 C+ Sourse File,输入文件名 ex1-2.c步骤 2:在文本编辑器中输入以下 C 程序#include /*文件预处理,包含标准输入输出库,程序可调用输入、输出函数*/#includeint main( ) int and(int,int
4、); /* 函数的说明,告诉系统在主函数中要调用 and 函数 */int or(int,int); /* 函数的说明,告诉系统在主函数中要调用 and 函数 */int a,b,c; /* 变量的定义*/scanf(“%d %d“,c=and(a,b); /* 函数调用 */ printf(“%d /*调用系统输出函数 printf,%d 为格式控制符,依次用后面的变量值填充,以整数形式输出 */c=or(a,b); /* 函数调用 */ printf(“%d | %d=%dn“,a,b,c); 步骤 3:文件 新建文件 C+ Sourse File,输入文件名 ex1-2-2.c,源程序代
5、码为:int and(int a,int b)int c;c=areturn c;步骤 4:文件 新建文件 C+ Sourse File,输入文件名 ex1-2-3.c,源程序代码为:int or(int a,int b)int c;c=a|b;return c;步骤 5:点击编译图标 ,编译程序 1-2.c 步骤 4:点击执行图标 ,执行程序 1-2.c ,当程序运行时,键盘输入 20 40,按回车。20 4020 printf(“t * * n“);printf(“t * * n“);printf(“t* * * * * * * * n“);printf(“t * * n“);printf
6、(“t * * n“);printf(“t * * n“);printf(“t * * * n“);printf(“t * * * * n“);printf(“t* *n“);2 仿照例子 2.2,定义一个字符数组,从键盘输入一字符串,然后输出的程序。#include int main()char s255;printf(“请输入:“);scanf(“%s“,s);printf(“你输入的是:%sn“,s);return 0;3 从键盘输入十六进制整数,转化为八进制数输出。#include int main()int a;printf(“请输入一个十六进制数:“);scanf(“%x“,pri
7、ntf(“这个数转化为八进制数为%on“,a);return 0;4 只定义两个整型数据并赋值,实现两个整型数的互换。#include int main()int a = 10; int b = 20;a = ab;b = ba;a = ab;printf(“a = %d , b = %dn“,a,b);return 0;5 从键盘上输入一个整数,分别输出 8、16 进制数的程序。#include int main()int a;printf(“请输入一个十进制数:“);scanf(“%d“,printf(“这个数转化为八进制数为%on“,a);printf(“这个数转化为八进制数为%xn“,
8、a);return 0;6 从键盘上输入一个整数,分别输出它的个位数,十位数,百位数。#includeint main()int a;scanf(“%d“,printf(“百位数为%dn“,a/100);printf(“十位数为%dn“,a%100/10);printf(“个位数为%dn“,a%10);return 0;7 以下程序输出结果是( 9,10 ) 。#includevoid main()int i=010,j=10;printf(“%d,%dn“,+i,j- );8 运行程序,屏幕提示“您是一个学生吗” ,您输入y或 n进行回答,屏幕输出您的选项。#includeint main(
9、)char s;printf(“你是学生吗(Y/N):“);scanf(“%s“,if(s = Y | s = y)printf(“你是学生n“); elseprintf(“你不是学生n“);return 0;9 从键盘输入一个角度 x,求 10*sin(x)的值。#include#include int main()int a;scanf(“%d“,double r = 10 * sin(a);printf(“%fn“,r);return 0;第章 循环程序设计-1以下 for 语句的循环次数是多少?int i,j=3;for(;i=j;i-,j-) printf(“%d“,i);执行了3次
10、-2下面的语句显示输出 6 行 6 列的整数数组 h 的主对角线上的所有元素,请补充完整:for(int i=0;ivoid main() int a10=2,4,0,-5,10,6,-8,9,6,7;int i, count=0;for(i=0;ivoid main()int a10=2,4,0,-5,10,6,-8,9,6,7,tmp,k;for (k=0;kvoid main()int i,j;for(i=0;ivoid main( )int i,s;i=1; s=0;while(ivoid main( )int i,s;i=1;s=0;while(ivoid main( )int i=
11、1,s;while(iint main()while(ivoid main( )int i,s;i=1; s=0;while(iint main()int a,b,c;b = 1;c = 0;scanf(“%d“,for(int i = 1; i int main()for(int a = 1; a int main()int sum = 0;for(int a = 2; a int main()int count = 0;char s255;scanf(“%s“,s);for(int i = 0; i = a scanf(“%d“,for (;x;scanf(“%d“,elseprintf(
12、“%dn“,-x);return 0;2输入一批数,输出比相邻数大的数,当输入 0 时结束。#includeint main()int a;int b = 0;scanf(“%d“,b = a;for (;a;scanf(“%d“,b = a;return 0;3将输入字符的大写字符转换成小写字符输出,小写字符原样输出。#includeint main()char c;while (c = getchar() != n)if (c = A int dx = 0,xx = 0,sz = 0,qt = 0;while (c = getchar() != n)if (c = A scanf(“%f“
13、,if (x int main()int a;scanf(“%d“,if (a 90)printf(“5n“);else if (a 80)printf(“4n“);else if (a 70)printf(“3n“);else if (a 60)printf(“2n“);elseprintf(“1n“);return 0;7、用 switch 完成:读入一个实数 x,再输入一整数,若输入是 1,则计算 sin(x),若输入2,则计算 cos(x),若输入 3,则计算 tan(x),若输入其他值,则显示错误信息。#include#include int main()int a,b;scanf(
14、“%d,%d“,switch(a)case 1:printf(“y=sin(x)=%f“,sin(b);break;case 2:printf(“y=cos(x)=%f“,cos(b);break;case 3 :printf(“y=tan(x)=%f“,tan(b);break;default:printf(“error“);break;return 0;8、用 switch 完成:输入星期 1 到星期 5,输出它们对应的颜色星期 1:blue星期 2:red星期 3:white星期 4:yellow星期 5:green#includeint main()int a;scanf(“%d“,s
15、witch(a)case 1:printf(“星期一:bluen“);break;case 2:printf(“星期二:redn“);break;case 3:printf(“星期三:whiten“);break;case 4:printf(“星期四:yellown“);break;case 5:printf(“星期五:greenn“);break;default:printf(“errorn“);break;return 0;9、用 switch 完成:从键盘输入 A、B、C、D 四个等级中的一个,转化输出等级 输出A 优秀B 良好C 中等D 及格E 不及格#includeint main(
16、)char a;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(“errorn“);break;return 0;第章 数组及其应用.从键盘输入 12 个数,分别为:900,2,3,58,34,76,87,72,90,20,78,30,找出最大和最小数。#includeint main()int a12;
17、for (int i = 0; i max)max = aj;if (aj #define SIZE 100int main()int aSIZE = 2,3,20,58,72,76,78,87,90,900;for (int i = 0; i #define SIZE 11#define FOUND 87int main()int aSIZE = 2, 3,20,58, 72, 76,78,87,90,900;int low = 0,high = SIZE-1,mid;mid = (low + high) / 2;while (low FOUND)high = mid;mid = (high
18、 + low) / 2;elsebreak;for (int j = mid; j float aver(int a) int k,sum=0;float ave;for(k=0;k void abc( char str )int a, b ;for(a = b = 0 ; stra!=0; a+ )if(stra!= c)strb+ = stra;strb=0;int main( )char str =“abcdef“ ;abc(str);printf(“str =%s “ , str );return 0;提示:数组str的首地址传递给形参str,stra就是实参中的数组元素stra,当数
19、组元素不为c时进行复制。str =abdef3写出以下程序的执行结果。#includeint sort(int b,int n,int x)int k;for(k=n-1;k=0;k-)if(bkint fun(int x) int p;if(x=0|x=1)return 3;elsep=x-fun(x-2);return p;int main( )printf(“n%d“,fun(9);return 0; 提示:fun(9)=9-fun(7),.,fun(1)=375写出以下程序的执行结果,并说明其作用是什么?#includeint f(int n)if(n=10)f(n/10);print
20、f(“%d“,n%8);return 0;int main( )f(1234);printf(“n“);return 0; 提示:在函数f中,程序运行借助了堆栈,依次入栈的数据分别为1234、123 、12 ,最后n=1,n 对8 取余输出,然后数据依次出栈对8取余输出。1432二、程序设计1编写一个函数,计算 x 的 n 次的平方。 提示:for(y=1,i=0;iint main( )int x,n,y,i;scanf(“%d%d“,for(y=1,i=0;iint main( )int a1010;int i = 0,j=0;int sum = 0;for (i = 0; i int i
21、nvert(char str)char ch;int i;for (i = 0;(ch=stri) != 0;i+);for (int j = 0; j int main( )char str255;int index,num;gets(str);scanf(“%d,%d“,int i=0,j = 0;char ch;for (;(ch=stri)!=0;i+);for (j = 0;j i)str0 = 0;puts(str);return 0;5编写一个程序,从键盘输入的字符串,删去非数字字符,转换成整型数输出。 提示:for(s=0 , i=0 , j=0 ; stri;i+)if(st
22、ri=0gets(str);int i=0,j = 0;int s = 0;char ch;for (;(ch=stri)!=0;i+)if (ch = 0 if (n = 1)a = 1;elsea = n + sum(n - 1);return a;int main( )int n;scanf(“%d“,int s = sum(n);printf(“%dn“,s);return 0;第章 变量存储类型与多文件系统1写出以下程序的执行结果。#includeint x;void fun( )printf(“%d “,x+);void main( )int x=1;extern int x;pr
23、intf(“%d,“,+x);fun( );提示:在函数fun中及语句块extern int x;printf(“%d,“,+x);中使用的x是外部变量,在语句块:if(x=1)int x=2;printf(“%d,“,x+);中使用的是刚刚定义x=2的变量。1,1 2写出以下程序的执行结果。#include int kk( ) int x = 4 ; static int y ; y = 5 ; x*= 2 ; y*= 2; return(x+y);void main() int j , s = 0 ;for ( j = 0 ; j int t( )int x = 0 ;static int
24、 y = 4 ;y += +x ;return x+y;void main( ) printf(“%d n“,( t( ), t( ) );提示:语句printf(“%d n“,(t( ), t( );中(t( ),t( )属于“,”号表达式,即两次调用函数t( ),在函数 t( )中,y为静态内部变量 ,因而语句static int y = 4 ;只执行一次。7第章 文件1下述程序从终端读入文本(用$作为文本结束标志)复制到一个名为 out.dat 的新文件中,请补全程序。#include int main()FILE *fp;char cx;if(fp=fopen( “out.dat“,“
25、a+“ )=NULL)return 0;while(cx=getchar( )!=$)fputc(cx,fp);fclose(fp) ;return 1;提示:第1个空格是打开文件读,第2个空格是关闭文件。2下面的程序用来统计文件中字符的个数,请补全程序。#includeint main( ) FILE *fp;long num=0;if(fp=fopen(“fname.dat“,“r“)=NULL)printf(“Cant open file!n“);exit(0);while( !feof(fp) ) fgetc(fp); num+;printf(“num=%dn“,num);fclose
26、(fp);return 1;提示:第1个空格表示文件没有结束,循环将持续。. 以下程序由终端键盘输入一个文件名,然后把从终端键盘输入的字符,依次存放到该文件中,用#作为结束输入的标志,请补全程序。#includevoid main( )FILE *fp;char ch,fname10;printf(“Input the name of filen“);gets(fname);if(fp= fopen( “out.dat“,“a+“ ) )=NULL)printf(“Cannot openn“); exit(0);printf(“Enter datan“);while(ch=getchar( )
27、!=#)fputc( ch ,fp);fclose(fp);提示:文件名是从键盘读入的,因而文件名是用变量表示的,文件是打开写。4下述程序从一个二进制文件中读入结构体数据,并把读出的数据显示在屏幕上。请补全程序。#include struct rec int a;float b;void recout(FILE *fp)struct rec r;dofread( if( feof(fp) )break ;printf(“%d,%f“,r.a,r.b);while(1);void main() FILE *fp;fp=fopen(“file.dat“,“rb“);recout(fp);fclos
28、e(fp);提示:在fread 语句中,(1)中为存放所读出结构数据的内存地址,当然此数据是赋给变量r,(2)中是读出结构体变量数据的个数,(3)是与循环中止有关的判断,(4)为中止循环。.从键盘输入一个字符串,并逐个将字符串的每个字符传送到磁盘文件“l1.txt“中,字符串的结束标记为“#“。#include #include void main() FILE *fp;char ch;fp=fopen(“11.txt“,“ab+“);if (fp = NULL)printf(“Open file failed!“);exit(0);while (ch = getchar() != #)fpu
29、tc(ch,fp);fclose(fp);有一文本文件 l1.txt,请编写一个程序将文件中的英文字母及数字字符显示在屏幕上。提示:#include #include void main() FILE *fp;char ch;fp=fopen(“11.txt“,“rb“);if (fp = NULL)printf(“Open file failed!“);exit(0);while (!feof(fp)ch = fgetc(fp);if (ch = A char ch;fin=fopen(“11.txt“,“rb“);fout = fopen(“12.txt“,“ab+“);if (fin =
30、 NULL | fout = NULL)printf(“Open file failed!“);exit(0);while (!feof(fin)ch = fgetc(fin);if (ch = 0 double y;fp=fopen(“16.txt“,“ab+“);if (fp = NULL)printf(“Open file failed!“);exit(0);for (int i = 0; i 0)fprintf(stdout,“%lfn“,y);fclose(fp);第章 指针与数组程序阅读与填空题1分析下列程序,输出结果是( ) 。#includevoid main()int *p1
31、,x=10;float *p2,y=2.5;p1= p2=printf(“%d, %fn“,+(*p1), (*p2)+ ); 提示:+ 都作用在内容上,前一项是先+再输出,后一项是先输出再+。11, 2.5000002下列程序输出结果是( ) 。#includevoid main()int a =1,2,3 ,4,5,6,*p=a;printf(“%d,%dn“,*p,*(p+3);提示:语句*(p+3)+=2;指p+3 的地址上的内容加2,然后输出p及p+3的地址上内容。1,43下列程序输出结果是( ) 。#includevoid main()int a =1,2,3,4,5,6;int
32、x,y,*p;p=x=*(p+2);y=*(p+4); printf(“*p=%d,x=%d,y= %dn“,*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,405下列程序输出的结果是( ) 。#include void
33、 del( char *str )int a, b ;for(a = b = 0 ; stra!=0; a+ )if(*(str+a)!=c)*(str+b+)=*(str+a);strb=0;void main( )char str =“abcdef“ ;del(str);printf(“str =%s “ , str );提示:在函数del中str+a地址上的内容不为字符c时不复制,实际上是指删除指针str所指的字符串中的字符c 。str=abdef6以下程序输出的结果是( ) 。#include#includevoid fun( char *w ,int m)char s, *p1 , *p2;p1 = w;p2= w+m-1;while(p1 void main( ) int a33 = 2,0,8,4,6;int i,*p = for(i = 0;i3;i+) if (i = 0)aii+1=*p+1;else+p; printf(“%d“,*p);