2018年大学c语言机期未试考题

时间:2019-05-14 19:28:45下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《2018年大学c语言机期未试考题》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《2018年大学c语言机期未试考题》。

第一篇:2018年大学c语言机期未试考题

1#####

在考生文件夹下的给定程序modi53.c中,函数fun的功能是:将从键盘上输入的每个单词的第一个字母写为大写字母,输入时各单词必须用空格隔开,用'.'结束输入。

请改正程序中的错误,使程序能输出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include

int fun(char *c,int status){ /************found************/

if(c==' ')return 1;

else

{

if(status && *c<='z' && *c>='a')/************found************/

c+='A'-'a';

return 0;

} }

main(){

int flag=1;

char ch;

printf(“请输入一字符串,用点号结束输入!n”);

do

{

ch=getchar();

flag=fun(&ch,flag);

putchar(ch);

}while(ch!='.');

printf(“n”);} 第1 处内容填写有误

第[1]处操作错误

题面要求操作:内容为[if(*c==' ')return 1;]

实际操作结果:内容为[if(c=='')return1;] 第2 处内容填写有误

第[2]处操作错误

题面要求操作:内容为[*c+='A'-'a';]

实际操作结果:内容为[c+='A'-'a';]

2##### 请编写函数fun,其功能是:计算并输出3到n之间所有素数的平方根之和。

例如,在主函数中从键盘给n输入100后,输出为:sum=148.874270。

注意:要求n的值大于2但不大于100。

部分源程序在考生文件夹下的文件prog192.c中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句

#include #include double fun(int n){

} main(){ int n;

double sum;

printf(“nnInput n: ”);scanf(“%d”,&n);

sum=fun(n);

printf(“nnsum=%fnn”,sum);

NONO();} NONO(){/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。*/

FILE *rf, *wf;int n, i;double s;

rf = fopen(“bc192.in”, “r”);

wf = fopen(“bc192.out”, “w”);

for(i = 0;i < 10;i++){

fscanf(rf, “%d”, &n);

s = fun(n);

fprintf(wf, “%lfn”, s);

}

fclose(rf);fclose(wf);}

本题的考核点是查找素数的算法以及开根函数的应用。

解题思路:从3到指定数n,找出所有的素数,素数的判断方法是:只能被1和其自身整除,而不能被其它任何数整除的数;sqrt(x)函数是计算x的平方根。

#include #include double fun(int n){ int i,j=0;/*定义两个整型变量*/ double s=0;/*定义变量s为双精度型*/

for(i=3;i<=n;i++)

{ for(j=2;j

if(i%j==0)break;

/*如果i能被j整除就说明i不是素数,继而退出循环体*/

if(j==i)s=s+sqrt(i);/*sqrt(i)函数是计算i的平方根*/

}

return s;/*返回结果*/

3#

给定程序的功能是求k!(k<13)并通过函数名传回主函数。

例如:若k = 10,则应输出:3628800。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的blank20.c中。

不得增行或删行,也不得更改程序的结构!#include long fun(int

k){ /************found************/

if(k>0)/************found************/

return(k*fun(___2___));/************found************/

else if(k==0)

return 1L;}

main(){ int k = 10;

printf(“%d!=%ldn”, k, fun(k));}

本题主要考查的是函数的递归调用。

题中第一个空填“>”:此处为递归调用结束的条件。

题中第二个空填“k-1”:此处为递归调用时返回给调用函数的实参值。

题中第三个空填“==”:此处判断k是否为0,若是则将值返回给主函数。

本评析仅供参考。

4在考生文件夹下的给定程序modi31.c中,函数fun的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。各字符串在主函数中输入,并放入一个字符串数组中。

请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include #define N 5 #define M 81 /************found************/ fun(char(*sq)[N]){int i;char *sp;sp=sq[0];for(i=0;i

if(strlen(sp)

sp=sq[i];/************found************/ return sq;} main(){char str[N][M],*longest;int i;printf(“Enter %d lines :n”,N);for(i=0;i

程序中的重要思想如下:

1、建立了一个二维字符串数组,用于存放用户输入的6个字符串;

2、建立了一个指针数组,目的是用6个指针分别指向6个字符串;

3、函数fun()的形参只有一个,即指针数组pstr[],这表明要想在函数fun()中对6个字符串进行操作,只能通过pstr[]中的6个指针。

题中第一个空填“*(pstr+j)”:观察源程序可以发现,在程序中使用strcmp()函数是为了判断字符串str[i]与str[i+1]两者的大小,在fun()函数中只能通过指针来表达各个字符串,所以应当填“*(pstr+j)”。

题中第二个空填“pstr[j]”:对两个字符进行比较后,若pstr[i]中的字符比pstr[j]中的字符大,则将pstr[j]中的字符赋给pstr[i]。

题中第三个空填“p”:对两个字符进行比较后,若pstr[i]中的字符比pstr[j]中的字符大,则将pstr[j]和pstr[i]的内容进行交换。

5请编写函数fun,其功能是:计算并输出下列多项式的值:

S=(1─)+…+(──1]);"。

第二篇:C语言机试试题

1、程序填空题

给定的程序的功能是调用fun函数建立班级通讯录。通讯录中记录 每位学生的编号、姓名和电话号码班级的人数和学生的信息从键盘

读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制中。填空:(1)STYPE

(2)FILE

(3)fp 改错:(1)for(i=0;i<=sl;i++)(2)t[2*sl]=''或t[sl+sl]='' 编程:

*c=(a/10)*1000+(b/10)*100+(a%10)*10+(b%10);

2、程序填空题

给定程序的功能是:从键盘输入若干文本(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输出输入的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和Writetext实现。填空:(1)*fw(2)str(3)str 改错:(1)void fun(long s,long *t)(2)s1=s1*10;编程:int i,j=0,min=a[0].s;for(i=0;i

3、程序填空题

给定程序中,函数fun的功能是:讲自然数1~10以及它们的平方根写到名为myfile3.txt的文本中,然后再按顺序读出显示在屏幕上。填空:(1)fp(2)fclose(fp)(3)myfile3.txt 改错:(1)for(i=j+1;i

4、程序填空题

给定程序中,函数fun的功能是:找出形参s所指字符串出现频率最高的字母(不区分大小写),并统计出其出现的次数,例如,形参s所指的字符串为:abcAbsmaxiess,程序执行后的输出结果为: letter 'a':3 times letter 's':3 times 填空:(1)“r”(2)fs

(3)ft 改错:(1)

if(d%2==0)

(2)s/=10;编程:

int i = 0, j = 0;

t[j++] = s[i];

5、程序填空题 while(s[i]){

if(i % 2 == 0 && s[i] % 2 == 0)

i++;} t[j] = 0;给定程序中已经建立一个带有头结点的单向链表,链表中的各结点数据域中的数据递增有序链接,函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。填空:(1)x(2)p

(3)s 改错:(1)long k=1;(2)num/=10;编程:int i;float aver=0.0;for(i=0;i

6、程序填空题

给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部节点中的数据,并释放该节点,使链表缩短。填空:(1)next(2)t->data(3)t 改错:(1)void fun(char *a)(2)print(“%c”,*a);编程:int i;char *p=s,*q=t;int n=0,m=0;while(*p)/*计算串s的长度n,其中p为临时指针*/ { n++;p++;} while(*q)/*计算串t的长度m,其中q为临时指针*/ { m++;q++;} if(n>=m)/*比较m和n的值,设置p指向较大的指针*/ p=s;else p=t;return p;

7、程序填空题

给定程序中建立一个带有头结点的单向链表,链表中的各节点按数据域递增有序链接。函数fun的功能是:删除链表中数据域值相同的节点,使之只保留一个。填空:(1)q

(2)next

(3)next 改错:(1)缺分号

(2)p = i;编程:*n=0;int i;for(i=1;i<=m;i++)if(i%7==0||i%11==0)a[*n++]=i;

8、程序填空题

给定的程序中,函数fun的功能是:在带有头结点的单向链表中,查找数据域中值为ch的结点。找到后通过函数值返回该结点在 链表所处的顺序号;如不存在值为ch的结点,函数返回0值。填空:(1)0或NULL

(2)n(3)head,ch 改错:(1)for(i=0,t=0;p[i];i++)(2)c[t]='';编程:

int i;

for(i=1;i

If((ss[i]>='a'&&ss[i]<='z')ss[i]-=32;

9、程序填空题

给定程序中,函数fun的功能是:统计出带有头结点的单向链表中节点的个数,存放在形参n所指的存储单元中。

填空:(1)*n

(2)next

(3)head 改错:(1)a=NULL;

(2)if(*r==*p)编程: int i,j=0;for(i=0;i

10、程序填空题

给定程序中,函数fun的功能是:计算出带有头结点的单向链表中各节点数据域中值之和作为函数值返回。

填空:(1)data(2)next(3)head 改错:(1)while(*r)(2)*a=*r;a++;r++;编程:int i,j=0;for((i=0;i

11、程序填空题

给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数数值返回,并把其串长放在形参n所指变量中。Ss所指字符串数组中共有M个字符串,且串长

(3)k 改错:(1)if(('a'<=tt[i])&&(tt[i]<='z'))

(2)tt[i]-=32;编程:int i,j;int t=0;for(i=2;i

12、程序填空题

给定程序中,函数fun的功能是:将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如:形参s所指的字符串为:def35adh3kjsdf7。

执行结果为:defadhkjsdf3537 填空:(1)j++

(2)s[i]=t1[i]

(3)j 改错:(1)for(j = i + 1;j < 6;j++)

(2)*(pstr + i)=*(pstr + j);编程: int cnt=0;char *p=ss;while(*p){if(*p==c)cnt++;p++;} return cnt;

13.程序填空题

给定程序中,函数fun的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7.执行结果为:def3*5adh3*kjsdf7*。填空:(1)&&(2)0

(3)s[j] 改错(1)for(i=2;i<=m;i++)(2)y+=1.0/(i*i);编程题:int c[3][3];for(i=0,i<3;i++)for(j=0;j<3;j++){c[i][j]=a[j][i];b[i][j]=a[i][j]+c[i][j];}

14、程序填空题

给定的程序中,函数fun的功能是:统计形参s所指字符串中数字字 符出现的次数,并存放在形参t所指的变量中,最后在主函数中 输出,例如,形参s所指的字符串为abcdef35adgh3kjsdf7。输出 结果为:4。填空:(1)s[i]

(2)'9'(3)*t=n; 改错:(1)t=*x;*x=y;(2)return(t);编程:

int i; *n=0;for(i=7;i<1000;i++)

if(((i%7)==0)||((i%11)==0)&&((i%77)!=0)

a[(*n)++]=i;

15、程序填空题

给定的程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数的位置,最右边被移出的字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)

例如:形参s所指字符串为:abcdefgh,执行结果为: ahcbedgf 填空:(1)1

(2)s[k]

(3)c 改错:(1)long s = 0,t = 0;(2)t = t / 10;编程: char *p=tt;int i;for(i=0;i<26;i++)pp[i]=0;while(*p){if(*p>='a' &&p<='z')pp[*p-'a']+=1;p++;}

16、程序填空题

在给定程序中,函数fun的功能是:对形参s所指字符串下标喂奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中形成一个新串。例如,形参s所指的字符串为baawrskjghzlicda,执行后p所指字符数组中的字符串应为:aachjlsw。

填空:(1)t=i

(2)i(3)0 改错:(1)while(fabs(t)>=num)(2)t=s/n;编程: int p,m=0;for(p=0;p

17、程序填空题

给定程序中,函数fun的功能是:在形参s所指字符串中寻找与参数c相同的字符,并在其后插入一个与之相同的字符,若找不到相同的字符则函数不做任何处理。

例如:s所指字符字符串为:baacda,c中得字符为:a,执行后所指字符串为:baaaacdaa。填空:(1)0或''

(2)0(3)c 改错:(1)double sum=0.0;(2)sum/=c;编程:int k;float str=1.0,sum=1.0;for(k=2;k<=n;k++){ sum=sum+k;str=str+1/sum;} return str;

18、程序填空题

给定程序中,函数fun的功能是:N×N矩阵,根据给定的m(m<=N)值,将每行元素中的值均右移m个位置,左边值为0.例如,N=3,m=2,有下列矩阵 1

4

7

程序执行结果为 0

0

0

0

0

0

填空:(1)i++(2)m

(3)m

改错:(1)while((high>=2)&&(n<10))(2)缺分号

编程: float x1=0.0,x0;do { x0=x1;x1=cos(x0);}while(fabs(x0-x1)>0.000001);return x1;

19、程序填空题

给定程序中,函数fun的功能是:将N*N矩阵中元素的值按列右移1个位置,右边被移出矩阵的元素绕回左边。例如,N=3,有下列矩阵 1 2 3 4 5 6 7 8 9 计算结果为 3 1 2 6 4 5 9 7 8 填空:(1)N(2)N-1(3)0 改错:(1)s=s+(n+1.0)/n;

(2)return t;编程:int f0=0,f1=1,f;do {f=f0+f1;f0=f1;f1=f;}while(f

给定程序中,函数fun的功能是:由NxN矩阵,将矩阵的外围元素顺时针旋转。操作顺序是:首先将第一行元素的值存入临时数组r, 然后使第一列成为第一行,最后一行成为第一列,最后一列成为最后一行,临时数组中的元素成为最后一列 列。例如:而N=3,有以下矩阵: 1 4 7 计算结果为 7 8 9 填空:(1)0

(2)j--(3)j 改错:(1)double f(double x)

(2)缺分号 编程:

double s=0.0;int i;for(i=1;i<=m;i++)s=s+log(1.0*i);s=sqrt(s);return s;

21、程序填空题

给定程序中,函数fun功能是:找出100至x(x想<999)之间各位上的数字之和为15的所有整数,然后输出;符合条件的整数个数作为函数值返回。例如,当n值为500时,个各位数字之和为15的整数有

159,168,177,186,195,249,258,267,276,285,294,339,348,357,366,375,384,393,429,438,447,456,465,474,483,492,共有26个。

填空:(1)

0(2)

x(3)

t++

改错:(1)

int i,s1;(2)t[i]=s[s1-1-i];

编程: *c=(b/10)*1000+(a/10)*100+(b%10)*10+a%10;

22、程序填空题

给定的程序中,函数fun的功能是:找出100~999之间(含有100和999)所有整数各位上的数字之和为x(x为以正整数)的整数,然后输出;符合条件的整数个数作为函数值返回。例如:当x值为5时,100~999之间各位上数字之和为5的整数有:104,113,122,131,140,203,212,230,302,311,320,401,410,500.共有15个。当x的值为27时,各位数字之和为27的整数是:999。只有1个。填空:(1)999

(2)t/10(3)x 改错:(1)void fun(long s,long *t)(2)while(s>0)编程:STREC tmp;int i,j;for(i=0;i

23、程序填空题

给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原位从高位到低位的顺序组成一个新的数,并作为函数值返回。

例如,从主函数输入一个整数:27638496,函数返回值为:26845.填空:(1)1

(2)s

(3)i*10 改错:(1)int fun(int n,int xx[][M])

(2)printf(“%d”,xx[i][j]);编程:*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);程序填空题

给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,并作为函数返回.例如,输入一个整数:27638496,函数返回值为:64862.填空:(1)0

(2)10*x

(3)n/10 改错:(1)*t=0;

(2)if(d%2!=0)编程: char *p=p1;while(*p)p++;while(*p2){*p++=*p2++;*p=0;}

25.程序填空(与教材18题对应))给定的程序中,函数fun的功能是:将形参n所指变量中,各位上为 偶数的数去除..剩下的数按原来从高位的顺序组成一个新的数,并 通过形参兆时指针n传回所指变量.例如:输入一个数:27638496,新的数:739.填空(1)10

(2)0

(3)x 改错(1)if(n = = 0)(2)缺分号

编程:

long s=0, t;int i=0,j,n=strlen(p),k,s1;if(p[0]=='-')i++;for(j=i;j<=n-1;j++){t=p[j]-'0';s1=10;for(k=j;k

给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。S=(1*3)/(2*2)+(3*5)/(4*4)+(5*7)/(6*6)+„„+(2n-1)(2n+1)/(2n*2n)例如:当形参n的值为10时,函数返回9.612558.填空:(1)0

(2)n

(3)

(t*t)改错:(1)for(i=0;str[i];i++)

(2)for(i=0;str[i];i++)编程:double s;float n,t,pi;t=1;pi=0;n=1.0;s=1.0;while((fabs(s))>=eps){pi+=s;t=n/(2*n+1);s*=t;

n++;} pi=pi*2;

return pi;

27、程序填空题

(与22题对应)

给定程序中,函数fun的功能是:计算下式前n项的和

S=(1*3)/(2*2)-(3*5)/(4*4)+(5*7)/(6*6)-„+(-1)^(n-1)*(2n-1)(2n+1)/(2n*2n)作为函数植返回。

例如,当形参n的值为10时,函数返回:-0.204491 填空:(1)1

(2)2*i

(3)(-1)改错:(1)缺分号

(2)if(m= =k)编程:int i;*max=a[0];*d=0;for(i=0;i

28、程序填空题

给定程序中,函数fun的功能是计算下式

s=3/(2*2)-5/(4*4)+7/(6*6)-„+(-1)^(n-1)(2n+1)/(2n*2n)直到|(2n+1)/(2n*2n)|<10*e(-3)并把计算结果作为函数值返回。

例如:若形参e的值为1e-3,函数的返回值为0.551690。填空:(1)3.0

(2)>

(3)(2*i+1)改错:(1)double fun(int n)

(2)s=s+(double)a/b;编程:

int i,j,max=a[0][0];

for(i=0;i<2;i++)

for(j=0;j

if(max

max=a[i][j];

return max;

29、程序填空题

给定程序中,函数fun的功能是计算下式

s=1/(2*2)+3/(4*4)+5/(6*6)+....(2n-1)/(2n*2n)直到|(2n-1)/(2n*2n)|<=10e-3,并把计算结果作为函数值返回。例如,若形参e的值为1e-3,函数的返回值2.985678.填空:(1)0(2)i++(3)2.0*i 改错:(1)void fun(char *s,char *t)(2)t[2*d]='';编程:int i,j=o;for(i=1;i

给定程序中,函数fun的功能是,将形参s所指字符串的所有字母 字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作 为函数值返回。

例如,s所指字符串为:asd123fgh543df处理后新字符串为 asdfghdf123543.填空:(1)s[i]

(2)k

(3)0 改错:(1)while(*w)

(2)if(*r==*p)编程:int i,j=0;for(i=1;i

31、程序填空题

给定程序中,函数fun的功能是:将a所指4×3矩阵中第k行的元素与第0行元素交换。例如。有下列矩阵: 1

4

7

11 若k为2,程序执行结果为: 7

4

1

11

12填空:(1)k

(2)N(3)a[k][i] 改错:(1)for(i=strlen(t)-1;i;i--)(2)if(t[j]>t[j+1])编程:char *p=ss int i=0;while(*p){ if((i%2)&&(*p>='a'&&*p<='z'))*p-=32;p++;i++;}

32、程序填空题

给定程序中,函数fun的功能是:将a所指3*5矩阵中第k列的元素左移到第0列,第k列以后的每列元素依次左移,原来左边的各列依次绕道右边。例如,有以下矩阵: 1 1

若结果为,程序执行结果为: 3 3 填空:(1)k(2)N-1(3)temp 改错:(1)void fun(int a[][M],int m)(2)a[j][k]=(k+1)*(j+1);编程:

*c=(a%10)*1000+(b%10)*100+(a/10)*10+b/10;

33、程序填空题

给定程序中,函数fun的功能是:在3*4的矩阵中代出在行上最大、在列上最小的那个元素,若没有符合条件的元素则输出相应信息。例如:有下列矩阵 1 2 13 4 7 8 10 6 3 5 9 程序执行的结果为:find:a[2][2]=9 填空:(1)j

(2)0

(3)i++ 改错:(1)for(i=2;i<=m;i++)(2)y-=1.0/(i*i);编程:float av=0.0;int i,j=0;for(i=0;iscore[i])below[j++]=score[i];return j;10;

34、程序填空题

给定程序中,函数fun的功能是:把形参s所指字符串中最右边的n个字符复制到形参t所指字符数组中,形成一个新串。若s所指字符串的长度小于n,则将整个字符串复制到形参t所指字符数组中。

例如,形参s所指的字符串味:abcdefgh,n的值为5,程序执行后t所指字符串数组中的字符串为:defgh.填空:(1)t,s(2)s[i](3)0 改错:(1)if(i%k==0)(2)if(k>=i)编程:int i=0;*n=0;for(i=1;i<=x;i++)if((x%i==0)&&(i%2))pp[(*n)++]=i;

35、给定程序中,函数fun的功能是:在形参s所指字符串是否是“回文”(Palindrome),若是,函数返回值为1;不是,函数返回值为0。“回文”是正读和反读都一样的字符串(不区分大小写字母)。

例如,LEVEL和Level是“回文”,而LEVLEV不是“回文”。填空:(1)s(2)—

(3)return 0 改错:(1)double fun(int n)

(2)c=a;a+=b;b=c;编程: int r=0,temp,p,sign=1;

for(temp=m+1;temp

sign=1;

else {sign=0;break;} } if(sign= =1&&p>=temp){if(k>=0){xx[r++]=temp;k--;} else break;}

}

程序填空题

给定程序中,函数fun的功能是:计算出形参s所指定字符串中包含的单词个数,作为函数值返回。为便于统计,规定各单词之间用空格隔开。

例如,形参s所指的字符串为:This is a C languge program,函数的返回值为6。填空:(1)n++(2)0

(3)s++ 改错:(1)t+=s[k];(2)*aver=ave;编程:int i,pos=0,max=*s;for(i=1;i

37、程序填空题

给定程序中,函数fun的功能是:将形参s所指字符串中所有的ASCII码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。例如:形参s所指的字符串为:Abc@156*,程序执行后t所指字符串数组中的字符串为:A@156*。

填空:(1)*s

(2)s++

(3)n 改错:(1)int j,c=0;double xa=0.0;

(2)if(x[j] >= xa)编程:float result,temp=1.0;int i;for(i=1;i<=m;i++)temp=temp*i;result=temp;for(temp=1.0,i=1;i<=n;i++)temp=temp*i;result=result/temp;for(temp=1.0,i=1;i<=m-n;i++)temp=temp*i;result=result/temp;return result;

38.程序填空题

给定程序中,函数fun的功能是:将形象s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。

例如,形参s所指的字符串为:abs5def126jkm8,程序执行后的输出结果为:22。填空:(1)48

(2)s++

(3)sum 改错:(1)if((k%13= =0)||(k%17= =0))

(2)]

int i;for(i=21;i<=n;i++)if((i%3= =0)&&(i%7 = =0))sum=sum+i;return sprt(sum);

39、程序填空题

给定程序中,函数fun的功能是:找出形参s所指字符串中出现频率最高的字母(不区分大小写),并统计出其出现的次数。

例如,形参s所指字符串为:abcAbsmaxless,程序执行后的输出结果为: letter ‘a’:3 times letter ‘s’:3 times

填空:(1)*s(2)1(3)k[n] 改错:(1)double fun(int k)(2)return s;编程:double s=0.0;int i;for(i=1;i<=n;i++)s=s+1.0/(i*(i+1));return s;

40、程序填空题

给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果,ss所指字符串数组中共有N个字符串,且串长小于M。

填空:(1)i

(2)ps[j](3)tp 改错:(1)double fun(int n)(2)return sum;编程:int i;double a=1,b=1,s=1;for(i=1;i<=n;i++)

41、程序填空题

给定程序中,函数fun的功能是用函数指针指向要调用的函数,并进行调用,规定在2处使f指向函数f1,在3处使f指向函数f2。当调用正确时,程序输出: x1=5.000000,x2=3.000000, x1*x1+x1*x2=40.000000 填空:(1)double(2)f1(3)f2 改错:(1)p=h->next;(2)p=p->next;编程: int i,n=0,fg=1;char *p=str;while(*p){n++;p++;} for(i=0;i

42、程序填空题 给定程序中,函数fun的功能是将带头节点的单向链表结点数据域中的数据从小到大排序,即若原链表结点数据从头至尾的数据为:10,4,2,8,6,排序后链表结点数据域从头至尾的数据为:2,4,6,8,10。

填空:(1)h->next(2)p->next(3)>= 改错:(1)p=h->next;(2)p=p->next;编程:int i,j;for(i=0;i

43、程序填空题 给定程序中,函数fun的功能是将不带头结点的单向链表逆置,即若链表中从头至尾结点数据域依次为:2,4,6,8,10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。填空:(1)NODE *(2)q(3)r 改错:(1)if(i%2 || s[i]%2==0)(2)t[j]=0;编程: for(j=0;j

44..程序填空题

给定程序中,函数fun功能是将不带头结点的单向链表逆置,即若原链表从头到尾结点数据域依次为:2 4 6 8 10 逆置后,从头到尾结点数据域依次为:10 8 6 4 2 填空:(1)next(2)0(3)r 改错:(1)r=t;(2)if(*r= =0)编程:int i,j,k=0;for(i=0;i

45、程序填空题

给定程序中,函数fun的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序,即若原链表结点数据域从头到尾的数据为:10,4,2,8,6,排序后链表结点数据域从头到尾的数据为:2,4,6,8,10。填空:(1)p->next(2)q(3)p->next 改错:(1)''(2)s++;编程:int b[N],i,j=0;for(i=p+1;i

46、程序填空题 给定的程序中,函数fun的功能是:统计形参s所指字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出,例如,形参s所指的字符串为abcdef35adgh3kjsdf7。输出 结果为:4。

填空:(1)double

(2)f1

(3)f2 改错:(1)char *fun(char *s, char *t)

(2)ss++

(3)tt++ 编程: char a[N];int i;for(i=0;i=0;m--;i--)w[i]=a[m];

47、程序填空题

给定的程序中,函数fun的功能是将形参给定的字符串,整数、浮点数写到文本文件中,再用字符的方式从此文本文件中逐个读入并显示在终端屏幕上。填空:(1)FILE *

(2)fp(3)ch 改错:(1)s[j++]=s[i];

(2)s[j]= '';编程: for(j=0;j

b[n]=s[j][i];

48、程序填空题

给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi 和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。

填空;

(1)File *

(2)fclose(fp)

(3)fp 改错;

(1)t=(STU*)calloc(sizeof(STU),m);(2)t[k]=b[j];编程;

int i,t,j=0,*p=a;t=p[0];for(i=0;i<=n;i++)if(t==p[i]);else {a[j]=t;t=p[i];j++;} if(i>=n)a[j]=t;return j;

49、程序填空题

程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。填空:(1)“rb”

(2)>

(3)fwrite 改错:(1)p=s;

(2);(缺分号)编程:int i;for(i=0;j=100)b[10]++;else b[a[i]/10]++;

50、程序填空题

程序通过定义学生结构变量,储存了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指的文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据,其他学生的数据不变。填空:(1)filename(2)fp(3)fp 改错:(1)p=(NODE*)malloc(sizeof(NODE));(2)return h;编程: int i,n=0;for(i=0;i=’ a’&&s[i]<=’ z’&&s[i+1]=’ ’||s[i+1]==’’)n++;}

他学生的数据不变。

填空:(1)filename(2)fp(3)fp 改错:(1)p=(NODE*)malloc(sizeof(NODE));(2)return h;编程: int i,n=0;for(i=0;i=’ a’&&s[i]<=’ z’&&s[i+1]=’ ’||s[i+1]==’’)n++;}

第三篇:ATM机C语言程序

直接运行没有错误的代码c----n ==>==>请输入你要转入的金额:“);

scanf(”%f“,&zj);

if(zj>0.00 && zj<0.01)zj=0.01;

if(zj<0){system(”cls“);

printf(”n“);

for(i=1;i<=80;i++)printf(”=“);

printf(”n ==>对不起,转入的金额不能为负值!n“);

break;}

printf(”n“);

for(i=1;i<=80;i++)printf(”=“);

printf(”n ==>你要将本账户中的 %.2f 元 RMB 转入账户 %d 中:nn ==>==>确认请按1nn ==>==>==> 重新输入请按其他键nn“,zj,zh[j]);

for(i=1;i<=80;i++)printf(”=“);

printf(”n“);

scanf(”%d“,&c);

if(c==1){

system(”cls“);

printf(”n“);

if(ck[m]>=zj){

for(i=1;i<=80;i++)printf(”=“);

ck[m]=ck[m]-zj;

ck[j]+=zj;

jf[j]+=zj/100;

printf(”n ==>恭喜你,转账成功!n“);}

else {

for(i=1;i<=80;i++)printf(”=“);

printf(”n ==>==>对不起,你的余额不足,请重新选择操作!n“);}

break;}

}

}

else {system(”cls“);

printf(”n“);

for(i=1;i<=80;i++)printf(”=“);

printf(”n ==> 操作错误!nn ==>==> 请重新选择操作!n“);

}

}

}

else {system(”cls“);

printf(”n“);

for(i=1;i<80;i++)printf(”=“);

printf(”nn“);

printf(” ==>>>>> 你输入的账号或密码错误,请重新输入!nn “);

for(i=1;i<80;i++)printf(”=“);}

}

else if(kk==1){system(”cls“);

printf(”nn“);

for(i=1;i<80;i++)printf(”=“);

printf(”nn“);

printf(” ==>对不起,此功能暂时不能实现!nn“);

for(i=1;i<80;i++)printf(”=“);

printf(”n“);} else {system(”cls“);

printf(”nn“);

for(i=1;i<80;i++)printf(”=“);

printf(”nn“);

printf(” ==>对不起,你的输入有误!nn“);

for(i=1;i<80;i++)printf(”=“);

printf(”n");} } } }

第四篇:C语言模拟ATM机

一、实验目的

通过设计一个ATM机模拟操作的程序,全面运用课程的主要知识点,巩固对模块化程序设计、文件操作的理解,提高软件编程能力。

二、实验要求

要求每人独立完成设计,编写一个ATM机模拟操作程序。提交实验报告、源程序、程序运行截图。

1.程序具有以下功能:

1)登录系统:

输入卡号(16位)、密码(6位),只有卡号、密码同时正确(帐户信息存放在文件中)才能进入系统; 2)操作功能:

 查询:查询帐户的存款余额。按任意键返回主菜单;

 修改密码:连续输入两次新密码(两次输入结果完全相同)后,新密码取代旧密码,并存放到帐户信息文件中。之后可返回主菜单;

 取款:输入50或100的倍数模拟为取款金额,请注意:取款金额不得超过帐户余额,操作后帐户余额应相应减少。之后可返回主菜单;

 存款:输入50或100的倍数模拟为存款金额,现假设存款金额不得超过20000元,操作后帐户余额应相应增加。之后可返回主菜单;

 转帐:先输入一个帐户号(已保存在帐户信息文件中),然后显示一部分用户名(如:张*山),储户确认无误后,再输入50或100的倍数模拟为转帐金额,请注意:转帐金额不得超过帐户余额,操作后帐户余额应相应减少。之后可返回主菜单;  退出:退出系统。

2.定义如下结构体类型:

 “日期”结构体Date:成员有:year(年)、month(月)、day(日);

 “帐户”结构体Account:成员有:no(帐户号)、name(姓名)、balance(余额) “存取款记录”结构体Record,:成员有:no(帐户号)、date(日期)、number(数量,可正可负,正表示存款,负表示取款)3.帐户信息存放在accounts.txt文件,储户存取款记录保存在records.txt中; 4.采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用。5.附加功能:

 储户一天内输错密码的次数不能超过3次,否则无法进入系统;  应避免输入存款金额、取款金额为负数等异常情况的出现。

三、程序已经实现的功能点

实验要求均已实现。此外还有:

1.卡号、密码位数输错时,提示并返回重新输入,2.简化取款时的输入

3.转账时,转账账户为原账户时,提示并返回重新输入 4.在多个模块中添加了退出功能,无需回到主菜单即可退出系统 5.在查询模块中加入了存取记录明细查询

四、程序运行截图及说明

1.登陆模块

1)卡号不为16位时,输出提示并返回重新输入

2)卡号不存在时,输出提示并返回重新输入

3)密码位数输错时,输出提示并返回重新输入密码,不作为密码错误处理,也无需重新输入卡号

4)密码连续输错三次时,锁定卡号,今日无法登录

2.登录后的系统主菜单

3.查询模块

1)查询模块主菜单

2)查询明细

4.取款模块

1)当余额不足50时,无法进入取款模块

2)取款模块主菜单

3)便捷取款

4)手动输入取款金额

输错时,返回重新输入

5)取款后的菜单

6)取款完成后选择显示余额

5.存款模块

1)解决输入错误问题

2)存款成功

6.密码修改模块

1)原密码输错时,返回重新输入,不提供退出功能

2)密码位数输错、两次输入新密码不一致时,返回重新输入

3)输入无误时

7.转账模块

1)转入卡号位数输错时,提示并返回重新输入

2)未查找到该卡号时,输出提示,提供退出功能,键入除*外任意键重新输入

3)转入卡号与当前卡号相同时,输出提示

4)输出转入卡账户的部分用户名

5)解决转账金额输错的问题

6)转账成功

五、采用的主要技术

1.宏定义:由于本程序的printf语句较多,为了便于编写,故用PR代替 2.链表:账户信息采用链表结构,内存动态分配,使用内存无限制,可以扩展到所有可以使用的内存 3.switch多分支选择结构 4.文本文件的读写

5.利用time.h头文件,简便地获取系统日期 6.system()函数和fflush()函数的简单使用

六、设计心得

1.各函数的功能要相对独立,逐步求精。

2.如果函数的参数为指针,且仅作为输入参数,则应在类型前加const,以防止该指针在函数体内被意外修改

附:程序代码

/*** * 运行本程序前,请在本程序根目录下建立文件“accounts.txt”,格式如下: * 卡号1(16位)

姓名1 账户余额1 密码1 * 卡号2(16位)

姓名2 账户余额2 密码2 * …… ****/

#include #include #include #include #define PR printf

typedef struct {

short int year;short int month;short int day;}Date;//日期

typedef struct Account { char no[17];char name[20];double balance;char password[7];struct Account* next;}Account;

typedef struct { char no[17];Date date;double number;}Record;//记录

Account *head = NULL;//账户信息链表表头 Account *now_acc = NULL;//当前账户

/************函数申明************/ void InitializeAccount();//导入账户信息 //-------char LockAccountTopic(const char *no);//检测账户是否被锁定 void LockAccount(const char *no);//锁定账户 //-------void Login();//登录

Account* FindbyNo(const char *no);//查找卡号对应账户信息在链表中的地址 //-------void Demand();//查询主菜单 void PrintBalance();//输出余额 void Printetail();//输出明细 //-------void Modifiy();//修改密码 //-------void Withdrawal();//取款主界面

void WithdrawalOt(long money);//取款 //-------void Depositing();//存款 //-------void Transfer();//转账

char *CoverUpName(const char *name);//掩盖部分用户名 //-------void Log(double money, const char *no);//将存款记录写入文件中 void Save();//保存账号信息 void FreeData();//释放链表空间 //-------

int main(){ char choose;

InitializeAccount();//导入账户信息 Login();//登录 do { system(“cls”);PR(“tt

n”);PR(“tt

请选择服务

n”);PR(“tt+-+---------+

+---------+-+n”);PR(“tt|5|33转账|

|查询32|1|n”);PR(“tt+-+---------+

+---------+-+nn”);PR(“tt

+---------+-+n”);

PR(“tt

|取款32|2|n”);PR(“tt

+---------+-+nn”);PR(“tt

+---------+-+n”);PR(“tt

|存款32|3|n”);PR(“tt

+---------+-+nn”);PR(“tt+-+---------+

+---------+-+n”);PR(“tt|0|33退出系统|

|修改密码32|4|n”);PR(“tt+-+---------+

+---------+-+nn”);PR(“请选择服务:”);fflush(stdin);choose = getchar();switch(choose){ case '1': Demand();break;//查询 case '2': Withdrawal();break;//取款 case '3': Depositing();break;//存款 case '4': Modifiy();break;//修改密码 case '5': Transfer();break;//转账 case '0': FreeData();return 0;//退出 default:

printf(“输入错误,请重新选择n”);//解决用户可能的输入错误

system(“pause”);

} } while(1);return 0;}

/**********导入账户信息**********/ void InitializeAccount(){ FILE *fp;Account temp;PR(“系统初始化中,请稍侯...n”);if(!(fp = fopen(“accounts.txt”, “r”))){

PR(“7”);//响铃

PR(“读取帐户信息失败,请在本程序根目录建立帐户信息文件(accounts.txt)。格式如下:n”);

PR(“卡号1(16位)

姓名1 账户余额1 密码1n”);

PR(“卡号2(16位)

姓名2 账户余额2 密码2n”);

PR(“……n”);

exit(0);} while(fscanf(fp, “%s %s %lf %s”, temp.no, temp.name, &temp.balance, temp.password)== 4)

} {//读入账户信息

Account *t = head;head =(Account*)malloc(sizeof(Account));*head = temp;head->next = t;} fclose(fp);system(“cls”);//清除“系统初始化中,请稍侯...”提示

/**********登录**********/ void Login(){ do {

char no[17];

system(“cls”);

PR(“nnnnttt请输入16位卡号:”);

fflush(stdin);

gets(no);if(strlen(no)!= 16){ PR(“卡号应为16位n”);system(“pause”);system(“cls”);continue;} if(LockAccountTopic(no))

{//当该卡号被锁定时

PR(“7”);//响铃

PR(“nn您的登陆密码今日连续输错三次,已被临时锁定,次日将自动解锁,或当日持本人有效证件到柜台办理密码重置。nn”);

system(“pause”);

continue;

}

if(!(now_acc = FindbyNo(no)))//将卡号对应信息在链表的地址赋给now_acc {//当卡号不存在时

PR(“nn此卡号不存在,请重新输入!nn”);system(“pause”);continue;} char a = '2';//计算剩余可输错密码次数 do { char password[7];system(“cls”);

PR(“nnnnttt请输入16位卡号:%sn”, now_acc->no);

PR(“nnttt请输入6位密码:”);

fflush(stdin);

scanf(“%s”, password);

if(strlen(password)!= 6)

{

PR(“密码应为6位n”);

system(“pause”);

system(“cls”);

continue;

}

if(!strcmp(now_acc->password, password))

return;//密码正确,回到主函数

if(a == '0')

{//输错密码三次,锁定账户

PR(“nn您的登陆密码今日连续输错三次,已被临时锁定,次日将自动解锁,或当日持本人有效证件到柜台办理密码重置。nn”);

}

LockAccount(no);

break;

}

PR(“7”);//响铃

PR(“密码输入错误,您还可以尝试%c次nn”, a--);

system(“pause”);} while(1);} while(1);/**********检测账户是否被锁定**********/ char LockAccountTopic(const char *no)//被锁定则返回0 { FILE *fp;

char CruuentTime[11];//当前日期 char ArchiveTime[11];//锁卡档案日期 char t[17];if(!(fp = fopen(“LockAccount.txt”, “a+”)))//课本上讲以“a”方式打开文件,若文件不存在,会出错。VS2013实测,并不会出错,而是新建。为免第一次使用本程序时,根目录下没有LockAccount.txt而导致出错,故此处不采用“r”方式。

{

PR(“7”);//响铃

PR(“LockAccount.txt无法打开nn”);

exit(0);} rewind(fp);{//获取当前日期

time_t rawtime;

struct tm * timeinfo;

time(&rawtime);//获取时间,以秒计,从1970年1月一日起算,存于rawtime

timeinfo = localtime(&rawtime);//转为当地时间,tm 时间结构

strftime(CruuentTime, 11, “%Y-%m-%d”, timeinfo);//格式化时间

} fgets(ArchiveTime, 11, fp);//获取锁卡档案时间

if(strcmp(ArchiveTime, CruuentTime))

{//若无锁卡档案,或锁卡档案日期与当前日期不同,则无账户被锁定

fclose(fp);return 0;} while(fscanf(fp, “%s”, t)== 1){ if(!strcmp(t, no)){//锁卡档案中,包含此卡号,返回1

fclose(fp);

return 1;} } fclose(fp);return 0;//锁卡档案中,不含此卡号,返回0 }

/**********查找卡号对应账户信息在链表中的地址**********/ Account* FindbyNo(const char *no){ for(Account *i = head;i;i = i->next){

if(!strcmp(i->no, no))

return i;} return NULL;}

/**********锁定账户**********/ void LockAccount(const char *no){ FILE *fp;

char CruuentTime[11];//当前日期 char ArchiveTime[11];//锁卡档案日期 if(!(fp = fopen(“LockAccount.txt”, “r”))){ PR(“7”);//响铃

PR(“error on open LockAccount.txt file!nn”);exit(0);} {//获取当前日期

time_t rawtime;struct tm * timeinfo;time(&rawtime);//获取时间,以秒计,从1970年1月1日起算,存于rawtime timeinfo = localtime(&rawtime);//转为当地时间,tm 时间结构

strftime(CruuentTime, 11, “%Y-%m-%d”, timeinfo);//格式化时间 } fgets(ArchiveTime, 11, fp);fclose(fp);if(strcmp(ArchiveTime, CruuentTime)){//若档案日期与当前日期不同,则说明档案已过期或无档案,新建记录。

if(!(fp = fopen(“LockAccount.txt”, “w”))){

PR(“7”);//响铃

}

} PR(“error on open LockAccount.txt file!nn”);exit(0);} fprintf(fp, “%sn”, CruuentTime);else//若记录日期与当前日期相同,则追加记录 { if(!(fp = fopen(“LockAccount.txt”, “a”))){

}

} PR(“7”);//响铃

PR(“error on open LockAccount.txt file!nn”);exit(0);//添加记录

fprintf(fp, “%sn”, no);fclose(fp);/**********查询函数主菜单**********/ void Demand(){ char choose;do {

system(“cls”);

PrintBalance();

PR(“ttttt

+---------+-+n”);

PR(“ttttt

|查询明细32|1|n”);

PR(“ttttt

+---------+-+nn”);

PR(“tt+-+---------+

+---------+-+n”);

PR(“tt|0|33退出系统|

| 返回 32|2|n”);PR(“tt+-+---------+

+---------+-+nn”);PR(“请选择服务:”);fflush(stdin);choose = getchar();switch(choose){ case '1': Printetail();break;//查询明细 case '2': return;//返回

case '0': FreeData();exit(0);//退出系统 default: printf(“输入错误,请重新选择n”);//解决用户可能的输入错误

}

system(“pause”);} } while(1);/**********输出余额**********/ void PrintBalance(){ system(“cls”);PR(“nnnnnnnnntt+---------------+---------------+n”);

} PR(“tt| 您的账户余额 32|%-15.2f|n”, now_acc->balance);PR(“tt+---------------+---------------+nnnnnnn”);/**********输出明细**********/ void Printetail(){ FILE *fp;Record temp;int flag = 1;//当有记录时,置0 if(!(fp = fopen(“records.txt”, “r”))){

PR(“无存取记录,请进行存取后再使用本功能nn”);

system(“pause”);

return;} system(“cls”);PR(“+---------+--------------+n”);PR(“|

日期

|

存取金额

|n”);PR(“+---------+--------------+n”);while(fscanf(fp, “%s%d-%d-%d%lf”, temp.no, &temp.date.year, &temp.date.month, &temp.date.day, &temp.number)== 5){

if(!(strcmp(temp.no, now_acc->no)))

{

flag = 0;

PR(“|%d-%d-%d|%-14.2f|n”, temp.date.year, temp.date.month, temp.date.day, temp.number);

PR(“+---------+--------------+n”);

} } PR(“|

日期

|

存取金额

|n”);//未免记录太多看不到表头,在最后加个表头

PR(“+---------+--------------+n”);if(flag)

} { system(“cls”);//无记录时,清除表头

PR(“该卡号未有任何存取记录nn”);system(“pause”);return;} system(“pause”);//当有存取记录时,输出后等待

/**********将存款记录写入文件中**********/ void Log(double money, const char *no){ FILE *fp;Date CruuentTime;//当前日期

if(!money)//存取为零时

return;if(!(fp = fopen(“records.txt”, “a”))){

PR(“7”);//响铃

PR(“error on open records.txt file!”);

exit(0);} {//获取当前日期

time_t rawtime;

struct tm * timeinfo;

time(&rawtime);//获取时间,以秒计,从1970年1月1日起算,存于rawtime

timeinfo = localtime(&rawtime);//转为当地时间,tm 时间结构

CruuentTime.year = timeinfo->tm_year + 1900, CruuentTime.month = timeinfo->tm_mon + 1, CruuentTime.day = timeinfo->tm_mday;} fprintf(fp, “%sn%d-%d-%dn%fn”, no, CruuentTime.year, CruuentTime.month, CruuentTime.day, money);fclose(fp);}

/**********取款主界面**********/ void Withdrawal(){ char choose;if(now_acc->balance < 50.0){//当余额不足50时,无法取款

PR(“7”);//响铃

PR(“您的余额不足50,无法取款nn”);

} do {

system(“pause”);return;system(“cls”);PR(“nn”);PR(“tt+-+---------+

+---------+-+n”);PR(“tt|1|33 100

|

| 2000 32|5|n”);PR(“tt+-+---------+

+---------+-+nn”);PR(“tt+-+---------+

+---------+-+n”);PR(“tt|2|33 500

|

| 5000 32|6|n”);PR(“tt+-+---------+

+---------+-+nn”);PR(“tt+-+---------+

+---------+-+n”);PR(“tt|3|33 1000 |

|其它金额32|7|n”);PR(“tt+-+---------+

+---------+-+nn”);PR(“tt+-+---------+

+---------+-+n”);PR(“tt|4|33退出系统|

|返回32|0|n”);PR(“tt+-+---------+

+---------+-+nn”);PR(“请选择服务:”);fflush(stdin);scanf(“%c”, &choose);switch(choose){ case '1': WithdrawalOt(100);break;case '2': WithdrawalOt(500);break;case '3': WithdrawalOt(1000);break;case '4': FreeData();exit(0);case '5': WithdrawalOt(2000);break;case '6': WithdrawalOt(5000);break;case '7': do {

long money;

PR(“请输入取款金额(50的倍数):”);

fflush(stdin);

scanf(“%ld”, &money);

if(money < 0 || money % 50)

{//解决输入金额为负数、不是50的倍数的情况

PR(“输入有误,请重新输入n”);

system(“pause”);

continue;

}

WithdrawalOt(money);

}

break;} while(1);break;case '0': return;default:

} PR(“7”);//响铃

printf(“输入错误,请重新选择n”);//解决用户可能的输入错误 system(“pause”);continue;{//取款完成后的菜单

char choose;system(“cls”);PR(“nn”);PR(“tt

+---------+-+n”);PR(“tt

|继续取款32|1|n”);PR(“tt

+---------+-+nn”);PR(“tt

+---------+-+n”);PR(“tt

|显示余额32|2|n”);PR(“tt

+---------+-+nn”);PR(“tt

n”);PR(“tt

n”);PR(“tt

nn”);PR(“tt+-+---------+

+---------+-+n”);

PR(“tt|0|33退出系统|

|返回32|3|n”);

PR(“tt+-+---------+

+---------+-+nn”);

PR(“请选择服务:”);

fflush(stdin);

scanf(“%c”, &choose);

switch(choose)

{

case '1': continue;//继续取款

case '2': PrintBalance();system(“pause”);break;//输出余额

case '3': return;//返回主函数

case '0': FreeData();exit(0);//退出系统

default:

PR(“7”);//响铃

printf(“输入错误,请重新选择n”);//解决用户可能的输入错误

system(“pause”);

} } } while(1);/**********取款**********/ void WithdrawalOt(long money){ if(now_acc->balance < money){

} PR(“7”);//响铃

PR(“您的余额不足%ldnn”, money);system(“pause”);return;PR(“正在处理,请稍候...n”);now_acc->balance-= money;Save();Log(-money, now_acc->no);PR(“取款成功nn”);system(“pause”);}

/**********存款**********/ void Depositing(){ long money;do {

} PR(“请输入存款金额(50的倍数),单次存款金额不得超过20000元:”);fflush(stdin);scanf(“%ld”, &money);if(money < 0 || money > 20000 || money % 50){//解决输入金额为负数、超过20000、不是50的倍数的情况

PR(“7”);//响铃

PR(“输入有误,请重新输入n”);

system(“pause”);

continue;} PR(“正在处理,请稍候...n”);now_acc->balance += money;Save();//保存账户数据

Log(money, now_acc->no);//保存存取数据

PR(“存款成功nn”);system(“pause”);break;} while(1);/**********保存账户信息**********/ void Save(){ FILE *fp;int i = 1;char ch;if(!(fp = fopen(“accounts.txt”, “w”))){

}

} PR(“7”);//响铃

PR(“读取帐户信息失败!accounts.txt无法打开n”);exit(0);for(Account *i = head;i;i = i->next)//写入账户信息

fprintf(fp, “%s %s %f %sn”, i->no, i->name, i->balance, i->password);fclose(fp);/**********修改密码**********/ void Modifiy(){ char oldpass[7], newpass1[7], newpass2[7];do {

PR(“请输入原密码:”);

fflush(stdin);

gets(oldpass);

if(strlen(oldpass)!= 6)

{

PR(“密码应为6位n”);

system(“pause”);

continue;

}

if(strcmp(oldpass, now_acc->password))

{//解决密码输入有误,出于安全性的考虑,原密码输入错误时不提供返回功能

PR(“密码有误,请重新输入nn”);

system(“pause”);

continue;

}

else

break;} while(1);do {

PR(“请输入六位新密码:”);

fflush(stdin);scanf(“%s”, newpass1);if(strlen(newpass1)!= 6){

} PR(“密码应为6位n”);system(“pause”);continue;PR(“请再次输入新密码:”);fflush(stdin);scanf(“%s”, newpass2);if(strcmp(newpass1, newpass2))

{//两次输入密码不一致时

PR(“密码不一致(输入*取消修改)n”);

fflush(stdin);

if(getchar()== '*')

break;

}

else

{//输入一致时

strcpy(now_acc->password, newpass1);//修改密码

Save();//保存用户数据

PR(“密码修改成功!nn”);

system(“pause”);

break;

} } while(1);}

/**********转账**********/ void Transfer(){

Account* aimsite;//转入卡号在链表中的地址 long money;//转账金额 if(now_acc->balance < 50){//当账户余额不足50时

PR(“7”);//响铃

PR(“您的余额不足50,无法转账nn”);system(“pause”);return;} do { char aim[17];//转入卡号

PR(“请输入转入卡/折号(16位):”);fflush(stdin);gets(aim);if(strlen(aim)!= 16){ PR(“卡号应为16位n”);system(“pause”);continue;} if(!(strcmp(aim, now_acc->no))){//解决转账双方卡号相同的情况

PR(“双方账户相同,请核对后重试(输入*取消转账)n”);if(getchar()== '*')

return;continue;} if(aimsite = FindbyNo(aim))break;//找到转入卡号对应信息时 else {

PR(“未找到该卡号,输入*取消转账n”);

if(getchar()== '*')

return;

continue;} } while(1);PR(“汇款目标用户名为:%sn”, CoverUpName(aimsite->name));PR(“是否确认无误?(输入*确认,否则退出)”);fflush(stdin);if(getchar()!= '*')return;do { PR(“请输入转账金额(50的倍数):”);fflush(stdin);scanf(“%lu”, &money);if(now_acc->balance < money){

PR(“7”);//响铃

PR(“您的余额不足%lu,请重新输入转账金额nn”, money);

system(“pause”);

continue;} if(money % 50)

}

{//当输入金额不是50的倍数时

PR(“7”);//响铃

PR(“输入有误,请重新输入n”);continue;} PR(“转账中,请稍候...n”);now_acc->balance-= money;aimsite->balance += money;Save();//保存账户数据

Log(-money, now_acc->no);//当前账户存取记录

Log(money, aimsite->no);//转入卡存取记录

PR(“转账成功nn”);system(“pause”);break;} while(1);/**********掩盖部分用户名**********/ char *CoverUpName(const char *name){ char temp[20];strcpy(temp, name);

int words = 0;//用于存放姓名的字数 for(char* i = temp;*i;i += 2)words++;//计算姓名的字数 switch(words){ case 2: temp[0] = '*', temp[1] = '*';//当姓名字数为2时,掩盖姓

strcpy(temp + 1, temp + 2);//消除一个*号

break;case 3:

temp[2] = '*', temp[3] = '*';//当姓名字数为3时,掩盖名字中的第一个字

strcpy(temp + 3, temp + 4);//消除一个*号

break;default:

temp[0] = '*', temp[1] = '*', temp[2] = '*', temp[3] = '*';//姓名字数大于3时,掩盖姓和名字中的第一个字

strcpy(temp + 2, temp + 4);//消除两个*号

} return temp;}

/**********释放链表空间**********/ void FreeData(){ Account* t;while(head){

t = head;

head = head->next;

free(t);} }

第五篇:福建省C语言历年考题

福建省C语言历年考题汇编

程序基本知识(选择题)

答案:B

main()函数是程序的入口和出口,和其它代码位置没关系。

答案:C

C程序基本单位是函数。

答案:A

答案:A 2

答案:C

基本数据类型和基本运算

答案:

B 浮点数两种表示方式,一种是普通小数方式,另一种是科学计数法。科学计数法中间为e,前边为[1,10〕的实数表示尾数,后边为整数表示10的指数,正负均可。

答案:C 标识符开头只能是字母或下划线,不能是数字。

答案:D 单引号括起来的应该是单个字符

答案:A

双引号括起来的是字符串

答案:A

答案:A

求余运算两边必须全为整数

答案:D

答案:D 这四种运算符中,非运算级别最高,算术运算比比较运算级别高,最低的是赋值运算

答案:C D 项错误在于scanf从第2个参数开始应该是地址引用

答案:D

x先和自减1后的y相加,结果赋给y,再自加1

答案:A

输入时必须包含逗号

答案:C

答案:A

B项逻辑或两边都是假,C项做完逻辑与后才可以自加,D项括号内是赋值运算而非比较运算

答案:B x+z后结果已经变成浮点数了

答案:B 1+1 10

答案:D

3.5/2+11%2/2=1.75+1/2=1.75+0=1.75

答案:B 数轴上一段连续区间必须用两个逻辑表达式相与得到。

答案:B

逻辑与两边明显矛盾

答案:B 0.5+0=0.5 12

答案:B

4.0/2+2%3=2.0+2=4.0 答案:C

答案:D

a|b=3,10 右移3位为1

答案:D

答案:D

2+=2+4%2=4

答案:D 非0值经过非运算后变成假,两个假或还是假

答案:A

x^y=2,2 左移两位为8

答案:C

答案:A

1/3结果为0,整个式子结果为0

答案:A 分支结构

答案:A 其它三项都是如果k是0,则打印No,否则打印Yes。

答案:A

这是两步操作,n=2已经不是if结构里的了。

答案:A

条件判断为逻辑非,直接执行打印语句。

答案:C 余数为3,只能执行default后续printf(),后边没有break(),再执行case 1后边的printf().循环结构

答案:A

答案:B 两个i--相当于i-=2 20

答案:B 括号里的条件先比较,再将i减1

答案:C 其它的i没有变化

答案: A i=1 j=2 0+1+2=3

j=3 3+1+3=7 依次类推,最终m为45

函数

答案:A

答案:D

答案:B

答案:C 传入实参为5和4,函数中两者比较,得到z为5,返回5+5=10并打印。

答案:C 逗号运算符隔开的式子以最后一个部分为准。

答案:A

宏和编译预处理

答案:3*NN=3*N*N-M=3*M+1*M+1-M=3*M+1=3*5+1=16 25

答案:A 宏定义末尾不加分号

答案:B

K*(a+b)=5*(3+4)=35 26

答案:A

B项中宏定义是编译预处理语句,不需要编译,只是字符替换。C项中宏定义中的名字一般常采用大写字母表示,小写也对。D项中C语言程序可以有多条预处理命令。

数组

答案:A 第一趟循环后:2103456789 第二趟后:2143056789 第三趟后:2143650789 第四趟后:2143658709,循环结束,打印即为结果。

答案:D

数组名可以代表整个数组的首地址,或者是第一个元素的地址,而不能来引用第一个元素;C语言中,数组长度一旦固定就不能更改;定义数组时数据类型不能省略。

答案:B

最大下标为7 28

答案:C

答案:B 二维数组定义时第二维不能省略

答案:B

答案:D

答案:B puts()碰到’’就停止输出

答案:A

i=1时,打印10-a[2][0]=10-7=3 ,后边依次类推。

答案:B 就是1+3+4+6=14

答案:D

答案:D 二维数组初始化必须要定义好第二维,不要有任何一维超过定义

答案:B

数组首地址用数组名表示

答案:C strlen()函数求长度到’’为止

答案:D

strupr()是把字符串里所有字母变成大写,strcat()是连接字符串,将第2个字符串接到第一个后边。

指针

答案:C

答案:A 就是两个指针变量交换数据

答案:A

程序含义是对比两个数组里同下标的数据,第一个数组对应数据小的,输出

答案:A 数组名字(首地址)不能进行++运算

答案:B 其它类型都不符合。

答案:D

答案:A 数组首地址不能进行自加运算

答案:C 该指针与数组首地址间距离为3 38

答案:B

答案:B

答案:B

答案:A

答案:D 自定义函数fn作用就是把实参数组里内的所有元素都加了10 结构体

答案:AB 均可

C项重复声明且没划出存储空间,D项数据成员引用错误

答案:B 非指针成员的引用用点号

答案:C

答案:A 应该是p[1].num

答案:D C语言中字符串赋值给结构体成员要用gets(),scanf(),strcpy()这类函数

共用体

 答案:C 共用体里边的数据以最后一个作赋值或运算的为准。此处应该是A后边的字符的ASCII码值。

枚举与typedef

答案:A 把系统内已经定义的int给一个别名INTEGER 44

答案:A

答案:C

文件

答案:B

答案:B 46

答案:B

答案:B

改错:

注:星号之间没有空格 #include void main(){

int m,n;

for(m=1;m<=5;m++)

{

printf(“n”);

/**/ for(n=1;n<=m;n++)/**/

printf(“ ”);

for(n=1;n<=m*2-1;n++)

printf(“%c”,/**/ “*” /**/);

}

getch();} 第一处:for(n=1;n<=5-m;n++)

第二处:’*’

#include /**/ fun(int n)/**/ {

double x = 0.0;

int i,sgn=1;

for(i=3;i<=n;i++)

{x+=sgn/(5+/**/ 3*i /**/);

sgn=sgn*(-1);

}

return(/**/ sgn /**/);}

void main(){

clrscr();

printf(“fun(8)= %8.3lfn”, fun(8));

getch();} 第一处:double fun(int n)

第二处:3*(double)i 第三处:x

#include #include void main(){

char str[80];

char c;

int i;

i=0;

printf(“nPlease input the string: ”);

while((c=getchar())!='n')

{

/**/ if(!c>='A'&&c<='Z'||c>='a'&&c<='z')/**/

/**/

str[i]=c;/**/

}

str[i]='';

puts(str);

getch();} 第一处:if(!(c>='A'&&c<='Z'||c>='a'&&c<='z'))第二处:str[i++]=c;49

#include void main(){

int i,a,b,sum=0;

scanf(“%d,%d”,&a,&b);

while(a>b)

{

printf(“Data error,please input data again:”);

scanf(“%d,%d”,&a,&b);

} /**/ for(i=a;i<=b;i+=7)/**/

{

/**/ if(i/7=0)/**/

{

sum+=i;

printf(“%d+”,i);

}

}

printf(“b=%dn”,sum);

getch();} 第一处:for(i=a;i<=b;i++)第二处:if(i%7==0)

#include void fun(int m){

int n_100,n_50,n_10,n_1;

下载2018年大学c语言机期未试考题word格式文档
下载2018年大学c语言机期未试考题.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    大学C语言考试知识点

    1. 开始——程序——VC ++ 6.0 ——文件——新建——文件——C++ source file (C源文件) 2. 标准C 语言的后缀名.c 3. /* example1.1 The first C Program*/ 注释文字 不......

    《C语言程序设计》期未项目考核封皮及目录

    广西机电职业技术学院 C语言程序设 项目名称: 猜拳游戏 学 生: 深蓝 授课教师: 方校长 系 别: 互联网管理专 业: 2011年6月5日 计 猜拳游戏 摘要 【游戏规则】: 1. 游戏分......

    c语言

    学C语言有感 姓 名: 李文丽 学 号:034108048 班 级:083411 指导老师:张印 2009年12月 学C语言有感第1页 学C语言有感 摘要:C语言既有高级语言的特点,又具有汇编语言的特点;既能用......

    如何学C语言

    如何学C语言(一)“项目驱动”式教学目前最著名、最有影响、应用最广泛的windows、linux和UNIX三个操作系统都是用C语言编写的。0S是计算机系统(由软硬件两个子系统构成)的核心......

    C语言

    1. 算法(Algorithm)是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决 问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。 2. 算法具有......

    C语言

    整形 字符型 单精度型基本类型双精度型枚举类型数组类型构造类型结构体类型 数据类型 共同体类型指针类型(C语言的精华)空类型整形:int 字符型 char 单精度实型 float双精度实......

    C语言

    Home Exam List Notification Problem Ranklist Message User Information HJP-2013学期作业 程序设计题1. (10分) 一秒钟以后题目描述 输入某时刻的时、分......

    C语言

    第十章 结构体与共用体 10.1 选择题 【题10. 1】已知学生记录描述为 struct student {int no; char name[20]; char set; struct {int year; int month; int day; }bi......