1.Hello World
代码

#include <stdio.h>        /* 包含标准输入输出头文件 */
void main() /* 主函数 */
{
printf("Hello World!\n"); /* 打印输出信息 */
}

运行结果

C语言小例子【基础】_#include


2.两数之积

代码

#include <stdio.h>
void main()
{
int x,y,m; /* 定义整型变量x,y,m */
printf("Please input x and y\n"); /* 输出提示信息 */
scanf("%d%d",&x,&y); /* 读入两个乘数,赋给x,y变量 */
m=x*y; /* 计算两个乘数的积,赋给变量m */
printf("%d * %d = %d\n",x,y,m); /* 输出结果 */
}

运行结果

C语言小例子【基础】_#include_02


3.比较两个浮点数大小

代码

/* 输入两个浮点数,输出它们中的大数 */
#include <stdio.h>
void main()
{
float x,y,c; /* 变量定义 */
printf("Please input x and y:\n"); /* 提示用户输入数据 */
scanf("%f%f",&x,&y);
c=x>y?x:y; /* 计算c=max(x,y) */
printf("MAX of (%f,%f) is %f",x,y,c); /* 输出c */
}

运行结果

C语言小例子【基础】_例题_03


4.输入一个字符串,单独输出其中的每一个字符

代码

/* */
#include <stdio.h>
void main()
{
char ch,nch;
int count;
int k;

printf("Please input a string with a # in the end(输入一个字符串 并以#结尾).\n");
scanf("%c",&ch);
while(ch != '#')
{
if(ch >= '0' && ch <= '9')
{

count = ch-'0'+1;
scanf("%c",&nch);
for(k=0;k<count;k++)
printf("%c",nch);
}
else
printf("%c",ch);
printf(" ");
scanf("%c",&ch);
}
printf("#\n");
}

运行结果

C语言小例子【基础】_i++_04


5.输出不同类型所占的字节数

代码

/* 输出不同类型所占的字节数*/
#include <stdio.h>
void main()
{
/* sizeof()是保留字,它的作用是求某类型或某变量类型的字节数, */
/* 括号中可以是类型保留字或变量。*/
/*int型在不同的机器,不同的编译器中的字节数不一样,*/
/*一般来说在TC2.0编译器中字节数为2,在VC编译器中字节数为4 */
printf("The bytes of the variables are:\n");
printf("int:%d bytes\n",sizeof(int));
/* char型的字节数为1 */
printf("char:%d byte\n",sizeof(char));
/* short型的字节数为2 */
printf("short:%d bytes\n",sizeof(short));
/* long型的字节数为4 */
printf("long:%d bytes\n",sizeof(long));
/* float型的字节数为4 */
printf("float:%d bytes\n",sizeof(float));
/* double型的字节数为8 */
printf("double:%d bytes\n",sizeof(double));
/* long double型的字节数为8或10或12 */
printf("long double:%d bytes\n",sizeof(long double));
getchar();
}

运行结果

C语言小例子【基础】_c语言_05

6.自增/自减测试
代码

/*自增/自减测试 */
#include <stdio.h>
void main()
{
int a=5,b,c,i=10;
b=a++;
c=++b;

printf("a = %d, b = %d, c = %d\n",a,b,c);
printf("i,i++,i++ = %d,%d,%d\n",i,i++,i++);
printf("%d\n",++i);
printf("%d\n",--i);
printf("%d\n",i++);
printf("%d\n",i--);
printf("%d\n",-i++);
printf("%d\n",-i--);
getchar();
}

运行结果

C语言小例子【基础】_字节数_06

7.猜数字
代码

#include <stdio.h>
#include <conio.h>
void main()
{
int Password=0,Number=0,price=58,i=0;
printf("\n====This is a Number Guess Game!====\n");
while( Password != 1234 )
{
if( i >= 3 )
return;
i++;
puts("Please input Password:(默认密码1234) ");
scanf("%d",&Password);
}

i=0;
while( Number!=price )
{
do{
puts("Please input a number between 1 and 100: ");
scanf("%d",&Number);
printf("Your input number is %d\n",Number);
}while( !(Number>=1 && Number<=100) );
if( Number >= 90 )
{
printf("Too Bigger! Press any key to try again!\n");
}
else if( Number >= 70 && Number < 90 )
{
printf("Bigger!\n");
}
else if( Number >= 1 && Number <= 30 )
{
printf("Too Small! Press any key to try again!\n");
}
else if( Number > 30 && Number <= 50 )
{
printf("Small! Press any key to try again!\n");
}
else
{
if( Number == price )
{
printf("OK! You are right! Bye Bye!\n");
}
else if( Number < price )
{
printf("Sorry,Only a little smaller! Press any key to try again!\n");

}
else if( Number > price )
printf(" Sorry, Only a little bigger! Press any key to try again!\n");
}
getch();
}
}

运行结果

C语言小例子【基础】_例题_07

8.模拟ATM(自动柜员机)界面
代码

#include <stdio.h>
void main()
{
char SelectKey,CreditMoney,DebitMoney;
while(1)
{
do{

puts("=========================");
puts("| Please select key: |");
puts("| 1. Quary |");
puts("| 2. Credit |");
puts("| 3. Debit |");
puts("| 4. Return |");
puts("=========================");
SelectKey = getch();system( "cls ");
}while( SelectKey!='1' && SelectKey!='2' && SelectKey!='3' && SelectKey!='4' );
switch(SelectKey)
{
case '1':

puts("================================");
puts("| Your balance is $1000. |");
puts("| Press any key to return... |");
puts("================================");
getch();system( "cls ");
break;
case '2':
do{

puts("==================================");
puts("| Please select Credit money: |");
puts("| 1. $50 |");
puts("| 2. $100 |");
puts("| 3. Return |");
puts("==================================");
CreditMoney = getch();system( "cls ");
}while( CreditMoney!='1' && CreditMoney!='2' && CreditMoney!='3' );
switch(CreditMoney)
{
case '1':

puts("=========================================");
puts("| Your Credit money is $50,Thank you! |");
puts("| Press any key to return... |");
puts("=========================================");
getch();system( "cls ");
break;
case '2':

puts("==========================================");
puts("| Your Credit money is $100,Thank you! |");
puts("| Press any key to return... |");
puts("==========================================");
getch();
break;
case '3':
break;
}
break;
case '3':
do{

puts("====================================");
puts("| Please select Debit money: |");
puts("| 1. $50 |");
puts("| 2. $100 |");
puts("| 3. $500 |");
puts("| 4. $1000 |");
puts("| 5. Return |");
puts("====================================");
DebitMoney = getch();system( "cls ");
}while( DebitMoney!='1' && DebitMoney!='2' && DebitMoney!='3' \
&& DebitMoney!='4' && DebitMoney!='5' );
switch(DebitMoney)
{
case '1':

puts("===========================================");
puts("| Your Debit money is $50,Thank you! |");
puts("| Press any key to return... |");
puts("===========================================");
getch();system( "cls ");
break;
case '2':

puts("===========================================");
puts("| Your Debit money is $100,Thank you! |");
puts("| Press any key to return... |");
puts("===========================================");
getch();system( "cls ");
break;
case '3':

puts("===========================================");
puts("| Your Debit money is $500,Thank you! |");
puts("| Press any key to return... |");
puts("===========================================");
getch();system( "cls ");
break;
case '4':

puts("===========================================");
puts("| Your Debit money is $1000,Thank you! |");
puts("| Press any key to return... |");
puts("===========================================");
getch();system( "cls ");
break;
case '5':
break;
}
break;
case '4':

puts("================================");
puts("| Thank you for your using! |");
puts("| Good bye! |");
puts("================================");
return;
}
}
}

运行结果

C语言小例子【基础】_#include_08

9.矩阵转置
代码

/* 用二维数组实现矩阵的转置 */
#include <stdio.h>
#define ROW 3
#define COL 4
main()
{
int matrixA[ROW][COL],matrixB[COL][ROW];
int i,j;

printf("Enter elements of the matrixA,");
printf("%d*%d:\n",ROW,COL);
for( i=0; i<ROW; i++ )
{
for( j=0; j<COL; j++ )
{
scanf("%d",&matrixA[i][j]);
}
}

for( i=0; i<ROW; i++ )
{
for( j=0; j<COL; j++ )
{
matrixB[j][i] = matrixA[i][j];
}
}

printf("MatrixB,");
printf("%d*%d:\n",COL,ROW);
for( i=0; i<COL; i++ )
{
for( j=0; j<ROW; j++ )
{
printf("%8d",matrixB[i][j]);
}
printf("\n");
}
printf("\n Press Any Key to Quit... \n");
getch();
}

运行结果

C语言小例子【基础】_字节数_09

10.任意进制数的转换
代码

/* 函数trans将无符号整数n翻译成d(2<=d<=16)进制表示的字符串s */
#include "stdio.h"
#define M sizeof(unsigned int)*8
int trans(unsigned n, int d, char s[])
{
static char digits[] ="0123456789ABCDEF"; /* 十六进制数字的字符 */
char buf[M+1];
int j, i = M;
if(d<2||d>16)
{
s[0]='\0'; /* 不合理的进制,置s为空字符串 */
return 0; /* 不合理的进制,函数返回0 */
}
buf[i]='\0';
do
{
buf[--i]=digits[n%d]; /*译出最低位,对应字符存入对应工作数组中*/
n/=d;
}while(n);
/* 将译出在工作数组中的字符串复制到s */
for(j=0;(s[j]=buf[i])!='\0';j++,i++);
/* 其中控制条件可简写成s[j]=buf[i] */
return j;
}
/* 主函数用于测试函数 trans() */
void main()
{
unsigned int num = 253;
int scale[]={2,3,10,16,1};
char str[33];
int i;
for(i=0;i<sizeof(scale)/sizeof(scale[0]);i++)
{
if(trans(num,scale[i],str))
printf("%5d = %s(%d)\n",num,str,scale[i]);
else
printf("%5d => (%d) Error! \n",num,scale[i]);
}
printf("\n Press any key to quit...\n");
getch();
}

运行结果

C语言小例子【基础】_例题_10


11.回文数的判读

代码

/* 函数circle用于判断正整数n的d进制数表示形式是否是回文数 */
int circle(int n, int d)
{
int s=0,m=n;
while(m)
{
s=s*d+m%d;
m/=d;
}
return s==n;
}
/* main函数用于测试circle函数 */
int num[]={232,27,851};
int scale[]={2,10,16};
void main()
{
int i,j;
for(i=0;i<sizeof(num)/sizeof(num[0]);i++)
for(j=0;j<sizeof(scale)/sizeof(scale[0]);j++)
if(circle(num[i],scale[j]))
printf("%d -> (%d) is a Circle Number!\n",num[i],scale[j]);
else
printf("%d -> (%d) is not a Circle Number!\n",num[i],scale[j]);
printf("\n Press any key to quit...\n");
getch();
}

运行结果

C语言小例子【基础】_i++_11

12.数组前n项和
代码

int a[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
void main()
{
int i;
printf("\n The arry is:\n");
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
printf(" %d ",a[i]);
printf("\n SUM of the arry is: %d\n",sum(a,sizeof(a)/sizeof(a[0])));
printf("\n Press any key to quit...\n");
getch();
}
sum(int a[],int n)
{
if(n<=0)
return 0;
return a[n-1]+sum(a,n-1);
}

运行结果

C语言小例子【基础】_#include_12

13.通过指针比较整数大小
代码

main()
{
int x,y,z; /* 定义三个int型变量 */
int *xp = &x, /* 定义指针变量xp,并赋值为x的地址,使xp指向x */
*yp = &y, /* 定义指针变量yp,并赋值为y的地址,使yp指向y */
*zp = &z; /* 定义指针变量zp,并赋值为z的地址,使zp指向z */
int t;
printf("\nPlease input x,y,z:\n");
scanf("%d%d%d",xp,yp,zp); /* 通过变量的指针,为变量输入值 */
if(*xp>*yp) /* 通过指向变量的指针引用变量的值 */
{
t=*xp; /* 通过指向变量的指针引用变量的值 */
*xp=*yp;/* 通过指向变量x的指针xp,引用变量x的值 */
*yp=t; /* 通过指向变量y的指针yp,引用变量y的值 */
}
if(*xp>*zp) /* 通过指向变量的指针,引用变量的值 */
{
t=*xp; /* 通过指向变量x的指针xp,引用变量x的值 */
*xp=*zp;/* 通过指向变量x的指针xp,引用变量x的值 */
*zp=t; /* 通过指向变量z的指针zp,引用变量z的值 */
}
if(*yp>*zp) /* 通过指向变量的指针,引用变量的值 */
{
t=*yp; /* 通过指向变量的指针,引用变量的值 */
*yp=*zp;/* 通过指向变量y的指针yp,引用变量y的值 */
*zp=t;/* 通过指向变量z的指针zp,引用变量z的值 */
}
printf("x = %d\ty = %d\tz = %d\n",x,y,z);
printf("\nPress any key to quit...\n");
getch();
}

运行结果

C语言小例子【基础】_字节数_13

14.指向数组的指针
代码

int a[ ]={1,2,3,4,5};
#define N sizeof a/sizeof a[0]
main()
{
int j, /*游标变量*/
*p; /*指针变量*/
for(j=0;j<N;j++)/*数组名和下标顺序访问数组的元素*/
printf("a[%d]\t= %d\t",j,a[j]);
printf("\n");
for(p=a;p<a+N;p++)/*让指针顺序指向数组的各元素,遍历数组*/
printf("*p\t= %d\t",*p);
printf("\n");/*指针与游标变量结合,改变游标变量遍历数组*/
for(p=a,j=0;p+j<a+N;j++)
printf("*(p+%d)\t= %d\t",j,*(p+j));
printf("\n");/*指针与游标变量结合,用指针和下标遍历数组*/
for(p=a+N-1,j=N-1;j>=0;j--)
printf("p[-%d]\t= %d\t",j,p[-j]);
printf("\nPress any key to quit...\n");
getch();
}

运行结果

C语言小例子【基础】_#include_14

15.寻找指定元素的指针
代码

#include <stdio.h>
#define MAX 20
int search(int *apt,/*已知数表的首元指针*/
int n,/*数表中元素个数*/
int key)/*要寻找的值*/
{
int *p;
for(p=apt;p<apt+n;p++)
if(*p==key)
return p-apt;/*返回找到元素的下标*/
return -1;
}
int *find(int *apt,/*已知数表的首元指针*/
int n,/*数表中元素个数*/
int key)/*要寻找的值*/
{
int *p;
for(p=apt;p<apt+n;p++)
if(*p==key)
return p;/*返回找到元素的指针*/
return NULL;
}

int a[]={90,80,70,60,50,40,30,20,10,9,8,7,6,5,42,40,50,1,2,3};
main()
{
int i,key;
printf("The elements of array a is:\n");
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
printf(" %d",a[i]);
printf("\nThe address of a[0] is: %d.\n",&a[0]);
puts("\nPlease input the key number you want to search:");
scanf("%d",&key);
i=search(a,sizeof(a)/sizeof(a[0]),key);
printf("\nThe label number of the key number %d in the array is: %d.",key,i);
printf("\nThe point value of the key number %d in the array is: %d.",key,find(a, sizeof(a)/sizeof(a[0]),key));

puts("\n\n Press any key to quit...");
getch();
}

运行结果

C语言小例子【基础】_例题_15

16.寻找相同元素的指针
代码

/*[函数]在已知两个从小到大有序的数表中寻找都出现的第一个元素的指针*/
#define NULL 0
int *search2(int *pa,int *pb,int an,int bn)
{
int *ca,*cb;

ca=pa;cb=pb;/*为ca、cb设定初值*/
while(ca<pa+an&&cb<pb+bn)/*两个数表都未考察完*/
{
/*在两个数表中找下一个相等的元素*/
if(*ca<*cb)/*数表1的当前元素<数表2的当前元素*/
ca++;/*调整数表1的当前元素指针*/
else if(*ca>*cb)/*数表1的当前元素>数表2的当前元素*/
cb++;/*调整数表2的当前元素指针*/
else /*数表1的当前元素==数表2的当前元素*/
/*在前两个数表中找到相等元素*/
return ca;/*返回在这两个数表中找到相等元素*/
}
return NULL;
}

void main( )/*只是为了引用函数search2( )*/
{
int *vp,i;
int a[ ]={1,3,5,7,9,13,15,27,29,37};
int b[ ]={2,4,6,8,10,13,14,27,29,37};
puts("The elements of array a is:");
for(i=0;i<sizeof(a)/sizeof(a[0]);i++)
printf(" %d",a[i]);
puts("\nThe elements of array b is:");
for(i=0;i<sizeof(b)/sizeof(b[0]);i++)
printf(" %d",b[i]);
vp=search2(a,b,sizeof a/sizeof a[0],sizeof b/sizeof b[0]);
if(vp) printf("\nThe first same number in both arrays is %d\n",*vp);
else printf("Not found!\n");
puts("\n Press any key to quit...\n");
getch();

}

运行结果

C语言小例子【基础】_c语言_16

17.从键盘读入实数
代码

#define ERR 5
#define OK 6
#include <stdio.h>

int status;
double result,sig,scale;
int sign(int c)/*处理数的符号函数*/
{
if(c=='-')/*若为负号,置负数标记*/
sig=-sig;
}

int integer(int c)/*转换整数部分,转换一位整数位*/
{
result=result*10.0+c-'0';
}

int decimal(int c)/*转换小数部分,转换一位小数位*/
{
result+=(c-'0')*scale;
scale/=10.0;
}
/*状态表*/
int statbl[ ][4]={{ 1,2,3,ERR},/*0*/
{ERR,2,3,ERR},/*1*/
{OK,2,4,OK},/*2*/
{ERR,4,ERR,ERR},/*3*/
{OK,4,OK,OK}};/*4*/
/*转换函数表*/
int(*funtbl[ ][4])( )={{sign,integer,NULL,NULL},
{NULL,integer,NULL,NULL},
{NULL,integer,NULL,NULL},
{NULL,decimal,NULL,NULL},
{NULL,decimal,NULL,NULL}};

int readreal(double *dp)
{
int c,ckind;
sig=1.0;
result=0.0;
scale=0.1;

while((c=getchar( ))==' '||c=='\n'||c=='\t');/*跳过前导空白符*/
status=0;/*置初始状态*/
for(;;)
{
/*分类当前字符*/
if(c=='+'||c=='-') ckind=0;/*数的符号字符*/
else if(c>='0'&&c<='9') ckind=1;/*数字符*/
else if(c=='.') ckind=2;/*小数点*/
else ckind=3;/* 其它字符 */

if(funtbl[status][ckind])/* 如有转换函数 */
(*funtbl[status][ckind])(c);/* 执行相应的函数 */
status=statbl[status][ckind];/*设置新的状态*/
if(status==ERR||status==OK)break;/* 结束:出错或成功 */
c=getchar();
}
ungetc(c,stdin); /* 归还数德结束符 */
if(status==OK)
{
*dp=result *sig;/* 读入数按指针参数赋给相应变量 */
return 1;
}
return -1; /* 出错返回 */
}
main()
{
double x;
printf("\nPlease input real numbers (use nonreal char to end input):\n");
while(readreal(&x)==1)
printf("The real number you input is: %f\n",x);
printf("\nYou have inputted nonreal char.\n Press any key to quit...\n");
getch();
}

运行结果

C语言小例子【基础】_c语言_17

18.字符排版函数
代码

/* 字符排版函数,将字符行内单字之间的空白字符平均分配插入到单字之间*/
#define N 80
edit(char *s)
{
int i,sp,w,inw,v,r;
char buf[N],*str;
for(inw=sp=w=i=0;s[i];i++)
{
if(s[i]==' ')
{ /* 统计空白个数*/
sp++;
inw=0; /* 置空白符状态*/
}
else if(!inw)
{
w++; /* 统计单字个数*/
inw=1; /* 置单字状态*/
}
}
if(w<=1)
return; /* 单字数不超过1, 不排版 */
v=sp/(w-1); /* 每个间隔平均空白符 */
r=sp%(w-1); /* 多余的空白符 */
strcpy(buf,s);
for(str=buf;;)
{
while(*str==' ')str++; /* 掠过空白符 */
for(;*str&&*str!=' ';) /* 复制单字 */
*s++=*str++;
if(--w==0)
return; /* 全部单字复制完毕,返回 */
for(i=0;i<v;i++)
*s++=' '; /* 插入间隔空白符 */
if(r)
{
*s++=' '; /* 插入一个多余空白符 */
r--;
}
}
}
char buff[N];
main() /* 用于测试edit函数 */
{
puts("This is a typeset program!\nPlease input a character line:\n");
gets(buff);
edit(buff);
printf("\nThe character line after typeset is:\n\n%s\n",buff);
puts("\n Press any key to quit...\n ");
getch();
}

运行结果

C语言小例子【基础】_字节数_18

19.字符排列
代码

/* 字符串的所有字符排列函数,用已知字符串s中的所有字符,生成由其中n个字符组成的所有字符排列 */
#define N 20
char w[N];
perm(int n, char *s)
{
char s1[N];
int i;
if(n<1)
printf("%s\n",w); /* 一个排列生成输出 */
else
{
strcpy(s1,s); /* 保存本层次可使用的字符 */
for(i=0;*(s1+i);i++) /* 依次选本层次可用字符 */
{
*(w+n-1)=*(s1+i);/* 将选用字符填入正在生成的字符排列中 */
*(s1+i)=*s1;
*s1=*(w+n-1);
perm(n-1,s1+1); /* 递归 */
}
}
}
main()
{
int n=2;
char s[N];
w[n]='\0';
printf("This is a char permutation program!\nPlease input a string:\n");
scanf("%s",s);
puts("\nPlease input the char number of permuted:\n");
scanf("%d",&n);
puts("The permuted chars are:\n");
perm(n,s);
puts("\nPress any key to quit...");
getch();
}

运行结果

C语言小例子【基础】_例题_19

20.判断字符串是否回文
代码

#include <stdio.h>
#define MAX 50
int cycle(char *s)
{
char *h,*t;

for(h=s,t=s+strlen(s)-1;t>h;h++,t--)
if(*h!=*t) break;
return t<=h;
}

void main()
{
char s[MAX];
while(1)
{
puts("Please input the string you want to judge (input ^ to quit):");
scanf("%s",s);
if(s[0]=='^')
break;
if(cycle(s))
printf(" %s is a cycle string.\n",s);
else
printf(" %s is not a cycle string.\n",s);
}
puts("\nThank you for your using,bye bye!\n");
}

运行结果

C语言小例子【基础】_字节数_20


21.通讯录的输入输出

代码

#include <stdio.h>
#define ZIPLEN 10
#define PHONLEN 15
/*struct addr类型定义*/

struct addr
{
char *name;/*姓名*/
char *address;/*地址*/
char zip[ZIPLEN];/*邮政编码*/
char phone[PHONLEN];/*电话号码*/
};

void main()/*本主函数示意上述输入输出函数的用法*/
{
struct addr p[100];
int i,j;
for(i=0;readaddr(p+i);i++);
for(j=0;j<i;j++) writeaddr(p+j);
puts("\n Press any key to quit...");
getch();
}

/* 函数readaddr用于输入一个通信录函数 */
int readaddr(struct addr *dpt)
{
int len;
char buf[120];/*输入字符串的缓冲区*/

printf("\nPlease input the Name:\n");/*输入姓名*/
if(scanf("%s",buf)==1)
{
len=strlen(buf);
dpt->name=(char *)malloc(len+1);/*申请存贮姓名的空间*/
strcpy(dpt->name,buf);
}
else return 0;/*Ctrl+Z结束输入*/
printf("Please input the Address:\n");/*输入地址*/
if(scanf("%s",buf)==1)
{
len=strlen(buf);
dpt->address=(char *)malloc(len+1);/*申请存贮地址的空间*/
strcpy(dpt->address,buf);
}
else
{/*Ctrl+Z结束输入*/
free(dpt->name);/*释放存贮姓名的空间*/
return 0;
}
printf("Please input the Zip code:\n");/*输入邮编*/
if(scanf("%s",buf)==1)
strncpy(dpt->zip,buf,ZIPLEN-1);
else
{
free(dpt->name);/*释放存贮姓名的空间*/
free(dpt->address);/*释放存贮地址的空间*/
return 0;/*Ctrl+Z结束输入*/
}
printf("Please input the Phone number:\n");/*输入电话号码*/
if(scanf("%s",buf)==1)
strncpy(dpt->phone,buf,PHONLEN-1);
else
{
free(dpt->name);
free(dpt->address);
return 0;/*Ctrl+Z结束输入*/
}
return 1;
}

/* 函数writeaddr用于输出通讯录 */
int writeaddr(struct addr*dpt)
{
printf("Name : %s\n", dpt->name);/*输出姓名*/
printf("Address : %s\n", dpt->address);/*输出地址*/
printf("Zip : %s\n", dpt->zip);/*输出邮编*/
printf("Phone : %s\n\n", dpt->phone);/*输出电话号码*/
}

运行结果

C语言小例子【基础】_#include_21

22.扑克牌的结构表示
代码

enum suits{CLUBS,DIAMONDS,HEARTS,SPADES};
struct card
{
enum suits suit;
char value[3];
};
struct card deck[52];
char cardval[][3]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
char suitsname[][9]={"CLUBS","DIAMONDS","HEARTS","SPADES"};

void main()
{
int i,j;
enum suits s;
for(i=0;i<=12;i++)
for(s=CLUBS;s<=SPADES;s++)
{
j=i*4+s;
deck[j].suit=s;
strcpy(deck[j].value,cardval[i]);
}
for(j=0;j<52;j++)
printf("(%s%3s)%c",suitsname[deck[j].suit],deck[j].value,j%4==3?'\n':'\t');
puts("\nPress any key to quit...");
getch();
}

运行结果

C语言小例子【基础】_c语言_22

23. 用“结构”统计学生成绩
代码

#include <stdio.h>
#define N 5
#define SCORES 5
#define NUMLEN 10
struct std_type{
char no[NUMLEN];/*学号*/
char *name;/*名字符串指针*/
int scores[SCORES];/*五门功课的成绩*/
};
struct std_type students[N];
int order[N];
int total[N];

/*[函数]输入一个学生信息函数*/
int readastu(struct std_type *spt)
{
int len,j;
char buf[120];/*输入字符串的缓冲区*/

printf("\nNumber : ");/*输入学号*/
if(scanf("%s",buf)==1)
strncpy(spt->no,buf,NUMLEN-1);
else
return 0;/*Ctrl+Z结束输入*/
printf("Name : ");/*输入姓名*/
if(scanf("%s",buf)==1)
{
len=strlen(buf);
spt->name=(char *)malloc(len+1);/*申请存贮姓名的空间*/
strcpy(spt->name,buf);
}
else return 0;/*Ctrl+Z结束输入*/
printf("Scores : ");/*输入成绩*/
for(j=0;j<SCORES;j++)
if(scanf("%d",spt->scores+j)!=1)
break;
if(j==0)/*一个成绩也未输入*/
{
free(spt->name);/*释放存贮姓名的空间*/
return 0;
}
for(;j<SCORES;j++)/*少数未输入的成绩用0分代之*/
spt->scores[j]=0;
return 1;
}

/*[函数]输出一个学生信息的函数*/
int writeastu(struct std_type *spt)
{
int i;

printf("Number : %s\n",spt->no);/*输出学号*/
printf("Name : %s\n",spt->name);/*输出姓名*/
printf("Scores : ");/*输出成绩*/
for(i=0;i<SCORES;i++)
printf("%4d",spt->scores[i]);
printf("\n\n");
}

main()
{
int n,i,j,t;

for(n=0;readastu(students+n);n++);
/*采用冒泡法对学生信息数组排序*/
for(i=0;i<n;i++)
{
order[i]=i;/*预置第i个输入的学生*/
for(t=0,j=0;j<SCORES;j++)/*求第i个学生的总分*/
t+=students[i].scores[j];
total[i]=t;
}
/*冒泡排序*/
for(i=0;i<n-1;i++)/*共扫视n-1遍*/
for(j=0;j<n-1-i;j++)
if(total[order[j]]<total[order[j+1]])
{/*交换名次*/
t=order[j];
order[j]=order[j+1];
order[j+1]=t;
}
for(j=0;j<n;j++)/*输出*/
writeastu(students+order[j]);
printf("\n Press any key to quit...\n");
getch();
}

24.报数游戏
代码

#include <stdio.h>
struct ele{
int no;
struct ele *link;
};
void main()
{
int n,m,i;
struct ele *h,*u,*p;
printf("Please input n&m:\n");
scanf("%d%d",&n,&m);/*输入n和m*/
h=u=(struct ele *)malloc(sizeof(struct ele));/*形成首表元*/
h->no=1;
for(i=2;i<=n;i++)/*形成其余的n-1个表元*/
{
u->link=(struct ele *)malloc(sizeof(struct ele));
u=u->link;
u->no=i;/*第i个表元置编号i*/
}
u->link=h;/*末表元后继首表元,形成环*/
puts("\nThe numbers of who will quit the cycle in turn are:");
while(n)
{
for(i=1;i<m;i++)/*掠过m-1个表元*/
u=u->link;
p=u->link;/*p指向第m个表元*/
u->link=p->link;/*第m个表元从环中脱钩*/
printf("%4d",p->no);
free(p);/*释放第m个表元占用的空间*/
n--;
}
printf("\n\n Press any key to quit...\n");
getch();
}

运行结果

C语言小例子【基础】_字节数_23

25.模拟社会关系
代码

#include <stdio.h>
#define CHILDREN 5
struct person{
char *name;/*名字符串指针*/
char sex;/*性别:男用字符'M';女用字符'F'*/
struct person *father;/*指向父亲*/
struct person *mother;/*指向母亲*/
struct person *mate;/*指向配偶*/
struct person *children[CHILDREN];/*指向子女*/
};

/* [函数]newperson增加新人 */
struct person *newperson(char *name,char sex)
{
struct person *p;
int index;

p=(struct person *)malloc(sizeof(struct person));
p->name=(char *)malloc(strlen(name)+1);
strcpy(p->name,name);
p->sex=sex;
p->father=NULL;
p->mother=NULL;
p->mate=NULL;
for(index=0;index<CHILDREN;index++)
p->children[index]=NULL;
return p;
}

/* [函数]father_child建立父-子关系 */
father_child(struct person *father,struct person *child)
{
int index;

for(index=0;index<CHILDREN-1;index++)/*寻找一个空缺的子女指针*/
if(father->children[index]==NULL)/*若没有空缺,则填在最后*/
break;
father->children[index]=child;/*建立父-子关系*/
child->father=father;
}
/* [函数]mother_child建立母-子关系 */
mother_child(struct person *mother,struct person *child)
{
int index;
for(index=0;index<CHILDREN-1;index++)/*寻找一个空缺的子女指针*/
if(mother->children[index]==NULL)/*若没有空缺,则填在最后*/
break;
mother->children[index]=child;/*建立母-子关系*/
}
/* [函数]mate 建立配偶关系 */
mate(struct person *h,struct person *w)
{

h->mate=w;/*建立配偶关系*/
w->mate=h;
}

/* [函数]brotherinlow 检查两人是否是堂兄妹 */
int brothersinlaw(struct person *p1,struct person *p2)
{
struct person *f1,*f2;

if(p1==NULL||p2==NULL||p1==p2) return 0;
if(p1->sex==p2->sex) return 0;/*不可能是堂兄妹*/
f1=p1->father;
f2=p2->father;
if(f1!=NULL&&f1==f2) return 0;/*是兄妹,不是堂兄妹*/
while(f1!=NULL&&f2!=NULL&&f1!=f2)/*考虑远房情况*/
{
f1=f1->father;
f2=f2->father;
if(f1!=NULL&&f2!=NULL&&f1==f2) return 1;
}
return 0;
}
/* 函数print_relate用于输出人物p的姓名,性别和各种关系 */
void print_relate(struct person *p)
{
int index,i;
if(p->name==NULL)
return;
if(p->sex=='M')
printf(" %s is male.",p->name);
else
printf(" %s is female.",p->name);
if(p->father!=NULL)
printf(" %s's father is %s.",p->name,p->father->name);
if(p->mother!=NULL)
printf(" %s's mother is %s.",p->name,p->mother->name);
printf("\n");
if(p->mate!=NULL)
if(p->sex=='M')
printf(" His wife is %s.",p->mate->name);
else
printf(" Her husband is %s.",p->mate->name);
if(p->children!=NULL)
{ for(index=0;index<CHILDREN-1;index++)/*寻找一个空缺的子女指针*/
if(p->children[index]==NULL)/*若没有空缺,index为子女个数 */
break;
if(index>0)
printf(" Children are:");
for(i=0;i<index;i++)
printf(" %s",p->children[i]->name);
}
printf("\n");

}
main()
{
char *name[8]={"John","Kate","Maggie","Herry","Jason","Peter","Marry","Jenny"};
char male='M',female='F';
struct person *pGrandfather,*pFather1,*pFather2,*pMother1,*pMother2,*pSon,*pDaughter,*pCousin;
pGrandfather = newperson(name[0],male);
pFather1 = newperson(name[3],male);
pFather2 = newperson(name[4],male);
pMother1 = newperson(name[1],female);
pMother2 = newperson(name[2],female);
pSon = newperson(name[5],male);
pDaughter = newperson(name[6],female);
pCousin = newperson(name[7],female);
father_child(pGrandfather,pFather1);
father_child(pGrandfather,pFather2);
father_child(pFather1,pSon);
father_child(pFather1,pDaughter);
father_child(pFather2,pCousin);
mate(pFather1,pMother1);
mate(pFather2,pMother2);
mother_child(pMother1,pSon);
mother_child(pMother1,pDaughter);
mother_child(pMother2,pCousin);
/* 输出各种关系 */
print_relate(pGrandfather);
print_relate(pFather1);
print_relate(pFather2);
print_relate(pMother1);
print_relate(pMother2);
print_relate(pSon);
print_relate(pDaughter);
print_relate(pCousin);


if(!brothersinlaw(pDaughter,pCousin))
printf("%s and %s are not brothers (sisters) in law.\n",pDaughter->name,pCousin->name);
else
printf("%s and %s are brothers (sisters) in law.\n",pDaughter->name,pCousin->name);
if(!brothersinlaw(pSon,pCousin))
printf("%s and %s are not brothers (sisters) in law.\n",pSon->name,pCousin->name);
else
printf("%s and %s are brothers (sisters) in law.\n",pSon->name,pCousin->name);
if(!brothersinlaw(pSon,pDaughter))
printf("%s and %s are not brothers (sisters) in law.\n",pSon->name,pDaughter->name);
else
printf("%s and %s are brothers (sisters) in law.\n",pSon->name,pDaughter->name);

puts("\n Press any key to quit...");
getch();

}

运行结果

C语言小例子【基础】_i++_24


26. 统计文件的字符数

代码

#include <stdio.h>
void main()
{
char fname[80];/*存贮文件名*/
FILE *rfp;
long count;/*文件字符计数器*/

printf("Please input the file's name:\n");
scanf("%s",fname);
if((rfp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
exit(1);
}
count=0;
while(fgetc(rfp)!=EOF)
count++;
fclose(rfp);/*关闭文件*/
printf("There are %ld characters in file %s.\n",count,fname);
puts("\n Press any key to quit...");
getch();
}

27.文件的字数统计程序
代码

/*
该程序实现统计一个或多个文件的行数、字数和字符数。
一个行由一个换行符限定,一个字由空格分隔(包括空白符、制表符和换行符),
字符是指文件中的所有字符。要求程序另设三个任选的参数,
让用户指定他所要的统计。它们是:
1 统计文件行数
w 统计文件字数
c 统计文件字符数
若用户未指定任选的参数,则表示三个统计都要。
运行本程序时的参数按一下格式给出:
-l -w -c 文件 文件 ... 文件
其中,前三个任选参数l、w、c的出现与否和出现顺序任意,
或任意组合在一起出现,如:-lwc,-cwl,-lw,-wl,-lc,-cl,-cw等。
*/

#include <stdio.h>
main(int argc, char **argv )
{
FILE *fp;
int lflg,wflg,cflg; /* l, w, c三个标志 */
int inline,inword; /* 行内和字内标志 */
int ccount,wcount,lcount; /* 字符,字,行 计数器 */
int c;
char *s;
lflg=wflg=cflg=0;
if(argc<2)
{
printf("To run this program, usage: program -l -w -c file1 file2 ... filen \n");
exit(0);
}
while(--argc>=1&&(*++argv)[0]=='-')
{
for(s=argv[0]+1;*s!='\0';s++)
{
switch(*s)
{
case 'l':
lflg=1;
break;
case 'w':
wflg=1;
break;
case 'c':
cflg=1;
break;
default:
puts("To run this program, usage: program -l -w -c file1 file2 ... filen");
exit(0);
}
}
}
if(lflg==0&&wflg==0&&cflg==0)
lflg=wflg=cflg=1;
lcount=wcount=ccount=0;
while(--argc>=0)
{
if((fp=fopen(*argv++,"r"))==NULL) /* 以只读方式打开文件 */
{
fprintf(stderr,"Can't open %s.\n",*argv);
continue;
}
inword=inline=0;
while((c=fgetc(fp))!=EOF)
{
if(cflg)
ccount++;
if(wflg)
if(c=='\n'||c==' '||c=='\t')
inword=0;
else if(inword==0)
{
wcount++;
inword=1;
}
if(lflg)
if(c=='\n')
inline=0;
else if(inline==0)
{
lcount++;
inline=1;
}
}
fclose(fp); /* 关闭文件 */
}
if(lflg)
printf(" Lines = %d\n",lcount);
if(wflg)
printf(" Words = %d\n",wcount);
if(cflg)
printf(" Characters = %d\n",ccount);
}

28.学生成绩管理程序
代码

/*
学生成绩管理程序
编制一个统计学生考试分数的管理程序。
设学生成绩已以一个学生一个记录的形式存储在文件中,
每位学生记录包含的信息有:姓名,学号和各门功课的成绩。
程序具有以下几项功能:求出各门课程的总分,平均分,按姓名,
按学号寻找其记录并显示,浏览全部学生成绩和按总分由高到低显示学生信息等。
*/

#include <stdio.h>
#define SWN 3 /* 课程数 */
#define NAMELEN 20 /* 姓名最大字符数 */
#define CODELEN 10 /* 学号最大字符数 */
#define FNAMELEN 80 /* 文件名最大字符数 */
#define BUFLEN 80 /* 缓冲区最大字符数 */
/* 课程名称表 */
char schoolwork[SWN][NAMELEN+1] = {"Chinese","Mathematic","English"};
struct record
{
char name[NAMELEN+1]; /* 姓名 */
char code[CODELEN+1]; /* 学号 */
int marks[SWN]; /* 各课程成绩 */
int total; /* 总分 */
}stu;

struct node
{
char name[NAMELEN+1]; /* 姓名 */
char code[CODELEN+1]; /* 学号 */
int marks[SWN]; /* 各课程成绩 */
int total; /* 总分 */
struct node *next; /* 后续表元指针 */
}*head; /* 链表首指针 */

int total[SWN]; /* 各课程总分 */
FILE *stfpt; /* 文件指针 */
char stuf[FNAMELEN]; /* 文件名 */

/* 从指定文件读入一个记录 */
int readrecord(FILE *fpt,struct record *rpt)
{
char buf[BUFLEN];
int i;
if(fscanf(fpt,"%s",buf)!=1)
return 0; /* 文件结束 */
strncpy(rpt->name,buf,NAMELEN);
fscanf(fpt,"%s",buf);
strncpy(rpt->code,buf,CODELEN);
for(i=0;i<SWN;i++)
fscanf(fpt,"%d",&rpt->marks[i]);
for(rpt->total=0,i=0;i<SWN;i++)
rpt->total+=rpt->marks[i];
return 1;
}
/* 对指定文件写入一个记录 */
writerecord(FILE *fpt,struct record *rpt)
{
int i;
fprintf(fpt,"%s\n",rpt->name);
fprintf(fpt,"%s\n",rpt->code);
for(i=0;i<SWN;i++)
fprintf(fpt,"%d\n",rpt->marks[i]);
return ;
}

/* 显示学生记录 */
displaystu(struct record *rpt)
{
int i;
printf("\nName : %s\n",rpt->name);
printf("Code : %s\n",rpt->code);
printf("Marks :\n");
for(i=0;i<SWN;i++)
printf(" %-15s : %4d\n",schoolwork[i],rpt->marks[i]);
printf("Total : %4d\n",rpt->total);
}

/* 计算各单科总分 */
int totalmark(char *fname)
{
FILE *fp;
struct record s;
int count,i;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return 0;
}
for(i=0;i<SWN;i++)
total[i]=0;
count=0;
while(readrecord(fp,&s)!=0)
{
for(i=0;i<SWN;i++)
total[i]+=s.marks[i];
count++;
}
fclose(fp);
return count; /* 返回记录数 */
}

/* 列表显示学生信息 */
void liststu(char *fname)
{
FILE *fp;
struct record s;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return ;
}
while(readrecord(fp,&s)!=0)
{
displaystu(&s);
printf("\n Press ENTER to continue...\n");
while(getchar()!='\n');
}
fclose(fp);
return;
}

/* 构造链表 */
struct node *makelist(char *fname)
{
FILE *fp;
struct record s;
struct node *p,*u,*v,*h;
int i;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return NULL;
}
h=NULL;
p=(struct node *)malloc(sizeof(struct node));
while(readrecord(fp,(struct record *)p)!=0)
{
v=h;
while(v&&p->total<=v->total)
{
u=v;
v=v->next;
}
if(v==h)
h=p;
else
u->next=p;
p->next=v;
p=(struct node *)malloc(sizeof(struct node));
}
free(p);
fclose(fp);
return h;
}

/* 顺序显示链表各表元 */
void displaylist(struct node *h)
{
while(h!=NULL)
{
displaystu((struct record *)h);
printf("\n Press ENTER to continue...\n");
while(getchar()!='\n');
h=h->next;
}
return;
}
/* 按学生姓名查找学生记录 */
int retrievebyn(char *fname, char *key)
{
FILE *fp;
int c;
struct record s;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return 0;
}
c=0;
while(readrecord(fp,&s)!=0)
{
if(strcmp(s.name,key)==0)
{
displaystu(&s);
c++;
}
}
fclose(fp);
if(c==0)
printf("The student %s is not in the file %s.\n",key,fname);
return 1;
}

/* 按学生学号查找学生记录 */
int retrievebyc(char *fname, char *key)
{
FILE *fp;
int c;
struct record s;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return 0;
}
c=0;
while(readrecord(fp,&s)!=0)
{
if(strcmp(s.code,key)==0)
{
displaystu(&s);
c++;
break;
}
}
fclose(fp);
if(c==0)
printf("The student %s is not in the file %s.\n",key,fname);
return 1;
}

void main()
{
int i,j,n;
char c;
char buf[BUFLEN];
FILE *fp;
struct record s;
printf("Please input the students marks record file's name: ");
scanf("%s",stuf);
if((fp=fopen(stuf,"r"))==NULL)
{
printf("The file %s doesn't exit, do you want to creat it? (Y/N) ",stuf);
getchar();
c=getchar();
if(c=='Y'||c=='y')
{
fp=fopen(stuf,"w");
printf("Please input the record number you want to write to the file: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Input the student's name: ");
scanf("%s",&s.name);
printf("Input the student's code: ");
scanf("%s",&s.code);
for(j=0;j<SWN;j++)
{
printf("Input the %s mark: ",schoolwork[j]);
scanf("%d",&s.marks[j]);
}
writerecord(fp,&s);
}
fclose(fp);
}
}
fclose(fp);
getchar();
/*clrscr();*/
puts("Now you can input a command to manage the records.");
puts("m : mean of the marks.");
puts("t : total of the marks.");
puts("n : search record by student's name.");
puts("c : search record by student's code.");
puts("l : list all the records.");
puts("s : sort and list the records by the total.");
puts("q : quit!");
while(1)
{
puts("Please input command:");
scanf(" %c",&c); /* 输入选择命令 */
if(c=='q'||c=='Q')
{
puts("\n Thank you for your using.");
break; /* q,结束程序运行 */
}
switch(c)
{
case 'm': /* 计算平均分 */
case 'M':
if((n=totalmark(stuf))==0)
{
puts("Error!");
break;
}
printf("\n");
for(i=0;i<SWN;i++)
printf("%-15s's average is: %.2f.\n",schoolwork[i],(float)total[i]/n);
break;
case 't': /* 计算总分 */
case 'T':
if((n=totalmark(stuf))==0)
{
puts("Error!");
break;
}
printf("\n");
for(i=0;i<SWN;i++)
printf("%-15s's total mark is: %d.\n",schoolwork[i],total[i]);
break;
case 'n': /* 按学生的姓名寻找记录 */
case 'N':
printf("Please input the student's name you want to search: ");
scanf("%s",buf);
retrievebyn(stuf,buf);
break;
case 'c': /* 按学生的学号寻找记录 */
case 'C':
printf("Please input the student's code you want to search: ");
scanf("%s",buf);
retrievebyc(stuf,buf);
break;
case 'l': /* 列出所有学生记录 */
case 'L':
liststu(stuf);
break;
case 's': /* 按总分从高到低排列显示 */
case 'S':
if((head=makelist(stuf))!=NULL)
displaylist(head);
break;
default: break;
}
}
}