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");
}

最新文章

  1. Oracle 备份与还原
  2. Ehcache BigMemory: 摆脱GC困扰
  3. UWP开发入门(二十一)——保持Ui线程处于响应状态
  4. [OpenJudge 3064]坠落的蚂蚁
  5. Android开发-API指南-Content Provider
  6. 在Unity项目中使用Git
  7. ThinkPHP3.1新特性: 多层MVC支持
  8. c#基础语言编程-程序集和反射
  9. cos-26上传
  10. iOS学习之网易新闻简易Demo
  11. C# 数组的应用
  12. PM俱乐部之旅7-弱活着
  13. 查看centos版本及32还是64位
  14. css之幽灵空白节点
  15. Eclipse无法正常启动,弹出对话框内容为 A Java Runtime...
  16. 5G的真正价值
  17. 注解Annotation
  18. ckplayer iis6 mp4 播放404错误
  19. Java ArrayList 数组之间相互转换
  20. Alpha 贡献分及转会人员确定

热门文章

  1. [Statistics] Comparison of Three Correlation Coefficient: Pearson, Kendall, Spearman
  2. python数据分析工具 | pandas
  3. DirectX11--深入理解Effects11、使用着色器反射机制(Shader Reflection)实现一个复杂Effects框架
  4. ARC中__bridge, __bridge__transfer, __bridge_retained 关系
  5. 纯C 实现 strpos substr strspilt str_trim
  6. Vue2.0 【第二季】第6节 Component 初识组件
  7. synchronized实现原理及其优化-(自旋锁,偏向锁,轻量锁,重量锁)
  8. 《前端之路》- TypeScript (三) ES5 中实现继承、类以及原理
  9. 微信小程序开发中的http请求总结
  10. 用angularjs写的一个简单的grid table