C语言的题目

1. 计算个人工资所得的纳税额。纳税额计算方法如下:
1000元以内不纳税,超过1000元的部分为应纳税部分,计算办法为:应纳税部分<=500元的部分,税率为5%;500<应纳税部分<=2000部分,税率为10%;2000<应纳税部分<=5000部分,税率为15%;5000应纳税部分<=20000部分,税率为20%;20000<应纳税部分,税率为25%.

2. 猴子吃桃问题。第1天摘下桃子若干,当即吃掉一半,又多吃一个;第二天将剩余的部分吃掉一半还多一个;以此类推,到第6天只剩余1个。问第1天共摘了多少桃子?

3. 有n个学生,学习m门课程,已知所有学生全部课程的成绩,要求输出每门课程成绩最高的学生学号、课程代号和成绩。

4. 编写一函数,实现将给定的一个4*4的二维数组转置,即行列互换。

5. 假设有10个人围成一圈,从1开始顺序编号。从第1个人开始报数,从1到3,凡是报3的人出圈,问最后出圈的人是原来的几号?

6. 定义1个日期结构变量(由年、月、日3个整型数据项组成),计算该日期是本年度的第几日?注意闰年。

7. 某学习小组有5个人,每个人的信息包括:学号、姓名和成绩。要求从键盘上输入他们的信息,并求出平均成绩,以及最高成绩者的信息。

8.有1个单链表link,其结点的数据域由学号和总成绩组成,首结点的地址存于 head中,要求找出最高总成绩,以及学号和索引号。

9. 译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码:
将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。字母按上述规律转换,非字母字符不变。如“China!”转换为“Glmre!”。输入一行字符,要求输出其相应的密码。

10. 打印九九乘法表。

11. 百钱买百鸡。公鸡3元1只,母鸡2元1只,小鸡1元3只,每种鸡都要有,并且公鸡的个数必须是双数,问有多少种方案。(提示:有2种方案)

12. 假设学生信息包括姓名、学号和年龄。以初始化方式存入8个学生的信息,找出所有姓liu的学生。

13. 将所有两位数存放在文件“file1.txt”中。

14. 编写程序,用指针实现以下功能:将数组a中的字符复制到b数组中,要求每复制三个字符之后插入一个空格。

15. 运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:
s<250km 没有折扣
250≤s<500 2%折扣
500≤s<1000 5%折扣
1000≤s<2000 8%折扣
2000≤s<3000 10%折扣
3000≤s 15%折扣
设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费f的计算公式为:f=p*w*s*(1-d)。

第一个:
#include <stdio.h>
main()
{
float s=0.0,t=0.0;
printf("gongzi:\n");
scanf("%f",&s);
if (s<0)
printf("<0");
else if (s<1000)
{t=0.0 ;
printf("gongzi:%5.2f,shui:%5.2f,shifagongzi:%5.2f",s,t,s-t); }
else if (s>=1000 && s<2000)
{t=s*0.05;
printf("gongzi:%5.2f,shui:%5.2f,shifagongzi:%5.2f",s,t,s-t); }
else if (s>=2000 && s<3000)
{t=s*0.08;
printf("gongzi:%5.2f,shui:%5.2f,shifagongzi:%5.2f",s,t,s-t); }
else if (s>=3000 && s<5000)
{t=s*0.10;
printf("gongzi:%5.2f,shui:%5.2f,shifagongzi:%5.2f",s,t,s-t); }
else if (s>=5000)
{t=s*0.15;
printf("gongzi:%5.2f,shui:%5.2f,shifagongzi:%5.2f",s,t,s-t); }
getch();
}
第2个:
main()
{
int day,x1,x2;
day=9;
x2=1;
while(day>0)
{x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/
x2=x1;
day--;
}
printf("the total is %d\n",x1);
第3个:
#include <stdio.h>
#define N 3
#define M 3
main()
{
int a[N][M],sum[N]={0};
double avg[N];
int i,j;
for(i=0;i<N;i++)
{
printf("Input the %dth student's scores:",i+1);
for(j=0;j<M;j++)
{
scanf("%d",&a[i][j]);
sum[i]+=a[i][j];
}
avg[i]=(double)sum[i]/M;
}
printf("The sums are:");
for(i=0;i<N;i++)
printf("%4d",sum[i]);
printf("\nThe averages are:");
for(i=0;i<N;i++)
printf("%6.2lf",avg[i]);
printf("\n");
}
第4个:
#define N 4
int array[N][N];
void convert(int array[3][3]) /*函数类型可定义为void,也可用默认的int*/
{int i,j,t; /*因为函数形实参是数组,按地址传递*/
/*两个数组所用空间相同,函数无需返回值*/
for(i=0;i<N;i++)
for(j=i+1;j<N;j++) /* j=i+1防止两元素对调后再次恢复原位 */
{t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}
main()
{
int i,j;
void convert(int [][]); /*注意此处的 [ ][ ] 形式,表明是二维数组*/
printf("Input array:\n"); /* 因为函数原型处仅检查形参个数、类型名、
for(i=0;i<N;i++) /* 顺序,而不检查形参名。所以只写成[ ][ ] 形式
for(j=0;j<N;j++) /* 即可。仅对void时如此,对int似乎不成立?*/
scanf("%d",&array[i][j]);
printf("\noriginal array:\n");
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
printf("%5d",array[i][j]);
printf("\n");
}
convert(array);
printf("convert array:\n");
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
printf("%5d",array[i][j]);
printf("\n");
}
}
第5个:
#define nmax 50
main()
{
int i,k,m,n,num[nmax],*p;
printf("please input the total of numbers:");
scanf("%d",&n);
p=num;
for(i=0;i<n;i++)
*(p+i)=i+1;
i=0;
k=0;
m=0;
while(m<n-1)
{
if(*(p+i)!=0) k++;
if(k==3)
{ *(p+i)=0;
k=0;
m++;
}
i++;
if(i==n) i=0;
}
while(*p==0) p++;
printf("%d is left\n",*p);
}

你看懂了吗?看懂就送分吧
如果看不懂你就是瞎问

再送点详解给你

#include <stdio.h>

#define N 50 // 排队人数(可任意更改)
#define CAL 3 //凡报3的人出列(可任意更改)

//下面是排队编号函数:从h 开始的n个人依次编号1到n
void stdline(int *h,int n)
{
int i;
for(i=1;i<n+1;i++) *(h+i-1)=i;
}

/*下面函数表示从指针h处开始的人数为boy个人排队,从1报数,每报到call的人出列*/
void outline(int *h,int boy,int call)
{
int *p, chu, callnum;
/*说明:
p 工作指针,表示从头依次指向每个元素,点名
chu 计数器,记录出列的人数
callnum 计数器,记录点名次序
*/
chu=0;
callnum=0;//各计数器清零
p=h; //开始时,工作指针指向数组首

printf("出列顺序是:\n");
while(chu<boy)
{
if(*p!=0) callnum++; //每次加报数
if(callnum==call) //如果某一个人报到出列数call...
{
printf("%5d",*p); //打印编号,表示出列
chu++; //出列人数加1
if(chu==boy)//如果全部出列....
{
*h=*p; //把最后一个出列人的编号记入地址开始处
return; //结束
}

if(chu%10==0)printf("\n");//每输出10个换行
callnum=0; //出列后,重新报数
*p=0; //出列后,将其编号赋零,以示区别
}
p++; //工作指针移向下一个人,即下一个数组元素
if(p>h+boy-1)p=h;/*如果移到最后一个元素的后面,则让指向地址开头继续报数*/
}

}

void main()
{
int a[N]; //用数组模拟队列,每个元素代表一个人
stdline(a,N);//编号
outline(a,N,CAL);//计算并打印出列顺序
printf("\n最后留下来的是 %d 号\n",*a);/*在函数中,已经把最后一个人的编号写入了数组首地址处,

这里输出就可以了*/
}
第6个:
#include<stdio.h>
struct date
{
int year;
int month;
int day;
}date;
void main()
{
int sum=0,leap;
printf("\n请输入日期(年,月,日)\n");
scanf("%d,%d,%d",&date.year,&date.month,&date.day);
switch(date.month)//先计算某月以前月份的总天数。
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");
break;
}
sum=sum+date.day;//再加上某天的天数。
if(date.year%400==0||(date.year%4==0&&date.year%100!=0))
leap=1;
else
leap=0;
if(leap==1&&date.month>2)//如果是闰年且月份大于2,总天数应该加一天。
sum++;
printf("这天是当年的第 %d 天。\n",sum);
}
写不下了。。。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-14
哥们不是不想帮你。。。。就说不是什么特别大的程序。。。但也太多了,建议把这些程序分成几份然后悬赏可能会有人回答的。。。。
第2个回答  2010-05-14
这些题目似乎书上是有的!你去找老潭的书看看就知道了,没章的书后面都有习题的,去找书看看就找得到的!
第3个回答  2010-05-14
来点实际的吧!!!20个Q币帮你完成这个作业!!!
第4个回答  2010-05-15
不如M个人谈个价钱叫他(她)帮你连试也考过算了...
......真不知现在的人是怎么了.....

外:
某些同志的做法也欠妥,说说算法,提示下关键就比较好了。
直接贴出程序结果对本来该去学该去做的人没有什么太多帮助。
----纯属个人之见,不对人,只对事。---