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 ...
随机推荐
- LeetCode--二叉树1--树的遍历
LeetCode--二叉树1--树的遍历 一 深度遍历 深度遍历里面由 三种遍历方式,两种实现方法.都要熟练掌握. 值得注意的是,当你删除树中的节点时,删除过程将按照后序遍历的顺序进行. 也就是说,当 ...
- 分享到微信,QQ等各大网络媒体网站代码
http://www.jiathis.com/ 打开此网站,如果没有账号,请注册一下,然后登陆账号,进入网页以后直接可以复制代码到页面的标签,进行css样式布局,直接可以在页面测试,如果方便的话直接百 ...
- Chrome 63 - What"s New in DevTools(中文字幕)
大家好,这是代码之声(codefm)第一期,今天给大家带来的是 What's New In DevTools (Chrome 63). Chrome 一般会每隔 6 周发布一次主版本.目前 Chro ...
- 前端每日实战:146# 视频演示如何用纯 CSS 创作一个脉动 loader
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/wYvGwr 可交互视频 此视频是可 ...
- 符合SEO的HTML布局规范
少用例如iframe等标签引入内容,可以不用尽量不用,因为搜索引擎无法搜索到框架里面的内容: <!--页面注解--> <html> <head> <title ...
- 有史以来最全的CMD命令
说在前面的话: 本篇是博主通过网上查找整理而成的,且都是亲测可以的一些cmd命令,可以说是很齐全了,当然,如果有不可以运行的代码,欢迎大家留言指出,我会不断完善的,谢谢. CMD作用: 掌握一些基本的 ...
- fork他人仓库文件及修改整合
1.首先使用浏览器打开自己的GitHub地址,并打开即将fork的文件地址(别人的文件地址),在其右上方找到fork选项并点击即可 2.在自己的电脑上创建一个文件夹后使用git bush here的C ...
- 最简单易懂的实现CRC16校验
public String getCRC16(byte[] bytes) { //CRC寄存器全为1 int CRC = 0x0000ffff; //多项式校验值 int POLYNOMIAL = 0 ...
- mysql数据库远程访问设置方法
1. 修改方式1代码改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库 ...
- go package 学习笔记 —— strconv(string与其他基本数据类型(int, float, bool)的转换)
strconv实现了go中基本数据类型与string之间的转换. How to use in go go doc:https://godoc.org/strconv import "strc ...