c语言程序设计-向艳-书上例题源代码教学提纲
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c语言程序设计-向艳-书上例题源代码教学提纲
第五章函数
1.定义一个求两个整数和的函数
int sum(x,y)
int x,y;
{
int z;
z=x+y;
return(z);
}
2.编写函数求两个数的最大值
#include
float max(float x,float y)
{
float z;
if(x>y) z=x;
else z=y;
return (z);
}
void main()
{
float a,b,c;
scanf("%f%f",&a,&b);
c=max(a,b);
printf("max=&f\n",c);
}
3.计算并输出一个圆台两底面积之和
#include
float area(float x,float y)
float s;
s=3.1415*(x*x+y*y); return s;
}
void printstar()
{
int i;
for(i=0;i<30;i++) printf("*");
printf("\n");
}
void main()
{
float r1,r2,s;
printstar();
scanf("%f,%f",&r1,&r2); s=area(r1,r2);
printf("s=%.2f\n",s); printstar();
}
4.实参求值顺序的例子
#include
int fun(int a,int b) {
if (a>b) return 1;
else if (a==b) return 0; else return -1;
}
void main()
int k=3,s;
s=fun(k,++k);
printf("s=%d\n",s);
}
5.计算Σn i=1 i
#include
void main()
{
void s(int);
int n;
printf("input number\n"); scanf("%d",&n);
s(n);
printf("n=%d\n",n);
}
void s(int n)
{
int i;
for(i=n-1;i>=1;i--)
n=n+i;
printf("n=%d\n",n);
}
6.全局变量被“屏蔽”
#include
int a=3,b=5;
max(int a,int b)
{
int c;
c=a>b?a:b;
return(c);
}
void main()
{
int a=8;
printf("%d\n",max(a,b));
}
7.输入正方体的长宽高,求体积及三个面的面积
#include
int s1,s2,s3;
int v_s(int a,int b,int c)
{
int v;
v=a*b*c;
s1=a*b;
s2=b*c;
s3=a*c;
return v;
}
void main()
{
int v,l,w,h;
printf("\ninput length,width and height\n");
scanf("%d%d%d",&l,&w,&h);
v=v_s(l,w,h);
printf("\nv=%d,s1=%d,s2=%d,s3=%d\n",v,s1,s2,s3); }
8.用register说明变量的程序
#include
int fac(int n)
register int i,f=1;
for(i=1;i<=n;i++);
f=f*i;
return f;
}
void main()
{
int i;
for(i=1;i<=5;i++)
printf("%ds!=%d\n",i,fac(i)); }
9.用static说明变量的程序#include
int fac(int n)
{
static int i,f=1;
f=f*n;
return f;
}
void main()
{
int i;
for(i=1;i<=5;i++)
printf("%d!=%d\n",i,fac(i)); }
10.用extern说明变量的程序#include
extern int n;
void fun()
n-=20;
}
int n=100;
void main()
{
for(;n>=60;)
{
fun();
printf("n=%d\n",n); }
}
11.计算s=2^2!+3^3! #include
long f1(int p)
{
int k;
long r;
long f2(int);
k=p*p;
r=f2(k);
return r;
}
long f2(int q)
{
long c=1;
int i;
for(i=1;i<=q;i++)
c=c*i;
return c;
void main()
{
int i;
long s=0;
for(i=2;i<=3;i++)
s=s+f1(i);
printf("\ns=%ld\n",s);
}
12.用梯形法编程求函数f(x)=x*x+2*x+1的定积分S0~2 f(x)dx 的值
#include
double fun(double x)
{
double y;
y=x*x+2*x+1;
return y;
}
double djf(double n,double a,double b)
{
double s=0,h;
int i;
h=(b-a)/n;
for(i=1;i<=n;i++)
s+=((fun(a+(i-1)*h)+fun(a+i*h))*h)/2;
return(s);
}
void main()
{
double s,n,a,b;
scanf("%lf,%lf,%lf",&n,&a,&b);
s=djf(n,a,b);
printf("s=%.2lf\n",s);
}
13.用递归法求n!
#include
long fun(int n)
{
long f;
if(n==0||n==1)f=1;
else f=fun(n-1)*n;
return(f);
}
void main()
{
int n;
long y;
printf("\ninput a inteager number:\n"); scanf("%d",&n);
y=fun(n);
printf("%d!=%ld",n,y);
}
14.Hanoi塔问题
#include
void move(int n,char x,char y,char z) {
if(n==1)
printf("%c-->%c\n",x,z);
else
{
move(n-1,x,z,y);
printf("%c-->%c\n",x,z);
move(n-1,y,x,z);
}
}
void main()
{
int h;
printf("\ninput number:\n");
scanf("%d",&h);
printf("the step to moving %2d diskes:\n",h);
move(h,'a','b','c');
}
第七章数组
1.定义一个长度为10的整型一维数组,利用for循环对其中的每个元素赋值,最后利用
for循环按逆序输出这十个元素值。
#include
void main()
{
int i,a[10];
for(i=0;i<=9;i++)
a[i]=i;
for(i=9;i>=0;i--)
printf("%d",a[i]);
}
2.编写程序,从键盘输入某班学生某门课的成绩,求出最高分以及其序号。
#include
void main()
{
int max,score[40];
int i,n,num;
printf("input total numbers:\n");
scanf("%d",&n);/*输入学生实际人数*/
printf("input score:\n");
for(i=0;i<n;i++)< bdsfid="349" p=""></n;i++)<>
scanf("%d",&score[i]);
max=score[0];num=0;
for(i=1;i<="" bdsfid="353" p="">
if(score[i]>max)
{max=score[i];num=i;}
printf("max=%d,num=%d\n",max,num);
}
3.从键盘输入某班学生某门课的成绩,然后按分数从低到高进行排序。
#include
void main()
{
int temp,score[40];
int i,j,n;
printf("input total numbers:\n");
scanf("%d",&n);
printf("input score:\n");
for(i=0;i<n;i++)< bdsfid="369" p=""></n;i++)<>
scanf("%d",&score[i]);
for(i=0;i<n-1;i++)< bdsfid="372" p=""></n-1;i++)<>
for(j=0;j<n-1-i;j++)< bdsfid="374" p=""></n-1-i;j++)<>
if(score[j]>score[j+1])
{temp=score[j];
score[j]=score[j+1];
score[j+1]=temp;
}
printf("output score:\n");
for(i=0;i<n;i++)< bdsfid="382" p=""></n;i++)<>
printf("%d ",score[i]);
}
4.已知数组a中一共有10个已按由小到大排好序的整数。
现从键盘输入一个整数,判断
这个数是否是数组a中的数,如果是的话,打印出此数在数组a中的位置,否则打印找不到。
#include
void main()
{ int a[10],d,h,x,i,m;
printf("please input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("please input x:");
scanf("%d",&x);
d=0;h=9;
while(d<=h)
{m=(d+h)/2;
if(x==a[m]) break;
else if(x>a[m]) d=m+1;
else h=m-1;
}
if(d<=h)
printf("%d is the position %d\n",x,m);
else
printf("there is no %d\n",x);
5.一个学习小组有5个人,每个人有3门课的考试成绩,如表7-1所示。
求全组各科的平
均成绩和所有科目的总平均成绩。
#include
void main()
{
int i,j,s=0,average,v[3];
int
a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};
for(i=0;i<3;i++)
s=s+a[j][i];
v[i]=s/5;
}
average=(v[0]+v[1]+v[2])/3;
printf("math:%d\nc
language:%d\nFoxpro:%d\n",v[0],v[1],v[2]);
printf("total:%d\n",average);
}
6.将一个二维数组的行和列互换,存到另一个二维数组中。
#include
#define m 2
#define n 3
void main()
{int a[m][n]={2,4,6,8,10,12},b[n][m],i,j;
printf("array a:\n");
for(i=0;i<m;i++){< bdsfid="433" p=""></m;i++){<>
for(j=0;j<n;j++){< bdsfid="435" p=""></n;j++){<>
printf("%d ",a[i][j]);
b[j][i]=a[i][j];
printf("\n");
}
printf("array b:\n");
for(i=0;i<n;i++){< bdsfid="443" p=""></n;i++){<>
for(j=0;j<m;j++)< bdsfid="445" p=""></m;j++)<>
printf("%d ",b[i][j]);
printf("\n");
}
}
7.打印如图所示的杨辉三角型:
#include
#define N 15
void main()
{int i,j,n,a[N][N];
printf("Input n(1-15):\n");
scanf("%d",&n);
for(i=0;i<=n;i++)
a[i][0]=a[i][i]=1;
for(i=2;i<=n;i++)
for(j=1;j<i;j++)< bdsfid="462" p=""></i;j++)<>
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(j=0;j<=i;j++)
printf("%6d",a[i][j]);
printf("\n");
}
}
8.打印魔方阵。
所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。
要求打印出由1-n^2(n为奇数)的自然数构成的魔方阵。
#include
#define n 3
void main()
{int i,j,k,i1,j1;
int a[n][n]={0};
j=n/2;
i=0;
a[i][j]=1;
for(k=2;k<=n*n;k++)
{i1=i;j1=j;
i--;j++;
if(i<0) i=n-1;
if(j>n-1) j=0;
if(a[i][j]==0) a[i][j]=k;
else{
i=i1+1;
j=j1;
a[i][j]=k;
}
}
for(i=0;i<n;i++)< bdsfid="493" p=""></n;i++)<> {for(j=0;j<n;j++)< bdsfid="495" p=""></n;j++)<> printf("%4d",a[i][j]);
printf("\n");
}
}
9.初始化二维数组a,并输出各元素的值。
#include
void main()
{
int i,j;
char a[][5]={{'B','A','S','I','C',},{'d','B','A','S','E'}}; for(i=0;i<=1;i++)
{
for(j=0;j<=4;j++)
printf("%c",a[i][j]);
printf("\n");
}
}
10.输入并输出一个一个字符串。
#include
void main()
{char a[10],i;
for(i=0;i<10;i++)
scanf("%c",&a[i]);
for(i=0;i<10;i++)
printf("%c",a[i]);
}
11.用格式符%s对数组进行输入和输出操作。
#include
void main()
{
char str1[6],str2[6],str3[6];
printf("input string:\n");
scanf("%s%s%s",str1,str2,str3);
printf("%s %s %s\n",str1,str2,str3);
}
12.设有C程序如下:
#include
void main()
{
char str[15];
printf("input string:\n");
scanf("%s",str);
printf("%s\n",str);
}
//运行时如果输入:
//this is a book
//输出结果为:this
//(字符串长度超过字符数组定义长度)13.设有C程序如下:
#include
void main()
{
char str[15];
printf("input string:\n");
gets(str);
puts(str);
}
//运行时如果输入:this is a book
//运行结果为:this is a book
14.连接两个字符串。
#include "string.h"
#include "stdio.h"
void main()
{
char str1[25]="My name is ";
char str2[10];
printf("input your name:\n");
gets(str2);
strcat(str1,str2);
puts(str1);
}
//运行时如果输入:Wang Ling
//程序运行结果是:My name is Wang Ling
15.设有C程序如下:
#include
#include "string.h"
void main()
{
char str1[15],str2[]="C Language";
strcpy(str1,str2);
puts(str1);
}
16.字符串比较
设有C程序如下:
#include "stdio.h"
#include "string.h"
void main()
{int k;
char str1[15],str2[]="C Language";
printf("input a string:\n");
gets(str1);
k=strcmp(str1,str2);
if(k==0) printf("str1=str2\n");
if(k>0) printf("str1>str2\n");
if(k<0) printf("str1<str2\n");< bdsfid="597" p=""></str2\n");<>
}
17.求字符串长度
设有C程序如下:
#include "stdio.h"
#include "string.h"
void main()
{int k;
char str[]="C Language";
k=strlen(str);
printf("The lenth of the string is %d\n",k);
}
18.输入一个字符串,统计有多少个单词。
单词之间用空格分隔开。
#include
void main()
{char str[80],c;
int i,num=0,flag=0;
printf("please input string:\n");
gets(str);
for(i=0;(c=str[i])!='\0';i++)
if(c==' ') flag=0;
else if(flag==0)
{flag=1;
num++;
}
printf("There are %d words in the string.\n",num);
}
19.输入一个无符号整数,将其转换成二进制字符串并输出。
#include
void main()
{ unsigned n;
char str[10],t;
int k,i,j;
printf("Please input:");
scanf("%u",&n);
for(i=0;n!=0;i++)
{ str[i]=n%2+'0';
n/=2;
}
str[i]='\0';
printf("The result is:");
for(k=0,j=i-1;k<j;k++,j--)< bdsfid="641" p=""></j;k++,j--)<> {t=str[k];str[k]=str[j];str[j]=t;}
puts(str);
}
20.输入五个国家的名称,并按字母顺序排列输出这些国家的名称。
#include
#include
void main()
{char str[20],name[5][20];
int i,j;
printf("input country's name:\n");
for(i=0;i<5;i++)
gets(name[i]);
printf("\n");
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
if(strcmp(name[j],name[j+1])>0)
{strcpy(str,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],str);
}
printf("The result is:\n");
for(i=0;i<5;i++)
puts(name[i]);
}
21.用选择法对十个整数由小到大排序。
#include
void sort(int a[],int n)
{int i,j,k,t;
for(i=0;i<n-1;i++)< bdsfid="674" p=""></n-1;i++)<> {k=i;
for(j=i+i;j<n;j++)< bdsfid="677" p=""></n;j++)<> if(a[j]
if(k!=i)
{t=a[k];a[k]=a[i];a[i]=t;}
}
}
void main()
{int s[10],i;
printf("input the array:");
for(i=0;i<10;i++)
scanf("%d",&s[i]);
sort(s,10);
printf("output the array:");
for(i=0;i<10;i++)
printf("%4d",s[i]);
}
22.
#include
void nzp(int a[],int n)
{
int i;
printf("\nvalues of array a are:\n");
for(i=0;i<n;i++)< bdsfid="702" p=""></n;i++)<>
{if(a[i]<0) a[i]=0;
printf("%d",a[i]);
}
}
void main()
{
int b[8],i;
printf("\ninput 8 numbers:\n");
for(i=0;i<8;i++)
scanf("%d",&b[i]);
printf("initial values of array b are:\n");
for(i=0;i<8;i++)
printf("%d",b[i]);
nzp(b,8);
printf("\nlast values of array b are:\n");
for(i=0;i<8;i++)
printf("%d",b[i]);
}
23.把一个整数插入已按由大到小顺序排好序的数组中。
要求插入后的数组仍按原来的排序
规律排列。
#include
void insert(int a[],int n,int x)
{int s,i;
for(i=0;i<n;i++)< bdsfid="728" p=""></n;i++)<>
if(x>a[i])
{for(s=n-1;s>=i;s--)
a[s+1]=a[s];
break;
}
a[i]=x;
}
void main()
{
int i,j,s,x,a[11]={127,98,87,54,48,44,37,25,20,18}; printf("\ninput number:");
scanf("%d",&x);
insert(a,10,x);
printf("\n output array:");
for(i+0;i<11;i++)
printf("%d ",a[i]);
printf("\n");
}
24.在矩阵a中选出各行最大的元素组成一个一维数组b. #include
void fun(int a[][4],int b[])
{int i,j;
for(i=0;i<=2;i++)
{b[i]=a[i][0];
for(j=1;j<=3;j++)
if(a[i][j]>b[i]) b[i]=a[i][j];
}
}
void main()
{int a[][4]={3,16,87,65,4,32,11,108,10,25,12,37};
int b[3],i,j;
fun(a,b);
printf("\narray a:\n");
for(i=0;i<=2;i++)
{for(j=0;j<=3;j++)
printf("%5d",a[i][j]);
printf("\n");
}
printf("array b:\n");
for(i=0;i<=2;i++)
printf("%5d",b[i]);
printf("\n");
}
第八章指针
第九章结构体与共用体
1.
给结构体变量赋值并输出。
#include
void main()
{
struct{
int num;
char name[20];
int age;
char sex;
float score;
}boy1,boy2;
boy1.num=20101;
scanf("%s %d %c %f",/doc/108934441 .html,,&boy1.age,&boy1.sex,&boy1.score);
boy2=boy1;
printf("Number=%d\tName=%s\t",boy2.num,http://www.d /doc/108934441.html,);
printf("Age=%d\tSex=%c\tScore=%.2f\n",boy2.age,boy2.se x,boy2.score);
}
2.对结构体变量初始化。
#include
void main()
{
struct stu{
int num;
char name[20];
int age;
char sex;
float score;
}boy2,boy1={20101,"王芳",19,'w',89};
boy2=boy1;
printf("Number=%d\tName=%s\t",boy2.num,http://www.d /doc/108934441.html,);
printf("Age=%d\tSex=%c\tScore=%.2f\n",boy2.age,boy2.se x,boy2.score);
}
3.编写程序,计算表num name age sex score
---- ----- --- --- ----- 所示的学生情况登记表中的而所有学生的平均成绩和不及格的人数。
#include
struct stu{
int num;
char name[20];
int age;
char sex;
float score;
}boy[5]={{20101,"王芳",19,'W',89},{20102,"任盈盈",19,'W',92},{20103,"吴宇",18,'M',76},{20104,"李平",19,'M',87},{20105,"王明",19,'M',58}};
void main()
{
int i,c=0;
float ave=0;
for(i=0;i<5;i++)
{
ave+=boy[i].score;
if(boy[i].score<60) c+=1;
}
ave=ave/5;
printf("average=%.1f\ncount=%d\n",ave,c);
}
4.编写程序,,建立表9-3所示的同学通讯录并输出。
编程点拨:先定义一个结构体mem,它有三个成员name,phone,和address,分别用来表示姓名、电话号码和住址。
然后定义一一个mem类型的结构体数组man。
再用循环结构分别输入和输出各个元素中成员的值。
相应的程序如下:
#include
#define NUM 3
struct mem{
char name[20];
char phone[10];
char address[30];
};
void main()
{
struct mem man[NUM];
int i;
for(i=0;i<num;i++)< bdsfid="848" p=""></num;i++)<>
{
printf("input name:");
gets(man[i].name);
printf("input phone:");
gets(man[i].phone);
printf("input address:");
gets(man[i].address);
}
printf("name\t\tphone\t\taddress\n\n");
for(i=0;i<num;i++)< bdsfid="859" p=""></num;i++)<>
printf("%s\t\t%s\t\t%s\n",man[i].name,man[i].phone,man[i]. address);
}
5.指向结构体指针变量的应用。
#include
struct stu{
int num;
char name[20];
int age;
char sex;
float score;
}*ps,boy1={20101,"王芳",19,'W',89};
void main()
{
ps=&boy1;
printf("Number=%d\tName=%s\t",boy1.num,http://www.d /doc/108934441.html,);
printf("Age=%d\tSex=%c\tScore=%f\n\n",boy1.age,boy1.se
x,boy1.score);
printf("Number=%d\tName=%s\t",(*ps).num,(*ps).name);
printf("Age=%d\tSex=%c\tScore=%f\n\n",(*ps).age,(*ps).sex ,(*ps).score);
printf("Number=%d\tName=%s\t",ps->num,ps->name);
printf("Age=%d\tSex=%c\tScore=%.2f\n\n",ps->age,ps->se x,ps->score);
}
6.指向结构体数组的指针的应用。
#include
struct stu{
int num;
char name[20];
int age;
char sex;
float score;
}*p,boy[5]={{20101,"王芳",19,'W',89},
{20102,"任盈盈",19,'W',92},
{20103,"吴宇",18,'M',76},
{20104,"李平",19,'M',87},
{20105,"王明",19,'M',58}};
void main()
{
p=boy;
printf("No\tName\tAge\tSex\tScore\n");
for(;p<boy+5;p++)< bdsfid="901" p=""></boy+5;p++)<> printf("%d\t%s\t%d\t%c\t%.2f\n",p->num,p->name,p->age ,p->sex,p->score);
}
7.将9-4重新按函数的形式编写程序,。