1、C课程设计 一、课程设计目标 《C语言课程设计》是信息类专业关键实践性课程。目标在于学习完《C语言程序设计》课程后进行一次全方面综合练习。经过课程设计,首先能够结合课程教学内容循序渐进地进行设计方面实践训练,其次,在参与一系列子项目标实践过程中,还能提升怎样综合利用所学知识处理实际问题能力,和取得相关项目管理和团体合作等众多方面具体经验。为后续课程:面向对象程序设计、Visual C++,数据结构,软件工程,软件技术基础等奠定必需实践基础。 设计目标以下: 1、深入培养学生结构化程序设计思想,加深对高级语言基础语言要素和控制结构了解。 2、针对C语言中关键和难点内容进行训练,独立完成
2、有一定工作量程序设计任务,同时强调好程序设计风格。
3、掌握C语言编程技巧和上机调试程序方法。
4、掌握程序设计中常见算法。
二、课程设计题目及要求
1、基础训练题目
1.1基础
1.1.1写出下面程序输出结果。
1)#include
3、
2) # include
4、角形底和高,求三角形面积
法一、 #include
5、ital,本利之和deposit。
#include
6、 printf("deposit=%.2f\n",deposit);
}
#define N 3 改4
#define RATE 0.02 改0..01
#include
7、l*pow(1+RATE,N);
printf("deposit=%.2f\n",deposit);
}
改
1.3选择结构
1)输入四个整数,要求按大小次序输出
# include 8、a=c;c=t;}
if(a 9、e input 四个整数\n");
scanf("%d%d%d%d\n",&a,&b,&c,&d);
if(a 10、c=d;d=t;}
printf("%d %d %d %d\n",a,b,c,d);
getch();
}
2)编写程序实现:输入一个百分制成绩。要求书出成绩等级‘A’ ‘B’ ‘C’ ‘D’ ‘E’,90分以上为 ‘A’,81~89分为 ‘B’,70~79为 ‘C’,60~69为 ‘D’,60分一下为 ‘E’。
#include 11、x>=90)
{
printf("A\n");
}
else if(x>=80)
{
printf("B\n");
}
else if(x>=70)
{
printf("C\n");
}
else if(x>=60)
{
printf("D\n");
}
else
{
printf("E\n");
12、 }
}
3)编写程序实现:给出一个不多于5位正整数,要求:
1.求出它是几位数
2.分别打印出每一位数
3.按逆序打印出各位数字,比如原数为321,应输出123
# include 13、 b=(x-a*10000)/1000;
c=(x-a*10000-b*1000)/100;
d=(x-a*10000-b*1000-c*100)/10;
e=(x-a*10000-b*1000-c*100-d*10);
printf("每一位数是\t%d\t%d\t%d\t%d\t%d\n",a,b,c,d,e);
printf("逆序是\t%d%d%d%d%d\n",e,d,c,b,a);
printf("该数是五位数\ 14、n");
}
else if(x/1000>=1)
{
a=x/1000;
b=(x-a*1000)/100;
c=(x-a*1000-b*100)/10;
d=(x-a*1000-b*100-c*10);
printf("每一位数是\t%d\t%d\t%d\t%d\n",a,b,c,d);
printf("逆序是\t%d%d%d%d\n",d,c,b,a);
printf("该 15、数是四位数\n");
}
else if(x/100>=1)
{
a=x/100;
b=(x-a*100)/10;
c=(x-a*100-b*10);
printf("每一位数是\t%d\t%d\t%d\n",a,b,c);
printf("逆序是\t%d%d%d\n",c,b,a);
printf("该数是三位数\n");
}
else if(x/10>=1)
{
16、 a=x/10;
b=(x-a*10);
printf("每一位数是\t%d\t%d\n",a,b);
printf("逆序是\t%d%d\n",b,a);
printf("该数是两位数\n");
}
else
{
printf("每一位数是\t%d\n",x);
printf("逆序是\t%d\n",x);
printf("该数是一位数\n");
17、 }
}
1.4循环
1)已知xyz + yzz = 532,其中x、y、z全部是数字(0~9),编写一个程序求出x、y、z分别代表什么数字。
#include 18、z=%d\n",x,y,z);
}
}
}
}
2)编写一个程序打印以下对称图形(行数由键盘输入1~9范围值),例以下面是输入数字4时情形:
4444444
33333
222
1
222
33333
19、 4444444
#include 20、 for(j=1;j<=n-i;j++)
printf(" ");
for (k=1;k<=2*i-1;k++)
printf("%d",i);
printf("\n");
}
}
3)学校有近千名学生,在操场上排队,5人一行余2人,7人一行余3人,3人一行余1人,编写一个程序求该校学生人数。
#include 21、n=%d\n",n);
}
4)猴子吃桃问题,猴子第一天摘下若干个桃子,立即吃了二分之一,还不过瘾,有多吃了一个,第二天早上又将剩下桃子吃掉二分之一,有多吃了一个,以后天天早上全部吃了前一天剩下二分之一零一个,到第10天早上想在吃时,见只剩下一个桃子了。求第一天共摘了多少桃子。
# include 22、\n",m);
}
1.5数组
1、输入一个字符串,统计其中字母、数字、空格和其它字符各多少个。
#include 23、s[i]>=65) && (s[i]<=90)))
{
c1++;
}
else if(s[i]==' ')
{
c2++;
}
else if(s[i]>='0' &&s[i]<='9')
{
c3++;
}
else
c4+ 24、
i++;
}
printf("其它字符=%d\n字母=%d\n空格=%d\n数字=%d\n",c4,c1,c2,c3);
}
2)输出杨辉三角形。
# include 25、
for(j=1;j
main()
{
int a[6],i,b;
printf( 26、"please input 五位由小到大数列:\n");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
printf("\n");
printf("please input 一个数b:\n");
scanf("%d",&b);
if(a[0]>b)
{
[5]=a[0];a[0]=b;b=a[5];
}
if(a[1]>b)
{
a[5]=a[1]; 27、a[1]=b;b=a[5];
}
if(a[2]>b)
{
a[5]=a[2];a[2]=b;b=a[5];
}
if(a[3]>b)
{
a[5]=a[3];a[3]=b;b=a[5];
}
if(a[4]>b)
{
a[5]=a[4];a[4]=b;b=a[5];
}
for(i=0;i<=5;i++) 28、
printf("%d\t",a[i]);
printf("\n");
}
4)输入一个4行4列矩阵分别求出主对角元素之和和上三角元素之和。
# include 29、 }
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("%d\t",a[i][j]);
printf("\n");
}
for(i=0,s=0;i<4;i++)
{
s=s+a[i][i];
}
printf("主对角元素和:%d\n",s);
for(j=0,w=0;j<4;j++)
30、 {
for(i=0;i<=j;i++)
w=w+a[i][j];
}
printf("上三角之和:%d\n",w);
}
2.1函数
1)一个数假如恰好等于它全部因子之和,这个数就称为“完数”,请编写一个判别m是否为完数函数,并编写主函数,经过调用此函数统计自然数1——100间完数个数。
#include"stdio.h"
main()
{
int i,m,sum=0;
for(i=2;i<100;i++)
{
31、 sum=0;
for(m=1;m 32、 return 0;
}
2)编写一个函数,实现对n个整数进行排序(用起泡法),并编写主函数调用此函数,实现对10个整数排序。
#include 33、 if(a[i]=i+1;j--)
{
if(a[j] 34、 }
for(i=0;i<=9;i++)
printf(" %d",a[i]);
printf("\n");
}
3)依据以下公式求π近似值,直到最终一项绝对值小于10-5为止
# include 35、 printf("%d\n",n);
}
for(i=1,s=0;i<=n;i++)
{
m=1.0/(i*i);
s=s+m;
}
w=s*6;
h=sqrt(w);
printf("h=%lf\n",h);
}
2.2指针
1)写一个函数,求字符串长度。在main函数中输入字符串,并输出其长度。
#include 36、
main()
{
char s[100],*p=s;
printf("字符串: ");
gets(s);
while(*++p);
printf("长度%d\n",p-s);
}
2)编程判定输入一个字符串是否是回文。所谓回文,即顺读和倒读全部是一样。如eye,level,abba等。
#include 37、);
for(k=0;k 38、 printf("%s is hui wen\n",s);
getch();
}
3)用指针优化学生成绩
(1) 定义一个数组stu[10]存放10个学生成绩,从键盘输入数据,要求用指针实现;
(2)将数组stu[10]内容输出到屏幕上,要求用指针实现;
(3)将成绩数组根据从高到低进行排序,要求用指针实现;
(4)将第三步内容放在函数中实现,在主函数中调用实现排序,用指针实现,输出排序后成绩单
#include"stdio.h"
#include"string.h"
void cube(int *p)
{
int i,j,t;
39、
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(*(p+j)<*(p+j+1))
{
t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
}
int main(void)
{
int stu[10],i,*p;
printf("Input ten students'score:\n");
for(p=stu,i=0;i<10;i++,p++)
scanf("%d",p);
print 40、f("Output the scores;\n");
for(p=stu,i=0;i<10;i++,p++)
printf("%3d",*p);
printf("\n");
cube(stu);
printf("Out the scores after sort:\n");
for(p=stu,i=0;i<10;i++,p++)
printf("%3d",*p);
}
2.3结构体
1)有10个学生,每个学生数据包含学号,姓名,及三门课成绩,总成绩和平均成绩,从键盘输入10个学生数据(包含学号,姓名及3门课成绩),要求打印出每位学生学号, 41、姓名,三门课成绩,总成绩和平均成绩,最终再打印出3门课总平均成绩和最高分学生数据(包含姓名和总成绩)。
试验要求:
(1)依据学生信息定义一个结构体类型,在说明一个该结构体类型数组;
(2)用input函数从键盘上输入10个学生数据;
(3)用average函数求出每个学生总成绩、平均成绩和全部学生总平均成绩;
(4)用maximum函数找出最高分学生数据;
(5)在主函数中输出每位学生学号、姓名、三门课成绩、总成绩和平均成绩和总平均分和最高分学生数据。
输出形式以下:
NO. name score1 score2 score3 t 42、otal average
101 wang 80 79 81 240 80.00
102 li 91 90 89 270 90.00
Average=85.00
The highest score:li,score total:270
# include 43、
int score2;
int score3;
int total;
double average;
}stu[10];
main()
{
struct student stu[10];
int i,w,m,j;
double h;
printf("please input num.name.score1.score2 and score3\n");
for(i=0;i<10;i++)
{ scanf("%d%s%d%d%d\n",&stu[i].num,&stu[i].name,&stu[i].score1,&stu[i].sco 44、re2,&stu[i].score3);
}
printf("num\tname\tscore1\tscore2\tscore3\ttotal\taverage\n");
for(i=0;i<10;i++)
{
stu[i].total=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].average=stu[i].total/3;
printf("%d\t%s\t%d\t%d\t%d\t%d\t%.2lf",stu[i].num,stu[i].name,stu[i].score1, 45、stu[i].score2,stu[i].score3,stu[i].total,stu[i].average);
printf("\n");
}
for(i=0,w=0;i<10;i++)
{
w=w+stu[i].average;
}
h=w/10;
printf("average=%.2lf\n",h);
for(i=0;i<10;i++)
for(j=0;j<10;j++)
if( stu[j-1].total>stu[j].total)
{
m=stu[j- 46、1].total;stu[j-1].total=stu[j].total;stu[j].total=m;
}
printf("%s\t%d\n",stu[9].name,stu[9].total);
}
2)定义一个结构体变量(包含年、月、日)。编写一个函数days,计算该日期在本年中是第几天(注意闰年问题)。由主函数将年月日传输给days函数,计算以后,将结果传回到主函数输出。
#include 47、
int month;
int day;
};
main()
{
struct date stu1;
int a,b,c,m=0;
printf("please enter a is year,b is month,c is day:\n ");
scanf("%d %d %d",&stu1.year,&stu1.month,&stu1.day);
a=stu1.year;
b=stu1.month;
c=stu1.day;
if(a%400==0||a 48、4==0&&a%100!=0)
{
printf("the year is run\n ");
switch(b)
{
case 1:m=c;break;
case 2:m=31+c;break;
case 3:m=31+29+c;break;
case 4:m=31+29+31+c;break;
case 5:m=31+29+31+30+c;break;
case 6:m=31+29+31+30+31+c;break;
case 7:m=31+29+31+30+31+30+c;break;
case 8:m=31+29+31+30+ 49、31+30+31+c;break;
case 9:m=31+29+31+30+31+30+31+31+c;break;
case 10:m=31+29+31+30+31+30+31+31+30+c;break;
case 11:m=31+29+31+30+31+30+31+31+30+31+c;break;
case 12:m=31+29+31+30+31+30+31+31+30+31+30+c;break;
}
printf("%d %d %d is %dth of the year\n",stu1.year,stu1.month,stu1.da 50、y,m);
}
else
{
printf("the year is ping\n ");
switch(b+12)
{
case 13:m=c; break;
case 14:m=31+c; break;
case 15:m=31+28+c; break;
case 16:m=31+28+31+c; break;
case 17:m=31+28+31+30+c; break;
case 18:m=31+28+31+30+31+c; break;
case 19:m=31+28+31+30+31+30






