大整数的四则运算 高质量C语言程序
设计题目:大整数的四则运算
1. 功能简介:编写出实现大整数之间相加,相减,相乘,相除的程序,并输出计算结构。
课程设计要求:采用模块化程序设计
源程序中应有足够的注释
必须上机调试通过
注重算法运用,优化存储效率与运算效率
需提交源程序(含有注释)及相关文件(数据或数据库文件);
提交设计报告书。
2.总体结构:
数据初
判断运算符
号
加法
正整数非正整
转变为
减法
转变为
乘法除法
转变为
退出
流程图:
3 .概要设计:
1)加法运算
利用两个整形数组分别存放两个数a和b的每一位的数值,最低位存放符号。如果a 和b同号,从最低为开始计算,如果有进位则保存在高一位,本为则减10,然后反序将计算后的各个位的数值保存在一个数组c并输出,如果a和b都是负数则在前面要输出负号,函数的返回值为c的位数。如果a和b异号,也即两个正整数相减,从最低位开始相减,如果要借位则本位加10再相减,高一位要减1,然后反序将计算后的各个位的数值保存在一个数组c并输出,在前面要输出相应的符号位。
2)减法运算
可将减法运算转化为加法运算,只要将被减数的符号改变即可。
3)乘法运算
符号存放在最低位,将其中一个数a的每一位分别乘以另一个数b的每一位,并将结果保存在数组c中,然后重复计算a的下一位跟b的每一位的乘积,把上一次计算保存在c 的值加上本次计算后的值,并保存在c自身中,直到a的最高位,最后输出符号和相应的计算结果。
4)除法运算
利用乘法和减法,将除数分别乘以1到9,直到其值大于等于被除数的对应的数,然后被除数对应的数减去其乘积,保存在一个数组中,下一次循环把它归到被除数中继续做除法运算,最后得到余数并输出。
4.函数功能:
1.void init(int a[],int b[],int *p1,int *p2)
2.功能说明:读入所要计算的数值,数据初始化
3.int plus(int a[],int b[],int c[],int m,int n)
4.功能说明:两个正整数相加
3. void change(int a[],int b[],int m,int n)
功能说明:当两异号数相加时,改变其符号以符合加法运算
5.int minus(int a[],int b[],int d[],int m,int n)
6.功能说明:两个正整数相减
5. void minusfun(int a[],int b[],int d[],int m,int n)
功能说明:判断两个异号数的相加方式
7.int multi(int a[],int b[],int c[],int m,int n)
8.功能说明:两个正整数相乘
7. void print(long c[],int flag)
功能说明:打印带符号flag(1为负)的long c[]数组
8. int write(long a[],int flag)
功能说明:将键盘敲入的数字按4位一组放入long a[],且将符号放入flag
9. void mul(long a[],int first,int last,long b[],long c[])
10. int compara(long a[],int first,int last,long b[])
功能说明:比较数组a,b大小,first last分别为a的最高最低位
11. int minusd(long a[],int first,int last,long b[],long c[],int flag)
功能说明:a为被减数,first last为a最高最低位,b为减数,c为差,flag为符号
12. void div(long a[],long b[],long c[],int fa)
功能说明:除法,a除以b的值放入c,fa为a符号
13. void menu()
功能说明:打印菜单函数
14. void main()
功能说明:主函数,调用其余函数,计算相应功能的值并输出。
5.源程序:
#include
#include
#include
#define MAX 40 //可以修改,此时最大运算位数为四十位
#define N 10 //此处应为最大位数除以4
void init(int a[],int b[],int *p1,int *p2) //输入
{
int i,j;
char r,s;
for(i=0;i { a[i]=0; b[i]=0; } printf("请输入处理的第一个数的值:"); r=getchar(); if(r==45) { a[0]=r; for(i=1;(r=getchar())!='\n';i++) a[i]=r-48; } else { a[1]=r-48; for(i=2;(r=getchar())!='\n';i++) a[i]=r-48; } printf("请输入处理的第二个数的值:"); s=getchar(); if(s==45) { b[0]=s; for(j=1;(s=getchar())!='\n';j++) b[j]=s-48; } else { b[1]=s-48; for(j=2;(s=getchar())!='\n';j++) b[j]=s-48; } *p2=j; } int plus(int a[],int b[],int c[],int m,int n) //加法运算{ int d[MAX]={0},i,j,k; for(i=0;i if(a[1]==0) { for(i=0;i return(i); } if(b[1]==0) { for(i=0;i return(i); } for(i=m-1,j=n-1,k=1;i>0&&j>0;i--,j--,k++) { d[k]=a[i]+b[j]+d[k]; if(d[k]>9) { d[k+1]++;d[k]=d[k]-10;} } while(i>0) { d[k]=d[k]+a[i]; if(d[k]>9) { d[k+1]++;d[k]=d[k]-10; } i--; } while(j>0) { d[k]=d[k]+b[j]; if(d[k]>9) { d[k+1]++;d[k]=d[k]-10; } k++; j--; } d[0]=a[0]+b[0]; c[0]=d[0]; if(d[k]==0) k--; for(i=1;k>0;i++,k--) c[i]=d[k]; return(i); } void change(int a[],int b[],int m,int n) //变号运算{ int i,j; int c[MAX]; if(m<=n&&b[0]==45) { for(i=1;i c[i]=a[i]; for(i=1,j=1;j a[i]=b[j]; for(i=1,j=1;j b[i]=c[j]; for(j=i;j b[j]=0; return; } if(m>=n&&a[0]==45) { a[0]=0; b[0]=45; return; } } { int c[MAX]={0},i,j,k; for(i=0;i d[i]=0; for(i=m-1,j=n-1,k=1;i>0&&j>0;i--,j--,k++) { if(c[k]<0||a[i] { c[k]=c[k]+a[i]-b[j]; if(c[k]<0) { c[k]+=10; c[k+1]--; } } else c[k]=a[i]-b[j]; } while(i>0) { c[k]=c[k]+a[i]; if(c[k]<0) { c[k]+=10; c[k+1]--; } k++;i--; } c[k]=a[i]+c[k]; while(c[k]<=0&&k>0) k--; for(i=1;k>0;i++) d[i]=c[k--]; return(i); } void minusfun(int a[],int b[],int d[],int m,int n) //判断是否两异号数相加{ int i,j,f=0,g=0; if(a[1]==0) { if(b[0]!=0) printf("-"); for(i=1;i printf("%d",b[i]); printf("\n"); return; if(b[1]==0) { if(a[0]!=0) printf("-"); for(i=1;i printf("%d",a[i]); printf("\n"); return; } if(m==n) { for(i=1;i { if((a[i]b[i]&&a[0]==45)) g=1; if(a[i]!=b[i]) f=1; } if(f==0) { printf("0\n"); return; } if(g==1) { change(a,b,m,n); printf("-"); j=minus(a,b,d,n,m); for(i=1;i printf("\n");return; } else if(a[0]==45&&b[0]==0) { j=minus(b,a,d,n,m); for(i=1;i printf("%d",d[i]); printf("\n"); return; } else { j=minus(a,b,d,m,n); for(i=1;i printf("%d",d[i]); printf("\n");return; if(m>n&&b[0]==45) { j=minus(a,b,d,m,n); for(i=1;i printf("\n");return; } if(m { change(a,b,m,n); printf("-"); j=minus(a,b,d,n,m); for(i=1;i printf("%d",d[i]); printf("\n"); return; } if(m>n&&a[0]==45) { change(a,b,m,n); printf("-"); j=minus(a,b,d,m,n); for(i=1;i printf("%d",d[i]); printf("\n"); return; } if(m { j=minus(b,a,d,n,m); for(i=1;i printf("%d",d[i]); printf("\n"); return; } } int multi(int a[],int b[],int c[],int m,int n) //正整数乘法运算{ int d[MAX]={0},e[MAX]={0},i,j,k,r,s,x,y; for(i=0;i c[i]=0; if(m<=n) { for(r=0;r for(j=n-1,k=1*s;j>0;j--,k++) { d[k]=a[i]*b[j]+d[k]; if(d[k]>9) {d[k+1]=d[k+1]+d[k]/10;d[k]=d[k]%10;} } if(d[k]==0) k--; y=k; for(r=1;k>0;r++,k--) e[r]=d[k]; for(r=1;r d[r]=e[r]; if(s==1) x=plus(c,d,e,0,y+1); else x=plus(c,d,e,y,y+1); for(r=0;r c[r]=e[r]; } } else if(m>n) { for(j=n-1,s=1;j>0;j--,s++) { for(r=0;r { d[r]=0;e[r]=0; } for(i=m-1,k=1*s;i>0;i--,k++) { d[k]=a[i]*b[j]+d[k]; if(d[k]>9) { d[k+1]=d[k+1]+d[k]/10; d[k]=d[k]%10; } } if(d[k]==0) k--; y=k; for(r=1;k>0;r++,k--) e[r]=d[k]; d[r]=e[r]; if(s==1) x=plus(c,d,e,0,y+1); else x=plus(c,d,e,y,y+1); for(r=0;r c[r]=e[r]; } } return(x); } void print(long c[],int flag) //输出 { int i; for(i=N-1;i>=0;i--) if(c[i]) break; if(flag) printf("-"); printf("%4d",c[i--]); for(;i>=0;i--) { if(c[i]/1000) printf(" %4ld",c[i]); else if(c[i]/100) printf(" 0%3ld",c[i]); else if(c[i]/10) printf(" 00%2ld",c[i]); else printf(" 000%1ld",c[i]); } } int write(long a[],int flag) //将键盘敲入的数字按4位一组放入long a[],且将符号放入flag { char num[N*4]; char temp; int i,j,k; for(i=0;i { num[i]=getchar(); if(num[i]==10) { i--; } if(num[i]==45) { flag=(flag+1)%2; i--; } } k=0; for(j=0;j<=i/2;j++) { temp=num[j]; num[j]=num[i-k]; num[i-k]=temp; k++; } k=1; for(j=0;j<=i;j++) switch(k) { case 1:a[j/4]+=(long)(num[j]-48); k++; break; case 2:a[j/4]+=(long)(num[j]-48)*10; k++; break; case 3:a[j/4]+=(long)(num[j]-48)*100; k++; break; case 4:a[j/4]+=(long)(num[j]-48)*1000; k=1; break; } return flag; } void mul(long a[],int first,int last,long b[],long c[]) //乘法{ int i,j; int max_i; long temp; for(max_i=N-1;max_i>=0;max_i--) if(b[max_i]) break; for(i=0;i<=max_i;i++) if(b[i]) for(j=first;j<=last;j++) { temp=a[j]*b[i]; c[i+j-first]+=temp%10000; c[i+j-first]=c[i+j-first]%10000; } } int compara(long a[],int first,int last,long b[]) //比较数组a,b大小{ int flag=2; int i; int k=0; int len; for(len=N-1;len>=0;len--) if(b[len]) break; if((first-last)>=len) { if((first-last)>len) flag=1; else for(i=len;i>=0;i--) { if(a[first-k]>b[i]) { flag=1; break; } if(a[first-k] { flag=0; break; } k++; } } else flag=0; return flag; } int minusd(long a[],int first,int last,long b[],long c[],int flag) { int notchange; int i,k=0; int max; notchange=compara(a,first,last,b); if(notchange) for(i=last;i<=first;i++) { if(a[i] { a[i]+=10000; a[i+1]--; } c[i]=a[i]-b[k]; k++; } } else { flag=(flag+1)%2; for(max=N-1;max>=0;max--) if(b[max]) break; for(i=0;i<=max;i++) { if(b[i] { b[i]+=10000; b[i+1]--; } c[i]=b[i]-a[last+k]; k++; } } return flag; } void div(long a[],long b[],long c[],int fa) //除法{ long result[N+1]={0}; int len_a; int k; int i; printf("\n"); print(a,fa); for(len_a=N-1;len_a>=0;len_a--) if(a[len_a]) break; k=len_a; while(compara(a,len_a,0,b)) { k--; c[k]=1; mul(c,k,k,b,result); while(compara(a,len_a,k,result)){ c[k]++; for(i=N-1;i>=0;i--) result[i]=0; mul(c,k,k,b,result); } c[k]--; for(i=N-1;i>=0;i--) result[i]=0; mul(c,k,k,b,result); minusd(a,len_a,k,result,a,0); for(i=N-1;i>=0;i--) result[i]=0; for(len_a=N-1;len_a>=0;len_a--) if(a[len_a]) break; k=len_a; } } void menu() //菜单 { printf("==================================大整数计算器=================================="); printf("1.加法 2.减法 3.乘法 4.除法0.退出\n"); printf("请从1~4中选择:"); return; } void main() //主函数 { int flag; int max; int fa; int fb; long ad[N],bd[N],cd[2*N]; int a[MAX]={0},b[MAX]={0},c[MAX]={0},d[MAX]={0}; char s; int m,n,i,j; int *p1,*p2; p1=&m; p2=&n; s=getchar(); getchar(); while(1) { switch(s) { case '0': return; case '1': printf("格式为:a+b\n"); init(a,b,p1,p2); if(a[1]==0&&b[1]==0) { printf("结果是:a+b=0\n"); break; } if(a[0]==b[0]) { j=plus(a,b,c,m,n); printf("结果是:a+b="); if(c[0]!=0) printf("-"); for(i=1;i printf("%d",c[i]); } else { printf("结果是:a+b="); minusfun(a,b,d,m,n); } printf("\n"); break; case '2': printf("格式为:a-b\n"); init(a,b,p1,p2); if(b[0]==0) b[0]=45; else if(b[0]==45) b[0]=0; if(a[1]==0&&b[1]==0) { printf("结果是:a-b=0\n"); break; } { j=plus(a,b,c,m,n); printf("结果是:a-b="); if(c[0]!=0) printf("-"); for(i=1;i printf("%d",c[i]); } else { printf("结果是:a-b="); minusfun(a,b,d,m,n); } printf("\n"); break; case '3': init(a,b,p1,p2); if(a[1]==0||b[1]==0) { printf("结果是:0\n"); break; } j=multi(a,b,c,m,n); printf("结果是:"); if((a[0]==45&&b[0]==0)||(b[0]==45&&a[0]==0)) printf("-"); for(i=1;i printf("%d",c[i]); printf("\n"); break; case '4': flag=fa=fb=0; for(max=0;max ad[max]=bd[max]=cd[max]=0; printf("请输入被除数:"); fa=write(cd,fa); printf("\n请输入除数:"); fb=write(bd,fb); div(cd,bd,ad,fa); flag=(fa+fb)%2; printf(" / "); print(bd,fb); printf(" = "); print(ad,flag); print(cd,0); printf(")\n"); break; } menu(); s=getchar(); getchar(); } } 6.调试结果 程序的调试是指对程序的差错和排错,为了便于差错、阅读,在设计该程序的过程中添加了尽可能多的注释,这就为接下来的调试过程带来了很多方便。经过仔细检查之后进行上机调试。进行编译,如果在编译和连接过程中发现错误,屏幕上显示了出错信息,根据提示找到出错的位置,加以改正,在进行编译……如此反复,直到顺利通过编译和连接为止。 以下是编译的最终结果: 由上图可知,该程序可以成功运行,且运行结果正确无误。 7.设计总结: 此次程序设计过程中发现的主要问题有三: 1)语法错误:大多的语法错误在通过书本参考下能够修改。主要是平时缺乏锻炼、不太注意而产生的。如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在for、if、while语句中画蛇添足加分号。 2)注释的位置:程序设计中在注释的时候不能同我们平常写字一样随心所欲,我们应该注意注释的格式。注释中不能含有C语言可执行的语句。 3)技术问题:编写到最后不会除法的算法,就上网借鉴了下,应该记住以备将来使用。 8.心得体会及致谢: 经过这次困难重重的C语言编程设计,我学到了更多的编程技巧,同时也对C有了更多的认识。通过这次两个星期左右的C语言程序课程设计实习,我觉得我学到了很多,以前在课堂上学的东西以为都是一些枯燥无味的东西,可是操作在实践中的时候发现其实也有别样的魅力所在,变得生动活泼而有挑战性。同时也让我感觉到自己编程的能力还有很多不足, 希望在以后的学习生活中能有更多的机会进行提高。最后也感谢郭恒宁老师的指导。 一、选择题(共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”,则规定对应输出的数据占用的字符位置个数为()。 程序填空题 导读:在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路,再选择正确的内容填入空白处,使程序完成既定的功能。这类习题的设计就是要引导读者逐步掌握编程的方法。本节习题的难度适中,可能有些典型的程序在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的编程能力。在程序设计语言学习的中期,读者对程序设计已经有了初步的了解,而自己编写程序又不知从何处入手,此时解答此类题目可以避免盲目性,从而提高学习的效率。 【】下面程序的功能是不用第三个变量,实现两个数的对调操作。#include <> main() { int a,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); a= ①; b= ②; a= ③; printf("a=%d,b=%d\n",a,b); } 【】下面程序的功能是根据近似公式:π2/6≈ 1/12+1/22+1/32+ …… +1/n2,求π值。 #include <> double pi(long n) { double s=; long i; for(i=1;i<=n;i++) s=s+ ①; return( ②); } 【】下面的程序的功能是求一维数组中的最小元素。 findmin(int *s,int t,int *k) { int p; for(p=0,*k=p;p 1、加法练习程序:由用户通过键盘输入加数和被加数,程序显示加法式子,用户通过键盘作答后,程序给出正确与错误提示信息。要求:利用C的选择语句if条件语句或switch 开关语句,键盘输入数据前,程序会出被输入数据的信息提示。 #include C语言程序设计 期末考试试题及其答案 一、单项选择题(本大题共20题,每题2 分,共40分) 1、以下不是C语言的特点的是( ) A、C语言简洁、紧凑 B、能够编制出功能复杂的程序 C、C语言可以直接对硬件进行操作 D、C语言移植性好 2、以下不正确的C语言标识符是( ) A、ABC B、abc C、a_bc D、ab.c 3、一个C语言程序是由( ) A、一个主程序和若干子程序组成 B、函数组成 C、若干过程组成 D、若干子程序组成 4、一个算法应该具有“确定性”等5个特性,对另外4个特性的描述中错误的是( ) A、有零个或多个输入 B、有零个或多个输出 C、有穷性 D、可行性 5、设变量a是整型,f是实型,i是双精度型,则表达式10+‘a’+i*f值的数据类型为( ) A、int B、float C、double D、不确定 6、在C语言中,char型数据在内存中的存储形式是( ) A、补码 B、反码 C、源码 D、ASCII码 7、有如下程序,输入数据:12345M678<cR>后( #include 设有两字符串“Beijing”、“China”分别存放在字符数组str1[10],str2[1 0]中,下面语句中能把“China”连接到“Beijing”之后的为() ?A) strcpy(str1,str2); ? ?B) strcpy(str1,“China”); ? ?C) strcat(str1,“China”) ? ?D) strcat(“Beijing”,str2); ? 2(2.0分) 下列变量的定义及赋值正确的是() ?A) int i=0;j; ? ?B) char c=”A”; ? ?C) double x,y,z;x=y=z=100; ? ?D) float a=b=100; ? 3(2.0分) 设有定义语句:char str[][20]={"Hello","Beijing"},*p=str; 则printf ("%d\n",strlen(p+20)); 输出结果是() ?A) ? ?B) 5 ? ?C) 7 ? ?D) 20 ? 4(2.0分) 设有定义:int x=0,y=1,z=1;则运行表达式:x=y >z--后,x,y, z的值分别是() ?A) 1,1,1 ? ?B) 1,2,0 ? ?C) 0,1,1 ? 0,2,0 ? 5(2.0分) 下列程序段的输出结果是()x=9; while(x>7) {printf(“*”);x--;} ?A) **** ? ?B) *** ? ?C) ** ? ?D) * ? 6(2.0分) 设有定义int a[ ]={1,5,7,9,11,13},*p=a 3;则*(p-2),*(a 4)的值是() ?A) 5 11 ? ?B) 1 9 ? ?C) 5 9 ? 昆明理工大学 《计算机程序设计基础》课程 综合实践型教学课题报告 课题名称:100以内的整数四则运算测试程序设计 组长:学号 040401067 姓名周绍平 组员:学号 040401070 姓名邓磊 学号 040401106 姓名刘云路 学号姓名 学号姓名 学号姓名 学号姓名 学院:信自学院专业班级:自动化0421 指导教师:耿植林 昆明理工大学计算中心 2005 年 6月18日 昆明理工大学计算中心 《计算机程序设计基础》课程综合实践型教学课题报告课程名称:100以内的整数四则运算测试程序设计 正文内容: 一、问题描述 这是一个进行数学计算的程序,且要求拥有多种功能,包括(1)选项菜单集成各功能函数模块(2)出题(每次出10道题目)(3)答题并评分(4)答错的题给出正确答案(5)显示答卷。总体看来,大多数功能要求调用错题,所以面临的两个难题便是出题和保存答题者做错的题以便其它函数调用。另外,由于除法的特殊性——其除数不能为0。又因为这是一个用于100以内整数的四则运算的程序,又对除法这个特殊成员提出了新的要求——要使得到的结果为整数。所以有必要把除法单独拿出来作为一个函数处理。 二、问题分析 这是一个任务很明确的程序设计—用于100以内的整数的四则运算。这个程序要求拥有选项菜单、出题、答题评分、显示答卷、错题再解、重复练习的功能。既然是一个用于计算的程序那它的主要作用就是给练习者答题,并验证答题的正确与否。当然,还要有一些附加功能,比如:把答卷显示出来,错题给出正解,错题再抽出来再做。 这个程序只要求100以内的四则运算,所以随机出现的数字只能是100以内的,并且要求其为整数。不论是数据的输入与输出,都要求其为整数。 鉴于这个程序所要求达到的功能,我们小组决定把它分为计算、菜单、答卷、重做、正解、评价、除法七个函数模块。 对各成员的分工如下: 计算、正解和菜单(周绍平) 评价和除法(邓磊) 答卷和重做(刘云路) 主函数及各函数的连接则由小组成员共同完成。 三、程序设计思路功能模块说明 各函数流程图: 1、除法(chufa) 2、计算(jisuan) 面向对象程序设计期末综合练习二(填空题) 填空题 1.C++ 语言是在 _________语言的基础上发展起来的。 2.C++ 语言的编译单位是扩展名为 __________的 __________文件。 3.行尾使用注释的开始标记符为 __________ 。 4.多行注释的开始标记符和结束标记符分别为__________ 和 __________。 5.用于输出表达式值的标准输出流对象是_________。 6.用于从键盘上为变量输入值的标准输入流对象是________。 7.一个完整程序中必须有一个名为 ________的函数。 8.一个函数的函数体就是一条 _________语句。 9.当执行 cin 语句时,从键盘上输入每个数据后必须接着输入一个________符,然后才能继续输入下一个数据。 10.在 C++程序中包含一个头文件或程序文件的预编译命令为__________。 11.程序中的预处理命令是指以______字符开头的命令。 12.一条表达式语句必须以 ______ 作为结束符。 13.在#include 命令中所包含的头文件,可以是系统定义的头文件,也可以是 ________定义的头文件。 14.使用 #include 命令可以包含一个头文件,也可以包含一个______文件。 15.一个函数定义由 ________和 ________两部分组成。 16.若一个函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的______语句。 17. C++头文件和源程序文件的扩展名分别为______和 ______。 18.程序文件的编译错误分为 ________和 ________两类。 19.当使用 _______保留字作为函数类型时,该函数不返回任何值。 20.当函数参数表用 ______保留字表示时,则表示该参数表为空。 21 .从一条函数原型语句“int fun1(void);”可知,该函数的返回类型为______,该函数带有______ 个参数。 22.当执行 cout 语句输出 endl 数据项时,将使 C++显示输出屏幕上的光标从当前位置移动到 ________的开始位置。 23.假定 x=5,y=6,则表达式 x++*++y 的值为 __________ 。 24.假定 x=5,y=6,则表达式x--*--y的值为__________。 25.假定 x=5,y=6,则执行表达式 y*=x++ 计算后, x 和 y 的值分别为 __________和 __________ 。 26.假定 x=5,y=6,则执行表达式 y+=x-- 计算后, x 和 y 的值分别为 __________和 __________ 。 27.C++ 常数 0x145 对应的十进制值为 __________。 28.C++ 常数 0345 对应的十进制值为 __________ 。 29.十进制常数 245 对应的十六进制的 C++表示为 __________。 30.十进制常数 245 对应的八进制的 C++表示为 __________ 。 31.signed char类型的值域范围是________至__________之间的整数。 32.int和float类型的数据分别占用_________和__________个字节。 33.float和double类型的数据分别占用_________和________个字节。 34.bool和char类型的数据分别占用_________和________个字节。 35.unsigned short int和int类型的长度分别为_________和________。 四则运算 姓名: 学号: 班级: 1.功能结构图 2.程序功能 进行整数的加减乘除和求模运算。程序采用随机产生1~100的两个数进行运算每种运算有10个题目用户输入对应的答案程序提示答案的对错最后统计正确率。每次给出两次答题机会。 3.程序流程图 4.函数列表及功能 5.源程序代码 #include printf("\n---加减乘除运算练习系统---\n"); printf("1.加法运算\n"); printf("2.减法运算\n"); printf("3.乘法运算\n"); printf("4.除法运算\n"); printf("5.求模运算\n"); printf("6.混合运算\n"); printf("0.退出练习\n"); printf(" 请输入数字0~6:"); scanf("%d",&op); //输入相应数字进行练习switch(op) { case 1:printf("--请进行加法运算--\n"); count=0; for(i=1;i<=N;i++) { a=rand()%100+1; b=rand()%100+1; res=f(a,b); //调用加法函数 printf("%d+%d=",a,b); scanf("%d",&ans); //输入数值 if(ans==res) { printf("Very Good!\n"); count++; } else { printf("wrong! 请重新输入\n"); scanf("%d",&ans); if(ans==res) printf("Very Good!\n"); else printf("Wrong Answer!\n"); } } printf("***正确率为%.0f%%***\n",100.0*count/N); break; case 2:printf("--请进行减法运算--\n"); count=0; for(i=1;i<=N;i++) { a=rand()%100+1; b=rand()%100+1; 一、选择题(共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',则对应输出的数据类型为()。 一、填空共219题 第1题题号:422 设有以下结构类型说明和变量定义,则变量a在内存所占字节数是【1】 . Struct stud { char num[6]; int s[4]; double ave; } a,*p; 答案: 1). 22 第2题题号:533 设x和y均为int型变量,则以下for循环中的scanf语句最多可执行的次数是【1】. for (x=0,y=0;y!=123&&x<3;x++) scanf ("%d",&y); 答案: 1). 3 第3题题号:496 静态变量和外部变量的初始化是在【1】阶段完成的,而自动变量的赋值是 在【2】时进行的. 答案: 1). 编译 2). 函数调用 第4题题号:96 已知a=13,b=6, a&b的十进制数值为【1】. 答案: 1). 4 第5题题号:398 程序段int k=10; while(k=0) k=k-1循环体语句执行【1】次. 答案: 1). 0 第6题题号:651 设w=5;w+= -2;则w的值为【1】. 答案: 1). 3 第7题题号:258 下面程序段的输出结果是【1】. int a=12; a=a&0377;pritnf("%d\n",a); 答案: 1). 12 第8题题号:457 设a,b,c,t为整型变量,初值为a=3,b=4,c=5,执行完语句t=!(a+b)+c-1&&b+c/2 后,t的值是【1】. 答案: 1). 1 第9题题号:402 设a取二进制数00101101,若想通过a^b运算使a的高4位取反,低4位不变,则b的 二进制数是【1】. 答案: 1). 11110000 第10题题号:311 若所用变量均已正确定义,则执行下面程序段后的值是【1】. for(i=0 ; i<2 ; i++ ) printf("YES"); printf("\n"); 答案: 1). YESYES Hello world. 让我们用C语言向世界问好。 最早的程序基本是这个样子的: 程序一: #include <> void main() { printf("Hello world.\n"); } 程序二: #include <> int main() { printf("Hello world.\n"); return 0; } 上面的程序你任意模仿一个,看看是否可以通过?如果你能通过这个简单的程序,那就让我们继续完成后面的习题吧。 输入:无 输出:Hello world. #include<> int main() { printf("Hello world.\n"); } Welcome to Beijing. 让我们来练习如何显示多行文字。 输入:无 输出:就是下面的那段文字。 #include<> void main() {printf("Welcome\n"); printf("to\n"); printf("Beijing.\n"); } 练习最简单的printf和scanf printf函数和scanf函数是C语言中最常用的函数之一,下面让我们练习一下吧。 输入:整型变量x的值。 输出:输出整型变量x对应的十进制、八进制和十六进制形式。 认真观察-1的八进制和十六进制输出,请想想是为什么。 #include <> int main() {int x; scanf("%d",&x); printf("x=%d,",x); printf("x=%o,",x); printf("x=%x\n",x); return 0; } 练习两个整数之间的运算 背景:基本练习。 输入:接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123 444 输出:分别输出进行+、-、*、/、*之后的运行结果。#include<> int main() {int x,y; scanf("%d%d",&x,&y); printf("%d+%d=%d\n",x,y,x+y); printf("%d-%d=%d\n",x,y,x-y); printf("%d*%d=%d\n",x,y,x*y); printf("%d/%d=%d\n",x,y,x/y); printf("%d%%%d=%d\n",x,y,x%y); return 0; } 学习打印你的第一个图形 背景:我们已经学习了printf函数,这里给出了一个小程序,它运行的结果是输出一个由星号(*)组成的4*4的正方形。 程序如下: #include <> int main() { printf("****\n"); printf("****\n"); printf("****\n"); printf("****\n"); return 0; } 要求:按照上面的程序范例,编写一个小程序,要求输出的是 4 行由*号组成的等腰三角形。 输入:无。 输出:指定图形。 #include <> int main() { printf(" *\n"); printf(" ***\n"); printf(" *****\n"); printf("*******\n"); return 0; } 整型数的表示范围 编写一个循环程序,输入N 值,输出N 的阶乘。关于循环程序怎么编写,可以参考教材第3章P66页的例题和第5章P82的例题的内容。注意整型数的表示范围,如果当输入的N 比较大时,例如N 等于20 时,输出怎么是负数了?自己想明白吧!#include<> void main() {int N,i; int sum=1; 《C语言》课内实验报告 学生姓名: 及学号: 学院: 班级: 课程名称:C语言 实验题目:实验二选择结构程序设计 指导教师 姓名及职称: 年月日 一、实验目的 1.掌握逻辑表达式和if语句、嵌套的if语句、switch语句和break语句的格式、语义。 2.掌握选择结构程序设计方法。 二、实验内容 编写程序实现两个数的四则运算,要求从键盘输入进行运算的两个数字以及相应的运算符('+'、'-'、'*'、'/'),程序给出算数表达式及运算结果。(如下图所示,要求使用if语句和switch语句两种方法实现) 三、实验结果 1、流程图 2、源程序 (1)使用if语句 #include 手机通讯录管理系统一、设计题目的任务和内容 任务:本程序是非数值计算型算法设计,我设计出了通讯录管理系统的基本功能,并设计了简单的界面。本程序主要考察对自定义函数的熟悉程度,本程序主要使用的是数组的相关操作,包括结构体数组的输入、输出、查找、删除等。我设计的这个通讯录系统也初步实现了人员信息的显示、删除、查找、修改、添加等必要的功能。 具体要求: ◆建立通讯录信息,信息包含、姓名、分类(1、办公类2、个人类3、商务类)、电话、 电子邮箱等; ◆将通讯录保存在文件中; ◆查看功能:可按1、办公类2、个人类3、商务类分类查询,当选中其中一类时,显示出 此类所有数据中的姓名和电话号码。 ◆增加功能:能录入新数据。当录入重复姓名和电话号码时,则提示数据录入重复并取消 录入;当通讯录中超过15条信息时,存储空间已满,不能录入新数据;录入的新数据能按递增的顺序自动进行条目编号。 ◆修改功能:选中某个人的姓名是,可对此人的相应数据进行修改。 ◆删除功能:选中某个人的姓名是,可对此人的相应数据进行删除并自动调整后续条目编 号。 系统功能需求分析: 查询:查询通讯录记录 添加:添加通讯录记录 显示:显示通讯录记录 删除:删除通讯录记录 修改:修改通讯录记录 二、总体设计思路 本系统首先设计出了主函数,然后根据去要实现的功能分别设计拉,显示、删除、查找、修改、添加功能的子函数。在显示的函数设计过程中首先运用拉文件的读取等必要的知识通过把文件的内容读取到内存然后打印出来。删除函数的设计是首先从文件内找到要删除的人,然后通过写一个实现删除目的的FOR循环将该人从内存里删除,然后再用写的方式打开文件,将内存内的信息写入文件,实现删除。查找也是先打开文件,用一个字符串对比的方法找出用户要查找的人,然后打印出来。修改也大体和删除相同,添加函数在设计时通过申请一片空间,然后通过指针将需要添加的信息添加进去,从而实现添加功能。 系统功能模块图: 输入新信息:可输入新的数据。 添加:可以添加通讯录记录,依次输入姓名、电话号码、分类、电子邮箱后,会提示是否继续添加。 删除:输入姓名删除,输入欲删除的那个人的名字后,会自动删除他(她)的记录内容 查询:可按1、办公类2、个人类3、商务类分类查询 修改:输入欲修改的那个人的名字后,再依次输入姓名、电话号码、分类、电子邮箱即可完成修改。 下面就是总的程序流程图: #include"stdio.h" #include"stdlib.h" void main() { int a,b,c,d,e,f,g,t; printf("****************************欢迎使用!************************\n"); printf("\n"); printf("1.加法运算\n"); printf("2.减法运算\n"); printf("3.乘法运算\n"); printf("4.除法运算\n"); printf("*****************************请选择运算类型:"); scanf("%d",&a); while(a<1||a>4) { printf("输入错误,请重新输入"); scanf("%d",&a); } if(a==1) { printf("5,一位数加一位数\n"); printf("6,一位数加两位数\n"); printf("7,两位数加两位数\n"); printf("*********************************请输入题型:"); scanf("%d",&a); while(a<5||a>7) { printf("输入错误,请重新输入"); scanf("%d",&a); } if(a==5) { loop:b=rand()%10; c=rand()%10; d=b+c; printf("%d+%d=?\n",b,c); printf("请输入答案:"); scanf("%d",&e); while(e!=d) { printf("回答错误,请重做"); printf("%d+%d=?\n",b,c); printf("请输入答案:"); scanf("%d",&e); C语言程序设计第一次月考试题(2011.9) 班级:姓名:总分: 一、选择题(每小题3分,共60分) 1.一个C语言程序是由() A)一个主程序和若干子程序组成B)函数 C)若干过程组成D)若干子程序组成 2.下面4个选项中,均是C语言关键字的选项是() A)auto enum include B)switch typedef continue C)singed union scanf D)if struct type 3. 下面4个选项中,均是不合法的用户标识符的选项是() A)A P_0 do B)float 1a0 -A C) b—a goto int D) _123 temp INT 4.下面4个选项中,均是不合法的整形常量的选项是() A)- - 0f1 - oxfff 0011 B)- oxcdf 017 12,456 C) – 018 999 5e2 D)-0x48eg -068 03f 5. 下面4个选项中,均是不合法的浮点数的选项是() A)160.0.12 e3 B)123 2e4.2 .e5 C)-.18 123e4 0.0 D)-e3 .234 1e3 6.下面4个选项中,均是不合法的转义字符的选项是() A)‘\‖‘?\\‘?\xf‘B)‘\1011‘?\‘?\a‘ C) ?\011‘?\f‘?\}‘D)‘\abc‘?\101‘?x1f‘ 7.下面不正确的字符串常量是() A)‘abc‘B)‖12‘12‖C) ‖0‖D)‖‖ 8.Int k=7, x=12; 则以下能使值为3的表达式是() A)x%=(k%=5) B)x%=(k- k%5) C) x%=k-k%5 D)(x%=k) – (k%=5) 9.若x、i、j和k都是int型变量,则执行表达式x=(i=4,j=16,k=32)后x的值 是() A) 4 B)16 C)32 D)52 10.假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是( ) A) 7 B) 8 C)6 D)2 11.已知各变量的类型说明如下: Int k, a, b; unsigned long w=5; double x=1.42; 则以下不正确的表达式是() A) x%(-3) B)w+=-2 C) k=(a=2,b=3, a+b) D)a+=a-=(b=4)*(a=3) 12.已知字母A的ASCII码为65,且定义c2为字符型变量,则执行语句c2=‘A‘+‘6‘-?3‘;后;c2中的值为() A) D B) 68 C)不确定的值D) C C语言程序设计的试题及答案 C语言程序设计的试题及答案C语言程序设计的试题及答案第一章基础知识 一、填空 1.每个C程序都必须有且仅有一个________函数。 2.C语言程序开发到执行通常要经过6个阶段即编辑、预处理、________、链接、加载和执行。 3.软件是程序,以及______、使用和维护所需要的所有文档。 4.国标中规定:“计算机程序是按照具体要求产生的适合于计算机处理的_________”。 5.程序设计语言按照书写形式,以及思维方式的不同一般分为低级语言和________两大类。 6.C语言是由________组成的。 7.C语言的函数可分为主函数ain、标准库函数和_________。 8.一个函数是由两部分组成的,即:________和函数体。 9.编译是将C语言所编写的源程序________成机器代码,也称为建立目标代码程序的过程。 10.程序是由某种程序设计语言编制出来,体现了编程者的控制思想和对计算机执行操作的要求。不同的任务功能,就会需求不同的软件程序,如:控制计算机本身软硬件协调工作,并使其设备充分发挥效力,方便用户使用的系统软件程序,称为操作系统;而为办公自 动化、管理信息系统、人工智能、电子商务、网络互联等等应用而开发的软件程序,统称为_________。 11.机器语言是以__________形式表示的机器基本指令的集合,是计算机系统唯一不需要翻译可以直接识别和执行的程序设计语言。 12.与机器语言相比,使用汇编语言来编写程序可以用_______来表示指令的操作码和操作对象,也可以用标号和符号来代替地址、常量和变量。 13.在编译程序之前,凡以____开头的代码行都先由预处理程序预处理。 14.C程序的执行均是由执行_________开始。15.函数体即为包含在{}内的部分。它分为________和为完成功能任务由若干个C语句组成的执行部分。 16.C语言程序中一条简单语句是以________字符作为结束符的。 17.C语言是结构化、________的程序设计语言。 18.由于计算机硬件不能直接识别高级语言中的语句,因此,必须经过“_______程序”,将用高级语言编写的程序翻译成计算机硬件所能识别的机器语言程序方可执行。 19.用高级语言编写的程序需翻译成计算机硬件所能识别的机器语言程序方可执行。所以说,用高级语言进行程序设计,其编程效率高,方便易用,但_______没有低级语言高。 20.第一个系统体现结构化程序设计思想的教学工具语言是_______语言。 C语言程序设计试题与答案-4 《C语言程序设计》试题(闭卷) 一、单项选择题:(每题 2 分, 共 30 分) 1. C 语言规定:在一个源程序中, main函数的位置_____________。 A. 必须在最开始 B. 必须在系统调用的库函数的后面 C. 可以任意 D. 必须在最后 2. 下列说法中错误的是 _____________。 A. 主函数可以分为两个部分: 函数头和函数体 B. 主函数可以调用任何非主函 数的其他函数 C. 任何非主函数可以调用其他 任何非主函数 D. 程序可以从任何非主函数开 始执行 3. 用 C 语言编写的源文件经过编 的值是_____________。 A. 1,1 B. 0,1 C. 1,0 D. 0,0 8. sizeof (char)的结果值是 _____________。 A. 4 B. 2 C. 1 D.出错 9. 设 a 为整型变量,不能正确表达 数学关系:1010 && a<15 D. !(a<=10) && !(a>=15) 10. 要为字符型变量 a赋初值,下列 语句中哪一个是正确的 _____________。 A. char a="3"; B. char a=’3’; C. char a=%; D. char a=*; 11. 设有定义:char s[12] = "STRING" ; 则 printf( "%d\n",strlen(s)); 的 输出是_____________。 设计题目:大整数的四则运算 1. 功能简介:编写出实现大整数之间相加,相减,相乘,相除的程序,并输出计算结构。 课程设计要求:采用模块化程序设计 源程序中应有足够的注释 必须上机调试通过 注重算法运用,优化存储效率与运算效率 需提交源程序(含有注释)及相关文件(数据或数据库文件); 提交设计报告书。 2.总体结构: 数据初判断运算符 加法 正整数非正整 转变为 减法 转变为 乘法除法 转变为 退出 流程图: 3 .概要设计: 1)加法运算 利用两个整形数组分别存放两个数a和b的每一位的数值,最低位存放符号。如果a 和b同号,从最低为开始计算,如果有进位则保存在高一位,本为则减10,然后反序将计算后的各个位的数值保存在一个数组c并输出,如果a和b都是负数则在前面要输出负号,函数的返回值为c的位数。如果a和b异号,也即两个正整数相减,从最低位开始相减,如果要借位则本位加10再相减,高一位要减1,然后反序将计算后的各个位的数值保存在一个数组c并输出,在前面要输出相应的符号位。 2)减法运算 可将减法运算转化为加法运算,只要将被减数的符号改变即可。 3)乘法运算 符号存放在最低位,将其中一个数a的每一位分别乘以另一个数b的每一位,并将结果保存在数组c中,然后重复计算a的下一位跟b的每一位的乘积,把上一次计算保存在c 的值加上本次计算后的值,并保存在c自身中,直到a的最高位,最后输出符号和相应的计算结果。 4)除法运算 利用乘法和减法,将除数分别乘以1到9,直到其值大于等于被除数的对应的数,然后被除数对应的数减去其乘积,保存在一个数组中,下一次循环把它归到被除数中继续做除法运算,最后得到余数并输出。 4.函数功能: 1.void init(int a[],int b[],int *p1,int *p2) 2.功能说明:读入所要计算的数值,数据初始化 3.i nt plus(int a[],int b[],int c[],int m,int n) 4.功能说明:两个正整数相加 3. void change(int a[],int b[],int m,int n) 功能说明:当两异号数相加时,改变其符号以符合加法运算 5.i nt minus(int a[],int b[],int d[],int m,int n)国家开放大学C语言程序设计A第一次形考任务及答案
C语言程序设计程序填空题库及答案
C语言程序设计入门经典例题
C语言程序设计期末考试试题(含答案)
石油大学(华东)C语言2018年在线考试
C语言四则运算测试程序设计报告
C语言程序设计期末练习填空题.docx
C语言-四则运算
国家开放大学C语言程序设计A第一次形考任务与答案(20201127230652)
大学计算机C语言程序设计(填空题)
C语言_中国石油大学(华东)c语言上机题
C语言实验报告四则运算
C语言程序设计实习报告
C语言课程设计小学生四则运算
C语言程序设计第一次月考试题
C语言程序设计的试题及答案
C语言程序设计试题与答案-4
大整数的四则运算高质量c语言程序