C 2010年笔试题
1 有一个函数, 写一段程序,输入的值,输出的值。
- #include <stdio.h>
- void main()
- {
- int x,y;
- printf("输入x:");
- scanf("%d",&x);
- if(x<0||x>100) /* x<0或x>100*/
- {
- y=-1;
- printf("x=%3d, y=%d\n" ,x,y);
- }
- else if(x==0) /* x=0*/
- {
- y=0;
- printf("x=%d, y=%d\n",x,y);
- }
- else /* 0<x<=100 */
- {
- y=1;
- printf("x=%d, y=%d\n",x,y);
- }
- }
2 输入3个数a,b,c,按大由到小的顺序输出
- #include <stdio.h>
- void main ( )
- {
- float a,b,c,t;
- printf("please enter a,b,c:");
- scanf("%f,%f,%f",&a,&b,&c);
- if(a<b)
- {
- t=a;
- a=b;
- b=t;
- }
- if(a<c)
- {
- t=a;
- a=c;
- c=t;
- }
- if(b<c)
- {
- t=b;
- b=c;
- c=t;
- }
- printf("%7.2f%7.2f%7.2f\n",a,b,c);
- }
3 输入4个数,输出4个数中的最大值、最小值。
- #include <stdio.h>
- void main()
- {
- float t,a,b,c,d;
- printf("请输入四个数:");
- scanf("%f,%f,%f,%f",&a,&b,&c,&d);
- if (a<b)
- {
- t=a;
- a=b;
- b=t;
- }
- if (a<c)
- {
- t=a;
- a=c;
- c=t;
- }
- if (a<d)
- {
- t=a;
- a=d;
- d=t;
- }
- if (b<c)
- {
- t=b;
- b=c;
- c=t;
- }
- if (b<d)
- {
- t=b;
- b=d;
- d=t;
- }
- if (c<d)
- {
- t=c;
- c=d;
- d=t;
- }
- printf("最大值和最小值分别为: \n");
- printf("max=%5.2f min=%5.2f",a,d);
- }
4 输入成绩,要求输出成绩等级A、B、C、D、E或error。90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,0~60分为‘E’。若输入成绩低于0分和高于100分则输出error。
- #include <stdio.h>
- void main()
- {
- float score;
- char grade;
- printf("请输入学生成绩:");
- scanf("%f",&score);
- if (score>100||score<0)
- printf("error\n");
- else
- {
- switch((int)(score/10))
- {
- case 10:
- case 9:
- grade='A';
- break;
- case 8:
- grade='B';
- break;
- case 7:
- grade='C';
- break;
- case 6:
- grade='D';
- break;
- case 5:
- case 4:
- case 3:
- case 2:
- case 1:
- case 0:
- grade='E';
- }
- printf("成绩是 %5.1f,相应的等级是%c.\n ",score,grade);
- }
- }
5 有一个函数:写一段程序,输入x的值,输出y的值。
- #include <stdio.h>
- void main()
- {
- int x,y;
- printf("输入x:");
- scanf("%d",&x);
- if(x<1) /* x<1 */
- {
- y=x;
- printf("x=%3d, y=x=%d\n" ,x,y);
- }
- else if(x<10||x>10) /* 1=<x<10 */
- {
- y=2*x-1;
- printf("x=%d, y=2*x-1=%d\n",x,y);
- }
- else /* x>=10 */
- {
- y=3*x-11;
- printf("x=%d, y=3*x-11=%d\n",x,y);
- }
- }
6 输出300~400之间的全部素数,并按每行5个数输出。
方法一:
- #include "stdio.h"
- #include"math.h"
- void main()
- {
- int prime(int);
- int i,k,m;
- printf("300~400之间的素数为:\n");
- for(i=300; i<=400; i++)
- {
- m=prime(i);
- if(m==1)
- {
- k++;
- printf("%5d",i);
- if(k%5==0)
- printf("\n");
- }
- }
- }
- /*判断是否是素数
- 素数又称质数。所谓素数是指除了1和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被2~16的任一整数整除。
- 思路1):因此判断一个整数m是否是素数,只需把m被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么m就是一个素数。
- 思路2):另外判断方法还可以简化。m不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ √m 之间的每一个整数去除就可以了。如果m不能被 2 ~ √m 间任一整数整除,m必定是素数。例如判别17是是否为素数,只需使17被2~4之间的每一个整数去除,由于都不能整除,可以判定17是素数。
- 原因:因为如果m能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于,另一个大于或等于。例如16能被2,4,8整除,16=2*8,2小于4,8大于4,16=4*4,4=√16,因此只需判定在2~4之间有无因子即可。
- */
- int prime(int i)
- {
- int j,flag=1;
- for(j=2; j<=sqrt(i); j++)
- if(i%j==0)
- flag=0;
- return(flag);
- }
方法二:
- # include <stdio.h>
- # include <math.h>
- void main()
- {
- int m,k,i,n=0;
- for(m=300; m<=400; m=m+1)
- {
- k=sqrt(m);
- for (i=2; i<=k; i++)
- if (m%i==0) break;
- if (i>=k+1)
- {
- printf("%d ",m);
- n=n+1;
- }
- //每五个一行输出
- if(n%5==0) printf("\n");
- }
- printf ("\n");
- }
7求Fibonacci数列的前20个数,并将其分5行输出
扩展:求 F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)
- #include <stdio.h>
- #include <stdlib.h>
- int fun(int x)
- {
- if(x == 0 || x == 1)
- return 1;
- if(x > 1)
- return fun(x - 1)+fun(x - 2);
- }
- void main()
- {
- int n,f;
- printf("请输入n:");
- scanf("%d",&n);
- f = fun(n);
- printf("%d",f);
- }
- #include<stdio.h>
- int main()
- {
- int i;
- int f[20] = { 1,1 };
- for (i = 2; i < 20; i++)
- f[i] = f[i - 2] + f[i - 1];
- //打印输出
- for (i = 0; i < 20; i++)
- {
- if(i%5==0)
- printf("\n");
- printf("%d\t",f[i]);
- }
- return 0;
- }
8 求(1!+3)+(2!+3)+(3!+3)+......+(n!+3)
- #include <stdio.h>
- void main()
- {
- double t=1,sum=0;
- int n,i;
- printf("输入n:");
- scanf("%d",&n);
- for (i=1; i<=n; i++)
- {
- t=t*i; //求n!
- sum=t+3+sum;
- }
- printf("1!+3+...+%d!+3=%f\n",n,sum);
- }
9 有一分数序列,求其前20项的和
- #include <stdio.h>
- void main()
- {
- int i,n=20;
- double a=2,b=1,s=0,t;
- for (i=1; i<=n; i++)
- {
- //a是分母,b是分子
- s=s+b/a; //
- t=a,
- a=a+b,
- b=t;
- }
- printf("sum=%16.10f\n",s);
- }
![]()
10 输出小于500的所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一个水仙花数,因为
- #include <stdio.h>
- void main()
- {
- int i,j,k,n;
- printf("parcissus numbers are ");
- for (n=100; n<500; n++)
- {
- i=n/100; //百位数
- j=n/10-i*10; //十位数
- k=n%10; //个位数
- if (n==i*i*i + j*j*j + k*k*k)
- printf("%d ",n);
- }
- printf("\n");
- }
11 给一个不多于6位的正整数,要求:①求出它是几位数;②分别输出每一位数字;③按逆序输出各位数字,例如原数为158,应输出851。
- #include "stdio.h"
- void main()
- {
- int n,m;
- printf("输入一个不多于六位的数字:");
- scanf("%d",&n);
- if(n<1000000&&n>99999)
- printf("它是六位数\n");
- if(n<100000&&n>9999)
- printf("它是五位数\n");
- if(n<10000&&n>999)
- printf("它是四位数\n");
- if(n<1000&&n>99)
- printf("它是三位数\n");
- if(n<100&&n>9)
- printf("它是二位数\n");
- if(n<10&&n>=0)
- printf("它是一位数\n");
- printf("各位数字按逆序输出为:\n");
- while(n!=0)
- {
- m=n%10;
- n=n/10;
- printf("%3d",m);
- }
- }
12 求5+55+555+5555+55555的值。
- #include <stdio.h>
- void main()
- {
- int a=5,n=5,i=1,sn=0,tn=0;
- for(i=1; i<=n; i++)
- {
- tn=tn+a; /*赋值后的tn为i个 a组成数的值*/
- sn=sn+tn; /*赋值后的sn为多项式前i项之和*/
- a=a*10;
- }
- printf("a+aa+..+aaaaa=%d\n",sn);
- }
13 输入10个整型整数,用起泡法对这10个数排序,并该由小到大顺序在屏幕上输出。
方法一:
- #include "stdio.h"
- void main()
- {
- int a[10];
- int i,j,t;
- printf("input 10 number:\n");
- for(i=0; i<10; i++)
- scanf("%d",&a[i]);
- //冒泡排序
- for(i=0; i<9; i++) //n-1趟
- for(j=0;j<9-i;j++) //
- if(a[j]>a[j+1])
- {
- t=a[j];
- a[j]=a[j+1];
- a[j+1]=t;
- };
- for(i=0; i<10; i++)
- printf("%5d ",a[i]);
- printf("\n");
- }
方法二:
- #include "stdio.h"
- void main()
- {
- int a[10];
- int i,j,t;
- printf("input 10 number:\n");
- for(i=0; i<10; i++)
- scanf("%d",&a[i]);
- for(i=0; i<10; i++)
- for(j=i; j<9; j++)
- if(a[i]>a[j+1])
- {
- t=a[i];
- a[i]=a[j+1];
- a[j+1]=t;
- };
- for(i=0; i<10; i++)
- printf("%5d ",a[i]);
- printf("\n");
- }
14 将一个二维数组a的行和列的元素互换(即行列互换),存到另一个二维数组b中。
- #include "stdio.h"
- void main()
- {
- int a[4][5],b[5][4];
- int i,j;
- for(i=0; i<4; i++)
- for(j=0; j<5; j++)
- scanf("%d",&a[i][j]);
- for(i=0; i<5; i++)
- for(j=0; j<4; j++)
- b[i][j]=a[j][i];
- printf("该数组的新序列为:\n");
- for(i=0; i<5; i++)
- {
- for(j=0; j<4; j++)
- printf("%5d",b[i][j]);
- printf("\n");
- }
- }
15 在一个3*4的二维数组a中,要求编程求出其中值最大的那个元素的值,并输出其所在的行号和列号。
- #include "stdio.h"
- void main()
- {
- int a[3][4],i,j,max;
- //输入数据
- for(i=0; i<3; i++)
- for(j=0; j<4; j++)
- scanf("%d",&a[i][j]);
- //求最大值
- max=a[0][0];
- for(i=0; i<3; i++)
- for(j=0; j<4; j++)
- if(max<a[i][j])
- max=a[i][j];
- printf("max=%d\n",max);
- //求最大值的行列号
- for(i=0; i<3; i++)
- for(j=0; j<4; j++)
- if(a[i][j]==max)
- printf("行=%2d,列=%2d\n",i+1,j+1);
- }
16 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
- #include "stdio.h"
- void main()
- {
- int i,j=0;
- char str[80];
- gets(str);
- for(i=0; str[i]!='\0'; i++)
- if(str[i+1]==' '||str[i+1]=='\0')
- j++;
- printf("单词个数为%d\n",j);
- }
17 有3个字符串,要求找出其中最大者。
- #include "stdio.h"
- #include <string.h>
- void main()
- {
- char str1[80],str2[80],str3[80],longest[80];
- gets(str1);
- printf("\n");
- gets(str2);
- printf("\n");
- gets(str3);
- /*
- strcmp(s1,s2)字符串比较函数,按字典排序的方式进行比较
- s1 == s2,返回0
- s1 > s2,返回正整数
- s1 < s2,返回负整数
- strcpy(s1,s2):字符串复制函数
- */
- strcpy(longest,str1);
- if(strcmp(str1,str2)<0)
- strcpy(longest,str2);
- if(strcmp(str2,str3)<0)
- strcpy(longest,str3);
- printf("the longest is %s",longest);
- }
18 输入两个整数,要求用一个函数求出其中的大者,并在主函数中输出此值。
方法一:
- #include "stdio.h"
- void main()
- {
- int f(int a,int b);
- int m,n,max;
- printf("请输入两个数:");
- scanf("%d,%d",&m,&n);
- max=f(m,n);
- printf("max=%d",max);
- }
- int f(int a,int b)
- {
- int c;
- c=a>b?a:b;
- return(c);
- }
方法二:
- #include "stdio.h"
- void main()
- {
- int f(int a,int b);
- int m,n,max;
- printf("请输入两个数:");
- scanf("%d,%d",&m,&n);
- max=f(m,n);
- printf("max=%d",max);
- }
- int f(int a,int b)
- {
- int c;
- if(a>b)
- c=a;
- else
- c=b;
- return(c);
- }
19 输入两个整数,要求用一个函数求出其最大公约数和最小公倍数,并在主函数中调用该子函数。链接
- #include <stdio.h>
- void main()
- {
- int hcf(int,int);
- int lcd(int,int,int);
- int u,v,h,l;
- scanf("%d,%d",&u,&v);
- h=hcf(u,v);
- printf("最大公约数=%d\n",h);
- l=lcd(u,v,h);
- printf("最小公倍数=%d\n",l);
- }
- //最大公约数
- int hcf(int u,int v)
- {
- int t,r;
- //保证u是最大的
- if (v>u)
- {
- t=u;
- u=v;
- v=t;
- }
- //辗转相除法
- while ((r=u%v)!=0)
- {
- u=v;
- v=r;
- }
- return(v);
- }
- //最小公倍数
- int lcd(int u,int v,int h)
- {
- return(u*v/h);
- }
20 输入4个整数,找出其中最大的数。用函数的嵌套调用来处理
- #include <stdio.h>
- void main()
- {
- int max_4(int a,int b,int c,int d);
- int a,b,c,d,max;
- printf("Please enter 4 interger numbers:");
- scanf("%d %d %d %d",&a,&b,&c,&d);
- max=max_4(a,b,c,d);
- printf("max=%d \n",max);
- }
- int max_4(int a,int b,int c,int d)
- {
- int max_2(int a,int b);
- int m;
- m=max_2(a,b);
- m=max_2(m,c);
- m=max_2(m,d);
- return(m);
- }
- int max_2(int a,int b)
- {
- return(a>b?a:b);
- }
21 求5!
方法一【递归】:
- #include <stdio.h>
- void main()
- {
- long fac(int n);
- long y;
- y=fac(5);
- printf("5!=%ld\n",y);
- }
- long fac(int n)
- {
- long f;
- if(n<0)
- printf("n<0,data error!");
- else if(n==0,n==1)
- f=1;
- else
- f=fac(n-1)*n;
- return(f);
- }
方法二【非递归】:
- #include <stdio.h>
- void main()
- {
- long fac(int n);
- long y;
- y=fac(5);
- printf("5!=%ld\n",y);
- }
- long fac(int n)
- {
- long f=1;
- int i;
- if(n<0)
- printf("n<0,data error!");
- else if(n==0,n==1)
- f=1;
- else
- for(i=1;i<=5;i++)
- {
- f=i*f;
- }
- return(f);
- }
22 编写一个函数,用来分别求数组score_1(有5个元素)和数组score_2(有10个元素)各元素的平均值。
- #include "stdio.h"
- void main()
- {
- float f(float score[],int n);
- float score_1[5],score_2[10],aver_1,aver_2;
- int i;
- printf("score_1:\n");
- for(i=0; i<5; i++)
- scanf("%f",&score_1[i]);
- printf("score_2:\n");
- for(i=0; i<10; i++)
- scanf("%f",&score_2[i]);
- aver_1=f(score_1,5);
- aver_2=f(score_2,10);
- printf("aver_1=%f,aver_2=%f\n",aver_1,aver_2);
- }
- float f(float score[],int n)
- {
- int i;
- float aver,sum=0;
- for(i=0; i<n; i++)
- sum=sum+score[i];
- aver=sum/n;
- return(aver);
- }
23 将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1改后成为1,4,5,6,8。
代码:
- #include "stdio.h"
- void main()
- {
- int a[6],b[6],i;
- printf("请输入一个数组:");
- for(i=0; i<6; i++)
- scanf("%d",&a[i]);
- printf("逆序排列后的数组是:");
- for(i=0; i<6; i++)
- {
- b[i]=a[5-i];
- printf("%4d ",b[i]);
- }
- }
24 用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”,n的位数不确定,可以是任意位数的整数
- #include <stdio.h>
- void main()
- {
- void convert(int n);
- int number;
- printf("input an integer: ");
- scanf("%d",&number);
- printf("output: ");
- //若是一个负数
- if (number<0)
- {
- putchar('-');
- putchar(' '); /* 先输出一个‘-’号和空格 */
- number=-number;
- }
- convert(number);
- printf("\n");
- }
- void convert(int n)
- {
- int i;
- if ((i=n/10)!=0)
- convert(i);
- putchar(n%10+'0');
- putchar(32);// putchar(32) 差不多是 putchar(' '); 的意思,输出一个空格
- }
25 用指针实现输入3个整数并按从小到大的顺序输出
- #include "stdio.h"
- void main()
- {
- void exchange(int * p1,int * p2,int * p3);
- int n1,n2,n3;
- int * p1,* p2,* p3;
- printf("input three integer n1,n2,n3:");
- scanf("%d,%d,%d",&n1,&n2,&n3);
- p1=&n1;
- p2=&n2;
- p3=&n3;
- exchange(p1,p2,p3);
- printf("Now,the order is:%d,%d,%d",n1,n2,n3);
- }
- void exchange(int * p1,int * p2,int * p3)
- {
- void swap(int * p1,int * p2);
- if(* p1>* p2)
- swap( p1, p2);
- if(* p1>* p3)
- swap(p1,p3);
- if(* p2>* p3)
- swap(p2,p3);
- }
- void swap(int * p1,int * p2)
- {
- int p;
- p=* p1;
- * p1=* p2;
- * p2=p;
- }
26 用指针实现输入3个整数并按从大到小的顺序输出
- #include <stdio.h>
- void main ( )
- {
- void paixu(int * p1,int * p2);
- int a,b,c,* p1,* p2,* p3;
- printf("please enter a,b,c:");
- scanf("%d,%d,%d",&a,&b,&c);
- p1=&a;
- p2=&b;
- p3=&c;
- if(a<b)
- paixu(p1,p2);
- if(a<c)
- paixu(p1,p3);
- if(b<c)
- paixu(p2,p3) ;
- printf("%5d%5d%5d\n",a,b,c);
- }
- void paixu(int * p1,int * p2)
- {
- int t;
- t=* p1;
- * p1=* p2;
- * p2=t;
- }
27 用指针实现将数组b[10]中的元素按逆序存放
- #include <stdio.h>
- void main()
- {
- void sort (int *p,int m);
- int i;
- int *p,num[10];
- printf("please input these numbers:\n");
- for (i=0; i<10; i++)
- {
- scanf("%d",&num[i]);
- }
- p=&num[0];
- sort(p,10);
- printf("Now,the sequence is:\n");
- for (i=0; i<10; i++)
- {
- printf("%d ",num[i]);
- }
- printf("\n");
- }
- void sort (int *p,int m)
- {
- int i;
- int temp, *p1,*p2;
- for (i=0; i<m/2; i++)
- {
- p1=p+i;
- p2=p+(m-1-i);
- temp=*p1;
- *p1=*p2;
- *p2=temp;
- }
- }
28 用冒泡法实现对10个整数按从大到小的顺序排序输出(要求用指针实现)
- #include "stdio.h"
- void main()
- {
- void swap(int * p1,int * p2);
- int a[10],* p ,i,j;
- printf("input 10 number:\n");
- for(i=0; i<10; i++)
- scanf("%d",&a[i]);
- p=a;
- for(i=0; i<10; i++)
- for(j=i; j<9; j++)
- if(a[i]<a[j+1])
- swap(p+i,p+j+1);
- for(i=0; i<10; i++)
- printf("%5d ",a[i]);
- printf("\n");
- }
- void swap(int * p1,int * p2)
- {
- int t;
- t=* p1;
- * p1=* p2;
- * p2=t;
- }
29 用选择法实现对10个整数按从小到大的顺序排序输出(要求用指针实现)。
- #include "stdio.h"
- void main()
- {
- void swap(int * p1,int * p2);
- int a[10],* p ,i,j;
- printf("input 10 number:\n");
- for(i=0; i<10; i++)
- scanf("%d",&a[i]);
- p=a;
- for(i=0; i<10; i++)
- for(j=0; j<9-i; j++)
- if(a[j]>a[j+1])
- swap(p+j,p+j+1);
- for(i=0; i<10; i++)
- printf("%5d ",a[i]);
- printf("\n");
- }
- void swap(int * p1,int * p2)
- {
- int t;
- t=* p1;
- * p1=* p2;
- * p2=t;
- }
30 定义一个结构体变量(包括年、月、日)。计算当天是本年中的第几天,注意闰年问题。
- #include <stdio.h>
- struct
- {
- int year;
- int month;
- int day;
- } date;
- void main()
- {
- int days;
- printf("input year,month,day:");
- scanf("%d,%d,%d",&date. year,&date.month,&date.day);
- switch(date.month)
- {
- case 1:
- days=date.day;
- break;
- case 2:
- days=date.day+31;
- break;
- case 3:
- days=date.day+59;
- break;
- case 4:
- days=date.day+90;
- break;
- case 5:
- days=date.day+120;
- break;
- case 6:
- days=date.day+151;
- break;
- case 7:
- days=date.day+181;
- break;
- case 8:
- days=date.day+212;
- break;
- case 9:
- days=date.day+243;
- break;
- case 10:
- days=date.day+273;
- break;
- case 11:
- days=date.day+304;
- break;
- case 12:
- days=date.day+334;
- break;
- }
- //判断是否是闰年
- if ((date.year %4== 0 && date.year % 100 != 0
- ||date.year % 400 == 0) && date.month >=3) days+=1;
- printf("%d/%d is the %dth day in %d.\n",date.month,date.day,days,date.year);
- }
31. 设计候选人得票统计程序,要求有4个侯选人(分别是Zhang 、Wang 、Li、 Zhao),选民每次输入一个被选人的姓名,最后统计出各人的得票结果。
- #include <string.h>
- #include <stdio.h>
- struct person
- {
- char name[20];
- int count;
- } leader[4]= {"zhang",0,"wang",0,"li",0,"zhao",0};
- void main()
- {
- int i,j;
- char leader_name[20];
- for (i=1; i<=10; i++)
- {
- scanf("%s",leader_name);
- for(j=0; j<4; j++)
- if(strcmp(leader_name,leader[j].name)==0)//strcmp字符串比较函数
- leader[j].count++;
- }
- printf("\nResoult:\n");
- for(i=0; i<4; i++)
- printf("%5s:%d\n",leader[i].name,leader[i].count);
- }
32 定义一个包括学号、姓名、年龄的学生结构体,要求实现三个学生信息的输入输出,并输出平均年龄
- #include <stdio.h>
- #define N 3
- struct student
- {
- char num[6];
- char name[20];
- int age;
- } stu[N];
- void main()
- {
- int i,aver=0;
- for(i=0; i<N; i++)
- {
- printf("input scores of student %d:\n",i+1);
- printf("NO.:");
- scanf("%s",stu[i].num);
- printf("name:");
- scanf("%s",stu[i].name);
- printf("age :");
- scanf("%d",&stu[i].age);
- }
- printf(" NO. name age\n");
- for (i=0; i<N; i++)
- {
- printf("%5s%10s%9d",stu[i].num,stu[i].name,stu[i].age);
- printf("\n");
- }
- //输出平均成绩
- for(i=0; i<N; i++)
- aver=aver+stu[i].age;
- aver=aver/3;
- printf("aver=%d",aver);
- }
33 定义一个包括教师编号、姓名、工资的教师结构体,要求实现三个教师信息的输入输出,并输出平均工资。
- #include <stdio.h>
- #define N 3
- struct teacher
- {
- char num[6];
- char name[20];
- float pay;
- } tea[N];
- void main()
- {
- int i;
- float aver=0;
- for(i=0; i<N; i++)
- {
- printf("input scores of student %d:\n",i+1);
- printf("NO.:");
- scanf("%s",tea[i].num);
- printf("name:");
- scanf("%s",tea[i].name);
- printf("pay :");
- scanf("%f",&tea[i].pay);
- }
- printf(" NO. name pay\n");
- for (i=0; i<N; i++)
- {
- printf("%5s%10s%9.2f",tea[i].num,tea[i].name,tea[i].pay);
- printf("\n");
- }
- for(i=0; i<N; i++)
- aver=aver+tea[i].pay;
- aver=aver/N;
- printf("aver=%f",aver);
- }
34 定义一个包括职员号、姓名、工资的职员结构体,要求实现三个职员信息的输入输出,并输出平均工资
- #include <stdio.h>
- #define N 3
- struct worker
- {
- char num[6];
- char name[20];
- float pay;
- } work[N];
- void main()
- {
- int i;
- float aver=0;
- for(i=0; i<N; i++)
- {
- printf("input scores of worker %d:\n",i+1);
- printf("NO.:");
- scanf("%s",work[i].num);
- printf("name:");
- scanf("%s",work[i].name);
- printf("pay :");
- scanf("%f",&work[i].pay);
- }
- printf(" NO. name pay\n");
- for (i=0; i<N; i++)
- {
- printf("%5s%10s%9.2f",work[i].num,work[i].name,work[i].pay);
- printf("\n");
- }
- for(i=0; i<N; i++)
- aver=aver+work[i].pay;
- aver=aver/N;
- printf("aver=%f",aver);
- }
35 建立动态数组,输入5个学生的成绩,另外用一个函数检查其中有无低于60分的,输出不合格的成绩。
- #include <stdio.h>
- #include <stdlib.h>
- void main()
- {
- void check(int *); //函数声明
- int *p1,i;
- p1=(int *)malloc(5*sizeof(int));// 动态数组
- for(i=0; i<5; i++)
- scanf("%d",p1+i);
- check(p1);
- free(p1);
- }
- void check(int *p)
- {
- int i;
- printf("They are fail:");
- for(i=0; i<5; i++)
- if (p[i]<60)
- printf("%d ",p[i]);
- printf("\n");
- }
36 写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度(要求用指针实现)。
- #include <stdio.h>
- void main()
- {
- int length(char *p);
- int len;
- char str[20];
- printf("input string: ");
- scanf("%s",str);
- len=length(str);
- printf("The length of string is %d.\n",len);
- }
- int length(char *p)
- {
- int n;
- n=0;
- while (*p!='\0')
- {
- n++;
- p++;
- }
- return(n);
- }
37 有一个一维数组score,内放10个学生成绩,用一个函数求平均成绩,并将10个成绩中不及格(小于60)的成绩和该成绩在数组中的序号输出。
- #include "stdio.h"
- void main()
- {
- void fail(float score[],int n);
- float score[10];
- int i;
- for(i=0; i<10; i++)
- scanf("%f",&score[i]);
- averfail(score,10);
- }
- void averfail(float score[],int n)
- {
- int i;
- float averscore=0;
- for(i=0; i<n; i++)
- {
- averscore = averscore+score[i];
- if(score[i]<60)
- printf("成绩为%f,序号为%d\n",score[i],i+1);
- }
- averscore=averscore/n;
- printf("平均成绩:%f",averscore);
- }
38. 有一个一维数组内放10个数,设计函数,求出10个数中的最大值、最小值、平均值。
- #include "stdio.h"
- void main()
- {
- int a[10],i,max,min,sum=0;
- float average;
- printf("input 10 number:\n");
- for(i=0; i<10; i++)
- scanf("%d",&a[i]);
- //求最大值,平均值
- max=a[0];
- for(i=0; i<10; i++)
- {
- sum=sum+a[i];
- if(a[i]>max)
- max=a[i];
- }
- average=sum/10.0;
- //求最小值
- min=a[0];
- for(i=0; i<10; i++)
- {
- if(a[i]<min)
- min=a[i];
- }
- printf("max=%d,average=%f,min=%d",max,average,min);
- }
39. 【有问题】找出一个2维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。
- #include "stdio.h"
- int main()
- {
- int a[4][5];
- int i,j,k,m;
- for(i=0; i<4; i++)
- {
- for(j=0; j<5; j++)
- {
- scanf("%d",&a[i][j]);
- }
- }
- for(i=0; i<4; i++)
- {
- for(j=0; j<5; j++)
- {
- //列比大小
- for(m=0; m<4; m++)
- {
- if(a[i][j]<a[m][j])
- {
- //行比大小
- for(k=0; k<5; k++)
- {
- if(a[i][j]>a[i][k])
- continue;
- }
- }
- }
- }
- }
- printf("i=%d,j=%d",i,j);
- return 0;
- }
40. 输入8个学生4门课的成绩,分别用函数实现如下功能:
(1) 计算每个学生平均分;
(2) 计算每门课的平均分;
(3) 找出32个分数中最高分所对应的学生和课程。
- #include <stdio.h>
- #define N 8
- #define M 4
- float score[N][M];
- float a_stu[N],a_cour[M];
- int r,c;
- void main()
- {
- int i,j;
- float h;
- float highest();
- void input_stu(void);
- void aver_stu(void);
- void aver_cour(void);
- //输入成绩
- input_stu();
- //计算学生的平均成绩
- aver_stu();
- //计算课程的平均成绩
- aver_cour();
- //输出学生的平均成绩
- printf("\n NO. cour1 cour2 cour3 cour4 aver\n");
- for(i=0; i<N; i++)
- {
- printf("\n NO %2d ",i+1);
- for(j=0; j<M; j++)
- printf("%8.2f",score[i][j]);
- printf("%8.2f\n",a_stu[i]);
- }
- //输出课程的平均成绩
- printf("\naverage:");
- for (j=0; j<M; j++)
- printf("%8.2f",a_cour[j]);
- printf("\n");
- //输出最好成绩的学生和课程
- h=highest();
- printf("highest:%7.2f NO. %2d course %2d\n",h,r,c);
- }
- void input_stu(void)
- {
- int i,j;
- for (i=0; i<N; i++)
- {
- printf("\ninput score of student%2d:\n",i+1);
- for (j=0; j<M; j++)
- scanf("%f",&score[i][j]);
- }
- }
- void aver_stu(void)
- {
- int i,j;
- float s;
- for (i=0; i<N; i++)
- {
- for (j=0,s=0; j<M; j++)
- s+=score[i][j];
- a_stu[i]=s/5.0;
- }
- }
- void aver_cour(void)
- {
- int i,j;
- float s;
- for (j=0; j<M; j++)
- {
- s=0;
- for (i=0; i<N; i++)
- s+=score[i][j];
- a_cour[j]=s/(float)N;
- }
- }
- float highest()
- {
- float high;
- int i,j;
- high=score[0][0];
- for (i=0; i<N; i++)
- for (j=0; j<M; j++)
- if (score[i][j]>high)
- {
- high=score[i][j];
- r=i+1;
- c=j+1;
- }
- return(high);
- }
41 用一个函数实现将一行字符串中的最长的单词输出。此行字符串从主函数传递给该函数
- #include <stdio.h>
- #include <string.h>
- void main()
- {
- int alphabetic(char);
- int longest(char []);
- int i;
- char line[100];
- printf("input one line:\n");
- gets(line);
- printf("The longest word is :");
- for (i=longest(line); alphabetic(line[i]); i++)
- printf("%c",line[i]);
- printf("\n");
- }
- int alphabetic(char c)
- {
- if ((c>='a' && c<='z')||(c>='A'&&c<='z'))
- return(1);
- else
- return(0);
- }
- int longest(char string[])
- {
- int len=0,i,length=0,flag=1,place=0,point;
- for (i=0; i<=strlen(string); i++)
- if (alphabetic(string[i]))
- if (flag)
- {
- point=i;
- flag=0;
- }
- else
- len++;
- else
- {
- flag=1;
- if (len>=length)
- {
- length=len;
- place=point;
- len=0;
- }
- }
- return(place);
- }
42.输出金字塔图案(要求用循环实现
- #include <stdio.h>
- void main()
- {
- /* i 0~2*i 0~2-i
- * 上半部分 0 *1个 0~2*0 空6/2=3 0~2-0
- *** 1 *3个 0~2*1 空4/2=2 0~2-1
- ***** 2 *5个 0~2*2 空2/2=1 0~2-2
- ******* 3 *7个 0~2*3 空0 0~2-3
- ***** 下半部分 0 *5个 0~4-2*0 空2/2=1 0~0
- *** 1 *3个 0~4-2*1 空4/2=2 0~1
- * 2 *1个 0~4-2*2 空6/2=3 0~2
- 0~4-2*i 0~i
- */
- int i,j,k;
- //上半部分
- for (i=0; i<=3; i++)
- {
- for (j=0; j<=2-i; j++)
- printf(" ");
- for (k=0; k<=2*i; k++)
- printf("*");
- printf("\n");
- }
- //下半部分
- for (i=0; i<=2; i++)
- {
- for (j=0; j<=i; j++)
- printf(" ");
- for (k=0; k<=4-2*i; k++)
- printf("*");
- printf("\n");
- }
- }
43 要有一个已排好序的数组,求输入一个数后,按原来排序的规律将她插入数组中
- #include "stdio.h"
- void main()
- {
- int a[10];
- int b[11];
- int i,m,j;
- printf("请输入一个数组:\n");
- for(i=0; i<10; i++)
- scanf("%d",&a[i]);
- printf("请输入一个任意的整数:");
- scanf("%d",&m);
- //找到插入位置
- for(i=0; i<10; i++)
- if(m<a[i])
- break;
- for(j=0; j<11; j++)
- {
- //将插入位置前的复制到b中
- if(i>j)
- b[j]=a[j];
- //将插入位置后的复制到b中
- else if(i<j)
- b[j]=a[j-1];
- //将插入位置复制到b中
- else b[j]=m;
- }
- printf("该数组的重新排序为:");
- for(j=0; j<11; j++)
- printf("%d ",b[j]);
- }
44 写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息
- #include "stdio.h"
- #include "math.h"
- void main()
- {
- int prime(int n);
- int m;
- printf("please input a integer:\n");
- scanf("%d",&m);
- if(prime(m))
- printf("%d is a prime",m);
- else
- printf("%d is not a prime",m);
- }
- int prime(int i)
- {
- int flag=1,n;
- for(n=2; n<=sqrt(i); n++)
- {
- if(i%n==0)
- flag=0;
- }
- return(flag);
- }
45 有一篇文章,共有4行文章,每行有60个字符。要求分别统计出其中英文大写字符、小写字母、数字、空格以及其他字符的个数
- #include <stdio.h>
- void main()
- {
- int i,j,upp,low,dig,spa,oth;
- char text[4][60];
- upp=low=dig=spa=oth=0;
- for (i=0; i<4; i++)
- {
- printf("please input line %d:\n",i+1);
- gets(text[i]);
- for (j=0; j<60 && text[i][j]!='\0'; j++)
- {
- if (text[i][j]>='A'&& text[i][j]<='Z')
- upp++;
- else if (text[i][j]>='a' && text[i][j]<='z')
- low++;
- else if (text[i][j]>='0' && text[i][j]<='9')
- dig++;
- else if (text[i][j]==' ')
- spa++;
- else
- oth++;
- }
- }
- printf("\nupper case: %d\n",upp);
- printf("lower case: %d\n",low);
- printf("digit : %d\n",dig);
- printf("space : %d\n",spa);
- printf("other : %d\n",oth);
- }
46. 有一行电文,已按下面规律译成密码:
A→Z a→z
B→Y b→y
C→X c→x/
即第1个字母变成第26个字母,第i个字母变成第(26 – i + 1)个字母。非字母符号不变。要求编程序将密码译回原文,并输出密码和原文。
- #include <stdio.h>
- void main()
- {
- int j,n;
- char ch[80],tran[80];
- printf("input cipher code:");
- gets(ch);
- printf("\ncipher code :%s",ch);
- j=0;
- while (ch[j]!='\0')
- {
- if ((ch[j]>='A') && (ch[j]<='Z'))
- tran[j]=155-ch[j]; //
- else if ((ch[j]>='a') && (ch[j]<='z'))
- tran[j]=219-ch[j]; //
- else
- tran[j]=ch[j];
- j++;
- }
- n=j;
- printf("\noriginal text:");
- for (j=0; j<n; j++)
- putchar(tran[j]);
- printf("\n");
- }
47 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下来的是原来第几号的那位(要求用指针知识实现)。【见2015年笔试题】
- #include <stdio.h>
- void main()
- {
- int i,k,m,n,num[50],*p;
- printf("input number of person: n=");
- scanf("%d",&n);
- p=num;
- for (i=0; i<n; i++)
- *(p+i)=i+1;
- i=0;
- k=0;
- m=0;
- while (m<n-1)
- {
- if (*(p+i)!=0) k++;
- if (k==3)
- {
- *(p+i)=0;
- k=0;
- m++;
- }
- i++;
- if (i==n) i=0;
- }
- while(*p==0) p++;
- printf("The last one is NO.%d\n",*p);
- }
48 有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课程成绩、平均分数)(用结构体)。
- #include <stdio.h>
- #define N 10
- struct student
- {
- char num[6];
- char name[8];
- float score[3];
- float avr;
- } stu[N];
- void main()
- {
- int i,j,maxi;
- float sum,max,average;
- for (i=0; i<N; i++)
- {
- printf("input scores of student %d:\n",i+1);
- printf("NO.:");
- scanf("%s",stu[i].num);
- printf("name:");
- scanf("%s",stu[i].name);
- for (j=0; j<3; j++)
- {
- printf("score %d:",j+1);
- scanf("%f",&stu[i].score[j]);
- }
- }
- average=0;
- max=0;
- maxi=0;
- for (i=0; i<N; i++)
- {
- sum=0;
- for (j=0; j<3; j++)
- sum+=stu[i].score[j];
- stu[i].avr=sum/3.0;
- average+=stu[i].avr;
- if (sum>max)
- {
- max=sum;
- maxi=i;
- }
- }
- average/=N;
- printf(" NO. name score1 score2 score3 average\n");
- for (i=0; i<N; i++)
- {
- printf("%5s%10s",stu[i].num,stu[i].name);
- for (j=0; j<3; j++)
- printf("%9.2f",stu[i].score[j]);
- printf(" %8.2f\n",stu[i].avr);
- }
- printf("average=%5.2f\n",average);
- printf("The highest score is : student %s,%s\n",stu[maxi].num,stu[maxi].name);
- printf("his scores are:%6.2f,%6.2f,%6.2f,average:%5.2f.\n", stu[maxi].score[0],stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr);
- }
49 写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后输出
- #include "stdio.h"
- void main()
- {
- void copy(char s[3],char m[2]);
- char str[80],c[80];
- printf("input str:\n" );
- gets(str);
- copy(str, c);
- printf("the vovel letters are:%s\n",c);
- }
- void copy(char s[3],char m[2])
- {
- int i,j;
- for(i=0,j=0; s[i]!='\0'; i++)
- if(s[i]=='a'||s[i]=='A'||s[i]=='o'||s[i]=='O'||s[i]=='u'||s[i]=='U'||s[i]=='i'||s[i]=='I'||s[i]=='e'||s[i]=='E')
- {
- m[j]=s[i];
- j++;
- }
- m[j]='\0';
- }
50 编一程序,输入月份号,输出该月的英文月名。例如,输入3,则输出March,要求用指针数组处理。
- #include <stdio.h>
- void main()
- {
- char * month_name[13]= {"illegal month","January","February","March","April",
- "May","June","july","August","September","October", "November","December"
- };
- int n;
- printf("input month:\n");
- scanf("%d",&n);
- if ((n<=12) && (n>=1))
- printf("It is %s.\n",*(month_name+n));
- else
- printf("It is wrong.\n");
- }
C 2010年笔试题的更多相关文章
- 【转】PHP笔试题2010年
From : http://www.51projob.com/a/PHP/20120905/602.html 下午,还有一场比较大的面试等着我[虽然接到pps的录用电话,可是心里还是想去verycd试 ...
- 收藏所用C#技术类面试、笔试题汇总
技术类面试.笔试题汇总 注:标明*的问题属于选择性掌握的内容,能掌握更好,没掌握也没关系. 下面的参考解答只是帮助大家理解,不用背,面试题.笔试题千变万化,不要梦想着把题覆盖了,下面的题是供大家查漏补 ...
- Python 的笔试题
其实大多数说学习Python 是纯兴趣,真的我不信,许多人已经工作了,没有那么多时间搞自己的纯兴趣了,都会为了生活奋斗,可以说转行来学python 就是未来加薪,当然,小编现在也快要准备工作了,所以也 ...
- 深度解析Objective-C笔试题
2011-08-11 17:39 佚名 互联网 字号:T | T 本文介绍的是Objective-C笔试题,先来问一个,为什么很多内置类如UITableViewController的delegate属 ...
- PHP爱考的那些笔试题
PHP爱考的那些笔试题 来自<PHP程序员面试笔试宝典>,涵盖了近三年了各大型企业常考的PHP面试题,针对面试题提取出来各种面试知识也涵盖在了本书. 一.单例模式是在应用程序中最多只能拥有 ...
- 对Thoughtworks的有趣笔试题实践
记得2014年在网上看到Thoughtworks的一道笔试题,当时觉得挺有意思,但是没动手去写.这几天又在网上看到了,于是我抽了一点时间写了下,我把程序运行的结果跟网上的答案对了一下,应该是对的,但是 ...
- 从阿里巴巴笔试题看Java加载顺序
一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...
- 我设计的ASP.NET笔试题,你会多少呢
本笔试题考查范围包括面向对象基础.HTML.CSS.JS.EF.jQuery.SQL.编码思想.算法等范围. 第1题:接口和抽象类有何区别? 第2题:静态方法和实例方法有何区别? 第3题:什么是多态? ...
- C#经典笔试题-获取字符串中相同的字符以及其个数
public Dictionary<char,int> GetStrSameAs(string str){ //将字符串转换成一个字符数组. char[] charArray=str.To ...
随机推荐
- Python几个简单实用的模块
今天整理了下,工作中常用的一些高阶函数,后面持续更新...... 一.collections 二.itertools 三.functools
- 二进制原码、反码、补码以及Java中的<< 和 >> 和 >>> 详细分析
1.计算机二进制系统中最小单位bit 在计算机二进制系统中: bit (位) :数据存储的最小单元. 简记为b,也称为比特(bit),每个二进制数字0或1就是一个位(bit),其中,每 8bit = ...
- JDK 1.8 新特性之Date-Time API
来源:请点击查看 1.8之前的日期类: 线程不安全:java.util.Date 这个类线程不安全,而且所有日期类都是可变的. 时间处理麻烦:默认的开始日期从1900年,不支持国际化,不提供时区支持, ...
- Ubuntu 18.04安装搜狗输入法
Ubuntu 18.04安装搜狗输入法 打开 terminal,输入 fcitx,检查是否安装搜狗输入法依赖,若提示未安装使用以下命令安装 sudo apt-get install fcitx-bin ...
- FC及BFC
1.什么是FC 2.BFC块级格式化上下文(Block formatting context) Box 是 CSS 布局的对象和基本单位, 直观点来说,就是一个页面是由很多个 Box 组成的.元素的类 ...
- 前端javascript知识(二)
documen.write和 innerHTML的区别 document.write只能重绘整个页面 innerHTML可以重绘页面的一部分 浏览器检测通过什么? (1) navigator.user ...
- vue项目开发,用webpack配置解决跨域问题
今天在本地开发时候碰到了跨域的问题,突然觉着跨域问题在所难免啊,之前没有没有碰到总觉着解决跨域很高大上的样纸,其实就是受限于网络的同源策略,跨域前后端都可以进行处理. 1,后端更改header hea ...
- AlphaGo、人工智能、深度学习解读以及应用
经过比拼,AlphaGo最终还是胜出,创造了人机大战历史上的一个新的里程碑.几乎所有的人都在谈论这件事情,这使得把“人工智能”.“深度学习”的热潮推向了新的一个高潮.AlphaGo就像科幻电影里具有人 ...
- vue用template还是JSX?
各自特点 template 模板语法(HTML的扩展) 数据绑定使用Mustache语法(双大括号) <span>{{title}}<span> JSX JavaScript的 ...
- 树莓派3b+ 交叉编译 及升级 kernel
安装 gcc pkg 等工具sudo apt-get install build-essential git 官方介绍 https://www.raspberrypi.org/documentatio ...