《C语言上机考试试题.doc》由会员分享,可在线阅读,更多相关《C语言上机考试试题.doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1. 给定程序modi.c中,函数fun的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在w所指的数组中,若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。 例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。程序如下:#include #define SIZE 20fun(double *s,double *w) int k,i; double sum; for (k=2,i=0;iSIZE;i+) si=k; k+=2; sum=0.0; for(k=0,i=0;iSIZE;i+) su
2、m+=si; if (i+1)%5=0) /说组的第一个为s0,则应该加1后就行除5/ wk=sum/5;sum=0;k+; return k;main() double aSIZE,bSIZE/5; int i,k; k=fun(a,b); printf(The original data:n); for (i=0;iSIZE;i+) if(i%5=0) printf(n); printf(%4.0f,ai); printf(nnThe result:n); for(i=0;ik;i+) printf(%6.2f,bi); printf(nn); 2. 请编写一个函数fun,它的功能是:比较
3、两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。 例如,输入beijing shanghai (为回车键) 函数将返回shanghai。程序如下:#include char *fun(char *s,char *t)int first=0,second=0; char *p,*q; p=s; q=t; while(*p+!=0) /*判断是否到了字符串s的结尾*/ first+; while(*q+!=0) /*判断是否到了字符串t的结尾*/ second+; /可以用来知道一个字符串中有多少个字符/ if(firs
4、t=second) /*判断两个字符串的长度是否相等*/ return s; /*若上述条件成立,则返回第一个字符串*/ else if (firstsecond) /*返回较长的字符串*/ return s; else return t; void NONO ( )/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i ; char a20, b20 ; fp = fopen(bc03.in,r) ; if(fp = NULL) printf(数据文件bc03.in不存在!) ; return ; wf = fopen(bc03.
5、out,w) ; for(i = 0 ; i 10 ; i+) fscanf(fp, %s %s, a, b) ; fprintf(wf, %sn, fun(a, b) ; fclose(fp) ; fclose(wf) ;main() char a20,b10; printf(Input 1th string:); gets(a); printf(Input 2th string:); gets(b); printf(%sn,fun(a,b); NONO ();3. 给定程序中,函数fun的功能是:将NN矩阵中元素的值按列右移1个位置, 右边被移出矩阵的元素绕回左边。例如,N=4,有下列矩阵
6、 21 12 13 24 25 16 47 38 29 11 32 54 42 21 33 10 计算结果为 24 21 12 13 38 25 16 47 54 29 11 32 10 42 21 33程序如下:#include #define N 4void fun(int (*t)N) /这里的(*t)和数组t是一样的/ int i, j, x; for(i=0; i0; j-) tij=tij-1; ti0=x; main() int tN=21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10, i, j; printf(The origina
7、l array:n); for(i=0; iN; i+) for(j=0; jN; j+) printf(%2d ,tij); printf(n); fun(t); /调用fun涵数/ printf(nThe result is:n); for(i=0; iN; i+) for(j=0; jN; j+) printf(%2d ,tij); printf(n); 4. 给定程序modi.c中函数fun的功能是:找出100至n(不大于1000)之间三位数字相等的所有整数,把这些整数放在s所指数组中,个数作为函数值返回。程序如下:#include #define N 100int fun(int *
8、s, int n) int i,j,k,a,b,c; j=0; for(i=100; in; i+) k=i; a=k%10; k/=10; b=k%10; k/=10; c=k; if( a=b & a=c ) sj+=i; return j;main() int aN, n, num=0, i; do printf(nEnter n( 1000); num = fun( a,n ); printf(nnThe result :n); for(i=0; inum; i+)printf(%5d,ai); printf(nn);5. *请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,
9、将其余5个字符按降序排列。例如,原来的字符串为CEAedca,排序输出为CedcEAa。*程序如下:#include #include #include #include int fun(char *s,int num) int i,j,h,t; for(i=1;inum-1;i+) h=i; for (j=i;jnum-1;j+) if (shsj) h=j; /*从字符串的第i+1个字符到num-1个字符中找出最大的字符,并将其数组下标赋值给h*/ if (h!=i) /*判断找到的最大字符的下标是否为第i个字符*/ t=sh; sh=si; si=t; /*将sh与si中的字符进行交换*
10、/ NONO( )/* 请在此函数内打开文件,输入测试数据,调用 fun 函数, 输出数据,关闭文件。 */ char s10; int j; FILE *rf, *wf ; rf = fopen(b15.in, r) ; wf = fopen(a15.out, w) ; for (j=0;j4;j+) fscanf(rf,%s,s); fun(s,7); fprintf(wf,%sn,s); fclose(rf) ; fclose(wf) ;main() char s10; system(cls); printf(输入7个字符的字符串:); gets(s); fun(s,7); printf
11、(n%s,s); Printf(“n”); NONO();6:输入一个数n,再输入n个数,将这n个数中的素数输出,要求按照输入的相反顺序输出。 /素数:用一个数(x)分别去除2到sqrt(x) 如果可被整除则不是素数 否则是素数/例:输入:10 5 7 9 11 2 30 54 41 37 3输出 3 37 41 2 11 7 5提示(本题可以用数组解决)#include#includeint pd(int x)int i;for (i=2;i=sqrt(x);i+) /判断是不是素数/if (x%i=0)return 0;return 1; /标记 如果不是素说的话就输出0 否则输出1/in
12、t main()int n;int a100;int i;scanf(%d,&n);for (i=1;i=1;i-)if (pd(ai)=1)printf(%d ,ai);printf(n);return 0;7:某次运动会上一共有n名参赛运动员,要求手动输入该n名运动员的编号与成绩,并按照从高分到低分的顺序输出这些运动员的编号与成绩。例:输入:5650 87369 75654 90487 88158 70输出654 90 487 88650 87369 75158 70提示(可以使用两个数组并使用排序方法)#includeint main()int a1003;int n;int i,j,k
13、;scanf(%d,&n);for (i=1;i=n;i+)scanf(%d%d,&ai1,&ai2); /声明两个数组成一个存放编号 另一个存放成绩 其中第一个为编号 第二个为成绩/for (i=1;i=n-1;i+)for (j=1;j=n-i;j+)if (aj2aj+12) /成绩的比较/k=aj1;aj1=aj+11; aj+11=k; / 编号的交换/k=aj2;aj2=aj+12;aj+12=k; /成绩的交换/ printf(“nn”);for (i=1;i=n;i+)printf(%d %dn,ai1,ai2);return 0;感想:利用冒泡排序对成绩进行比较 同样利用冒泡
14、排序在成绩确定排序的条件下将编号排序 扩展部分:#includeint main(void)int a1001004;int x,y,m,n,i,j,k,bj,temp; for(i=0;i100;i+)for(j=0;j100;j+)for(k=0;k4;k+) aijk=0;printf(请输入班级数:);scanf(%d,&m);printf(请输入人数:);scanf(%d,&n);for(i=1;in;i+)scanf(%d%d%d,&bj,&x,&y);abj01+;abj abj01 1=x;abj abj02 1=y;for(k=1;k=m;k+)for (i=1;iak01;
15、i+)for (j=1;j=ak01-i;j+) if (akj2akj+12) temp=akj1;akj1=akj+11;akj+11=temp; temp=akj2;akj2=akj+12;akj+12=temp; printf(n); for(k=1;k=m;k+)for (i=1;i=ak01;i+)printf(%d %d %dn,k,aki1,aki2);printf(n);return 0;8:请输出一个数列:该数列包含两个数列,数列1:a(n)=a(n-1)+2*n,数列2:b(n)=b(n-1)2*+1。手动输入a(1)与b(1)且a(1),b(1)均为大于零的正整数。输出
16、数列将数列a与数列b交替输出,输出合成数列前20位。例:输入:1 2输出:1 2 7 5 17 11 31 23 49 47 71 95 97 191 127 383 161 767 199 1535提示(无)#includeint main()int a100;int i; printf(please input a1 a2n);scanf(%d %d,&a1,&a2); for (i=3;i=20;i+)if (i%2=0)ai=ai-2*2+1;elseai=ai-2+2*i;for (i=1;i=20;i+)printf(%d ,ai);return 0;/对于有条件输出的问题 应充分
17、利用有关的条件 比如这道题目中就有两种输出的可能 这样就可以用到奇数偶数的事实 /9:求水仙花数:从1000至9999中选出水仙花数,规则:每一个位数的数字的四次方之和等于该数本身。#includeint main()int i,a,b,c,d;for (i=1000;i=9999;i+)a=i%10; / %是取余数 如198%10=8“/”是取整 198/10=19/ b=i/10%10;c=i/100%10;d=i/1000;if (a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d=i)printf(%d ,i);printf(n);return 0;10. 给定程序通过定
18、义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系数a。程序如下:#include typedef struct int num; char name9; float score3;STU;void show(STU tt) int i; printf(%d %s : ,tt.num,tt.name); for(i=0; i3; i+) printf(%5.1f,tt.scorei); printf(n);void modify(STU *ss,float a) int i; for(i=0; iscorei *=a;ma
19、in( ) STU std= 1,Zhanghua,76.5,78.0,82.0 ; float a; printf(nThe original number and name and scores :n); show(std); printf(nInput a number : ); scanf(%f,&a);modify(&std,a); printf(nA result of modifying :n); show(std);11. 给定程序modi.c中,函数fun的功能是:读入一个字符串(长度20),将该字符串中的所有字符按ASCII码升序排序后输出。 例如:若输入:edcba,则应
20、输出:abcde。程序如下:#include #include #include #define M 20void fun(char t) char c; int i,j; for(i=strlen(t)-1;i0;i-) for(j=0;jtj+1) c=tj; tj=tj+1; tj+1=c; main() char s81; system(cls); printf(nPlease enter a character string:); gets(s); printf(nnBefore sorting:n %s,s); fun(s); printf(nAfter sorting decen
21、dingly:n %s,s);12.某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。 例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,他的平均分应当是:78.875。程序如下:#include #define N 8typedef struct char num10; double sN; double ave;STREC;void fun(STREC *p) int i; double aver=0; /*将平均分赋初值0*/
22、for (i=0;iN;i+) aver=aver+(*p).si; /*求和*/ (*p).ave=aver/N; /*计算平均值*/void NONO( )/* 请在此函数内打开文件,输入测试数据,调用 fun 函数, 输出数据,关闭文件。 */ STREC s=GA005,85.5,76,69.5,85,91,72,64.5,87.5; int i; FILE *wf; wf = fopen(a43.out, w) ; fun(&s); fprintf(wf,The %ss student data:n,s.num); for(i=0;iN;i+) fprintf(wf,%4.1fn,s
23、.si); fprintf(wf,ave=%7.3fn,s.ave); fclose(wf) ;main() STREC s=GA005,85.5,76,69.5,85,91,72,64.5,87.5; int i; fun(&s); printf(The %ss student data:n,s.num); for(i=0;iN;i+) printf(%4.1fn,s.si); printf(nave=%7.3fn,s.ave); NONO();13.给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。#include typedef struct
24、int num; char name10;PERSON;void fun(PERSON std3) PERSON temp; if(std0.numstd1.num) temp=std0; std0=std1; std1=temp; if(std0.numstd2.num) temp=std0; std0=std2; std2=temp; if(std1.numstd2.num) temp=std1; std1=std2; std2=temp; main() PERSON std = 5,Zhanghu,2,WangLi,6,LinMin ; int i; fun(std); printf(n
25、The result is :n); for(i=0; i3; i+) printf(%d,%sn,stdi.num,stdi.name);14. 给定程序modi.c中,函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量a中的值为3,b中的值原为8,程序运行后a中的值为8,b中的值为3。#include #include #include int fun(int *x,int y) int t; t=*x;*x=y;y=t; return t;main() int a=3,b=8; system(cls); printf(%d %dn,a,b); b=
26、fun(&a,b); printf(%d %dn,a,b);/不用临时值对数值进行交换: a b 两个数 可以进行一下处理a=a+b; b=a-b; a=a-b;/15. 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把高于等于平均分的学生数据放在h所指的数组中,高于等于平均分的学生人数通过形参传回,平均分通过函数值返回。#include #define N 12typedef struct char num10; double s; STREC;double fun(STREC *a,STREC *b,int *n) int i,j;
27、 double aver=0; *n=0; for (i=0;iN;i+) aver=aver+ai.s; /*求和*/ aver=aver/N; /*计算平均分*/ for (i=0;i=aver) b*n.s=ai.s; /*将高于等于平均分的学生数据放在另一数组b中*/ for (j=0;j10;j+) b*n.numj=ai.numj; *n=*n+1; /*统计高于等于平均分的学生人数*/ return (aver); /*返回平均分*/main() STREC sN=GA05,85,GA03,76,GA02,69,GA04,85,GA01,91,GA07,72,GA08,64,GA
28、06,87,GA09,60,GA11,79,GA12,73,GA10,90; STREC hN;FILE *out; int i,n;double ave; ave=fun(s,h,&n); printf(The %d student data which is higher than %7.3f:n,n,ave); for(i=0;in;i+) printf(%s %4.1fn,hi.num,hi.s); printf(n); out=fopen(out12.dat,w); fprintf(out,%dn%7.3fn,n,ave); for (i=0;in;i+) fprintf(out,%s %4.1fn,hi.num,hi.s); fclose(out);