Chinaunix首页 | 论坛 | 博客
  • 博客访问: 111527
  • 博文数量: 106
  • 博客积分: 2025
  • 博客等级: 大尉
  • 技术积分: 1165
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-06 12:51
文章分类

全部博文(106)

文章存档

2012年(106)

我的朋友

分类: C/C++

2012-05-07 17:38:41

分支语句

编写程序,输入上网的时间计算上网费用,计算的方法如下:

25元 <10小时

费用 = 每小时2.5元 10~50小时

每小时2元 ≥50小时

同时,为了鼓励多上网,每月收费最多不超过130元。

# include

# include

void main( )

{

int c;

float t,m;

cout<<"请输入上网总时间:";

cin>>t;

if (t>=65)

m=130;

else

c=t/10;

switch (c)

{

case 0: m=25;break;

case 1:

case 2:

case 3:

case 4: m=t*2.5;break;

case 5:

case 6: m=t*2;break;

}

cout<<"上网费用:"<

}

循环语句

练习1.有一条长阶梯,若每步跨2阶,则最后剩1阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶,则最后剩5阶。只有每步跨7阶,最后才正好一阶不剩。编写程序,求解这条阶梯共有多少阶。

运行结果示例:

#include

void main( )

{

int i;

for (i=3;;i++)

if(i%2==1&&i%3==2&&i%5==4&&i%6==5&&i%7==0) break;

cout<<"The ladder has:"<

}

一维数组

练习4.已有一个排好序的数组(共10个数,从键盘读入),再输入一个数,要求按次序规律将它插入到数组中并输出结果。

运行结果示例:

#include

void main( )

{

int x,i,j,a[11];

cout<<"输入数组10个元素的值:"<

for (i=0;i<10;i++) cin>>a[i];

cout<<"输入要插入数据的值:";

cin>>x;

i=0;

while (i<10 && x>a[i]) i++; for (i=0;i<10 && x>a[i];i++) ;

for (j=9;j>=i;j--) a[j+1]=a[j];

a[i]=x;

cout<<"结果:"<

for (i=0;i<11;i++)cout<

cout<

}

字符数组

练习3.判断输入的字符串是否为回文。

运行结果示例:

#include

#include

#include

void main( )

{

char s[80];

int len,i,t=1;

printf("输入字符串:");

gets(s);

len=strlen(s);

for (i=0;i

{

if (s[i]!=s[len-i-1])

{

t=0;

break;

}

}

if (t)

cout<

else

cout<

}

二维数组

练习4.编程输入N个(例如5个)考生的学号及其成绩,输出平均分和最高分的情况。

要求:此题使用二维数组

运行结果示例:

#include

#define N 5

void main( )

{

int a[N][2],i,j,imax=0;

float sum;

cout<<"输入学生考号和成绩:"<

cin>>a[0][0]>>a[0][1];

sum=a[0][1];

for(i=1;i

for(j=0;j<2;j++)

{

cin>>a[i][j];

if(j==0) continue;

sum+=a[i][1];

if(a[imax][1]

}

cout<

cout<<"最高分考生学号和成绩:";

for(i=0;i

if(a[i][1]==a[imax][1])

cout<

}

函数调用

练习4.编写一个程序,其中包含一个子函数,功能为取出数x从右边起的第m位数字,如digit(1234,3)=2,digit(1234,6)=0。

子函数要求:

形式为:int digit(int n,int k);

运行结果示例:

#include

#include

int digit(intn,int k)

{

int i;

n=abs(n);

for (i=1;i

return n%10;

}

void main()

{

int x,m;

printf(“输入x和m值:”);

scanf(“%d %d”,&x,&m);

printf(“digit(%d,%d)=%d”, x,m,digit(x,m));

}

递归算法

练习2.用递归方法解决猴子吃桃子的问题(P129习题6.10)。

运行结果:1534

#include"iostream.h"

int tz(int x)

{

if (x==10)

return 1;

else

return ((tz(x+1)+1)*2);

}

void main()

{

cout<<"原数量:"<

}

字符串操作

练习4.编写一个程序,其中包含一个子函数,功能为在字符串中查找某个字符首次出现的位置,若字符串中没有该字符,则给出0。

子函数要求:

形式为:int at(char s[ ],charc);

运行结果示例:

#include

#include

#include

void main( )

{

int at(char s[],char c);

char s[80],c;

printf("输入字符串:");

gets(s);

printf("输入查询字符:");

c=getchar();

cout<<"返回值:"<

}

int at(chars[],char c)

{

int i;

for (i=0;i

if (s[i]==c) break;

if (i==strlen(s))

return 0;

else

return i+1;

}

练习1.编写一个程序,其中包含一个子函数,功能为将读入的密码(字符串)按指定规律翻译回原文后输出。

l 子函数要求:

形式为:void decrypt (charstr[]);

l 解码规律如下:

字母:变成其后的第3个,且循环转换(例:a→d、W→Z、y→b);

其它:保持不变。

运行结果示例:

#include

#include

void main()

{

void decrypt(char str[]);

char str[80];

printf("原文: ");

gets(str);

decrypt(str);

printf("译文:%s\n",str);

}

voiddecrypt(char str[])

{

int i;

for (i=0;str[i]!='\0';i++)

if (isalpha(str[i]))

if(str[i]>='A'&&str[i]<='W'||str[i]>='a'&&str[i]<='w')

str[i]=str[i]+3;

else

str[i]=str[i]-23;

}

指针操作

练习3.用指针变量的处理方法编写一个子函数,功能为把读入的数组(10个数据)中的所有奇数放在另一个数组中,并输出新数组的内容。

子函数要求:

实参为指针变量;形参为指针变量,且形式为:int select(int *p, int*q);

其中:指针p用来接收原数组(的地址),指针q用来接收新数组(的地址);函数返回新数组元素的个数。

提示:两个数组全部在主函数中定义。

运行结果示例:

#include

intselect(int *p, int *q)

{

int i,j=0;

for (i=0;i<10;i++,p++)

if (*p%2!=0)

{ *q++=*p;j++; }

return j;

}

void main( )

{

int a[10],b[10],i,j;

int *x=a,*y=b;

cout<<"输入10个数组元素:\n";

for (i=0;i<10;i++) cin>>*(x+i);

j=select(x,y);

cout<<"挑选后的新数组元素:"<

for (i=0;i

cout<

}

练习3.编写一个程序,其中包含一个子函数,功能为统计一个字符串在另一个字符串中出现的次数。要求:

l 子函数形式为:int strat(char *a,char*sub);

运行结果示例:

#include

#include

#include

intstrat(char *a,char *sub)

{

int x,y,i=0,k,t=0;

x=strlen(a);

y=strlen(sub);

for(i=0;i<=x-y;i++)

{

if (sub[0]==a[i])

{

k=1;

while(k

if (k==y) t++;

}

}

return t;

}

void main( )

{

char a[80],sub[80];

printf("输入字符串1:");

gets(a);

printf("输入字符串2:");

gets(sub);

cout<<"n="<

}

结构体数组

练习2.编写一个程序,功能如下:

⑴ 输入若干人员的姓名及电话号码(8位),以字符“#”结束输入;

⑵ 当输入姓名时,能查找出该人的电话号码(如果没有此人,则显示未找到该记录)。

运行结果示例:

#include"iostream.h"

#include"string.h"

void main()

{

struct

{

char name[20];

char tel[9];

}s[50];

int i=0,j=0;

char ns[20];

cout<<"输入姓名及电话号码(以 # 结束):\n";

cin>>ns;

while (strcmp(ns,"#")!=0)

{

strcpy(s[i].name,ns);

cin>>s[i].tel;

i++;

cin>>ns;

}

cout<<"输入要查找电话人的姓名:";

cin>>ns;

while(strcmp(s[j].name,ns)!=0&&j

if (j

cout<<"电话号码:"<

else

cout<<"未找到该记录。"<

}

链表操作

练习2.编写一个程序,功能为输入10个整数,将它们存储在一个动态链表中。再读入一个数n,将链表从第n个结点开始重组(即以第n个结点作为头结点,而将前n-1个结点平移至链表的末尾),并输出重组后的链表结果。要求:程序包含3个子函数,各函数要求如下:

l 子函数1:功能为创建包括10个结点的链表并读入数据;

形式为:struct LNode *creat(void);

l 子函数2:功能为平移(重组)链表;

形式为:struct LNode *move(struct LNode *head,int n);

其中:函数返回值为调整后的新“头指针”的地址;

l 子函数3:功能为输出链表中的所有结点;

形式为:void print(struct LNode *head);

运行结果示例:

#include"iostream.h"

#include"stdlib.h"

#define NULL0

#define LENsizeof(struct LNode)

typedefstruct LNode

{

int x;

struct LNode *next;

}Link;

Link*creat(void)

{

Link *head=NULL,*p1,*p2;

int i;

cout<<"输入10个整数:";

for(i=0;i<10;i++)

{

p2=(Link *)malloc(LEN);

cin>>p2->x;

if(i==0)

head=p2;

else

p1->next=p2;

p1=p2;

}

p1->next=NULL;

return head;

}

Link*move(Link *head,int n)

{

Link *p1=head,*head1=head;

int i;

if(n>1)

{

for(i=1;inext;

head1=p1->next;

p1->next=NULL;

p1=head1;

while(p1->next!=NULL)p1=p1->next;

p1->next=head;

}

return head1;

}

voidprint(Link *head)

{

Link *p;

p=head;

if(p==NULL) cout<<"It's a emptylink-list."<

else cout<<"输出链表结果:"<

while(p!=NULL)

{

cout<x<<" ";

p=p->next;

}

cout<

}

void main()

{

Link *head;

int n;

head=creat();

cout<<"输入n值(1-10):";

cin>>n;

head=move(head,n);

print(head);

}

文件操作

练习2.编写一个程序,功能为从键盘读入一组数值(10个整数),将其中的奇数和偶数分别在磁盘文件“odd.c”和“even.c”中存放(以二进制方式)并输出。

要求:使用fread和fwrite函数。

运行结果示例:

#include"stdlib.h"

#include"iostream.h"

#include"stdio.h"

void main()

{

int x,i,odd=0,even=0;

FILE *fp1,*fp2;

if((fp1=fopen("odd.c","wb+"))==NULL)

{

printf("Cannot openfile.");

exit(0);

}

if((fp2=fopen("even.c","wb+"))==NULL)

{

printf("Cannot openfile.");

exit(0);

}

printf("输入数据内容: \n");

for(i=0;i<10;i++)

{

cin>>x;

if(x%2==1)

{

fwrite(&x,sizeof(int),1,fp1);

odd++;

}

else

{

fwrite(&x,sizeof(int),1,fp2);

even++;

}

}

rewind(fp1);

printf("\n输出奇数:");

for(i=0;i

{

fread(&x,sizeof(int),1,fp1);

printf(" %d",x);

}

rewind(fp2);

printf("\n输出偶数:");

for(i=0;i

{

fread(&x,sizeof(int),1,fp2);

printf(" %d",x);

}

printf("\n");

fclose(fp1);

fclose(fp2);

}


1、现有21根火柴,两人轮流取,每人每次可取走1- 4根,不可多取,也不能不取,谁取最后一根火柴则谁输。请编写一个程序进行人机对弈,要求人先取,计算机后取;计算机一方为“常胜将军”。要求程序运行效果如下图。

#include

void main()

{

inta=21,i;

printf("Gamebegin:\n");

while(a>0)

{

do{

printf("Howmany stick do you wish to take(1~%d)?",a>4?4:a);

scanf("%d",&i);

}while(i>4||i<1||i>a);/*接收正在确的输入*/

if(a-i>0)printf(" %d stick left in the pile.\n",a-i);

if((a-i)<=0)

{

printf("You have taken the last stick.\n");

printf("* * * You lose! \nGame Over.\n"); /*输出取胜标记*/

break;

}

else

printf("Compute take %d stick.\n",5-i); /*输出计算机取的子数*/

a-=5;

printf("%d stick left in the pile.\n",a);

}

}

2、编程完成商人过河游戏:有三个商人带着三个随从和货物过河,船每次最多只能载两个人,由他们自己划行,并且如何乘船渡河的大权由商人掌握。要求保证在过河期间的任一岸上商人的人数要大于或等于随从的人数,否则随从会杀死商人抢走货物。设计一个符合上述要求的商人过河的游戏。要求程序运行效果如下图。

有制约关系物品过河问题

有一人要将自己的兔子、蔬菜和狐狸等三件物品运过河。但过河所用的船每次只能装其中的两件,而这三件物品之间又存在一定的制约关系:兔子不能单独和狐狸以及不能和蔬菜在一起,因为狐狸要吃兔子,兔子也能吃蔬菜。

逻辑关系可以把蔬菜和狐狸抽象成“真” 也就是1把兔子抽象成“假” 也就是0船和岸就是求他们 与的关系 如果兔子单独存在 就 让船或岸+1变成真判断每次 船和岸是否出现 0出现0就跳转到结束 没出现就继续

规律与原则:

掌握常用算法,如排序、递归、穷举法、回溯法等

掌握常用趣味题,如八皇后、马踏棋盘、最佳路径、报数游戏、背包问题等

阅读(773) | 评论(0) | 转发(0) |
0

上一篇:查找2

下一篇:Java重点编程题

给主人留下些什么吧!~~