C语言程序设计上机实训报告
教学周数 : 第13~14周(2周)
地 点: 南门机房2楼
指导老师: 苏兴龙 李 莹
实训目的:
1、通过两周集中强化上机实训,使学生更加系统地理解和掌握C语言的基本概念、语言特点和编程技巧。
2、通过本次实训,使学生应用C语言在程序设计方面得到系统锻炼,为将来用C、VC进行软件开发打下良好基础。
实训环境:
硬件:
软件:Windows XP Turbo C V2.0
实训要求:
1、对所编写的源程序的要求:
(1)每人独立完成6套题调试任务;
(2)明确填空题与改错题的算法思路;
(3)编源程序要有适当的注释,使程序容易阅读;
(4)要求独立完成任务,不得抄袭。
2、实训报告内容的要求:
(1)统一封面;
(2)C语言编程题源程序代码;
(3)实训总结。
实训内容(共6套):
第一套 上机训练试题
一.填空题
1.下列给定程序中,函数fun()的作用是:将字符串tt中的大写字母都改为对应的小写字母,其他字符不变。例如,若输入“Ab, c D”,则输出“ab,cd”。
试题程序:
#include <stdio.h>
#include <string.h>
#include <conio.h>
char *fun (char tt[ ])
{
int i;
for(i=0;tt;i++)
{
if((tt>=’A’)&&(tt<= ‘z’ )
/*tt的范围在26个英文字母的取值之间,因此该处填写‘z’,又因为小写字母的ASCII值大于大写字母的ASCII值。*/
tt+=32;
}
return(tt);
}
main()
{
char tt[81];
printf(“\nPlease enter a string :”);
gets(tt);
printf(“\nThe result string is:\n%s”,fun( tt ));
/*该处调用了被调用的fun函数,fun被调用的fun函数的函数名为tt*/
}
2.改错题
下列给定程序中,函数fun()的功能是逐个比较a,b两个字符串对应位置中的字符,把ASCII值小或相等的字符依次存放到c数组中,形成一个新的字符串。
例如:a中的字符串为fshADfg, b中的字符串为sdAEdi,则c中的字符串应为fdAADf.
请改正程序中的错误,使它能得到正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序中的结构。
试题程序:
#include <stdio.h>
#include <string.h>
void fun(char p[],char q[],char c[])
{ int i=0,j=0,k=0;
while(p||q[j])
/*********found***********/
{ if(p<=q[j]) c[k]=p
else c[k]=q[j];
/*根据题目中要求比较两个字符串对应的的字符,把ASCII值小的存放到c数组中。
if(p)
i++;
if(q[j])
j++;
/************found*************/
k++;
}
}
main()
{ char a[10]=”fshADfg”,b[10]=”sdAEdi”,c[80]={‘\0’};
fun(a, b,c);
printf(“The string a:”); puts(a);
printf(“The string b:”); puts(b);
printf(“The result :”); puts(c);
}
3.编程题
请编写函数fun,其功能是将两个两位数的正数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。例如,当a=16,b=35,调用该函数后,c=5361。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <stdio.h>
long fun(int a,int b)
{long c;
c=(b%10)*1000+(b/10)*100+(a%10)*10+(a/10);
/*题目中要求把a、b中的数字存放到c中组成一个四位数,a的十位做c的个位,a的个位做c的十位,b的个位做c的千位,b的十位做c的百位。因此给b、a各求得的余数做c的千位和十位,而他们求得的商做c的百位和个位。*/
}
main()
{int a,b;
long c;
clrscr();
printf(“Input a, b:”);
scanf(“%d, %d”,&a,&b);
c=fun(a,b );
printf(“The result is:%ld\n”,c);
}
第二套 上机训练试题
1. 填空题
下列给定程序中,函数fun()的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每5个元素求一个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。
试题程序:
#include <stdio.h>
#define SIZE 20
fun(double s[ ],double w[ ])
{ int k, i; double sum;
for(k=2,i=0; i<SIZE; i++)
{s=k;k+=2;}
sum=0.0;
for(k=0,i=0;i<SIZE;i++)
{sum+=s;
if((i+1) % 5==0)
{w[k]=sum/5;sum=0;k++;}
}
return k;
/*根据条件求五个数的平均值,存放到w数组中,否则,返回k继续求。*/
}
main()
{ double a[SIZE],b[SIZE/5];
int i,k;
k=fun(a,b);
printf(“The original data:\n”);
for(i=0;i<SIZE;i++)
{
if(i%5==0) printf(“\n”);
printf(“%4.0f”,a);
}
printf(“\n\nThe result:\n”);
for(i=0;i<k;i++) printf(“%6.0f”, b );
printf(“\n\n”);
}
2.改错题
下列给定程序中,函数fun()的功能是根据整型形参m,计算如下公式的值。
Y=
例如:m中的值为5,则应输出0.838611。
请改正程序中的错误,使它能得到正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<conio.h>
#include<stdio.h>
double fun(int m)
/*被调用函数是一个表达式而并非一条语句*/
{double y=1.0;
/***************found************/
int j=1;
int i;
for(i=2;i<m;i++)
{ j=-1*j;
/***************found************/
y+=1.0* j/(i*i);
}
return (y);
}
main()
{
int n=5;
clrscr();
printf(“\nThe result is %lf\n”,fun(n));
}
3.编程题
请编写一个函数void fun(int tt
[N],int pp[N]),tt指向一个M行N列的二维数组,求出数组每列中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号内填入所编写的若干语句。
试题程序:
#include <conio.h>
#include <stdio.h>
#define M 3
#define N 4
void fun(int tt
[N],int pp[N])
{ int i,j,max;
for(j=0;j<N;j++)
{max=tt[0][j];
for(i=0;i<M;i++)
if(tt[j]>max)
max=tt[j];
pp[N]=max;}
/*定义被调用函数的初值及条件tt[j]值如果大于max则,把max给予tt,最后把max值赋予P[N的数组。*/
}
main()
{int t
[N]={{68,32,54,12},{14,24,88,58},
{42,22,44,56}};
int p[N],i,j,k;
clrscr();
printf(“The riginal data is:\n”);
for(i=0;i<M;i++)
{
for (j=0;j<N;j++)
printf(“%6d”,t[j]);
printf(“\n”);
}
fun(t,p);
printf(“\nThe result is:\n”);
for(k=0;k<N;k++)
printf(“%4d”,p[k]);
printf(“\n”);
}
第三套 上机训练试题
1.填空题
下列给定程序中,函数fun()的功能是:将s所指字符串中的字母转换为按字母序列的后续字母(但Z转化为A,z转化为a),其他字符不变。
试题程序:
#include <stdio.h>
#include <ctype.h>
#include<conio.h>
void fun(char s[])
{int i=0;
while( s [] )
/*当数组s满足此条件是执行下面的if语句。*/
{ if(s>=’A’&&s<=’Z’||s>=’a’&&s<=’z’)
{if(s==’Z’) s=’A’;
else if(s==’z’) s=’a’;
else s+= 1 ;
i++; }
else break ;
/*当条件不满足时跳出循环。*/
}
}
main()
{char s[80];
printf(“\n Enter a string with length<80:\n\n”); gets(s);
printf(“\n The string:\n\n”); puts(s);
fun(s);
printf(“\n\n The Cords :\n\n”); puts(s);
}
2.改错题
下列给定程序中,函数fun的功能是按以下递归公式求函数值。Fun(n)=
例如:当给n输入5时,函数值为240;当给n输入3时,函数值为60。
请改正程序中的错误,使它能得到正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
/***************found************/
fun(int n)
{ int c;
/**************found***********/
if(n= =1) c=15;
else c=fun(n-1)*2;
return(c);
}
main()
{
int n;
printf(“Enter n:”);
scanf(“%d”,&n);
printf(“The result :%d\n\n”,fun(n));
}
3.编程题
请编写函数fun(),对长度为7个字符的字符串, 除首、尾字符外,将其余5个字符按ASCII值码升序排列。例如:原来的字符串为BdsihAd,则排序后输出为BAdhisd。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <stdio.h>
#include <ctype.h>
#include<conio.h>
int fun(char s[],int num)
{char t;
int i,j;
for(i=1;i<num-2;i++)
for(j=i+1;j<num-1;j++)
if(s>[j])
{t=s;
s=s[j];
s[j]=t;}
}
/*定义被调用函数的条件对字符串除首尾外,其余按ASCII值的大小排出。*/
main()
{ char s[10];
clrscr();
printf(“输入7个字符的字符串:”);
gets(s);
fun(s,7);
printf(“\n%s”,s);
}
第四套 上机训练试题
1.填空题
下列给定程序中函数fun()的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如:当s中的数为87653142时,t中的数为7531。
试题程序:
#include <stdio.h>
#include <conio.h>
long fun(long s)
{ int d,t;
long s1=1;
t=0;
while(s>0)
{ d=s % 10;
/*求出该长整型数中的各个数*/
if(d%2!=0)
{t=d*s1+t;
s1*= 10 ;
}
s/= 10 ;
}
return t;}
main()
{long s,t;
clrscr();
printf(“\nPlease enter s: “); scanf(“%ld”,&s);
t=fun(s);
printf(“The result is:%ld\n”,t);
}
2.改错题
下列给定程序中函数fun()的功能是计算 1/n!的值。
例如:给n输入5,则输出0.008333。
请改正程序中的错误,使它能得到正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
#include <conio.h>
/*************found**************/
double fun(int n)
{ double result =1.000000;
if(n==1)
return 1.000000;
/*因为其结果是实型的数,因此小数点后保留6位小数*/
while(n>1&&n<170)
/**************found************/
result *=n--;
result=1/result;
return result;
}
main()
{
int n;
printf(“Input n:”);
scanf(“%d”,&n);
printf(“\n%d!=%lf\n”,n,fun(n));
}
3.编程题
编写函数fun(),它的功能是求n以内(不包括n)同时能被5与11整除的所有自然数之和的平方根s,并作为函数值返回。
例如:n为1000时,函数值应为s=96.979379。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include < conio.h>
#include <math.h >
#include <stdio.h>
double fun(int n )
{int i,sum=0;
double s;
for(i=1;i<n;i++)
{while(i%5==0&&i%11==0)
sum+=i;
s=sqrt(sum);}
break i;
/*定义被调用函数的条件及初值*/
}
main()
{
clrscr();
printf(“s=%f\n”,fun(1000));
}
第五套 上机训练试题
1.填空题
下列给定的程序中,fun()函数的功能是:将p所指字符串中每个单词的最后一个字母改成大写(这里的“单词”是指有空格隔开的字符串)。例如,若输入:
I am a student to take the examination
则应输出:I aM A studenT tO takE thE examinatioN
试题程序:
#include <conio.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
void fun(char p[])
{
int i,k=0;
for (i=0; p!=’\0’ ;i++)
if(k)
{
if(p= =’ ‘)
{
k=0 ;
p[i-1] =toupper(p[i-1]);
/*toupperp[i-1]值赋给p[i-1]*/
}
}
else
k=1;
}
main()
{char chrstr[64];
int d;
printf(“\n please enter an English sentence within 63 letters:”);
gets(chrstr);
d=strlen(chrstr);
chrstr[d]=’ ‘;
chrstr[d+1]=0;
printf(“\n Bofore changing:\n %s”,chrstr);
fun(chrstr)- ;
/*被调用函数*/
printf(“\n After changing:\n %s”,chrstr);
}
2.改错题
下列给定程序中函数fun()的功能是计算正整数num的各位上的数字平方和。
例如:输入352,则输出38;若输入328,则输出应该是77。
请改正程序中的错误,使它能得到正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
#include <conio.h>
long fun(long num)
{
/***********found*****************/
long k=1;
do{
k+=(num%10)*(num%10);
num/=10;
/**************found**************/
}while(num);
return(k-1);
/*条件不满足时返回*/
}
main()
{
long n;
clrscr ();
printf(“\please enter a number :”);
scanf(“%ld”,&n);
printf(“\n%ld\n”,fun(n));
}
3.编程题
请编写函数fun(),它的功能是求Fibonacci数列中小于t的最大的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为F(n)=
例如:t=1000时,函数值为987。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include <conio.h>
#include <math.h>
#include <stdio.h>
int fun(int t)
{int a=1,b=1,c=0,I;
do{c=a+b;
a=b;
b=c;
while(c<t);
c=a;
return c;
/*该被调用函数的需要的条件用来满足主函数。*/
}
main()
{
int n;
clrscr();
n=1000;
printf(“n=%d,f=%d\n”,n,fun(n));
}
第六套 上机训练试题
1.填空题
下列给定程序中,函数fun()的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。
试题程序:
# include <conio.h>
# include <string.h>
# include <stdio.h>
# define N 80
int fun(char s[],char t[])
{ int n;
int i, j, k;
n=0; i=0;
while(s!=’\0’)
{ k=i;
j=0;
while(t[j]!=’\0’)
if(s[k]= =t[j]) {j++; i++ ;}
else break;
if(t[j]= = s[i+1] )
n++;
s++ ;
/*s字符串中含有t所指字符串的数目条件不满足是s,i自加。*/
}
return n;
}
main()
{ char a[N],b[N];int m;
printf(“\nPlease enter string a :”);gets(a);
printf(“\nPlease enter substring b :”);gets(b);
m=fun(a,b);
printf(“\nThe result is :m=%d\n”,m);
}
2.改错题
下列给定程序中,函数fun()的功能是将字符串s中位于偶数位置的字符或ASCII码为奇数的字符放入字符串t中(规定第1个字符放在第0位中)。
例如:字符串中的数据为ADFESHDI,则输出应当是AFESDI.
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构
试题程序:
# include <conio.h>
# include <stdio.h>
# include <string.h>
# define N 80
/***********found*************/
void fun(char s[],char t[ ])
{
int i,j=0;
/*给j赋初值*/
for(i=0;i<=strlen(s);i++)
/*************found*************/
if(i%2= =0||s%2!=0)
t[j++]=s;
t[j]=’\0’;
}
main()
{ char s[N],t[N];
clrscr();
printf(“\nPlease enter string s:”);
gets(s);
fun(s,t);
printf(“\nThe result is:%s\n”,t);
}
3.编程题
请编写一个函数fun(),它的功能是计算并输出给定整数n的所有因子(不包括1与其自身)的平方和(规定n的值不大于100)。
例如:主函数从键盘给输入n的值为56,则输出为sum=1113。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
# include <stdio.h>
long fun(int n)
{int i;
long s=0;
for(i=2;i<n-1;i++)
if(n%I)==0
c+=i*I ;
return s;
/*定义被调用函数中需要用到条件和变量。用来实现主函数的功能*/
main()
{int n;
long sum;
printf(“Input n:”);
scanf(“%d”,&n);
sum=fun(n);
printf(“sum=%ld\n”,sum);
}
成绩考核:
1.成绩考核以实验报告为主要依据,主要考察填空题和改错题的正确性以及编程题所采用的算法和思路。
2.上交实验报告时,老师对报告内容进行提问,学生的答辩情况作为成绩评定的参考指标。
3.平时表现和考勤作为成绩评定的一项指标。