课程设计报告
课程设计名称: C语言程序设计
指导教师:
学生:
学号:
学院:电子信息工程学院
完成时间: 2011年9月27日
嘉应学院电子信息工程学院
1
C语言课程设计说明书
目录
1 需求分析 (1)
2总体设计 (2)
3详细设计 (3)
3.1 换位加密流程图 (3)
3.2 换位解密流程图 (4)
3.3 替代加密流程图 (5)
3.4 替代解密流程图 (6)
4调试与测试 (8)
5测试结果 (8)
6附录 (11)
I
1 需求分析
问题描述(实验指导书中已经给出)
①数据的输入和输出;要求使用文件操作。文件(明文,仅限于英文字母)存放在某一已知文本文件中,加密后的文件(密文)存放在另一文件中。
②换位加密和解密:
加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;解密:输入密文后再输入移位位数则可输出明文;
③凯撒加密和解密:
加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;解密:输入密文后再输入移位位数则可输出明文;
④统计单词的个数;
⑤退出。
2总体设计
(程序设计总流程图,可以画带流程线的流程图)
此处只需要写出一个流程图就可以了,就是总的那个流程图,请规范的画图。不需要分出2.1和2.2.
开始
welcome()
caidan()
transpen( ); transpde(
)
caesaren(
)
caesarde() mingwent miwentongji(byebye()
3详细设计
(各模块功能说明,如函数功能、入口及出口参数说明,函数调用关系描述等
这块大家问题最多了,这里不是写程序代码,而是写流程图里面各个主要函数的作用,函数之间关系的说明。
以第1题为例,此处应为:
3.1 换位加密流程图
流程图
(对流程图加以说明。可以把关键语句放在此处,加以注释说明) 建立mingwen.txt 和miwen.txt 文件
输入密钥n
输入明文到数组r
k=strlen(r)j 计算数组r 长度
for i=0 to k
关闭并保存mingwen.txt 文件
打开mingwen.txt 文件
space(h,r) 将明文去空格并放到数组h 中
m=strlen(h) 计算数组h 长度
m%n==0
是 否
hang=m/n hang=m/n+1 j=0
for i=0 to hang for i=m to hang*n
z=0
fputc(r[i],mingwen) 将明文存放到mingwen.txt
文件中
for j=0 to n h[i]='a'+j j++
for i=0 to hang
zl[i][j]=h[z] z++ for j=o to n
zl[i][j]=h[z]
z++
for i=0 to n
for j=0 to hang
he[z]=zl[j][i]
输出he[z]
z++
fputc(zl[j][i],miwen)
fclose() 关闭并保存mingwen.txt文件
fclose() 关闭并保存miwen.txt文件
清屏返回菜单
3.2 换位解密流程图
流程图
(对流程图加以说明。可以把关键语句放在此处,加以注释说明)建立mingwen.txt和miwen.txt文件
输入密钥n
输入明文到数组r
k=strlen(r)j 计算数组r长度
for i=0 to k
fputc(r[i],miwen) 将密文存放到miwen.txt文件
中
关闭并保存miwen.txt文件
打开miwen.txt文件
space(h,r) 将明文去空格并放到数组h中
m=strlen(h) 计算数组h长度
m%n==0
是 否
hang=m/n hang=m/n+1 j=0
for i=0 to n for i=m to hang*n
z=0
for i=0 to hang
fclose(mingwen) 关闭并保存mingwen.txt 文件
fclose(miwen) 关闭并保存miwen.txt 文件
清屏 返回菜单
3.3 替代加密流程图
流程图
(对流程图加以说明。可以把关键语句放在此处,加以注释说明)
建立mingwen.txt 和miwen.txt 文件
ch=getchar() 接收回车字符
Ch=getchar() 开始输入明文
当ch!='\n'
fclose(mingwen)) 关闭并保存mingwen.txt 文件
for j=0 to hang h[i]='a'+j j++
for i=0 to n
zl[i][j]=h[z] z++ for j=o to hang
zl[i][j]=h[z]
z++
for j=0 to n
he[z]=zl[j][i]
输出he[z]
z++
fputc(zl[j][i],mingwen)
fputc(ch,mingwen) 将明文放到mingwen.txt 文件中
ch=getchar()
输入密钥 i
直到!(i>=0&&i<=26)成立
打开mingwen.txt文件
ch=fgetchar(mingwen) 开始从明文中读出字符
当ch!=EOF
(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')
是否 ch=ch+i;
ch>'Z'&&ch<='Z'+i||ch>'z'
是否
ch=ch-26
fputc(ch,miwen)
输出ch
ch=fgetc(mingwen)
fclose(mingwen) 关闭并保存mingwen.txt文件
fclose(miwen); 关闭并保存miwen.txt文件
清屏返回菜单
3.4 替代解密流程图
流程图
(对流程图加以说明。可以把关键语句放在此处,加以注释说明)建立mingwen.txt和miwen.txt文件
ch=getchar() 接收回车字符
Ch=getchar() 开始输入明文
当ch!='\n'
fputc(ch,mingwen) 将明文放到mingwen.txt文件中
ch=getchar()
fclose(mingwen)) 关闭并保存mingwen.txt文件
输入密钥 i
直到!(i>=0&&i<=26)成立
打开mingwen.txt文件
ch=fgetchar(mingwen) 开始从明文中读出字符
当ch!=EOF
(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z') 是否 ch=ch+i;
ch>'Z'&&ch<='Z'+i||ch>'z'
是否
ch=ch+26
fputc(ch,mingwen)
输出ch
ch=fgetc(miwen)
fclose(mingwen) 关闭并保存mingwen.txt文件
fclose(miwen); 关闭并保存miwen.txt文件
清屏返回菜单
4调试与测试
(调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施)
调试程序,描述测试过程中遇到的问题和解决办法
1.文件操作时打开的文件应该及时关闭,不然不会保存,在下次打开时就读不到以前存放在该文件里面的数据,而编译时却不会提示有错误。
2..函数调用时,被调函数必须在前面声明或者写在调用函数的上面,不然在编译时也不会提示错误,程序却不能执行。
3.空格的去除;采用指针的方法将去除空格的字符串放到另一个数组中
4.菜单函数的容错;用default:system("cls"); caidan();实现。
5. 加密解密后返回主菜单;在每个函数后面加
ch=getchar();ch=getchar();system("cls");caidan();第一个h=getchar()接收回车字符,第二个
ch=getchar()使屏幕上的显示暂停,并实现返回主菜单的操作。
5测试结果
(用几组测试数据进行测试算法设计的正确性,要包括测试数据和运行结果)。
此处需要给出你输入的源码,以及程序运行后出来的结果,可以适当的截图。
1:换位加密
源码:
Ce shi jie guo
密钥:4
运行结果:Cigejusiohea
2换位解密
源码:Cigejusiohea
密钥:4
运行结果:Ceshijieguoa
3凯撒加密
源码:Ce shi jie guo
密钥:4
运行结果:Gi wlm nmi kys
4:凯撒解密
源码:Gi wlm nmi kys 密钥:4
运行结果:Ce shi jie guo
5.明文统计
6.密文统计
6附录
(源程序清单和结果:源程序要加注释)
此处需要些出你的源程序代码,以及对主要代码的一些功能或作用说明。
#include
#include
#include
char a[]={"mingwen.txt"},b[]={"miwen.txt"};
welcome() //欢迎界面
{
printf("\n\n\n\n\n\n\n\n\n\t\t****************************************\n\n");
printf("\t\t\t简朴寨加密解密欢迎您\n\n");
printf("\t\t****************************************\n");
printf("\n\n\n\n\n\n\t\t\t\t\t\t\t电信101班陈仁波\n");
}
byebye() //退出界面
{
printf("\n\n\n\n\n\n\n\n\n\t\t**************************************\n");
printf("\t\t**************************************\n\n");
printf("\t\t\t\t欢迎使用\n\n");
printf("\t\t**************************************\n");
printf("\t\t**************************************\n");
}
tuichu() //退出菜单
{ char tc;
printf("\n\n\n\n\n\n\n\n\n\t\t********************************************\n\n");
printf("\t\t\t\t 确定退出???\n\n");
printf("\t\t\t 确定请按Y, 取消请按N\n\n");
printf("\t\t********************************************\n");
tc=getchar();
tc=getchar();
if(tc=='n'||tc=='N')
{
system("cls");
caidan();
}
else if(tc=='y'||tc=='Y')
{
system("cls");
byebye();
}
else
{ system("cls");
tuichu();
}
}
char *space(char *a,char *b)// 去空格
{
char *c = a;
int n =0;
while (*b!='\0')
{
if (*b!=' ')
{
*c = *b;
n++;
c++;
}
b++;
}
*c='\0';
}
transpen() //换位加密
{
FILE *mingwen,*miwen;
int i,j,n,m,k,z=0,hang;
char ch;
char r[1000],h[100],zl[10][10],he[100];
if((mingwen=fopen(a,"w+"))==NULL)
{printf("不能打开文件\n");
exit(0);
}
if((miwen=fopen(b,"w+"))==NULL)
{printf("不能打开文件\n");
exit(0);
}
printf("请输入密钥\n");
scanf("%d",&n);
printf("请输入明文\n");
ch=getchar();
gets(r);
k=strlen(r);
for(i=0;i fputc(r[i],mingwen); fclose(mingwen); if((mingwen=fopen(a,"r"))==NULL) {printf("不能打开文件\n"); exit(0); } space(h,r); m=strlen(h); if(m%n==0) { hang=m/n; for(i=0;i { for(j=0;j { zl[i][j]=h[z]; z++; } } } else { hang=m/n+1;j=0; for(i=m;i<(hang*n);i++) { h[i]='a'+j; j++; } for(i=0;i { for(j=0;j { zl[i][j]=h[z]; z++; } } } z=0; for(i=0;i for(j=0;j { he[z]=zl[j][i]; printf("%c",he[z]); z++; fputc(zl[j][i],miwen); } printf("\n"); fclose(mingwen); fclose(miwen); printf("\n\n"); printf("密文请查看miwen.txt\n\n\n按enter键返回主菜单\n"); ch=getchar(); system("cls"); caidan(); } transpde() //换位解密 { FILE *mingwen,*miwen; int i,j,n,m,k,z=0,hang; char ch; char r[1000],h[100],zl[10][10],he[100]; if((mingwen=fopen(a,"w+"))==NULL) {printf("不能打开文件\n"); exit(0); } if((miwen=fopen(b,"w+"))==NULL) {printf("不能打开文件\n"); exit(0); } printf("请输入密钥\n"); scanf("%d",&n); printf("请输入密文\n"); ch=getchar(); gets(r); k=strlen(r); for(i=0;i fputc(r[i],miwen); fclose(miwen); if((mingwen=fopen(b,"r"))==NULL) {printf("不能打开文件\n"); exit(0); } space(h,r); m=strlen(h); if(m%n==0) { hang=m/n; for(i=0;i { for(j=0;j { zl[i][j]=h[z]; z++; } } } else { hang=m/n+1;j=0; for(i=m;i<(hang*n);i++) { h[i]='a'+j; j++; } for(i=0;i { for(j=0;j { zl[i][j]=h[z]; z++; } } } z=0; for(i=0;i for(j=0;j { he[z]=zl[j][i]; printf("%c",he[z]); z++; fputc(zl[j][i],mingwen); } fclose(mingwen); fclose(miwen); printf("\n\n"); printf("明文请查看mingwen.txt\n\n\n按enter键返回主菜单\n"); ch=getchar(); system("cls"); caidan(); } caesaren() //凯撒加密 { FILE *mingwen,*miwen; char ch; int i; if((mingwen=fopen(a,"w+"))==NULL) {printf("不能打开文件\n"); exit(0); } if((miwen=fopen(b,"w+"))==NULL) {printf("不能打开文件\n"); exit(0); } printf("请输入密文\n"); ch=getchar(); ch=getchar(); while(ch!='\n') { fputc(ch,mingwen); ch=getchar(); } fclose(mingwen); do { printf("请输入密钥(0~26)\n"); scanf("%d",&i); } while(!(i>=0&&i<=26)); if((mingwen=fopen(a,"r"))==NULL) {printf("不能打开文件\n"); exit(0); } ch=fgetc(mingwen); while(ch!=EOF) { if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) { ch=ch+i; if(ch>'Z'&&ch<='Z'+i||ch>'z') ch=ch-26; } fputc(ch,miwen); printf("%c",ch); ch=fgetc(mingwen); } fclose(mingwen); fclose(miwen); printf("\n\n"); printf("密文请查看miwen.txt\n\n\n按enter键返回主菜单\n"); ch=getchar();ch=getchar(); system("cls"); caidan(); } caesarde() //凯撒解密 { FILE *mingwen,*miwen; char ch; int i; if((mingwen=fopen(a,"w+"))==NULL) {printf("不能打开文件\n"); exit(0); } if((miwen=fopen(b,"w+"))==NULL) {printf("不能打开文件\n"); exit(0); } printf("请输入密文\n"); ch=getchar(); ch=getchar(); while(ch!='\n') { fputc(ch,miwen); ch=getchar(); } fclose(miwen); c 语言程序设计教程第二版课后习题 答 案 篇一: c 语言程序设计教程_李含光_ 郑关胜_ 清华大学 出版社习题答案习题答案[完美打印版]】1.单项选择题 (1)a (2)c(3)d (4)c (5)b 2.填空题(1)函数 (2)主函数(main )(3)printf(),scanf()第 2 章习题参考答案 1.单项选择题 1-5 cbccc 6-10 cdcdc 11-13 dbb 2 .填空题 (1)1(2)26 (3)6 , 4 , 2 (4)10 , 6 (5)3.000000 (6)双精度(double )(7)9 (8)字母,数字,下划线(9)13.700000 (10)11(11)((m/10 )%10 )*100+ (m/100 )*10+m%10 (12)0 (13)10 ,9 ,11(15) (x0y0)||(x0z0)||(y0||z0)(16 )double (17)x==0 (18)sqrt(fabs(a-b))/(3*(a+b))(19 )sqrt((x*x+y*y)/ (a+b)) 第 3 章习题参考答案 1.单项选择题 1-5 cccdd 6-10 bcdbc11-15 bcbbb16 a 2 .填空题 (1)用;表示结束(2){ } (3 )y=x0?1:x==0?0:-1 (4)y%4==0y%100!=0||y%400==0 (5)上面未配对(6)default 标号(7)while ,do while ,for (8)do while (9)本次(10)本层3.阅读程序,指出结果 (1)yes (2)*(3)abother (4)28 70 (5)2,0(6)8(7)36 (8)1(9)3,1,-1,3,1,-1(10)a=12 ,y=12 (11) i=6 ,k=4 (12)1,-2 4 .程序填空 (1)x:y ,u :z (2)m=n ,m !=0 ,m=m/10 (3)teps , t*n/(2*n+1) , printf( n”“,%2*lsf )(4)m%5==0 , 一、选择题(共40分,每小题2分) 题目1 在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为()。 A. main B. MAIN C. name D. function 题目2 C语言源程序文件的缺省扩展名为()。 A. cpp B. exe C. obj D. c 题目3 由C语言目标文件连接而成的可执行文件的缺省扩展名为()。 A. cpp B. exe C. obj D. c 题目4 程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用的分隔符为()。 A. 空格或逗号 B. 逗号或回车 C. 逗号或分号 D. 空格或回车 题目5 每个C语言程序文件的编译错误被分为()。 A. 1类 B. 2类 C. 3类 D. 4类 题目6 不符合C语言规定的复合语句是()。 A. {} B. {;} C. {x=0;} D. {y=10} 题目7 C语言程序中的基本功能模块为()。 A. 表达式 B. 标识符 C. 语句 D. 函数 题目8 在一个函数定义中,函数头包括的3个部分依次为函数类型、函数名和()。 A. 表达式 B. 语句 C. 参数表 D. 函数体 题目9 在一个程序文件中,若要使用#include命令包含一个用户定义的头文件,则此头文件所使用的起止定界符为一对()。 A. 尖括号 B. 双引号 C. 单引号 D. 花括号 题目10 在C语言程序中,多行注释语句使用的开始标记符为()。 A. // B. /* C. */ D. ** 题目11 在printf()函数调用的格式字符串中,若使用格式符为“%c”,则对应输出的数据类型为()。 A. char B. int C. float D. double 题目12 在printf()函数调用的格式字符串中,若使用格式符为“%5d”,则规定对应输出的数据占用的字符位置个数为()。 1、用筛选法求100之内的素数。解: #include {printf("a[%d]=",i); scanf("%d",&a[i]); } printf("\n"); printf("The orginal numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); for (i=1;i<=9;i++) {min=i; for (j=i+1;j<=10;j++) if (a[min]>a[j]) min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } printf("\nThe sorted numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); return 0; } 3、求一个3×3的整型矩阵对角线元素之和。解: #include 1.6 编写一个程序,输入a、b、c 三个值,输出其中最大值。 课后习题答案完整版 第一章 1.5 请参照本章例题,编写一个C 程序,输出以下信息: ************************** Very Good! ************************** 解:mian() {int a,b,c,max; printf( “请输入三个数a,b,c:\n ” ); scanf( “%d,%d,%”d ,&a,&b,&c); C语言程序设计第三版谭浩强 解: mian() {printf( ”); “************************** printf( “”X “ n” ); printf( “Very Good!” \ n”); printf( “”X “ n” ); printf( “************************** ); max=a; if(max {char #include 习题二 一、选择题 二、填空题 1.18 2.int float double 3.10 11 4.8 16 10 5.% 三、阅读题 1. 10,10,9,10 2. j=1, i=2 k=3,i=3 i=3,i=2 k=1,i=1 习题三 一、选择题 二、填空题 1. 从键盘上读入一个字符在屏幕上输出一个字符 #include 2. x=127,x= 127,x=177,x=7f y=123.4567,y= 123.46,y=123,45670 3. 2,1 4. 1234 5. 4,3 6. -6,-6 习题四一、选择题 二、填空题 1. 非0 0 、 2. k==0 3. n%7==0&&n%==0 else 三、阅读题 1. a=1,b=0 2. c=1 习题五一、选择题 二、填空题 1. for语句 do-while 语句 while 语句 2. a=14,y=26 3. k=14,n=-1 4. 39 5. s=19 6. 22222 7. 10 8. 7 9. 8 10. 5,5 三、改错题 1. for( i=0;i<5;i++);for控制部分用分号分隔 2. int j=0;while(j<10){j++;i=j} 分号是多余的,否则会造成死循环 3. int s=1,i=1; while(i<5) {s*=i; i++; } 两条语句需要加上花括号 4. while(j<10);(分号不能少) 5. continue改为break 习题六 一、选择题 二、填空题 1. 20 0 19 2. 数组名 3. 越界 4. 6 5. j==k a[j][k]=1; a[j][k]=0; 三、阅读题 1. 6 5 4 3 2 1 2. aaa bbb ccc ddd 3. 2,2,1 习题七 一、选择题 二、填空题 1. 整个函数体内局部 2. 整型 3. k<=b return y; 1、加法练习程序:由用户通过键盘输入加数和被加数,程序显示加法式子,用户通过键盘作答后,程序给出正确与错误提示信息。要求:利用C的选择语句if条件语句或switch 开关语句,键盘输入数据前,程序会出被输入数据的信息提示。 #include 第一章程序设计和C语言【第15页】 1-5 #include 3-2-1 #include C 语言程序设计(第三版)习题库 1、设圆半径r=,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf 输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。 #include<> main(){ floatr,h,C1,Sa,Sb,Va,Vb; scanf(__”%f ”__,&r); scanf(”%d ”,__&h _);; C1=2**r; Sa=*r*r; Sb=4*Sa; Va=4**r*r*r/3; Vb=Sa*h; printf(___”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f ”,Cl,Sa,Sb,Va,Vb ); } 2、输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9 输出要求有文字说明,取位2小数。 #include<> main(){ floatF,c; scanf("%f",&F); ____c=5*(F-32)/9______; printf("c=%.2f",c); } 3、有一函数:?? ???≥-<≤-<=10113101121x x x x x x y 写一程序,输入x 值,输出y 值。 #include<> main(){ intx,y; printf("输入x :"); scanf("%d",&x); if(x<1){/*x<1*/ y=x; printf("x=%3d,y=x=%d\n",x,y); }elseif(____x<10_______){/*1≤x-10*/ _____y=2*x-1_______; printf("x=%3d,y=2*x-1=%d\n",x,y); }else{/*x≥10*/ y=3*x-11; printf("x=%3d,y=3*x-11=%d\n",x#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d",y); }#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d\n",y); }#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d",y); }scanf("%d",&x); 【教材】《C语言程序设计(第2版)》清华大学出版社,黄保和,江弋编著。2011年10月第二版。ISBN:978-7-302-26972-4。售价:35元。 【答案版本】本习题答案为2012年2月修订版本。 一、选择题 1. 设有程序段”int k=10; while(k=0) k=k-1;”,则下面叙述正确的是D)循环体语句一次也不执行。 A. while循环执行10次 B. 循环是无限循环 C. 循环体语句执行一次 D. 循环体语句一次也不执行 2. 设有程序段”int x=0,s=0;while(!x!=0) s+=++x; printf(“%d”,s);”则A)运行程序段后输出1。 A. 运行程序段后输出1 B. 程序段执行无限次 C. 运行程序段后输出0 D. 程序段中的控制表达式是非法的 3. 下面循环语句中,错误的是D) int a=1,b=2;do b-- while(b= =0);。 A. int a=1,b=2; while(b--); B. int a=1,b=2; do a++; while(a==b); C. int a=1,b=2; while(a=3); D. int a=1,b=2; do b-- while(b==0); 4. 已知”int i=5;”,下列do…while循环语句的循环次数为C) 5。 do{ printf(“%d\n”,i--); } while(i!=0); A. 0 B. 1 C. 5 D. 无限 5. 循环语句”for(int i=0,j=10; i==j; i++,j--)”的循环次数是A) 0。 A. 0 B. 5 C. 10 D. 无限 6. 下述有关break语句的描述中,不正确的是C) break语句用于if语句的内嵌语句内,它结束该if语句。 A. break语句用于循环体内,它将结束该循环 B. break语句用于开关语句,它结束该开关语句 C. break语句用于if语句的内嵌语句内,它结束该if语句 D. break语句在一个循环体内可使用多次 7. 下面关于循环语句的描述中,错误的是B)循环体内必须同时出现break语句和continue 语句。 A. 循环体内可以包含有循环语句 B. 循环体内必须同时出现break语句和continue语句 C. 循环体内可以出现选择语句 D. 循环体可以是空语句 8. 以下不是死循环的是D)for(;(c=getchar()!=’\n’);)printf(“%c”,c);。 A. for(; ; x+=i); B. while(1) { x++; } C. for( i=10; ; i--) sum+=i; D. for( ; (c=getchar() )!=’\n’ ; ) printf( “%c”,c); 9. 执行语句”for(i=0;i++<3;);”后,变量i的值为C) 4。 A.2 B. 3 C. 4 D. 5 10.语句”for(x=0,y=0;y!=1&&x<4;x++);”是C)循环4次。 A. 无限循环 B. 循环次数不定 C. 循环4次 D. 循环3次 第1章程序设计和C语言1 1.1什么是计算机程序1 1.2什么是计算机语言1 1.3C语言的发展及其特点3 1.4最简单的C语言程序5 1.4.1最简单的C语言程序举例6 1.4.2C语言程序的结构10 1.5运行C程序的步骤与方法12 1.6程序设计的任务14 1-5 #include 2.5结构化程序设计方法34 习题36 第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例37 3.2数据的表现形式及其运算39 3.2.1常量和变量39 3.2.2数据类型42 3.2.3整型数据44 3.2.4字符型数据47 3.2.5浮点型数据49 3.2.6怎样确定常量的类型51 3.2.7运算符和表达式52 3.3C语句57 3.3.1C语句的作用和分类57 3.3.2最基本的语句——赋值语句59 3.4数据的输入输出65 3.4.1输入输出举例65 3.4.2有关数据输入输出的概念67 3.4.3用printf函数输出数据68 3.4.4用scanf函数输入数据75 3.4.5字符数据的输入输出78 习题82 3-1 #include 2 第1章程序设计基础知识 一、单项选择题(第23页) 1-4.CBBC 5-8.DACA 二、填空题(第24页) 1.判断条件 2.面向过程编程 3.结构化 4.程序 5.面向对象的程序设计语言7.有穷性8.直到型循环9.算法10.可读性11.模块化12.对问题的分析和模块的划分 三、应用题(第24页) 2.源程序: main() {int i,j,k; /* i:公鸡数,j:母鸡数,k:小鸡数的1/3 */ printf("cock hen chick\n"); for(i=1;i<=20;i++) for(j=1;j<=33;j++) for(k=1;k<=33;k++) if (i+j+k*3==100&&i*5+j*3+k==100) printf(" %d %d %d\n",i,j,k*3);} 执行结果: cock hen chick 4 18 78 8 11 81 12 4 84 3.现计算斐波那契数列的前20项。 递推法源程序: main() {long a,b;int i; a=b=1; for(i=1;i<=10;i++) /*要计算前30项,把10改为15。*/ {printf("%8ld%8ld",a,b); a=a+b;b=b+a;}} 递归法源程序: main() {int i; for(i=0;i<=19;i++) printf("%8d",fib(i));} fib(int i) {return(i<=1?1:fib(i-1)+fib(i-2));} 执行结果: 1 1 2 3 5 8 13 21 3 4 55 89 144 233 377 610 987 1597 2584 4181 6765 一、选择题(共40分,每小题2分) 1 题目1 在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为()* A.main B. MAIN C. name D. function 题目2 1 C语言源程序文件的缺省扩展名为()。 A. cpp B. exe C. obj * D.c 题目3 1 由C语言目标文件连接而成的可执行文件的缺省扩展名为()。 A. cpp B. exe C. obj D. c 题目4 程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用的分隔符为() A. 空格或逗号 B. 逗号或回车 C. 逗号或分号 * D.空格或回车 题目5 1 每个C语言程序文件的编译错误被分为()。 A. 1类 ” B.2 类 C. 3类 D. 4类 题目6 不符合C语言规定的复合语句是()。 A. {} B. {;} C. {x=0;} + D.{y=10} 题目7 1 C语言程序中的基本功能模块为()。 A. 表达式 B. 标识符 C. 语句 D. 函数 题目8 在一个函数定义中,函数头包括的3个部分依次为函数类型、函数名和() B. 语句 C. 参数表 D. 函数体 题目9 1 在一个程序文件中,若要使用#include命令包含一个用户定义的头文件,则此头文件所使用 的起止定界符为一对()。 A. 尖括号 * B.双引号 C. 单引号 D. 花括号 题目10 L 在C语言程序中,多行注释语句使用的开始标记符为()。 A. // + B./* C.*/ D ** 题目11 1 在printf()函数调用的格式字符串中,若使用格式符为“%C',则对应输出的数据类型为()。 第七章函数 7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。 maxyueshu(m,n) int m,n; { int i=1,t; for(;i<=m&&i<=n;i++) {if(m%i==0&&n%i==0) t=i; } return(t); } minbeishu(m,n) int m,n; {int j; if(m>=n) j=m; else j=n; for(;!(j%m==0&&j%n==0);j++); return j; } main() {int a,b,max,min; printf("enter two number is: "); scanf("%d,%d",&a,&b); max=maxyueshu(a,b); min=minbeishu(a,b); printf("max=%d,min=%d\n",max,min); } 7.2求方程的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。 #include"math.h" float yishigen(m,n,k) float m,n,k; {float x1,x2; x1=(-n+sqrt(k))/(2*m); x2=(-n-sqrt(k))/(2*m); printf("two shigen is x1=%.3f and x2=%.3f\n",x1,x2); } float denggen(m,n) float m,n; {float x; x=-n/(2*m); printf("denggen is x=%.3f\n",x); } 教材习题答案 第一章 习题 一、单项选择题 1. C 2. B 3. B 4. C 5. D 6. A 7. C 8. A 二、填空题 1. 判断条件 2. 面向过程编程 3. 结构化 4. 程序 5. 面向对象的程序设计语言 6. 基本功能操作、控制结构 7. 有穷性 8. 直到型循环结构 9. 算法 10.可读性 11.模块化 12.对问题的分解和模块的划分 习题 一、单项选择题 1. B 2. D 3. C 4. B 5. A 6. A 7. B 8.C 二、填空题 1. 主 2. C编译系统 3. 函数、函数 4. 输入输出 5. 头 6. .OBJ 7. 库函数 8. 文本 第三章 习题 一、单项选择题 1. D 2. B 3. A 5. C 6. D 7. D 8. B 9. B 10.C 11.A 12.D 13.C 14.C 15.C 16.A 17.C 18.C 19.C 20.D 21.A 22.D 23.D 24.D,A 25.D 26.A 27.B 二、填空题 1. 补码 2. 308 10 - ± ~)308 10 ,15 —6 2. 308 10 - ± (~)308 10 ,15 6 3. 逻辑 4. 单目,自右向左 5. 函数调用 6. a 或 b ( 题目有错 , 小括号后面的 c<=98 改成( c>=97&&c<=98 )就可以得到所给的答案了) 7. 8. 65 , 89 第四章 习题 一、单项选择题 1. D 2. C 3. D 4. A 5. D 6. B 7. A 8. C 9. B 10.B 二、填空题 1. 一 C 语言程序设计习题答案 习题一 C 语言程序设计概述 一、名词解释 (1)程序P1 (2)程序设计P1 (3)机器语言P1 (4)汇编程序P2 (5)高级语言P2 (6)编译程序P3 (7)解释程序P3 (8)算法P4 (9)结构化的程序设计P9 二、简述题 1. 设计程序时应遵循哪些基本原则?P4 答:正确性、可靠性、简明性、有效性、可维护性、可移植性。 2. 算法的要素是什么?算法具有哪些特点? 答:算法的要素是:操作与控制结构;算法的特点有:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。 3. 算法的表示形式有哪几种? 答:算法的表示形式有:自然语言、传统流程图、伪代码、结构化的流程图(N_S 流程图,盒图)。 4. 有哪三种基本结构? 答:三种基本结构是:顺序结构、选择结构和循环结构。 5. 传统流程图与N-S 流程图最大的区别是什么? 答:N-S 流程图去掉了在传统流程图中常用的流程线,使得程序的结构显得更加清晰、简单。 三、用传统流程图、N-S 图分别表示求解以下问题的算法。 1. 有3个数a ,b ,c ,要求按由大到小的顺序把它们输出。 2. 依次将10个数输入,求出其中最大的数 和最小的数并输出。 3. 求1+2+3+…+100的值。 4. 求1×2×3×…×10的值。 5. 求下列分段函数的值。 6. 求100~200之间的所有素数。 7. 求一元二次方程ax 2+bx+c=0的根。分别考虑d=b 2-4ac 大于0、等于0和小于0三种情况。 四、注释下面C 程序的各个组成部分。 main() /*主函数 */ { /*程序开始 */ int a,k,m; /*定义三个用来存放整数的变量 */ a=10; /*将整数10赋值给变量a */ k=2; /*将整数2赋值给变量k */ m=1; /*将整数1赋值给变量1 */ a=(k+m)*k/(k-m); /*先求出算术表达式的值,并将其赋值给变量a */ printf("%d\n",a); /*在屏幕上打印出变量a 的值 */ } /*程序结束 */ 习题二 数据类型、运算符与表达式 一、选择题 1~10:BCDCB DDBCA 11~20: ADDAA DBADC 21~28: DABAD CDD Y= 3X (X<1) 4X-1 (X=1) 5(X-1)+6 (1 C语言程序设计习题参考答案 习题1 一、判断题 1.在计算机中,小数点和正负号都有专用部件来保存和表示。 2.二进制是由0和1两个数字组成的进制方式。 3.二进制数的逻辑运算是按位进行的,位与位之间没有进位和借位的关系。 4.在整数的二进制表示方法中,0的原码、反码都有两种形式。 5.有符号数有三种表示法:原码、反码和补码。 6.常用字符的ASCII码值从小到大的排列规律是:空格、阿拉伯数字、大写英文字母、小写英文字母。 解:1.F 2.T 3.T 4.T 5.T 6.T 二、单选题 1.在计算机中,最适合进行数值加减运算的数值编码是。 A. 原码 B. 反码 C. 补码 D. 移码 2.已知英文小写字母m的ASCII码为十进制数109,则英文小写字母y的ASCII码为十进制数。 A. 112 B. 120 C. 121 D. 122 3.关于ASCII码,在计算机中的表示方法准确地描述是。 A. 使用8位二进制数,最右边一位为1 B. 使用8位二进制数,最左边一位为1 C. 使用8位二进制数,最右边一位为0 D. 使用8位二进制数,最左边一位为0 4.设在机器字长4位,X=0111B,Y=1011B,则下列逻辑运算中,正确的是___________。 A. X∧Y=1000 B. X∨Y=1111 C. X⊕Y=0011 D. ˉY=1000 5.下列叙述中正确的是()。 A.高级语言就是机器语言 B.汇编语言程序、高级语言程序都是计算机程序,但只有机器语言程序才是计算机可以直接识别并执行的程序 C.C语言因为具有汇编语言的一些特性,所以是汇编语言的一种 D.C源程序经过编译、连接,若正确,执行后就能得到正确的运行结果6.用C语言编写的源程序经过编译后,若没有产生编译错误,则系统将()。 A.生成可执行文件B.生成目标文件 C.输出运行结果D.自动保存源文件 7.下列叙述中不正确的是()。 A.main函数在C程序中必须有且只有一个 B. C程序的执行从main函数开始,所以main函数必须放在程序最前面 C. 函数可以带参数,也可以不带参数。 D. 每个函数执行时,按函数体中语句的先后次序,依次执行每条语句 解:1.C 2.C 3.D 4.B 5.B 6.B 7.B 三、填空题 手机通讯录管理系统一、设计题目的任务和内容 任务:本程序是非数值计算型算法设计,我设计出了通讯录管理系统的基本功能,并设计了简单的界面。本程序主要考察对自定义函数的熟悉程度,本程序主要使用的是数组的相关操作,包括结构体数组的输入、输出、查找、删除等。我设计的这个通讯录系统也初步实现了人员信息的显示、删除、查找、修改、添加等必要的功能。 具体要求: ◆建立通讯录信息,信息包含、姓名、分类(1、办公类2、个人类3、商务类)、电话、 电子邮箱等; ◆将通讯录保存在文件中; ◆查看功能:可按1、办公类2、个人类3、商务类分类查询,当选中其中一类时,显示出 此类所有数据中的姓名和电话号码。 ◆增加功能:能录入新数据。当录入重复姓名和电话号码时,则提示数据录入重复并取消 录入;当通讯录中超过15条信息时,存储空间已满,不能录入新数据;录入的新数据能按递增的顺序自动进行条目编号。 ◆修改功能:选中某个人的姓名是,可对此人的相应数据进行修改。 ◆删除功能:选中某个人的姓名是,可对此人的相应数据进行删除并自动调整后续条目编 号。 系统功能需求分析: 查询:查询通讯录记录 添加:添加通讯录记录 显示:显示通讯录记录 删除:删除通讯录记录 修改:修改通讯录记录 二、总体设计思路 本系统首先设计出了主函数,然后根据去要实现的功能分别设计拉,显示、删除、查找、修改、添加功能的子函数。在显示的函数设计过程中首先运用拉文件的读取等必要的知识通过把文件的内容读取到内存然后打印出来。删除函数的设计是首先从文件内找到要删除的人,然后通过写一个实现删除目的的FOR循环将该人从内存里删除,然后再用写的方式打开文件,将内存内的信息写入文件,实现删除。查找也是先打开文件,用一个字符串对比的方法找出用户要查找的人,然后打印出来。修改也大体和删除相同,添加函数在设计时通过申请一片空间,然后通过指针将需要添加的信息添加进去,从而实现添加功能。 系统功能模块图: 输入新信息:可输入新的数据。 添加:可以添加通讯录记录,依次输入姓名、电话号码、分类、电子邮箱后,会提示是否继续添加。 删除:输入姓名删除,输入欲删除的那个人的名字后,会自动删除他(她)的记录内容 查询:可按1、办公类2、个人类3、商务类分类查询 修改:输入欲修改的那个人的名字后,再依次输入姓名、电话号码、分类、电子邮箱即可完成修改。 下面就是总的程序流程图: 实验四参考答案(参考答案) (1) 设计程序sy5-1.c,从键盘上输入一个3行3列矩阵各个元素的值,输出其主对角线元素和反向对角线元素之和。 算法分析: 对角线上的元素,1维和2维下标相同,反对角线元素,如果行下标为i,列下标就为2-i; 参考答案: #include printf("\n"); } min=a[0][0];row=0;colum=0; //首先把第一个数a[0][0]看成最小数 for(i=0;i<3;i++) //双重循环逐一遍历每个元素a[i][j] for(j=0;j<4;j++) if(min>a[i][j]) //如果当前值a[i][j]比最小值还要小 {min=a[i][j];row=i;colum=j;} //用a[i][j]改写最小值,并记下他们的下标printf("矩阵中最小元素是:%d,行下标是:%d,列下标是%d\n",min,row,colum); return 0; } 运行结果: (3) 设计程序sy5-3.c,定义一个3×3的二维数组,通过随机函数自动赋值。然后输入一个整数n,使数组左下三角(含对角线元素)元素中的值乘以n 。例如:若n的值为3,a 数组中的值为 | 1 9 7 |则程序运行后a数组中的值应为| 3 9 7 | | 2 3 8 | | 6 9 8 | | 4 5 6 | | 12 15 18 | 算法分析: 主要理解到对角线即以下元素包含哪些元素,即他们的下标变化。对每一行i来说,对角线以下的元素,他们的列下标是0,1,2,---,i;所以用外循环i遍历行,内循环j(从0到i),逐一遍历每一个a[i][j],并给a[i][j]赋值为他的n倍。最后输出矩阵。 参考答案: #includec语言程序设计教程第二版课后习题答案
国家开放大学C语言程序设计A第一次形考任务及答案
C语言程序设计第四版第六章答案_谭浩强
C语言程序设计第三版谭浩强课后习题答案完整版
C语言程序设计(第二版)课后答案 丁亚涛
C语言程序设计入门经典例题
C语言程序设计(谭浩强)第四版-课后答案
C语言程序设计第三版习题库答案
第5章-C语言程序设计(第2版)教材习题答案
《C语言程序设计》课后习题答案(第四版)谭浩强
《C语言程序设计教程(第二版)》习题答案
国家开放大学C语言程序设计A第一次形考任务与答案(20201127230652)
C语言程序设计第四版第七章答案-谭浩强
C语言程序设计教程第三版(李凤霞)习题答案
C语言程序的设计习题参考答案(第二版_杜友福)
C语言程序设计(第二版)习题参考答案
C语言程序设计实习报告
大学生C语言程序设计(第四版 谭洪强)实验5答案