編程題
1.求1!+2!+3!+...+20!的和.
#include<stdio.h>
void main()
{
int s=0,x=1; //s第一次參與計算需要賦初值為0,x則需賦初值為1;
for (int i = 1; i <=20; i++)
{
x=x*i; //從1開始累乘,到i結(jié)束
s=s+x; //s累加x;
}
printf("sum=%d",s);
getchar();
}
2.求一個有序數(shù)列 2/1,3/2,5/3,8/5,13/8,21/13 前20項的和

image
#include<stdio.h>
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的舊值,現(xiàn)在賦給b
}
printf("sum=%d",s);
getchar();
}
3.有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數(shù),他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最后問第一個人,他說是10歲。請問第五個人多大?

image
#include<stdio.h>
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名學(xué)生,請從鍵盤隨機輸入這25名學(xué)生的某一門功課的成績,請編程:
(一)找出該班級學(xué)生此門功課的最高分和最低分,并記錄和最高分和最低分成績的學(xué)生的編號;
(二)將班級學(xué)生此門功課的成績按照從高到低進行排序,并輸出

image
#include<stdio.h>
/*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*/
(測試數(shù)據(jù))
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();//實現(xiàn)輸入清空;
}
/************************以上代碼實現(xiàn)輸入*****************************************************/
max=a[0]; //此步是關(guān)鍵,把第一個值賦給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;
/**********************以上代碼實現(xiàn)找到最大值及其序號******************************************/
for ( i = 0; i <25 ; i++)
{
if(a[i]<min) //同上
{
min=a[i]; //同上
min_xuhao=i; //同上
}
}
printf("min=%d,序號=%d\n",min,min_xuhao);
/**********************以上代碼實現(xiàn)找到最小值及其序號******************************************/
for ( i = 0; i < 25; i++)
{
for ( int j= 0; j<24-i; j++) //外層循環(huán)見bct4.png(圖)
{
if (a[j]<a[j+1]) //內(nèi)層循環(huán)見bct4.png(圖)
{
t=a[j];a[j]=a[j+1];a[j+1]=t; //判斷并交換見bct4.png(圖)
}
}
}
for(i=0;i<25;i++)
printf("%d ",a[i]);
/**********************以上代碼實現(xiàn)從大到小輸出(冒泡排序法)******************************************/
getchar();
}
5.使用指針交換兩個變量的值。

image
#include<stdio.h>
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; //以上代碼實現(xiàn)交換
printf("a為:%d\tb為:%d",a,b);
getchar();
}
6.使用指針對三個數(shù)進行從小到大的排列

image
#include<stdio.h>
void swap(int *m,int *n) //定義swap函數(shù),形參為指針變量m,n
{
if(*m>*n) //
{
int t=*m; //
*m=*n; //
*n=t; //
}
/*****以上實現(xiàn)交換*****************************************/
}
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比較并交換
/****以上調(diào)用三次swap函數(shù)實現(xiàn)a,b,c的互相比較和交換**********/
/****注意傳入的是地址*************************************/
printf("%d %d %d",a,b,c);
getchar();
}
7.使用指針將某銀行一周的錢收納匯總
#include<stdio.h>
/*
78943.1 2156.54 4654.4 4687.45 78965.4 1354.5 4656.8
*/
//以上為測試數(shù)據(jù)
void main()
{
float a[7];
printf("依次輸入七天的銀行錢的收納情況");
for (int i = 0; i < 7; i++)
{
scanf("%f",&a[i]);
}
/**以上實現(xiàn)輸入7個數(shù)據(jù)************************/
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.使用指針實現(xiàn)冒泡排序

image
#include<stdio.h>
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.找出二維數(shù)組中每行最大的數(shù)值進行求和
//8,4,3,-8,-4,-6,-1,-2,2,4,6,9
#include<stdio.h>
#define N 4 //定義常數(shù)N,值為4
void max(int (*a)[N],int m) //定義max函數(shù) 指針數(shù)組的名字可以看成是 指向指針的 指針
{
int value,i,j,sum=0;
for(i=0;i<m;i++)
{
value=*(*(a+i)); // 雙解指針相當于a[i]+i 放每一行最大數(shù)
for(j=0;j<N;j++)
{
if(*(*(a+i)+j)>value) //
{
value=*(*(a+i)+j);
}
}
printf("第%d行:最大數(shù)是:%d\n",i,value);
sum=sum+value;
}
printf("\n");
printf("每行中最大數(shù)相加之和是:%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<N;j++)
{
scanf("%d",&a[i][j]);
getchar();
}
}
max(p,3);
getchar();
}
10.求新入學(xué)班級新生的總?cè)藬?shù)
#include<stdio.h>
void main()
{
int i=0,n,sum=0;
int a[20]; //最大班級數(shù)設(shè)置為20
printf("請輸入班級的個數(shù):");
scanf("%d",&n);
for ( i = 0; i <n ; i++)
{
printf("請輸入第%d個班級的人數(shù):",i+1); //依次輸入各班級人數(shù)
scanf("%d",&a[i]);
sum=sum+a[i]; //累加a[i];
}
printf("sum=%d\n",sum);
getchar();
}
11.有N個學(xué)生的數(shù)據(jù)記錄,每個記錄包括學(xué)號、姓名、三科成績。編寫一個函數(shù)input,用來輸入一個學(xué)生的數(shù)據(jù)記錄。
編寫一個函數(shù)print,打印一個學(xué)生的數(shù)據(jù)記錄。在主函數(shù)調(diào)用這兩個函數(shù),讀取N條記錄輸入,再按要求輸出。N<100。
/*
2106040235 劉金鵬 98 95 97
2106040237 劉金蓮 97 94 95
*///以上為測試數(shù)據(jù)
#include<stdio.h>
#include<stdlib.h>
struct STUDENT //定義一個STUDENT型的結(jié)構(gòu)體,包含以下類型數(shù)據(jù)
{
int xuehao;
char name[20];
float sa;
float sb;
float sc;
}stu[100]; //定義一個名為stu的STUDENT型的數(shù)組,最大可容納100個元素
void input (int n)
{
for (int i = 0; i <n ; i++)
{
printf("請輸入第%d名學(xué)生的學(xué)號,姓名,a科目分數(shù),b科目分數(shù),c科目分數(shù):\n",i+1);
scanf("%d %s %f %f %f",&stu[i].xuehao,&stu[i].name,&stu[i].sa,&stu[i].sb,&stu[i].sc);
//以上為依次輸入各數(shù)據(jù)
getchar();//輸入占位
}
}
void print(int n)
{
for (int i = 0; i < n; i++)
{
printf("學(xué)號:%d 姓名:%s a科目:%.2f b科目:%.2f c科目:%.2f \n",stu[i].xuehao,stu[i].name,stu[i].sa,stu[i].sb,stu[i].sc);
//以上為依次輸出各數(shù)據(jù)
}
}
void main()
{
int n;
printf("請輸入需要輸入的學(xué)生數(shù)據(jù)個數(shù):");
scanf("%d",&n);
input(n); //輸入各數(shù)據(jù)函數(shù)
print(n); //輸出各數(shù)據(jù)函數(shù)
getchar();
}
12.設(shè)計一個圣誕樹代碼(滑稽)
#include <stdio.h>
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這個值調(diào)高
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;
}