c语言能写出什么样有意思的小程序?

c语言能写出什么样有意思的小程序?,第1张

C语言是一门通用计算机编程语言,应用广泛。

C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。

程序源代码:

main()

{int i,j,kprintf(\n)for(i=1i<5i++)/*以下为三重循环*/ for(j=1j<5j++) 

for (k=1k<5k++),{f (i!=ki!=jj!=k)  /*确保i、j、k三位互不相同*/ printf(%d,%d,%d\n,i,j,k)  }}

题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。

程序源代码:

main()

{

long int i

int bonus1,bonus2,bonus4,bonus6,bonus10,bonus

scanf(%ld,i)

bonus1=100000*0.1bonus2=bonus1+100000*0.75

bonus4=bonus2+200000*0.5

bonus6=bonus4+200000*0.3

bonus10=bonus6+400000*0.15

if(i<=100000)

bonus=i*0.1

else if(i<=200000)

bonus=bonus1+(i-100000)*0.075

else if(i<=400000)

bonus=bonus2+(i-200000)*0.05

else if(i<=600000)

bonus=bonus4+(i-400000)*0.03

else if(i<=1000000)

bonus=bonus6+(i-600000)*0.015

else

bonus=bonus10+(i-1000000)*0.01

printf(bonus=%d,bonus)

}

6.题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 的结果满足如下条件,即是结果。

程序源代码:

#include math.h

main()

{

long int i,x,y,z

for (i=1i<100000i++)

{ x=sqrt(i+100)/*x为加上100后开方后的结果*/

y=sqrt(i+268)/*y为再加上168后开方后的结果*/

if(x*x==i+100y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/

printf(\n%ld\n,i)

}

}

7.题目:输入某年某月某日,判断这一天是这一年的第几天?

程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。

程序源代码:

main()

{

int day,month,year,sum,leap

printf(\nplease input year,month,day\n)

scanf(%d,%d,%d,year,month,day)

switch(month)/*先计算某月以前月份的总天数*/

{

case 1:sum=0break

case 2:sum=31break

case 3:sum=59break

case 4:sum=90break

case 5:sum=120break

case 6:sum=151break

case 7:sum=181break

case 8:sum=212break

case 9:sum=243break

case 10:sum=273break

case 11:sum=304break

case 12:sum=334break

defaultrintf(data error)break

}

sum=sum+day /*再加上某天的天数*/

if(year%400==0||(year%4==0year%100!=0))/*判断是不是闰年*/

leap=1

else

leap=0

if(leap==1month>2)/*如果是闰年且月份大于2,总天数应该加一天*/

sum++

printf(It is the %dth day.,sum)}

8.题目:输入三个整数x,y,z,请把这三个数由小到大输出。

程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。

程序源代码:

main()

{

int x,y,z,t

scanf(%d%d%d,x,y,z)

if (x>y)

/*交换x,y的值*/

if(x>z)

/*交换x,z的值*/

if(y>z)

/*交换z,y的值*/

printf(small to big: %d %d %d\n,x,y,z)

}

9.题目:用*号输出字母C的图案。

程序分析:可先用<|>*<|>号在纸上写出字母C,再分行输出。

程序源代码:

#include stdio.h

main()

{

printf(Hello C-world!\n)

printf( ****\n)

printf( *\n)

printf( * \n)

printf( ****\n)

}

10.题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!

程序分析:字符共有256个。不同字符,图形不一样。

程序源代码:

#include stdio.h

main()

{

char a=176,b=219

printf(%c%c%c%c%c\n,b,a,a,a,b)

printf(%c%c%c%c%c\n,a,b,a,b,a)

printf(%c%c%c%c%c\n,a,a,b,a,a)

printf(%c%c%c%c%c\n,a,b,a,b,a)

printf(%c%c%c%c%c\n,b,a,a,a,b)}

11.题目:输出9*9口诀。

程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

程序源代码:

#include stdio.h

main()

{

int i,j,result

printf(\n)

for (i=1i<10i++)

{ for(j=1j<10j++)

{

result=i*j

printf(%d*%d=%-3d,i,j,result)/*-3d表示左对齐,占3位*/

}

printf(\n)/*每一行后换行*/

}

}

12.题目:要求输出国际象棋棋盘。

程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。

程序源代码:

#include stdio.h

main()

{

int i,j

for(i=0i<8i++)

{

for(j=0j<8j++)

if((i+j)%2==0)

printf(%c%c,219,219)

else

printf( )

printf(\n)

}

}

13.题目:打印楼梯,同时在楼梯上方打印两个笑脸。

程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。

程序源代码:

#include stdio.h

main()

{

int i,j

printf(\n)/*输出两个笑脸*/

for(i=1i<11i++)

{

for(j=1j<=ij++)

printf(%c%c,219,219)

printf(\n)

}

console里显示最多显示300行,多余的就看不到了,不信试一下下面的程序

int main(int argc, char* argv[])

{

int m

for(m=0m<365m++)

{

printf("m=%d\n",m)

}

return 0

}

//户籍管理系统, 应该能满足你的要求。

//多给点财富吧

#include<stdio.h>

#include<stdlib.h>

typedef struct tagHuJiXinXi

{

char shfzhh[64]//身份z号

char xm[16]//姓名

char xb[8]//性别

int nl//年龄

char xl[64]//学历

char zhzh[64]//住址

char dh[32]//电话

}HuJiXinXi,*PtHuJiXinXi

void readfromfile()

void writetofile()

void tuichu()

void add()

void outputone()

void outputall()

void sortbyage()

void myrealloc()

void findbyagerange()

void del()

void alter()

void find()

void showmenu()

void processmenu(int m)

PtHuJiXinXi pt

int count=0,capacity=16

int main()

{

int m

pt=(PtHuJiXinXi)calloc(capacity,sizeof(HuJiXinXi))

readfromfile()

while(1)

{

showmenu()

scanf("%d",&m)

processmenu(m)

}

system("PAUSE")

return EXIT_SUCCESS

}

void processmenu(int m)

{

switch(m)

{

case 0:

tuichu()

break

case 1:

add()

break

case 2:

del()

break

case 3:

alter()

break

case 4:

outputall()

break

case 5:

sortbyage()

break

case 6:

findbyagerange()

break

case 7:

writetofile()

break

case 8:

find()

break

default:

printf("不可识别的命令。\n")

}

}

//实现存储空间的自动扩充

void myrealloc()

{

if(count+1>=capacity)

{

int i

capacity*=2

PtHuJiXinXi temppt=(PtHuJiXinXi)calloc(capacity,sizeof(HuJiXinXi))

for(i=0i<counti++)

{

temppt[i]=pt[i]

}

free(pt)

pt=temppt

}

}

void readfromfile()

{

char f[128]

FILE *inf

HuJiXinXi hjxx

printf("请输入包含户籍信息的文件的文件名,如果还没有文件,请输入omit(文件中每行一条户籍信息,")

printf("格式:身份z号 姓名 性别 年龄 学历 住址 电话)...\n")

gets(f)

if(!strcmp(f,"omit"))

{

return

}

inf=fopen(f,"r")

if(NULL!=inf)

{

do

{

fscanf(inf,"%s %s %s %d %s %s %s",hjxx.shfzhh,hjxx.xm,hjxx.xb,&hjxx.nl,hjxx.xl,hjxx.zhzh,hjxx.dh)

myrealloc()

pt[count++]=hjxx

}while(!feof(inf))

fclose(inf)

printf("信息已成功加载。\n")

}

else

{

printf("文件名无效或文件无数据。\n")

}

}

void writetofile()

{

char f[128]={'\0'}

FILE *outf

int i

printf("请输入保存户籍信息的文件的文件名:\n")

scanf("%s",f)

outf=fopen(f,"w")

if(NULL!=outf)

{

for(i=0i<counti++)

{

fprintf(outf,"%s %s %s %d %s %s %s",pt[i].shfzhh,pt[i].xm,pt[i].xb,pt[i].nl,pt[i].xl,pt[i].zhzh,pt[i].dh)

if(count-1!=i)

{

fprintf(outf,"%s","\n")

}

}

fclose(outf)

printf("文件保存成功。\n")

}

else

{

printf("文件名无效。\n")

}

}

void showmenu()

{

char menu[]="菜单:\n0、退出\n1、添加一条信息\n2、删除一条信息\n3、批量修改\n4、浏览全部信息\n5、按年龄排序 \n6、按年龄区间查询\n7、保存到文件\n8、随意查询\n请选择一个菜单:"

puts(menu)

}

void tuichu()

{

if(NULL==pt)

{

free(pt)

}

exit(0)

}

//判断身份z号是否重复

int isshfzhhchf(char s[64])

{

int i,r=0

for(i=0i<counti++)

{

if(!strcmp(pt[i].shfzhh,s))

{

r=1

break

}

}

return r

}

void add()

{

myrealloc()

printf("添加一条户籍信息。\n")

printf("请输入身份z号 姓名 性别 年龄 学历 住址 电话:\n")

scanf("%s %s %s %d %s %s %s",pt[count].shfzhh,pt[count].xm,pt[count].xb,&pt[count].nl,

pt[count].xl,pt[count].zhzh,pt[count].dh)

if(!isshfzhhchf(pt[count].shfzhh))

{

count++

printf("添加成功。\n")

}

else

{

printf("身份z号重复,添加失败。\n")

}

}

//输出下标为n的一条户籍信息

void outputone(int n)

{

if(n>=0 &&n<count)

{

printf("第%d条户籍信息:\n",n+1)

printf("%s %s %s %d %s %s %s。\n",pt[n].shfzhh,pt[n].xm,pt[n].xb,pt[n].nl,pt[n].xl,pt[n].zhzh,pt[n].dh)

}

else

{

printf("没有第%d条户籍信息存在。\n",n+1)

}

}

void outputall()

{

if(0==count)

{

printf("系统已空。\n")

}

else

{

int i

for(i=0i<counti++)

{

outputone(i)

}

}

}

void sortbyage()

{

int i,j,px

HuJiXinXi hjxx

printf("子菜单:\n1、升序\n2、降序\n请选择:")

scanf("%d",&px)

if(1==px || 2==px)

{

for(i=0i<count-1i++)

{

for(j=0j<count-i-1j++)

{

if(1==px)

{

if(pt[j].nl>pt[j+1].nl)

{

hjxx=pt[j+1]

pt[j+1]=pt[j]

pt[j]=hjxx

}

}

else

{

if(pt[j].nl<pt[j+1].nl)

{

hjxx=pt[j+1]

pt[j+1]=pt[j]

pt[j]=hjxx

}

}

}

}

printf("排序完成。\n")

}

else

{

printf("无法处理的子菜单命令。\n")

}

}

void findbyagerange()

{

int i,min,max,c=0

printf("请输入要查找的户籍信息的最小年龄和最大年龄:")

scanf("%d %d",&min,&max)

printf("查询结果如下:\n")

for(i=0i<counti++)

{

if(pt[i].nl>=min &&pt[i].nl<=max)

{

outputone(i)

printf("符合你的要求。\n")

c++

}

}

if(0==c)

{

printf("没有符合你的要求的户籍信息。\n")

}

}

//删除一条户籍信息

void del()

{

int i,n

HuJiXinXi hjxx

printf("请输入要删除的是第几条户籍信息:")

scanf("%d",&n)

if(n-1>=0 &&n-1<count)

{

hjxx=pt[n-1]

for(i=ni<counti++)

{

pt[i-1]=pt[i]

}

printf("删除成功。\n第%d条户籍信息:\n",n)

printf("%s %s %s %d %s %s %s。",hjxx.shfzhh,hjxx.xm,hjxx.xb,hjxx.nl,hjxx.xl,hjxx.zhzh,hjxx.dh)

printf(",已删除。\n")

count--

}

else

{

printf("删除失败。\n不存在第%d条户籍信息。\n",n)

}

}

//根据hjxx的值修改下标为n的户籍信息

//对于pt[n]的对应字段,如果在hjxx中是用*表示的,则不修改

void change(HuJiXinXi hjxx,int n)

{

//返回非0值,意味着hjxx.shfzhh(身份z号)不等于*,即需要修改pt[n].shfzhh字段,以下都类似

if(strcmp(hjxx.shfzhh,"*"))

{

strcpy(pt[n].shfzhh,hjxx.shfzhh)

}

if(strcmp(hjxx.xm,"*"))

{

strcpy(pt[n].xm,hjxx.xm)

}

if(strcmp(hjxx.xb,"*"))

{

strcpy(pt[n].xb,hjxx.xb)

}

//不等于-1表示需要修改pt[n].nl(年龄)

if(-1!=hjxx.nl)

{

pt[n].nl=hjxx.nl

}

if(strcmp(hjxx.xl,"*"))

{

strcpy(pt[n].xl,hjxx.xl)

}

if(strcmp(hjxx.zhzh,"*"))

{

strcpy(pt[n].zhzh,hjxx.zhzh)

}

if(strcmp(hjxx.dh,"*"))

{

strcpy(pt[n].dh,hjxx.dh)

}

}

//对户籍信息进行批量修改

void alter()

{

int n

HuJiXinXi hjxx

char nl[16]

while(1)

{

printf("请输入要修改第几条户籍信息(-1退出循环):")

scanf("%d",&n)

if(-1==n)

{

break

}

else if(n-1>=0 &&n-1<count)

{

printf("修改...\n")

outputone(n-1)

printf("请输入将此户籍信息修改后的新的姓名 性别 年龄 学历 住址 电话(保持原值的用*代替):\n")

scanf("%s %s %s %s %s %s",hjxx.xm,hjxx.xb,nl,hjxx.xl,hjxx.zhzh,hjxx.dh)

//因为只有nl(年龄)是int型,故对nl作特殊处理,-1表示修改时年龄保持原值不变(不修改)

hjxx.nl=(strcmp(nl,"*") ? atoi(nl) : -1)

strcpy(hjxx.shfzhh,"*")

change(hjxx,n-1)

printf("修改完成。\n")

}

else

{

printf("无法修改,不存在第%d条户籍信息。\n",n)

}

}

}

//用于判断pt[n]是否匹配hjxx的模式

int ismatch(HuJiXinXi hjxx,int n)

{

int r=1

if(strcmp(hjxx.shfzhh,"*") &&strcmp(hjxx.shfzhh,pt[n].shfzhh))

{

r=0

}

if(r &&strcmp(hjxx.xm,"*") &&strcmp(hjxx.xm,pt[n].xm))

{

r=0

}

if(r &&strcmp(hjxx.xb,"*") &&strcmp(hjxx.xb,pt[n].xb))

{

r=0

}

if(r &&-1!=hjxx.nl &&hjxx.nl!=pt[n].nl)

{

r=0

}

if(r &&strcmp(hjxx.xl,"*") &&strcmp(hjxx.xl,pt[n].xl))

{

r=0

}

if(r &&strcmp(hjxx.zhzh,"*") &&strcmp(hjxx.zhzh,pt[n].zhzh))

{

r=0

}

if(r &&strcmp(hjxx.dh,"*") &&strcmp(hjxx.dh,pt[n].dh))

{

r=0

}

return r

}

//按模式查询户籍信息

void find()

{

int i,c=0

char nl[16]

HuJiXinXi hjxx

printf("请输入要查询的户籍信息的身份z号 姓名 性别 年龄 学历 住址 电话(只需提供关键信息以用于查询,不提供的信息请用*代替):\n")

scanf("%s %s %s %s %s %s %s",hjxx.shfzhh,hjxx.xm,hjxx.xb,nl,hjxx.xl,hjxx.zhzh,hjxx.dh)

//因为只有nl(年龄)是int型,故对nl作特殊处理,-1表示查询时不需比较年龄

hjxx.nl=(strcmp(nl,"*") ? atoi(nl) : -1)

for(i=0i<counti++)

{

if(ismatch(hjxx,i))

{

printf("找到第%d条满足你的模式要求的户籍信息如下:\n",c+1)

printf("%s %s %s %d %s %s %s。\n",pt[i].shfzhh,pt[i].xm,pt[i].xb,pt[i].nl,pt[i].xl,pt[i].zhzh,pt[i].dh)

c++

}

}

if(!c)

{

printf("系统中没有满足你的模式要求的户籍信息。\n")

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12058007.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存