学生档案管理系统录入学生信息修改学生信息删修除改学生信息查询学生信息输出学生信息退出系统 按学号查询按班级查询
2、重要数据的数据结构设计
学生学籍的记录项用结构体StuMessage 表示,包括6个属性,stuNo、name、spec、grade、sex、birthday 分别代表学生的学号、姓名、专业、年级、性别和出生日期,其中 birthday 类型为自定义的结构体类型 Date。
struct StuMessage {
char stuNo[11];
//学号
char name[9];
//姓名
char spec[21];
//专业
struct Grade score;
//年级
char sex;
//性别
struct Date birthday;//出生日期 };日期类型 Date 包括三个属性,分别代表年、月、日。struct Date {
int year;
//年
清屏录入一条记录length++继续录入(Y/N)接收用户选择Ycon == ‘Y’或con == ‘y’N返回
4、修改学生信息功能模块函数 Modify()设计
5、删除学生信息功能模块函数 Delete()设计
清屏显示查询菜单接收用户的选择choose1按学号查询2按年级查询0返回主菜单其他非法操作Ychoose!= 0N7、按学号查询功能模块函数 SearNum()设计
清屏接收查询年级输出表头i = 0, count =0i < lengthY等于年级Y输出第 i 条记录count++NNi++Ycount > 0N共找到 n 条记录没有找到相关记录按任意键继续getch()返回
9、输出学生信息功能模块函数 ListAll()设计
112
switch(ch)
{
case '1':Append(stu);break;
case '2':Modify(stu);break;
case '3':Delet(stu);break;
/*case '4':MenuOfSear(stu);break;
case '5':ListAll(stu);break;
case '0':Quit();break;*/
} } } void Append(Stu *stu){
FILE *fp;
int i;
fp=fopen(“stuinfo.txt”,“r”);
if(fp==NULL)
printf(“File open failedn”);
for(i=0;i<36;i++)
{
fscanf(fp,“%st%st%st%dt%dt%dt%dt%dt%ct%dt%dt%d”,stu[i].stuNo,stu[i].name,stu[i].spec,&stu[i].score.CompFoundation,&stu[i].score.English,&stu[i].score.language,&stu[i].score.math,&stu[i].score.sport,&stu[i].sex,&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day);
}
fclose(fp);
} void Modify(Stu *stu){ char no[11];int i=0;int flag=1;printf(“请输入修改学生信息的学号:”);scanf(“%s”,no);while(flag){
if(strcmp(no,stu[i].stuNo)==0)
flag=0;
else i++;} printf(“学号:%s、姓名:%s、专业:%s、基础:%d,英语:%d,C语言:%d,数学:%d,体育:%d、性别:%c %d年,%d月,%d日n”,stu[i].stuNo,stu[i].name,stu[i].spec,stu[i].score.CompFoundation,stu[i].score.English,stu[i].score.language,stu[i].score.math,stu[i].score.sport,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);printf(“请输入要修改的学生信息:学号、姓名、专业、基础,英语,C语言,数学,体育、性别 年,月,日:n”);
scanf(“%s%s%s%d%d%d%d%d %c%d%d%d”,stu[i].stuNo,stu[i].name,stu[i].spec,&stu[i].score.CompFoundation,&stu[i].score.English,&stu[i].score.language,&stu[i].score.math,&stu[i].score.sport,&stu[i].sex,&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day);
getchar();
getchar();}
void Delet(Stu *stu)
{
char sNO[11];
system(“CLS”);
printf(“请输入要删除学生的学号n”);
scanf(“%s”,sNO);
}
int NumOfSear(Stu *stu, char stuNum[])
{
int i;
for(i=1;i<36;i++)
if(strcmp(stuNum,stu[i].stuNo)==0)
return i;
return-1;
} void PrintHead(void){ printf(“学号
姓名
基础
数学
英语
C语言
体育
性别
****年**月**日n”);} void ListOne(Stu stu){printf(“%s %s %s %d %d %d %d %d %c %d %d %dn”,stu.stuNo,stu.name,stu.spec,stu.score.CompFoundation,stu.score.English,stu.score.language,stu.score.math,stu.score.sport,stu.sex,stu.birthday.year,stu.birthday.month,stu.birthday.day);}
汇编语言实训任务书
一、实训题目:汇编语言综合设计
二、实训目的:通过汇编语言综合设计,进一步加深理解汇编语言的指令系统及程序设计流程,强化编程能力,增强上机调试程序的基本能力;学会动态文字的设计方法,理解8253、8255在PC机中的应用,掌握用8253演奏简单乐曲的编程方法,加深理解汇编语言在接口电路中的实际应用。
三、实训时间:各班按实际时间填写
四、实训内容:
1、动态文字的设计
利用延时子程序,完成两种动态文字的程序设计:
(1)屏目上显示一字符串,并闪烁10次后消失。(2)屏目上显示一字符串,并下落20行后消失。
2、音乐程序的设计
利用PC机中的定时器计数器8253使扬声器发声,并演奏简单的乐曲。首先理解8253在PC机中的硬件连线及发声原理。发声时利用8253的计数器2,工作方工3来实现。掌握控制字的设置方法及计数初值与音符频率的关系。
(1)编写一简单的发声程序,使系统持续发声几秒后停止。
(2)编写演奏乐曲程序,使系统演奏出一首简单的歌曲。
五、实训要求:
1、严格遵守实训时间,做到不迟到、不早退、不旷课。
2、按时完成实训任务,上交软件作品及实训报告。
3、实训报告要包括封皮、实训题目、实训时间、实训目的、系统发声原理、实训内容。
4、每一种程序要求画出程序流程图,源程序、及运行结果分析。
5、实训报告最后一项为心得体会。
湖北轻工职业技术学院 《C语言程序设计》实验报告
实验十一:函数
班 级: ___________10计管_________________ 姓 名: ___________胡高______________ 学 号: ___________1003011138________________ 日 期: ____________2011-5-29________________
一、实验目的和要求
1、理解数组引入的意义及作用;
2、掌握一维数组的基本思想和基本用法;
3、掌握使用一维数组的基本算法:排序与查找。
二、实验主要仪器和设备 计算机一台,Turbo C环境。
三、实验内容
请将该实验报告重新命名为“实验11-学号[姓名]”,如“实验11-66[张三]”
1、P145 填空题2(2)
2、P145 上机操作题 3(5)
四、实验原始纪录 实验1 程序的设计界面。(Alt+PrintScreeninclude SysRq拷贝当前窗口)
程序代码。(此处写代码,不是图片。
#include void main(){
void swap();
extern int a,b;
a=3;b=10;
swap();
printf(“a=%d,b=%dn”,a,b);
}
int a,b;
void swap()
{
int temp;
temp=a;a=b;b=temp;
}
实验2 程序的设计界面。
程序代码。
五、实验结果及分析
实验1运行结果图。
实验2运行结果图。
六、实验总结与思考(主要写一些在实验过程中,遇到的问题、所犯的错误,以及是如何发现纠正的。大约100至200字左右。)
本次试验的内容是考察数组的引用、基本算法等,但是总体感觉有点问题。有的地方不知道如何下手
目 录
特别注意,打开视图菜单-文档结构图观察文档结构。目录由WORD菜单中插入-引用-目录自动生成并更新,不需要手工生成菜单。
本模板仅说明格式,内容由指导老师决定,不用按这份目录内容编写实训报告。
具体目录见文档要求。以下部分仅供参考。
目 录........................................................................................................................1
一、实训的目的与要求................................................................................................1
二、题目说明................................................................................................................2
三、总体设计................................................................................................................2
3.1.软件模块结构图...........................................................................................2 3.2.程序流程图...................................................................................................3
四、详细设计和实施....................................................................................................3
4.1 XXXX模块.....................................................................................................4.2
4.3
五、遇到的问题和解决方法........................................................................................4
六、实训总结................................................................................................................4
七、参考文献................................................................................................................4 附录(源程序代码)....................................................................................................5
一、实训的目的与要求
(正文为宋体,五号字 行间距为21)中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国中华人民共和国
二、题目说明
(正文为宋体,五号字 行间距为21)题目参照任务书中有关描述
三、总体设计
3.1.软件模块结构图(以下图仅供样式参考)
图1-1 软件模块结构图
3.2.程序流程图(以下图仅供样式参考):
四、详细设计和实施
(正文为宋体,五号字 行间距为21)4.1 模块1 ………(可以写一些关键程序代码,另外截一些界面图并说明实现了什么功能,以证明功能实现了)每一个界面,必须有(1)功能简介(2)界面截图一张(3)界面关键代码和描述 每一个界面说明作为独立的一小节。(在文档说明中有样例)
五、遇到的问题和解决方法
(正文为宋体,五号字 行间距为21)1. 2. 3. …………
六、实训总结
(正文为宋体,五号字 行间距为21)
七、参考文献
[1] 权明富,齐佳音,舒华英.客户价值评价指标体系设计[J].南开管理评论,2004,7(3):17-18.[2] 刘小洪,邹鹏.商业银行客户关系价值管理模型研究[J].管理科学,2005,18(3):57-60.附录(源程序代码)
第一天的题目: 求两个整数之和。
#include main(){ int a,b,sum;a=3;b=5;sum=a+b;printf(“sum is %d/n”,sum);} 求两个整数中的较大者。#include “stdio.h” void main(){int max(int,int);int a,b,c;scanf(“%d,%d,”,&a,&b);c=max(a,b);printf(“max=%d”,c);} int max(int x,int y){ int z;if(x>y)z=x;else z=y;return(z);}
求1×3×5×7×9×11 #include int main(){ int i = 1,sum = 1;while(i <= 11){
sum = sum*i;
i = i+2;}
printf(“%d”,sum);return 0;} 有50个学生,要求将成绩在80分以上的学生的学号和成绩输出。
#include main(){
int i;
int a[50];
for(i=0;i<50;i++)
{
scanf(“%d”,&a[i]);
if(a[i]>80)
printf(“%d”,a[i]);
} }
判定2000—2500年中的每一年是否闰年,并将结果输出。
#include int main(){
int y;
y=2000;
while(y<=2500)
{
if(((y%4 == 0)&&(y%100!= 0))||(y%400 == 0))
printf(“%d 年是闰年n”,y);
else printf(“%d 年不是闰年n”,y);
y=y++;} } 求111111 23499100#include void main(){ int sign=1;float deno=2.0,sum=1.0,term;while(deno<=100){
sign=-sign;
term=sign/deno;
sum=sum+term;
deno=deno+1;} printf(“%fn”,sum);} 给出一个大于或等于3的正整数,判断它是不是一个素数。
#include void main(){
int i,n,mark=0;
scanf(“%d”,&n);
for(i=2;i < n/2+1;i++)
{
if(n%i==0)
{
printf(“%d不是素数”,n);
mark=1;
break;
}
}
if(mark==0)
printf(“%d是素数”,n);} 求5!#include main(){ int i,n;long fact=1;printf(“Input n:”);scanf(“%d”,&n);for(i=1;i<=n;i++)fact*=i;printf(“%d!=%1dn”,n,fact);} 给定一个大写字母,要求用小写字母输出。
#include void main(){ char c;c=getchar();if(c>='A'&&c<='Z')putchar(c+'a'-'A');} 输入两个实数,按代数值由小到大的顺序输出这两个数。
#include void main(){
float a,b,t;scanf(“%f %f”,&a,&b);if(a>b){ t=a;a=b;b=t;} printf(“%5.2f,%5.2fn”,a,b);
} 输入3个数a,b,c,要求按由小到大的顺序输出。
#include void main(){ int a,b,c,t;printf(“please input three numbersn”);scanf(“%d%d%d”,&a,&b,&c);if(a>b){ t=a;a=b;b=t;} if(a>c){ t=a;a=c;c=t;} if(b>c){ t=b;b=c;c=t;} printf(“%d<%d<%dn”,a,b,c);} 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。
#include main(){
char zhong,guo;
scanf(“%c”,&zhong);
if(65<=zhong&&zhong<=90)
{
guo=zhong+32;
printf(“%c”,guo);
}
else
printf(“%c”,zhong);}
1(x0)1编一程序,输入一个x值,要求输出相应的y值。y0(x0)
1(x0)#include void main(){
int x,y;
printf(“请输入x:”);
scanf(“%d”,&x);
if(x<0)
y=-1;
else if(x=0)
y=0;
else
y=1;
printf(“y=%d”,y);} 要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为 60分以下。成绩的等级由键盘输入。#include void main(){ char grade;printf(“等级:”);scanf(“%c”,&grade);switch(grade){ case 'A': printf(“90~100n”);break;case 'B': printf(“80~89n”);break;case 'C': printf(“70~79n”);break;case 'D': printf(“60~69n”);break;case 'E': printf(“不合格n”);break;default: printf(“error!n”);break;} }
5写一程序,判断某一年是否闰年。#include int main(){
int a;
scanf(“%d”,&a);
if(a%4==0&&a%100!=0||a%400==0)
printf(“是闰年”);
else printf(“不是闰年”);} 运输公司对用户计算运输费用。路程(s km)越远,每吨·千米运费越低。标准如下:
s < 250
没有折扣
250≤s < 500
2%折扣
500≤s < 1000
5%折扣
1000≤s < 2000
8%折扣
2000≤s < 3000
10%折扣
3000≤s
15%折扣 #include int main(){
int c, s;
float p, w, d, f;
scanf(“%f %f %d”, &p, &w, &s);
if(s >= 3000)c =12;
else c = s / 250;
switch(c)
{
case 0 : d = 0;break;
case 1 : d = 2;break;
case 2 :
case 3 : d = 5;break;
case 4 :
case 5 :
case 6 :
case 7 : d = 8;break;
case 8 :
case 9 :
case 10:
case 11: d = 10;break;
case 12: d = 15;break;
}
f = p * w * s *(1-d / 100);
printf(“freight =%15.4fn”,f);} 全班有50个学生,用循环语句统计各学生三门课的平均成绩。#include void main(){ int score[9];int total[3];int average[3];int i;for(i=0;i<9;i++)scanf(“%d”,score+i);for(i=0;i<3;i++){ total[i]=score[i*3]+score[i*3+1]+score[i*3+2];average[i]=total[i]/3;printf(“学生%d的平均分:%dn”,i,average[i]);} } 求1+2+3+…+100 #include main(){ int i=1,sum=0;while(i<=100){ sum=sum+i;i++;} printf(“sum=%dn”,sum);} 在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。#include int main(){ int s;unsigned double a=0;unsigned double m;for(s=1;s<=1000;s++){ scanf(“%uf”,&m);if((a+m)<100000.00)a=a+m;else { a=a+m;printf(“捐钱人数为%d,平均钱数为%.2fn”,s,(double)a/s);break;} }
return 0;} 要求输出100~200之间的不能被3整除的数。#include void
main(){
int
n;
for(n=100;n <=200;n++)
{
if(n%3!=0)
printf(“%d
”,n);}
printf(“n ”);}
第二天的题目:
1 输出以下4*5的矩阵。
10 15 20 #include void main(){ char *p[5]={“ 1 2 3 4 5”,“ 2 4 6 8 10”,“ 3 6 9 12 15”,“ 4 8 12 16 20”};for(int i=0;i<5;i++){
printf(“%sn”,p[i]);} } 用
41131517
公式求
的近似值,直到发现某一项的绝对值小于10-6 为止(该项不累计加)。
#include #include int main(){ int s;double t,n,pi;s=-1,t=1,n=1.0,pi=0;for(t=1;fabs(t)>=1e-6;n=n+2){
s=-s;
t=s/n;
pi=pi+t;} pi=pi*4;printf(“%.6fn”,pi);return 0;}
求费波那西(Fibonacci)数列的前40个数。这个数列有如下特点:第1、2两个数为1、1。从第3个数开始,该数是其前面两个数之和。即: F11F21FFFn1n2n(n1)(n2)
(n3)#include int main(){ int f1=1,f2=1,f3;int i;printf(“%12dn%12dn”,f1,f2);for(i=1;i<=38;i++){
f3=f1+f2;
printf(“%12dn”,f3);
f1=f2;
f2=f3;} return 0;}
输入一个大于3的整数n,判定它是否素数(prime,又称质数)。#include int main(){ int a,b;scanf(“%d”,&a);b=a;while(--b>1)
if(a%b==0)
{
printf(“此数不是素数n”);
return 0;
}
printf(“此数是素数n”);
return 0;} 求100~200间的全部素数。#include #include void main(){
int i,k,sk,flag,m=0;
for(k=100;k<=200;k++)
{
sk=(int)sqrt(k);
flag = 1;
for(i=2;i<=sk;i++)
{
if(k%i==0)
{
flag=0;
break;
}
}
if(flag==1)
{
m++;
printf(“%5d”,k);
}
}
if(m%12==0)
printf(“n”);
printf(“total:%5dn”,m);} 对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。#include int main(){ int arr[10] = {0,1, 2,3,4,5,6,7,8,9}, i,j,t;for(i=0;i<10;i++)for(j=i+1;j<10;j++)if(arr[i] < arr[j]){ t = arr[i];arr[i] = arr[j];arr[j] = t;} for(i=0;i<10;i++)printf(“%d,”, arr[i]);return 0;} 用数组处理求Fibonacci数列问题
#include #include int main(){
int i;
int f[40]={1,1};
for(i=0;i<40;i++)
{
f[i]=f[i-2]+f[i-1];
}
for(i=0;i<40;i++)
{
if(i%5==0)
printf(“/n”);
printf(“%12d”,f[i]);
}
return 0;} 有10个地区的面积,要求对它们按由小到大的顺序排列(采用起泡法)。#include void main(){ int a[10];int i,j,temp;printf(“请输入10个数:”);for(i=0;i<10;i++)
scanf(“%d”,&a[i]);for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
} for(i=0;i<10;i++)
printf(“%dt”,a[i]);} 将一个二维数组行和列的元素互换,存到另一个二维数组中。
14123b25a456 36#include main(){ static int a[2][3]={{1,2,3},{4,5,6}};static int b[3][2],i,j;printf(“array a:n”);for(i=0;i<2;i++){
for(j=0;j<3;j++)
{
printf(“%5d,a[i][j]”);
b[j][i]=a[i][j];
}
printf(“n”);} printf(“array b:n”);for(i=0;i<3;i++){
for(j=0;j<2;j++);
printf(“%5d”,b[i][j]);
printf(“n”);} } 有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
#include int main(){
int a[3][4],max,i,j;
int x=0,y=0;
printf(“请输入矩阵的数值!n”);
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf(“%d”,&a[i][j]);
max=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(max{
max=a[i][j];
x=i;
y=j;
}
printf(“矩阵中最大的元素为:%dn”,max);
printf(“行号为:%d,列号为:%d”,x,y);} 输出一个已知的字符串。#include main(){ char a[4];scanf(“%c,%c,%c”,&a[0],&a[1],&a[2]);a[3]=' ';printf(“%s”,a);} 输出一个菱形图。#include void main(){
int h;
printf(“输入高度-》 ”);
scanf(“%d”,&h);
for(int i=1;i<=h;i++)
{
for(int a=1;a<=(h-i);a++)
{
printf(“ ”);
}
for(int b=1;b<=(i*2-1);b++)
{
printf(“*”);
}
printf(“n”);
}
for(int j=h-1;j>=1;j--)
{
for(int a=1;a<=(h-j);a++)
{
printf(“ ”);
}
for(int b=1;b<=(j*2-1);b++)
{
printf(“*”);
}
printf(“n”);
} } 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。#include int main(){
char string[81],c;int i,num=0,word=0;gets(string);
for(i=0;
(c=string[i])!= ' ';i++)if(c==' ')word=0;
else
if(word==0){
word=1;num++;}
printf(“There
are
%d
word
in
the
line.n ”,num);getchar();return
0;} 有3个字符串,要求找出其中最大者。#include #include void
main(){
char
string[20];char
str[3][20];int
i;for(i=0;i <3;i++)gets(str[i]);
if(strcmp(str[0],str[1])> 0)strcpy(string,str[10]);
else
strcpy(string,str[1]);if(strcmp(str[2],string)> 0)strcpy(string,str[2]);
printf(“nthe
largest
string
isn%sn ”,string);
} 15 输出以下的结果,用函数调用实现。
******************
How do you do!
****************** #include void fun1(void){printf(“**************n”);} void fun2(void){printf(“* How do you do!n”);}
main(){fun1();fun2();fun1();} 输入两个整数,要求输出其中值较大者。要求用函数来找到大数。#include int main(){ int max(int,int);
int a,b,c;
printf(“please enter a and b:”);
scanf(“%d,%d”,&a,&b);
c=max(a,b);
printf(“%d,%d,max=%dn”,a,b,c);
return 0;}
int max(int x,int y){ int z;
if(x>y)z=x;
else
z=y;
return(z);} 输入两个实数,用一个函数求出它们之和。#include int main(){ float add(float x,float y);float a,b,c;printf(“please enter a and b:”);scanf(“%f,%f”,&a,&b);c=add(a,b);printf(“sum is %f.n”,c);return 0;} float add(float x,float y){ float z;z=x+y;return(z);}
输入4个整数,找出其中最大的数。用函数的嵌套调用来处理。#include void main(){
int max_4(int a,int b,int c,int d);
int a,b,c,d,max;
printf(“Please enter 4 interger numbers:”);
scanf(“%d %d %d %d ”,&a,&b,&c,&d);
max=max_4(a,b,c,d);
printf(“max=%d n”,max);}
int max_4(int a,int b,int c,int d)
{int max_2(int,int);
int m;m=max_2(a,b);
m=max_2(m,c);
m=max_2(m,d);
return(m);
} int max_2(int a,int b)
{if(a>b)
return a;
else return b;
} 有5个学生坐在一起
问第5个学生多少岁?他说比第4个学生大2岁 问第4个学生岁数,他说比第3个学生大2岁 问第3个学生,又说比第2个学生大2岁 问第2个学生,说比第1个学生大2岁 最后问第1个学生,他说是10岁 请问第5个学生多大(递归调用)
#include int main(){ int age(int n);printf(“NO.5,age:%dn”,age(5));return 0;} int age(int n){ int c;if(n==1)
c=10;else
c=age(n-1)+2;return(c);} 用递归方法求n!。#include float fac(int n)
{
float f;
if(n<0)
{
printf(“n<0, dataerror!”);
}
else if(n==0||n==1)
f=1;
else
f=fac(n-1)*n;
return f;} int main(){ int n;scanf(“%d”,&n);printf(“%.0fn”,fac(n));return 0;}
第3天的题目: 输入10个数,要求输出其中值最大的元素和该数是第几个数。#include #include int main(int argc, char *argv[]){
int i=1,max,temp,n=1;
while(i<=10)
{
if(i==1){
scanf(“%d”,&max);
}
else
{
scanf(“%d”,&temp);
if(temp>max)
{
max = temp;
n=i;
}
}
i++;
}
printf(“最大数%d 位置%dn”,max,n);
system(“pause”);
return 0;} 有一个一维数组score,内放10个学生成绩,求平均成绩。#include int main(){ float average(float array[10]);float score[10],aver;int i;printf(“input 10 scores:n”);for(i=0;i<10;i++)
scanf(“%f”,&score[i]);printf(“n”);aver=average(score);printf(“%5.2fn”,aver);return 0;} float average(float array[10]){ int i;float aver,sum=array[0];for(i=1;i<10;i++)
sum=sum+array[i];aver=sum/10;return(aver);} 有两个班级,分别有35名和30名学生,调用一个average函数,分别求这两个班的学生的平均成绩。#include int main(){ float average(float array[],int n);float score1[5]={98,97,91,78,66};float score2[10]={67,78,89,99,68,78,77,85,59,88};printf(“%6.2fn”,average(score1,5));printf(“%6.2fn”,average(score2,10));return 0;} float average(float array[],int n){ int i;float aver,sum=array[0];for(i=1;i#include #define N void sort(int array[],int n){
int i,j,k,t;
for(i=0;i{
k=i;
for(j=i+1;jif(array[j]k=j;
t=array[k];
array[k]=array[i];
array[i]=t;
} }
int main(){
int i,array[N];
printf(“input a number:”);
for(i=0;i<=N-1;i++)
scanf(“%d”,&array[i]);
sort(&array[0], N);
for(i=0;i<=N-1;i++)
printf(“%d ”,array[i]);
return 0;} 有一个3×4的矩阵,求所有元素中的最大值。#include int main(){ int max_value(int array[][4]);int a[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};printf(“max value is %dn”,max_value(a));return 0;} int max_value(int array[][4]){ int i,j,max;max=array[0][0];for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(array[i][j]>max)
max=array[i][j];
return(max);} 有一个一维数组,内放10个学生成绩,写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分。#include float max=0,min=0;int main(){ float average(float array[],int n);float ave,score[10];int i;printf(“please enter 10 scores:n”);for(i=0;i<10;i++)
scanf(“%f”,&score[i]);ave=average(score,10);printf(“max=%6.2fn min=%6.2fn average=%6.2fn”,max,min,ave);
return 0;} float average(float array[],int n){int i;float aver,sum=array[0];max=min=array[0];for(i=1;imax)max=array[i];else if(array[i] int main(){
int fac(int n);int i;for(i=1;i<=5;i++)
printf(“%d!=%dn”,i,fac(i));return 0;} int fac(int n){
static int f=1;
}f=f*n;return(f);调用函数,求3个整数中的大者。#include int main(){ int max();extern int a,b,c;scanf(“%d %d %d”,&a,&b,&c);printf(“max is %d”, max());return 0;} int a,b,c;int max(){ int m;m=a>b?a:b;if(c>m)m=c;return(m);} 给定b的值,输入a和m,求a*b和am的值。#include int a;int main(){ int power(int);int b=3,c,d,m;scanf(“%d,%d”,&a,&m);c=a*b;printf(“%d*%d=%dn”,a,b,c);d=power(m);printf(“%d**%d=%dn”,a,m,d);return 0;} extern a;int power(int n){ int i,y=1;for(i=1;i<=n;i++)y*=a;
return(y);} 通过指针变量访问整型变量。#include “stdio.h” void main(){
int a,b;
int *pointer_1,*pointer_2;
a=100;b=10;
pointer_1=&a;
pointer_2=&b;
printf(“%d,%dn”,a,b);
printf(“%d,%dn”,*pointer_1,*pointer_2);} 输入a和b两个整数,按先大后小的顺序输出a和b。
解题思路:用指针方法来处理这个问题。不交换整型变量的值,而是交换两个指针变量的值。#include main(){ int *p1,*p2,*p,a,b;
scanf(“%d,%d”,&a,&b);
p1=&a;p2=&b;
if(a
{p=p1;p1=p2;p2=p;}
printf(“na=%d,b=%dn”,a,b);
printf(“max=%d,min=%dn”,*p1, *p2);} 对输入的两个整数按大小顺序输出。现用函数处理,而且用指针类型的数据作函数参数。#include void max(int *a,int *b){ int n;if(*a<*b){
n=*a;
*a=*b;
*b=n;} } int main(void){ int a,b;int *n=&a,*m=&b;printf(“输入两个整数:n”);scanf(“%d%d”,&a,&b);max(n,m);printf(“%d
%dn”,a,b);return 0;} 对输入的两个整数按大小顺序输出。
解题思路:尝试调用swap函数来实现题目要求。在函数中改变形参(指针变量)的值,希望能由此改变实参(指针变量)的值
#include swap(int *p1,int *p2){
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;}
main(){
int a,b;
int *pointer_1,*pointer_2;
scanf(“%d,%d”,&a,&b);
pointer_1=&a;pointer_2=&b;
if(a
swap(pointer_1,pointer_2);
printf(“ %d,%d ”,a,b);}输入3个整数a,b,c,要求按由大到小的顺序将它们输出。用函数实现。#include void swap(int *x,int *y){int t=*x;*x=*y;*y=t;} int main(){int a,b,c;scanf(“%d%d%d”,&a,&b,&c);if(a 解题思路:引用数组中各元素的值有3种方法:(1)下标法;(2)通过数组名计算数组元素地址,找出元素的值;(3)用指针变量指向数组元素 分别写出程序,以资比较分析。#include void main(){ int a[10];int i;for(i=0;i<10;i++)
scanf(“%d”,&a[i]);for(i=0;i<10;i++)
printf(“%d ”,a[i]);} 通过指针变量输出整型数组a的10个元素。
解题思路:
用指针变量p指向数组元素,通过改变指针变量的值,使p先后指向a[0]到a[9]各元素。#include main(){ int *p,i,a[10];p=a;for(i=0;i<10;i++)scanf(“%d”,p++);printf(“n”);p=a;for(i=0;i<10;i++,p++)printf(“%d”,*p);}将数组a中n个整数按相反顺序存放
解题思路:将a[0]与a[n-1]对换,……将a[4]与a[5]对换。#include int main(){ void inv(int x[ ],int n);
int i, a[10]={3,7,9,11,0,6,7,5,4,2};
for(i=0;i<10;i++)printf(“%d ”,a[i]);
printf(“n”);
inv(a,10);
for(i=0;i<10;i++)printf(“%d ”,a[i]);
printf(“n”);
return 0;} void inv(int x[ ],int n){ int temp,i,j,m=(n-1)/2;
for(i=0;i<=m;i++)
{ j=n-1-i;
temp=x[i];x[i]=x[j];x[j]=temp;} } 用指针方法对10个整数按由大到小顺序排序。
解题思路:
在主函数中定义数组a存放10个整数,定义int *型指针变量p指向a[0] 定义函数sort使数组a中的元素按由大到小的顺序排列 在主函数中调用sort函数,用指针p作实参 用选择法进行排序
#include int main(){ void sort(int x[],int n);int i,*p,a[10];p=a;printf(“please enter 10 integer numbers:”);for(i=0;i<10;i++)
scanf(“%d”,p++);p=a;sort(p,10);for(p=a,i=0;i<10;i++){
printf(“%d ”,*p);
p++;} printf(“n”);return 0;}
void sort(int x[],int n){ int i,j,k,t;for(i=0;ik=i;
for(j=i+1;jif(x[j]>x[k])
k=j;
if(k!=i)
{
t=x[i];
x[i]=x[k];
x[k]=t;
}
} } 有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩。
.#include“stdio.h” void InputScore(double s[][4]){ int i,j;
printf(“please input the score of three student:n”);
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf(“%lf”,&s[i][j]);} double AllAverage(double *s,int m){double sum=0;int i;
for(i=0;isum=sum+*(s+i);return sum/(m*4);} void PrintNScore(double(*s)[4],int n){ int i;for(i=0;i<4;i++)printf(“%d”,*(*(s+n-1)+i));} void main(){
double score[3][4],ave;
int n;
InputScore(score);
ave=AllAverage(score[0],3);
printf(“average =%lfn”,ave);
printf(“please input the NO.of student who will be printed:n”);
scanf(“%d”,&n);
printf(“The score of the %dth student is:n”,n);
PrintNScore(score,n);
}.定义一个字符数组,在其中存放字符串“I love China!”,输出该字符串和第8个字符。
解题思路:定义字符数组string,对它初始化,由于在初始化时字符的个数是确定的,因此可不必指定数组的长度。用数组名string和输出格式%s可以输出整个字符串。用数组名和下标可以引用任一数组元素。
#include int main(){ char string[]=“I love China!”;
printf(“%sn”,string);
printf(“%cn”,string[7]);
return 0;}。
第4天的题目:
1.输入一行字符,统计其中的英文字符、数字字符、空格及其它字符的个数。#include #include #define STOP '|' int main(void){ char c;char prev;long n_chars = 0L;int n_lines = 0;int n_words = 0;int p_lines = 0;int inword = 0;
printf(“Enter text to be analyzed(| to be quit):n ”);prev = 'n';while((c = getchar())!= STOP){
n_chars++;
if(c == 'n')
n_lines++;
if(!isspace(c)&&!inword)
{
inword = 1;
n_words++;
}
if(isspace(c)&& inword)
inword = 0;
prev = c;} if(prev!= 'n')
p_lines = 1;printf(“characters = %ld,word = %d,line = %d,”,n_chars,n_words,n_lines);printf(“partial lines = %dn”,p_lines);return 0;}
2.编程先输入某班30个学生某门课的成绩,对全班30个学生成绩进行由高到低排序,并打印输出排序结果,要求按照如下函数原型,用函数编程实现排序功能。#include
void sort(float score[],int n)
{
int i,j;
for(i=0;ifor(j=0;jif(score[j]{
float temp=score[j];
score[j]=score[j+1];
score[j+1]=temp;
}
}
void main()
{
float score[30];
int i;
printf(“Please enter the number and score:n”);
for(i=0;i<30;i++)
scanf(“%f”,&score[i]);
sort(score,30);
printf(“Sorted results:n”);
for(i=0;i<30;i++)
printf(“%f”,score[i]);
}
3.用户从键盘任意输入一个数字表示月份值n,程序显示该月份对应的英文表示,若n不在1~12之间,则输出“Illegal month”。#include int main(){
int n;
printf(“请输入n的值n”);
scanf(“%d”,&n);
switch(n)
{
case 1:printf(“Janunryn”);break;
case 2:printf(“Februaryn”);break;
case 3:printf(“Marchn”);break;
case 4:printf(“Apriln”);break;
case 5:printf(“Mayn”);break;
case 6:printf(“Junen”);break;
case 7:printf(“Julyn”);break;
case 8:printf(“Augustn”);break;
case 9:printf(“Septempern”);break;
case 10:printf(“Octobern”);break;
case 11:printf(“Novembern”);break;
case 12:printf(“Decembern”);break;
default:printf(“Illegal month”);
}
return 0;}
4.计算十个数据的平均值。#include void main(){ int a[10],sum=0,i=0;float b;printf(“输入10个数n”);for(;i<10;i++)scanf(“%d”,&a[i]);for(i=9;i>=0;i--)sum=sum+a[i];b=(float)sum/10;printf(“平均数=%fn”,b);}
5.编程实现从键盘输入一个字符串,将其字符顺序颠倒后重新存放,并输出这个字符串。(用字符数组实现)#include #include #define N 10 int main(void){ char a[N];int i,j;printf(“Input data:”);for(i=0;(a[i]=getchar())!='n';i++);a[i]=' ';
} printf(“输出的数据n”);for(j=i-1;j>=0;j--)printf(“%c”,a[j]);putchar('n');return 0;
6.从键盘任意输入一个4位数x,编程计算x的每一位数字相加之和(忽略整数前的正负号)。例如,输入x为1234,则由1234分离出其千位
1、百位
2、十位
3、个位4,然后计算1+2+3+4=10,并输出10。#include main(){ int a,b,c,d;int sum,i;printf(“输入一个四位数n”);scanf(“%d”,&i);a=i/1000;b=(i/10)%10;c=(i/100)%10;d=i%10;sum=a+b+c+d;printf(“%dn”,sum);}
7.输入20个学生的成绩,求出其中大于平均成绩学生的人数,并对20名学生成绩按从高到低进行排序。#include
int count1(float score[],int n)
{
int i,count=0;
float sum=0,avg;
for(i=0;isum+=score[i];
avg=sum/n;
for(i=0;iif(score[i]>avg)count++;
return count;
}
void sort(float score[],int n)
{
int i,j;
for(i=0;ifor(j=0;jif(score[j]{
float temp=score[j];
score[j]=score[j+1];
score[j+1]=temp;
}
}
void main()
{
int i;
float score[20];
for(i=0;i<20;i++)
scanf(“%f”,&score[i]);
int COUNT=count1(score,20);
printf(“大于平均成绩学生的人数:%d”,COUNT);
sort(score,20);
for(i=0;i<20;i++)
printf(“%f”,score[i]);
}
224466...228.利用公式=133557ׄ前100项之积计算并打印值。#include “stdio.h” void main(){ float a=2,b=1;double num=1;int i;for(i=1;i<=100;i++){
num*=a/b;
if(i%2==0)a+=2;
else b+=2;}
num*=2;printf(“π=%.16lfn”,num);}
9.由键盘输入一个班的某课程的学生成绩,计算其平均分然后输出。#include int main(){ float sum=0,n;int i=0;do {
printf(“输入第%d个学生的成绩,输入负数结束”,i+1);
scanf(“%f”,&n);
if(n<0)
break;
sum+=n;
i++;} while(1);printf(“平均成绩为%.4fn”,sum/i);return 0;}
10.从键盘输入10个整型数据,放入数组a 中,求其最大值、最小值及其所在元素的下标位置并输出。#include int main(){
}
} printf(“最大值:%d 最大值所在位置:%dn最小值:%d 最小值所在位return 0;} if(a[i]}
min_=a[i];minInd=i;int a[10],max_,min_,maxInd,minInd;int i;scanf(”%d“,&a[0]);max_=a[0];min_=a[0];maxInd=minInd=0;for(i=1;i<10;i++){
scanf(”%d“,&a[i]);if(a[i]>max_){
max_=a[i];maxInd=i;置:%dn”,max_,maxInd,min_,minInd);
11.下面的函数MyStrcmp()用于实现函数strcmp()的功能,将两个字符串s和t进行比较,要求将两个字符串中第一个不相同字符的ASCII码值之差作为MyStrcmp()函数的返回值。#include #include“string.h” int strcmpp(char *s,char *t){int la=strlen(s),lb=strlen(t),i=0;while(1){ if(s[i]!=' '&&t[i]!=' '){ if(s[i]>t[i]){return 1;break;} else if(s[i]