编程题
1.求1!+2!+3!+...+20!的和.
#include
void main()
{
int s=0,x=1; //s第一次参与计算需要赋初值为0,x则需赋初值为1;
for (int i = 1; i <=20; i++)
{
x=x*i; //从1开始累乘,到i结束
s=s+x; //s累加x;
}
printf("sum=%d",s);
getchar();
}
2.求一个有序数列 2/1,3/2,5/3,8/5,13/8,21/13 前20项的和
#include
void main()
{
int i,n=20,a=2,b=1,s=0,t;
for ( i = 1; i <=n; i++)
{
s=s+a/b; //开始计算累加a/b,第一个值是2/1;
t=a; //a把自身的值赋给t
a=a+b; //新a的值为a+b,赋给自身,刷新a的值
b=t; //t是a的旧值,现在赋给b
}
printf("sum=%d",s);
getchar();
}
3.有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
#include
int age(int x)
{
if(x==1)return 10;
x= age(x-1)+2;
return x;
}
void main()
{
printf("sum=%d",age(5));
getchar();
}
4.一个班级有25名学生,请从键盘随机输入这25名学生的某一门功课的成绩,请编程:
(一)找出该班级学生此门功课的最高分和最低分,并记录和最高分和最低分成绩的学生的编号;
(二)将班级学生此门功课的成绩按照从高到低进行排序,并输出
#include
/*98 97 96 86 85 20 83 87 84
83 74 99 100 30 89 54 87 89
98 74 89 88 87 45 10*/
(测试数据)
void main()
{
int a[25],i,j,t,max,min,max_xuhao,min_xuhao;
printf("输入25个成绩\n");
for (i = 0; i < 25; i++)
{
scanf("%d",&a[i]);
getchar();//实现输入清空;
}
/************************以上代码实现输入*****************************************************/
max=a[0]; //此步是关键,把第一个值赋给max;
max_xuhao=0;
for ( i = 0; i <25 ; i++)
{
if(a[i]>max) //开始从i=0判断每一个元素是否大于max
{
max=a[i]; //如果a[i]大于max,那他就成了max
max_xuhao=i; //记录最大值的序号
}
}
printf("max=%d,序号=%d\n",max,max_xuhao);
min=a[0];
min_xuhao=0;
/**********************以上代码实现找到最大值及其序号******************************************/
for ( i = 0; i <25 ; i++)
{
if(a[i]
5.使用指针交换两个变量的值。
#include
void main()
{
int a=4,b=5,*pa,*pb; //定义变量a,b和指针变量pa,pb;
pa=&a;pb=&b; //把a的地址赋给pa,b的地址赋给pb,注意取地址符号&
int t=*pa; //
*pa=*pb; //
*pb=t; //以上代码实现交换
printf("a为:%d\tb为:%d",a,b);
getchar();
}
6.使用指针对三个数进行从小到大的排列
#include
void swap(int *m,int *n) //定义swap函数,形参为指针变量m,n
{
if(*m>*n) //
{
int t=*m; //
*m=*n; //
*n=t; //
}
/*****以上实现交换*****************************************/
}
void main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
swap(&a,&b); //a,b比较并交换
swap(&b,&c); //b,c比较并交换
swap(&a,&c); //c,a比较并交换
/****以上调用三次swap函数实现a,b,c的互相比较和交换**********/
/****注意传入的是地址*************************************/
printf("%d %d %d",a,b,c);
getchar();
}
7.使用指针将某银行一周的钱收纳汇总
#include
/*
78943.1 2156.54 4654.4 4687.45 78965.4 1354.5 4656.8
*/
//以上为测试数据
void main()
{
float a[7];
printf("依次输入七天的银行钱的收纳情况");
for (int i = 0; i < 7; i++)
{
scanf("%f",&a[i]);
}
/**以上实现输入7个数据************************/
float sum=0,*p=a;
/**sum需要参与首次计算,初始化为0,
同时定义一个指针变量p,值为a的首地址**********/
for (int i = 0; i < 7; i++)
{
sum+=*p; //累加指针p所指元素的值
p++; //指针右移一位
}
printf("sum=%.2f",sum);
getchar();
}
8.使用指针实现冒泡排序
#include
void main()
{
int a[10]={6,1,8,9,4,3,2,7,5,0},*p;
p=a;
int i,j,t;
for(i=0;i<10;i++)
{
for(j=0;j<10-1-i;j++)
{
if(*(p+j)>*(p+j+1))
{
t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
}
}
for (int i = 0; i < 10; i++)
{
printf("%d\t",*(p+i));
}
getchar();
}
9.找出二维数组中每行最大的数值进行求和
//8,4,3,-8,-4,-6,-1,-2,2,4,6,9
#include
#define N 4 //定义常数N,值为4
void max(int (*a)[N],int m) //定义max函数 指针数组的名字可以看成是 指向指针的 指针
{
int value,i,j,sum=0;
for(i=0;ivalue) //
{
value=*(*(a+i)+j);
}
}
printf("第%d行:最大数是:%d\n",i,value);
sum=sum+value;
}
printf("\n");
printf("每行中最大数相加之和是:%d\n",sum);
}
void main()
{
int a[3][N],i,j;
int (*p)[N];
p=&a[0];
printf("please input:\n");
for(i=0;i<3;i++)
{
for(j=0;j
10.求新入学班级新生的总人数
#include
void main()
{
int i=0,n,sum=0;
int a[20]; //最大班级数设置为20
printf("请输入班级的个数:");
scanf("%d",&n);
for ( i = 0; i
11.有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。编写一个函数input,用来输入一个学生的数据记录。
编写一个函数print,打印一个学生的数据记录。在主函数调用这两个函数,读取N条记录输入,再按要求输出。N<100。
/*
2106040235 刘金鹏 98 95 97
2106040237 刘金莲 97 94 95
*///以上为测试数据
#include
#include
struct STUDENT //定义一个STUDENT型的结构体,包含以下类型数据
{
int xuehao;
char name[20];
float sa;
float sb;
float sc;
}stu[100]; //定义一个名为stu的STUDENT型的数组,最大可容纳100个元素
void input (int n)
{
for (int i = 0; i
12.设计一个圣诞树代码(滑稽)
#include
int main(void)
{
int i, j, x;
int n = 0;
// a是间隔填充物,这里用空白填充;b是雪花,这里用*表示;c是圣诞树的填充,用'0'表示
char a = ' ', b = '*', c = '0';
// 第一部分,输出树叶
for (x = 0; x < 3; x++) {
// 想让圣诞树变高可以将4这个值调高
for (i = 0; i < x + 6; i++) {
for (j = 0; j < 80; j++) {
if ((j <= 25 + n) && (j >= 25 - n)) {
printf("%c", c);
} else if ((j % (n + 6) == n) && ( (j > 25 + n) || (j < 25 - n))) {
printf("%c", b);
} else {
printf("%c", a);
}
}
printf("\n");
n = n + 2;
}
n = n - 2 * (x + 2);
}
// 第二部分,输出树干,高度为5
for (i = 0; i < 5; i++) {
for (j = 0; j < 80; j++) {
if (j >= 22 && j <= 28) {
printf("%c", c);
} else if ((j % (n + 6) == n) && ((j > 25 + n) || (j < 25 - n))) {
printf("%c", b);
} else {
printf("%c", a);
}
}
n = n + 2;
printf("\n");
}
// 第三部分,输出地面,高度为3
for (i = 0; i < 3; i++) {
for (j = 0; j < 80; j++) {
if (j % 2 == 0) {
printf("%c", b);
} else {
printf("%c", a);
}
}
printf("\n");
}
getchar ();
return 0;
}