安顺学院软件实训报告
C语言程序设计实训
班级:19电信二班
姓名:小马
学号:2019******66
2021年 12 月 3 日
一、实训目标
1、能够利用所学C语言程序设计知识开发简易管理信息系统;
2、能够应用VC++6.0进行C程序的编辑、编译和执行;
3、能够根据系统提示进行操作、检错和纠错,培养自我学习的能力;
4、能够不断积累程序设计过程中出现的英文,会认、会读、会写和会用;
5、培养团队合作精神
二、实训步骤
1、系统功能分析
2、功能模块的实现
3、系统整合
4、项目答辩
5、撰写实训报告,实训总结
任务一:题目:抓交通肇事犯
一辆卡车违反了交通规则,撞人后逃逸。现场有三人目击该事件,但都没有记住车号,只记住车号的一些特征。甲说:车号的前两位数字是相同的;乙说:车号的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:4位的车号正好是一个整数的平方。现在请根据以上线索帮助警方找出车号以便尽快破案。
分析:
函数流程图
程序代码:
运行结果:
任务二:题目:月历显示
要求:输入一个月份,输出该月的日历(以2021年为例)
任务三:题目:用指向二维数组第0行第0列元素的指针作为函数参数,编写一个计算任意m行n列二维数组中元素的最大值,并指出其所在的行列下标值的函数,利用该函数计算三个班学生(假设每班4个学生)的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。
程序代码:
#include<stdio.h>int main(){ int a,b; int year,month,day,monthmax; printf("请输入年份:"); scanf("%d",&year); printf("请输入月份:"); scanf("%d",&month); if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)monthmax=31; if(month==2){ if(year%4==0||(year%100==0&&year%400==0))monthmax=29; else monthmax=28; } if(month==4||month==6||month==9||month==11)monthmax=30; if(month==1||month==2) { month+=12; year--; } day=(2+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7; if(day==0) { day=7; } printf("星期一 星期二 星期三 星期四 星期五 星期六 星期日\n"); for(a=1;a<=day-1;a++) { printf(" "); } for(b=1;b<=monthmax;b++) { printf(" %d ",b); if((b+day-1)%7==0) printf("\n"); } return 0; }
运行结果:
任务三:题目:用指向二维数组第0行第0列元素的指针作为函数参数,编写一个计算任意m行n列二维数组中元素的最大值,并指出其所在的行列下标值的函数,利用该函数计算三个班学生(假设每班4个学生)的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。
程序代码:
#include <iostream>
using namespace std;
int const ngClass =3;
int const ngSchoolmate = 4;
int *pClass=0 ;
int *pSchoolmate =0;
int find(int _szClass[ngClass][ngSchoolmate],int *_pClass,int *_pSchoolmate);
int main()
{
int score =0;
int nClassName [ngClass][ngSchoolmate]={
{95,65,75,78},
{91,63,78,68},
{92,62,75,98}
};
score = find(nClassName,pClass,pSchoolmate);
return 0;
}
int find(int _szClass[ngClass][ngSchoolmate],int *_pClass,int *_pSchoolmate)
{
int j;
int i;
int ntemp=0;
int nclass =0;
for ( i=0;i<ngClass;++i)
{
for (j=0;j<ngSchoolmate;++j)
{
if (_szClass[0][0]<_szClass[i][j])
{
_szClass[0][0] = _szClass[i][j];
nclass = i;
_pClass = &nclass;
ntemp = j;
_pSchoolmate = &ntemp;
}
}
}
cout <<"第"<<*_pClass+1<<"个班"<<"第"<<*_pSchoolmate+1<<"同学分数为"<<_szClass[0][0]<<"最高"<<endl;
return _szClass[0][0];
}
运行结果:
任务四:题目:单词接龙
阿刚和女友小莉用英语短信玩单词接龙游戏。一人先写一个英文单词,然后另一个人回复一个英文单词,要求回复单词的开头有若干个字母和上一个人所写单词的结尾若干个字母相同,重合部分的长度不限(如阿刚输入happy,小莉可以回复python,重合部分为py)。现在,小莉回复了阿刚一个单词,阿刚想知道这个单词与自己发过去的单词的重合部分是什么,但是阿刚觉得用肉眼找重合部分实在是太难了,所以请你编写程序来帮他找出重合部分。
程序代码:
#include <stdio.h>
#include <string.h>
void main(){
printf("\n");
char* s1 = "happy" ;
char* s2 = "python" ;
int n1 = strlen(s1) ;
int n2 = strlen(s1) ;
int count1 = 0 ;
int count2 = 0 ;
int i = 0 ;
int k =0 ;
//第一个相同字符的下标
for( int j=0;j<n1;++j ){
if(s2[0]==s1[j]){
count1 = j ;
}
}
//统计首尾相同字符的个数
for (i = count1; i < n1; i++){
for(int j=0;j<n2;j++){
if(s1[count1]==s2[j]){
count2++;
}else{
count1 ;
}
}
}
//打印相同字符个数
for (k = 0; k < count2; k++){
printf("%c",s2[k]);
}
printf("\n");
};
运行结果:
任务五:题目:连续做十道题,通过计算机产生两个1-10之间的加数,出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not,correct!”,不给机会重做,10道题做完后,按每题10分统计总分,然后输出总分和做错的题数。
程序代码:
#include <stdio.h>
#include <stdlib.h> /* 随机库函数 */
#include <time.h> /* 时间库函数 */
int count=0, ok=0; /* count表示回答次数, ok表示回答正确次数 */
/* 加法函数 */
int add(int x,int y)
{
int result = 0;
printf("%d + %d = ",x,y);
scanf("%d",&result);
count++;
if(result==(x+y)) return 1;
else return 0;
}
void print(int flag)
{
if(flag==1) printf("Right!\n");
else printf("Not Correct!\n");
}
void main()
{ int x, y, op, flag=0,i; /* x和y表示两个操作数,op表示操作码,end表示结束标记 */
srand(time(NULL)); /* 随机函数初始化 */
for(i=0;i<10;i++) {
x=1+rand()%10; /* 随机产生1至10的整数 */
y=1+rand()%10; /* 随机产生1至10的整数 */
flag=add(x,y);
print(flag);
if(flag==1) ok++;
}
printf("您总共回答了%d道题,答对%d道题,总得分: %d\n",count,ok,ok*10);
printf("\n");
}
运行结果:
任务六:题目:输入一个学生的信息并显示(定义结构体变量来实现)。
程序代码:
#include<stdio.h>//头文件
int main()//主函数
{
struct student_Information //定义学生结构体
{
int num; //学号
char name[20];//名字
char sex[20];//性别
char date[20];//日期
char score[20];//成绩
char address[20]; //地址
}
student_Information={8888,"闫小林","男生","二零一二年一月","540","广州市"};//赋值
printf("学号是:%d\n",student_Information.num);//输出学号
printf("姓名是:%s\n",student_Information.name);//输出名字
printf("性别是:%s\n",student_Information.sex);//输出性别
printf("出生年月是:%s\n",student_Information.date);//输出日期
printf("成绩是:%s\n",student_Information.score);//输出成绩
printf("住址是:%s\n",student_Information.address);//输出住址
return 0;//主函数返回值为0
}
运行结果:
项目八:猜神重年龄
美国数学家维纳(N. Wiener)智力早熟,11 岁就上了大学。他曾在1935~ 1936年应邀来中国清华大学讲学。一次, 他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是一个4位数。我年龄的4次方是一个6位数。这10个数字正好包含了0~9这10个数字,每个都恰好出现1次。”请编程计算他当时的年龄。
程序代码:
#include <stdio.h>
#include <algorithm>
#include <math.h>
using namespace std;
int age=0;
int disp(int *a)
{
int m1=a[0]*1000+a[1]*100+a[2]*10+a[3];
int m2=a[4]*100000+a[5]*10000+a[6]*1000+a[7]*100+a[8]*10+a[9];
double a1=pow(m1,1/3.0);
double a2=pow(m2,1/4.0);
if(fabs(a1-a2)<0.000001 ){
age=(int)(a1+0.5);
return 1;
}
return 0;
}
int main ()
{
int a[]={0,1,2,3,4,5,6,7,8,9};
int n = 10;
do
{
if(disp(a))
{
printf("%d",age);
break;
}
}while(next_permutation(a,a+n));
return 0;
}