C语言100题进阶(11~20)
11.13个人围成一圈,从第一个人开始顺序报数,1,2,3。凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。要求用循环链表处理。 不会 12.拆分实数的整数与小数部分:要求自定义一个函数void splitfloat(float x, int *intpart, float *fracpart),其中x是被拆分的实数,intpart和fracpart分别是将实数x拆分出来的整数部分与小数部分。编写主函数,并在其中调用函数splitfloat()。
#include<stdio.h>
void splitfloat(float x, int *intpart, float *fracpart)
{
*intpart=x/1;
*fracpart=x-*intpart;
}
main()
{
float x,xiao;
float *fracpart=&xiao;
int zheng;
int *intpart=&zheng;
scanf("%f",&x);
splitfloat(x,intpart,fracpart);
printf("%d,%f",*intpart,*fracpart);
}
13.动态内存分配的方法实现冒泡排序
#include<stdio.h>
#include<stdlib.h>
main()
{
int n,i,j,temp;
int *a;
scanf("%d",&n);
a=(int *)malloc(n*sizeof(int));
if(a==NULL)
printf("kong");
for(i=0;i<n;i++)
scanf("%d",a+i);
for(i=0;i<n-1;i++)
for(j=0;j<=i;j++)
{
if(*(a+j)>*(a+j+1))
{
temp=*(a+j);
*(a+j)=*(a+j+1);
*(a+j+1)=temp;
}
}
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
}
14.编写一个函数New,对n个字符开设连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。New(n)表示分配n个字节的内存空间。 不会
15.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃年一半,又多吃一个。以后每天早上都吃了前一天剩下的一半多一个。 到第10天早上想再吃时,见只剩下一个桃子。求第一天一共摘了多少个桃子
#include<stdio.h>
int num()
{
int all=1,day;
for(day=1;day<11;day++)
{
all=(all*2)+1;
}
printf("%d",all);
}
main()
{
num();
}
16.输入一个任意长(>2)的字符串和一个长度为2 的字符串,用函数编程统计长度为2的字符串在任意长字符串中出现的次数。
#include<stdio.h>
main()
{
int i,j=0;
char str[100],stri[2];
gets(str);
gets(stri);
for(i=0;i<100;i++)
if(str[i]==stri[0]&&str[i+1]==stri[1])
j++;
printf("%d",j);
}
17.建立简单的静态链表。
#include <stdio.h>
#define NULL0
struct student
{long num; float score; struct student *next;};
void main( )
{struct student a,b,c,*head,*p;
a.num=99101;a.score=89.5; b.num=99102;b.score=90;
c.num=99103;c.score=85;head=&a;a.next=&b;b.next=&c;
c.next=NULL; p=head;
do
{
printf("%ld %5.1f\n",p->num,p->score);
p=p->next;
}while(p!=NULL);
}
18.编写递归函数: n+1 m=0 akm= akm(m-1,1) m≠0,n=0 akm(m-1,akm(m,n-1)) m≠0,n≠0 说明:m和n从键盘任意输入,输入数据时,先输入的是m的值,后输入的是n的值
#include<stdio.h>
akm(int m,int n)
{
if(m==0)
n+=1;
else if(m!=0&&n==0)
akm(m-1,1);
else if(m!=0&&n!=0)
akm(m-1,akm(m,n-1));
}
main()
{
int n,m;
scanf("%d%d",&m,&n);
akm(m,n);
}
19.通过键盘输入下面表格中学生的信息,编程计算并输出4门课程平均成绩最高的学生记录。其中,m表示男,f表示女。
#include<stdio.h>
struct student
{
int num;
char name[20];
char sex;
int age[3];
int ach[4];
}stu[4];
main()
{
int i,j,big_name;
char big=0.0,a=0.0;
for(i=0;i<4;i++)
{
printf("the:%d\t",i+1);
scanf("%d %s %c %d",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].age[0]);
scanf("%d %d %d %d",&stu[i].age[1],&stu[i].age[2],&stu[i].ach[0],&stu[i].ach[1]);
scanf("%d %d",&stu[i].ach[2],&stu[i].ach[3]);}
for(i=0;i<4;i++)
{
printf("%d\t%s\t%c\t%d\t",stu[i].num,stu[i].name,stu[i].sex,stu[i].age[0]);
printf("%d\t%d\t%d\t%d\t",stu[i].age[1],stu[i].age[2],stu[i].ach[0],stu[i].ach[1]);
printf("%d\t%d\n",stu[i].ach[2],stu[i].ach[3]);}
for(i=0;i<4;i++)
{
a=stu[i].ach[1]+stu[i].ach[2]+stu[i].ach[3];
a=a/5;
if(a>big)
big=a,big_name=i;
}
i=big_name;
printf("\n\nthe best:\n");
printf("%d\t%s\t%c\t%d\t",stu[i].num,stu[i].name,stu[i].sex,stu[i].age[0]);
printf("%d\t%d\t%d\t%d\t",stu[i].age[1],stu[i].age[2],stu[i].ach[0],stu[i].ach[1]);
printf("%d\t%d\n",stu[i].ach[2],stu[i].ach[3]);
}
20.编程统计候选人的得票数。设有3个候选人zhang、li、wang(候选人姓名不区分大小写),10个选民,选民每次输入一个得票的候选人的名字,若选民输错候选人姓名,则按废票处理。选民投票结束后程序自动显示各候选人的得票结果和废票信息。要求用结构体数组candidate表示3个候选人的姓名和得票结果。
#include<stdio.h>
#include<string.h>
struct candidate
{
char name[20];
int num;
}peo[3]={{"zhang",0},{"li",0},{"wang",0}};
main()
{
int i,j,wrong=0;
char a[10];
for(i=0;i<10;i++)
{
scanf("%s",a);
if(strcmp(a,peo[0].name)==0)
peo[0].num=peo[0].num+1;
else if(strcmp(a,peo[1].name)==0)
peo[1].num=peo[1].num+1;
else if(strcmp(a,peo[2].name)==0)
peo[2].num=peo[2].num+1;
else wrong+=1;
}
for(i=0;i<3;i++)
{
printf("%s ",peo[i].name);
printf("%d\n",peo[i].num);
}
printf("wrong:%d",wrong);
}
|