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)
}
用c++实现的"贪吃蛇"游戏源码// greedsnake.cpp
#include <bios.h>
#include <conio.h>
#include <dos.h>
#include <graphics.h>
#include <stdlib.h>
#include <time.h>
#include "conf.h"
typedef struct node
{
int x,y
struct node *next
}Node
typedef struct
{
Node *head,*tail
int length
}Snake
typedef struct
{
int left,top,right,bottom
}Frame
typedef enum //四个方向
{
up,down,left,right
}Direction
typedef enum
{
false,true
}bool//*/
void InitGraphMode()//初始化图形驱动
void CloseGraphMode()
void Foot(int,int)
void Head(int,int)
void CreateFrame()//完成整个游戏框架的绘制
void CreateSnake()//创建一条两个节点的蛇,蛇的每一节是队列中的一个节点
bool PlayGame()//游戏的主体函数,
int Hit(int,int) //判断是否越界,或者撞到自身,两个参数分别是新的头接点的x,y坐标
bool GameOver()//绘制游戏结束时d出的对话框
void Enqueue(Node)//入队函数
Node Dequeue()//出队函数
void ClearKeyBuf()//清除键盘缓冲,此函数可以消除不停的按无效键的影响
Snake snake
Frame frame
void main()
{
InitGraphMode()
do
{
CreateFrame()
}while(PlayGame())
CloseGraphMode()
}
void InitGraphMode()
{
int gdriver=DETECT,gmode
initgraph(&gdriver,&gmode,"../bgi/")
cleardevice()
}
void CloseGraphMode()
{
cleardevice()
closegraph()
}
void CreateFrame()
{
setbkcolor(CYAN)
//下面的四行代码用于计算主框架的左上角和右下角的坐标
frame.left=(getmaxx()+1-BlockWidth*RowOfFrame)/2
frame.top=(getmaxy()+1-BlockHeight*ColumnOfFrame)/2
frame.right=frame.left+BlockWidth*RowOfFrame
frame.bottom=frame.top+BlockHeight*ColumnOfFrame
Head(frame.left+100,frame.top-20)
setfillstyle(SOLID_FILL,LIGHTGRAY)
bar(frame.left,frame.top,frame.right,frame.bottom)
setlinestyle(SOLID_LINE,1,1)
setcolor(DARKGRAY)
line(frame.left,frame.top,frame.right,frame.top)
line(frame.left,frame.top,frame.left,frame.bottom)
setlinestyle(SOLID_LINE,1,1)
setcolor(WHITE)
line(frame.left,frame.bottom,frame.right,frame.bottom)
line(frame.right,frame.top,frame.right,frame.bottom)
setlinestyle(DOTTED_LINE,1,1)
setcolor(BLUE)
for(int row=1row<RowOfFramerow++)
line(frame.left+row*BlockWidth,frame.top,frame.left+row*BlockWidth,frame.bottom)
for(int column=1column<ColumnOfFramecolumn++)
line(frame.left,frame.top+column*BlockHeight,frame.right,frame.top+column*BlockHeight)
Foot(frame.left,frame.bottom+20)
}
void CreateSnake()
{
Node *node1=new Node
Node *node2=new Node
node1->x=frame.left+BlockWidth
node1->y=frame.top
node1->next=NULL
snake.tail=node1
node2->x=frame.left
node2->y=frame.top
node2->next=snake.tail
snake.head=node2
snake.length=2
setfillstyle(SOLID_FILL,BLUE)
bar(snake.head->x+1,snake.head->y+1,snake.head->x+BlockWidth-1,snake.head->y+BlockHeight-1)
bar(snake.tail->x+1,snake.tail->y+1,snake.tail->x+BlockWidth-1,snake.tail->y+BlockHeight-1)
}
bool PlayGame()
{
int speed=300,key
Direction CurrentDirection=right
Node randomNode
Node newNode,outNode
bool neednode=true
bool overlap=false
int randx,randy
CreateSnake()
while(true)
{
if(neednode==true)
{
randomize()
do
{
randx=frame.left+rand()%RowOfFrame*BlockWidth
randy=frame.top+rand()%ColumnOfFrame*BlockHeight
for(Node *p=snake.headp!=NULLp=p->next)//hit itself
if(randx==p->x&&randy==p->y)
{overlap=truebreak}
}
while(overlap==true)
randomNode.x=randx
randomNode.y=randy
randomNode.next=NULL
setfillstyle(SOLID_FILL,RED)
bar(randomNode.x+1,randomNode.y+1,randomNode.x+BlockWidth-1,randomNode.y+BlockHeight-1)
neednode=false
}
if((key=bioskey(1))!=0)
{
switch(key)
{
case ESC: return false
case UP:
if(CurrentDirection!=down)
CurrentDirection=up
ClearKeyBuf()
break
case DOWN:
if(CurrentDirection!=up)
CurrentDirection=down
ClearKeyBuf()
break
case LEFT:
if(CurrentDirection!=right)
CurrentDirection=left
ClearKeyBuf()
break
case RIGHT:
if(CurrentDirection!=left)
CurrentDirection=right
ClearKeyBuf()
break
case PAGEUP:speed=speed-100
if(speed<100)
speed=100
ClearKeyBuf()
break
case PAGEDOWN:speed=speed+100
if(speed>500)
speed=500
ClearKeyBuf()
break
default :break
}
}
int headx=snake.tail->x
int heady=snake.tail->y
switch(CurrentDirection)
{
case up: heady-=BlockHeightbreak
case down: heady+=BlockHeightbreak
case left: headx-=BlockWidthbreak
case right: headx+=BlockWidthbreak
}
if(Hit(headx,heady)) //whether the snake hit the wall or itself
return GameOver()
else
{ //eat
if(headx==randomNode.x&&heady==randomNode.y)
{
Enqueue(randomNode)
setfillstyle(SOLID_FILL,BLUE)
bar(randomNode.x+1,randomNode.y+1,randomNode.x-1+BlockWidth,randomNode.y-1+BlockHeight)
neednode=true
}
else //no eat
{
newNode.x=headx
newNode.y=heady
newNode.next=NULL
Enqueue(newNode)
outNode=Dequeue()
setfillstyle(SOLID_FILL,LIGHTGRAY)
bar(outNode.x+1,outNode.y+1,outNode.x+BlockWidth-1,outNode.y+BlockHeight-1)
setfillstyle(SOLID_FILL,BLUE)
bar(newNode.x+1,newNode.y+1,newNode.x-1+BlockWidth,newNode.y-1+BlockHeight)
}
}
delay(speed)
}
}
void ClearKeyBuf()
{
do
bioskey(0)
while(bioskey(1))
}
void Foot(int x,int y)
{
setcolor(BLUE)
outtextxy(x,y,"writer:[T]RealXL E-MAIL:realgeneral@hotmail.com")
}
void Head(int x,int y)
{
setcolor(RED)
outtextxy(x,y,"GREEDY SNAKE")
}
void Enqueue(Node inNode)
{
Node *p=new Node
p->x=inNode.x
p->y=inNode.y
p->next=inNode.next
snake.tail->next=p
snake.tail=p
snake.length++
}
Node Dequeue()
{
Node *p=snake.head
Node outNode=*p
snake.head=p->next
snake.length--
delete p
return outNode
}
int Hit(int x,int y)
{
if(x<frame.left||x>=frame.right||y<frame.top||y>=frame.bottom)//hit the wall
return 1
Node *p=snake.head->next
for(int i=snake.length-1i>3i--,p=p->next)//hit itself
if(x==p->x&&y==p->y)
return 1
return 0
}
bool GameOver()
{
int x=getmaxx()/2-50
int y=getmaxy()/2-20
setfillstyle(SOLID_FILL,DARKGRAY)
bar(x+3,y+3,x+103,y+43)
setfillstyle(SOLID_FILL,MAGENTA)
bar(x,y,x+100,y+40)
setlinestyle(0,3,1)
setcolor(RED)
rectangle(x,y,x+100,y+40)
outtextxy(x+20,y+10,"GAGE OVER!")
char c
while(true) //按q或Q表示退出程序,按r或R表示重新开始游戏
{
c=getch()
if(c=='q'||c=='Q')
return false
else if(c=='r'||c=='R')
return true
}
}
C++五子棋源程序:
#include
#include
#include
#define backcolor CYAN
#define defaultcolor BLACK
#define linecolor MAGENTA
#define player1_color RED
#define player2_color WHITE
#define error_color RED
#define winner_color RED
const int left=40
const int top=390
const int d=30
const int line_num=9
const int turn=0
const int r=d/3
const int j=10
int x,y,k=1,step=(line_num+1)*(line_num+1)
union REGS regs1,regs2
class player1
class player2
class qipan{
public:
qipan()
~qipan(){}
void init_qipan()
friend void fall(player1 &num1,player2 &num2,qipan &num)
friend void input(player1 &num1,player2 &num2,qipan &num)
private:
int point[line_num+1][line_num+1]
}
class player1{
public:
player1()
~player1(){}
friend void fall(player1 &num1,player2 &num2,qipan &num)
friend void input(player1 &num1,player2 &num2)
friend int judge_winner(player1 &num1,player2 &num2)
private:
int point1[line_num+1][line_num+1]
}
class player2{
public:
player2()
~player2(){}
friend void fall(player1 &num1,player2 &num2,qipan &num)
friend void input(player1 &num1,player2 &num2,qipan &num)
friend int judge_winner(player1 &num1,player2 &num2)
private:
int point2[line_num+1][line_num+1]
}
void input(player1 &num1,player2 &num2)
void fall(player1 &num1,player2 &num2,qipan &num)
int judge_winner(qipan &num,player1 &num1,player2 &num2)
void inputerror()
void display_winner(int)
void main()
{
int driver=DETECT,mode
initgraph(&driver,&mode,"e:\tc30\bgi")
qipan num
player1 num1
player2 num2
while(step--)
{
input(num1,num2,num)
fall(num1,num2,num)
if(judge_winner(num1,num2))
{
display_winner(k)
}
}
// getchar()
}
qipan::qipan(void)
{ int j,i
char ch[2]="0"
setbkcolor(backcolor)
setcolor(linecolor)
for(i=0i<=line_numi++)
{
line(left,top-i*d,left+line_num*d,top-i*d)
}
for(i=0i<=line_numi++)
{
line(left+i*d,top,left+i*d,top-line_num*d)
}
for(i=0i<=line_numi++)
{ if(*ch=='9'+1) *ch='a'
settextstyle(DEFAULT_FONT,HORIZ_DIR,1)
outtextxy(left+i*d-2,top+r+3,ch)
(*ch)=(*ch)+1
}
*ch='0'
for(i=0i<=line_numi++)
{if(*ch=='9'+1) *ch='a'
settextstyle(DEFAULT_FONT,HORIZ_DIR,1)
outtextxy(left-r-10,top-d*i-3,ch)
(*ch)=(*ch)+1
}
setcolor(defaultcolor)
for(i=0i<=line_numi++)
{
for(j=0j<=line_numj++)
point[i][j]=0
}
}
void fall(player1 &num1,player2 &num2,qipan &num)
{
int flag=k%2
if(flag)
{ setcolor(player2_color)
num2.point2[x][y]=1
num.point[x][y]=2
circle(left+d*x,top-d*y,r)
setfillstyle(1,player2_color)
floodfill(left+d*x,top-d*y,player2_color)
}
else
{ num1.point1[x][y]=1
num.point[x][y]=1
setcolor(player1_color)
circle(left+d*x,top-d*y,r)
setfillstyle(1,player1_color)
floodfill(left+d*x,top-d*y,player1_color)
}
setcolor(defaultcolor)
}
void input(player1 &num1,player2 &num2,qipan &num)
{ char xx,yy
k++
while(1)
{
regs1.h.ah=0
xx=int86(22,®s1,®s1)-'0'
if(xx==('q'-'0')||xx==('Q'-'0'))
{ step=0
return
}
regs1.h.ah=0
yy=int86(22,®s1,®s1)-'0'
if(yy==('q'-'0')||yy==('Q'-'0'))
{
step=0
return
}
if(xx<0||xx>line_num)
{ inputerror()
continue
}
if(yy<0||yy>line_num)
{inputerror()
continue
}
if(num.point[xx][yy]==0)
{
break
}
else
{
inputerror()
continue
}
}
x=(int)xx
y=(int)yy
setcolor(backcolor)
settextstyle(DEFAULT_FONT,HORIZ_DIR,1)
outtextxy(left+d*line_num/3,top+d*2,"Input error")
setcolor(defaultcolor)
}
player1::player1()
{
int i,j
for(i=0i<=line_numi++)
{
for(j=0j<=line_numj++)
point1[i][j]=0
}
}
player2::player2()
{ int i,j
for(i=0i<=line_numi++)
{
for(j=0j<=line_numj++)
point2[i][j]=0
}
}
void inputerror(void)
{ setcolor(error_color)
settextstyle(DEFAULT_FONT,HORIZ_DIR,1)
outtextxy(left+d*line_num/3,top+d*2,"Input error")
setcolor(defaultcolor)
}
int judge_winner(player1 &num1,player2 &num2)
{
int count=0,m=0,n=0,a=0,b=0,xx0,yy0
int flag=k%2
xx0=xyy0=y
if(!flag)
{ //left <------->right
while(xx0>=1&&m<4) {xx0--m++}
while(n<9&&xx0<=line_num)
{
if(num1.point1[xx0][y]==1)
{
count++
if(count==5) return 1
}
else
{
count=0
}
n++
xx0++
}
//up <------>down
count=0xx0=xm=0n=0
while(yy0>=1&&m<4){yy0--m++}
while(n<9&&yy0<=line_num)
{
if(num1.point1[x][yy0]==1)
{
count++
if(count==5)
return 1
}
else
{
count=0
}
n++
yy0++
}
//left up ----- right down
xx0=x
yy0=y
m=0
n=0
count=0
while(xx0>=1&&m<4){ xx0--a++m++} m=0
while(yy0<=line_num&&m<4){ yy0++b++m++}
if(a<=b)
{
xx0=x-ayy0=y+a
}
else
{
xx0=x-byy0=y+b
}
while(xx0<=line_num&&yy0>=0&&n<9)
{
if(num1.point1[xx0][yy0]==1)
{
count++
if(count==5)
return 1
}
else
{
count=0
}
xx0++
yy0--
n++
}
//right up <----->left down
count=0
a=0
b=0
n=0
m=0
xx0=x
yy0=y
while(xx0while(yy0if(a<=b)
{
xx0=x+a
yy0=y+a
}
else
{
xx0=x+b
yy0=y+b
}
while(xx0>=0&&yy0>=0&&n<9)
{
if(num1.point1[xx0][yy0]==1)
{
count++
if(count==5)
return 1
}
else
count=0
xx0--
yy0--
n++
}
//no winer
return 0
}
else
{
//left <------->right
while(xx0>=1&&m<4) {xx0--m++}
while(n<9&&xx0<=line_num)
{
if(num1.point1[xx0][y]==1)
{
count++
if(count==5) return 1
}
else
{
count=0
}
n++
xx0++
}
//up <------>down
count=0xx0=xm=0n=0
while(yy0>=1&&m<4){yy0--m++}
while(n<9&&yy0<=line_num)
{
if(num2.point2[x][yy0]==1)
{
count++
if(count==5)
return 1
}
else
{
count=0
}
n++
yy0++
}
//left up ----- right down
xx0=x
yy0=y
m=0
n=0
count=0
while(xx0>=1&&m<4){ xx0--a++m++} m=0
while(yy0<=line_num&&m<4){ yy0++b++m++}
if(a<=b)
{
xx0=x-ayy0=y+a
}
else
{
xx0=x-byy0=y+b
}
while(xx0<=line_num&&yy0>=0&&n<9)
{
if(num2.point2[xx0][yy0]==1)
{
count++
if(count==5)
return 1
}
else
{
count=0
}
xx0++
yy0--
n++
}
//right up <----->left down
count=0
a=0
b=0
n=0
m=0
xx0=x
yy0=y
while(xx0while(yy0if(a<=b)
{
xx0=x+a
yy0=y+a
}
else
{
xx0=x+b
yy0=y+b
}
while(xx0>=0&&yy0>=0&&n<9)
{
if(num2.point2[xx0][yy0]==1)
{
count++
if(count==5)
return 1
}
else
count=0
xx0--
yy0--
n++
}
//no winer
return 0
}
}
void display_winner(int k)
{
int flag=k%2
if(!flag)
{ setcolor(winner_color)
settextstyle(DEFAULT_FONT,HORIZ_DIR,2)
outtextxy(left+d*2,top+40,"Red is winner")
setcolor(defaultcolor)
step=0
getchar()
}
else
{ setcolor(winner_color)
settextstyle(DEFAULT_FONT,HORIZ_DIR,2)
outtextxy(left+2*d,top+40,"White is winner")
setcolor(defaultcolor)
step=0
}
}
a 是格式化字符串, 替换后程序实际打印为:printf( "main() {char*a=%c%s%cprintf(a,34,a,34)}", 34, "main() {char*a=%c%s%cprintf(a,34,a,34)}", 34 )
34的ASCII是双引号,最后打印为
main() {char*a="main() {char*a=%c%s%cprintf(a,34,a,34)}",34)}
理解上应该不是很困难,不过看上去比较复杂而已
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)