首页 > 精品范文库 > 4号文库
C语言实验报告题及答案
编辑:紫云飞舞 识别码:13-1107992 4号文库 发布时间: 2024-08-18 00:41:49 来源:网络

第一篇:C语言实验报告题及答案

《C程序设计实验》

实验一 C程序开发环境(2学时)

1.实验目的熟悉C语言的集成开发环境,了解菜单的使用方法;掌握C语言程序上机的编辑、编译、连接、运行的基本步骤;了解C语言程序的结构。

2.实验内容

(1)熟悉C语言程序上机的编辑、编译、连接、运行的基本步骤;

(2)输入并调试、运行下面的程序。

#include

int main()

{

printf(“This is a C program.n”);

return 0;

}

(3)输入并调试、运行下面的程序。

#include

int main()

{

int max(int x,int y);

int a,b,c;

scanf(“%d,%d”,&a,&b);

c = max(a,b);

printf(“max=%dn”,c);

return 0;

}

int max(int x,int y)

{

int z;

if(x > y)z = x;

else z = y;

return(z);

}

3.实验仪器设备

微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。

4.问题讨论

将printf函数改为print,调试并分析结果。

实验二 数据类型、运算符与表达式(2学时)

1.实验目的掌握整型、字符型和实型变量的定义和使用;掌握算术运算符的使用;掌握C语言表达式的运算规则。

2.实验内容

(1)输入并调试、运行下面的程序。

#include

int main()

{

char c1,c2;

c1=97;

c2=98;

printf(“%c %cn”,c1,c2);

printf(“%d %dn”,c1,c2);

return 0;

}

(2)输入并调试、运行下面的程序。

#include

int main()

{

int i,j,m,n;

i=8;

j=10;

m=++i;

n=j++;

printf(“%d,%d,%d,%dn”,i,j,m,n);

return 0;

}

3.实验仪器设备

微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。

4.问题讨论

将++i改为i++,j++改为++j,程序的运行结果会有何变化?

实验三 顺序结构程序设计(2学时)

1.实验目的掌握scanf、printf函数语句的使用方法;熟练应用赋值、输入、输出语句。

2.实验内容

(1)输入三角形三边长,求三角形面积。

(2)输入一个摄氏温度,要求输出华氏温度。公式为f=9/5*c+32。

3.实验仪器设备

微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。

4.问题讨论

如何理解格式控制符与它对应的变量之间的关系?

实验四 选择结构程序设计(2学时)

1.实验目的掌握利用if语句实现选择结构程序设计的方法;掌握利用switch语句实现选择结构的程序设计方法;注意break在switch语句的作用。

2.实验内容

(1)已知:当x<1时,y=x;当1≤x<10时,y=2x-1;当x≥10时,y=3x-11。输入x的值,输出对应y的值。

(2)输入一个百分制成绩,要求输出成绩等级A、B、C、D、E,练习使用switch语句。

(3)判断方程ax2+bx+c=0有几个解,如果有解则输出。

3.实验仪器设备

微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。

switch语句可否转换成if语句实现?

实验五 循环结构程序设计(4学时)

1.实验目的掌握利用while 或do while实现循环结构程序设计的方法;掌握利用for语句实现循环结构程序设计的方法。

2.实验内容

(1)编程实现1!+2!+…+n!的和,n由键盘输入。

(2)输出九九乘法表。

(3)输出“水仙花数”。“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。

(4)输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。

3.实验仪器设备

微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。

4.问题讨论

三种循环结构有何联系和区别?

实验六 数组(4学时)

1.实验目的掌握一维数组的定义和输入输出操作;掌握二维数组的定义和输入输出操作;掌握字符数组和字符串处理函数的使用;掌握与数组有关的重要算法:排序、查找等。

2.实验内容

(1)输入15个整数,用冒泡法对它们按照由小到大的顺序排序并输出。

(2)输入15个整数,用选择法对它们按照由小到大的顺序排序并输出。

(3)求矩阵对角线元素之和。

(4)有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其它字符的个数。

3.实验仪器设备

微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。

增加或删除数组的一个元素,对数组的影响有哪些?

实验七 函数(4学时)

1.实验目的掌握C语言中函数定义、函数调用的方法和规则;掌握函数实参与形参的对应关系,以及“值传递”的含义;掌握全局变量和局部变量的关系和使用方法。

2.实验内容

(1)写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。

(2)求两个整数的最大公约数和最小公倍数。用一个子函数求最大公约数,用另一个子函数根据求出的最大公约数求最小公倍数。

(3)输入10个学生5门课的成绩,分别用函数求:①每个学生平均分;②每门课的平均分;③找出最高的分数对应的学生和课程;④求平均分方差;

3.实验仪器设备

微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。

4.问题讨论

如何将子函数中某个变量的值传回主函数?

实验八 指针(4学时)

1.实验目的掌握指针的概念,学会定义和使用指针;掌握跟数组有关的指针的操作(包括字符数组);掌握跟函数有关的指针的操作。

2.实验内容

(1)另写一个函数完成strcmp()功能。

(2)另写一个函数完成strcpy()功能。

(3)将一个5×5的矩阵转置,用一个子函数实现该功能。

3.实验仪器设备

微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。

4.问题讨论

如何理解指针和数组之间的关系?

实验九 结构体(2学时)

1.实验目的掌握结构体类型变量的定义和使用;掌握结构体类型数组的概念和应用;掌握链表的概念,初步学会对链表进行操作;理解共用体的概念与使用。

2.实验内容

(1)有10个学生,每个学生的数据包括学号、姓名、3门课的成绩。从键盘输入10个学生数据,要求输出每门课的平均成绩。

(2)有n个人围成一圈,顺序排号。从第1个人开始1—3报数,凡报到3的人退出圈子,问 最后留下的是原来第几号的那位。

3.实验仪器设备

微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。

4.问题讨论

结构体类型变量有哪几种定义和使用的方法?

实验十 综合程序设计(4学时)

1.实验目的掌握程序设计的基本方法和技能,理解结构化程序设计和模块化设计方法的基本思想,能综合运用C语言的结构和函数等功能编写程序解决实际问题。

2.实验内容

(1)用麦克劳林级数求sin(x),x有键盘输入。

(2)有五个学生,每人有3门课的成绩,从键盘输入学生学号、姓名、3门课成绩,计算出每人平均分并将其和原始数据都存放在磁盘文件“stud.dat”中

3.实验仪器设备

微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。

4.问题讨论

数据的不同组织形式对程序有哪些影响?

第二篇:c语言编程题答案

六、编程题参考答案

1.编程,统计在所输入的50个实数中有多少个正数、多少个负数、多少个零。#include “stdio.h” #define N 50 void main(){ float x;unsigned int s1,s2,s3,i;s1=s2=s3=0;for(i=1;i<=N;i++){ scanf(“%f”,&x);if(x<0)s1++;else if(x==0)s2++;else s3++;} printf(“负数%u个,零%u个,正数%u个n”,s1,s2,s3);}

2.编程,计算并输出方程 X2+Y2=1989 的所有整数解。#include “stdio.h” void main(){ int x,y;for(x=-45;x<=45;x++){ y=-45;while(y<=45){ if(x*x+y*y==1989)printf(“%d*%d+%d*%d=%dn”,x,x,y,y,1989);y++;} } }

3.编程,输入一个10进制正整数,然后输出它所对应的八进制、十六进制数。#include “stdio.h” void main(){ unsigned int x;printf(“请输入一个十进制正整数:”);scanf(“%u”,&x);printf(“%d=八进制数 %o=十六进制数%xn”,x,x,x);}

4.编程,找出1000以内的所有完数,并输出其因子。#include “stdio.h” void main(){ int i,j,s=1;for(i=1;i<=1000;i++,s=1){ for(j=2;j<=i/2;j++)if(i%j==0)s+=j;// 求 i的因子和

if(s==i){ printf(“%d=1”,i);// 如果i 是完数则输出其各因子

for(j=2;j<=i/2;j++)if(i%j==0)printf(“+%d”,j);printf(“n”);} } }

5.输入一个正整数,输出它的所有质数因子。#include “stdio.h” void main(){ int m,i=2;printf(“请输入一个整数:”);scanf(“%d”,&m);while(m!=1)if(m%i==0){ printf(“%d ”,i);m/=i;} else i++;printf(“n”);}

6.输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。#include “stdio.h” #define N 20 void main(){ int a[N],i,j;for(i=0;i

7.输入两个数组(数组元素个数自定),输出在两个数组中都出现的元素。#include “stdio.h” #define NA 6 #define NB 8 void main(){ float a[NA],b[NB];int i,j;for(i=0;i

8.输入两个数组(数组元素个数自定),输出在两个数组中都不出现的元素。#include “stdio.h” #define NA 6 #define NB 8 void main(){ float a[NA],b[NB];int i,j;for(i=0;i

9.编程,将字符数组S2中的全部字符拷贝到字符数组S1中。#include “stdio.h” void main(){ char s1[20],s2[]=“Good morning!”;int i=0;while((s1[i++]=s2[i])!='');printf(“%sn”,s1);}

10.给定年份year,判别该年份是否闰年(定义一个宏以判别该年份是否闰年)。#include #define f(year)year%4==0&&year%100!=0||year%400==0 void main(){ int y;printf(“请输入年份:”);scanf(“%d”,&y);if(f(y))printf(“%d 年为闰年n”,y);else printf(“%d 年不是闰年n”,y);}

11.输入一行小写字母后,或输出原文,或将字母变成其下一字母(a变成b、b变成c、„、x变成y、y变成z、z变成a)输出,用条件编译方法实现以上选择。#include #define MAX 80 #define SWITCH 1 void main(){ char str[MAX];int i=0;printf(“请输入文本行:n”);scanf(“%s”,str);#if(SWITCH)while(str[i]!='')if(str[i]>='a'&&str[i]<='z')if(str[i]=='z')str[i]='a';else str[i]++;i++;#endif printf(“%sn”,str);}

12.编写函数,处理n行n列维数组:将每一行的元素同除以该行上绝对值最大的元素。

#include “stdio.h” #include “math.h” void p(float** a,int n){ int i,j;float x;for(i=0;ifabs(x))x=*(*(a+i)+j);for(j=0;j

{ float b[3][3]={{1,2,3},{4,5,6},{7,8,9}};int i,j;float* c[3];for(i=0;i<3;i++)c[i]=b[i];p(c,3);for(i=0;i<3;i++){ for(j=0;j<3;j++)printf(“%f ”,b[i][j]);printf(“n”);} }

13.编写函数,求任意阶多项式 a0+a1X+a2X2+...+anXn 的值并返回多项式的值。#include “stdio.h” float f1(float* a,float x,int n){ int i;float t=1,y=0;for(i=0;i

14.设计一个函数,使给出一个数的原码,能得到该数的补码。

#include // 假定sizeof(int)为2;

unsigned int getbit(unsigned int value)//第1位为0表示数的原码,{ if(value>>15)return(value^0x7fff)+1;//其补码即其原码;若value else return value;//右移15位后为1,表示value是负数的原码,负数

} //的补码为原码按位取反(第1位不变)后加1。

void main(){ unsigned int y=0x800c,k;k=getbit(y);printf(“%xn”,k);}

15.编写函数,求m行、n列的二维数组全体元素中负数的个数。#include int sum(float **a,int m,int n){ int i,j;int y=0;for(i=0;i

{ float b[2][3]={{-1,2,-3},{4,-5,-6}};int i;float* c[2];for(i=0;i<2;i++)c[i]=b[i];printf(“%dn”,sum(c,2,3));} 16.编写函数,返回在一个整数组中出现次数最多的数及其出现次数。#include void fun(float *a,int n,int *k,float *x){ int i,j,y;*k=0;for(i=0;i*k){ *k=y;*x=*(a+i);} } return;} void main()// 函数引用示例

{ float c[10]={0,4,2,4,3,2,4,-3,1.5,7.6},t;int m;fun(c,10,&m,&t);// 若说明float *t;int *m;printf(“元素%f出现次数为%dn”,t,m);// 引用为 fun(c,10,m,t)将

} // 产生悬挂指针的错误,即t、m不只指向确定的存储单元。

17.编一个程序,打入月份号,输出该月的英文月名,要求用指针数组处理。#include void main(){ char *month_name[12]={“January”,“February”,“March”,“April”, “May”, “June”,“July”,“August”,“September”,“October”, “Novenber”,“December”};int n;printf(“请输入月份号:”);scanf(“%d”,&n);if(n<1||n>12)printf(“月份号输入错误!n”);else printf(“%d月的英文表示是%sn”,n,month_name[n-1]);}

18.编写递归函数,将输入的以“?”结束的字符串按与输入相反的顺序输出。#include void pline(){ char ch;if((ch=getchar())!='?'){ pline();putchar(ch);} return;} void main()// 函数引用示例 { pline();printf(“n”);}

19.编写函数,在n个元素的一维数组中,统计比相邻元素大的数组元素个数并将统计数返回(不考虑a[0]和a[n-1]),要求以指针变量而不是数组名作参数。#include int num(float *x,int n){ int i,k=0;for(i=1;i*(x+i-1)&&*(x+i)>*(x+i+1))k++;return k;} void main()// 函数引用示例

{ float a[10]={1,3,4,2,6,7,12,5,9,8};printf(“%dn”,num(a,10));}

20.编写函数,在n个元素的一维数组中,找出最大值、最小值并传送到调用函数。

#include void num(float *b,int n,float *max,float *min){ *max=*b;*min=*b;for(int i=1;i*max)*max=*(b+i);if(*(b+i)<*min)*min=*(b+i);} return;} void main()// 函数引用示例

{ float a[10]={1,3,4,2,6,7,12,5,9,8},x,y;num(a,10,&x,&y);printf(“最大值为%f,最小值为%f。n”,x,y);}

21.编写一个函数,统计m行n列二维数组中有多少个正数、多少个负数,多少个零,并

返回统计结果。

#include void sub(float** a,int m,int n,int *fs,int *lin,int *zs){ int i,j;*fs=*lin=*zs=0;for(i=0;i

{ float b[5][3]={{-1,5,2},{3,0,-2},{0,-3,5}, {4,7,-8},{3,4,5}},*c[5];int i,k1,k2,k3;for(i=0;i<5;i++)c[i]=b[i];sub(c,5,3,&k1,&k2,&k3);printf(“负数%d个,零%d个,正数%d个。n”,k1,k2,k3);}

22.编写函数,在给定的一行以'.'结束的字符中,找出最长的单词并输出。#include void find(char *str){ char *p1,*p2,*p3;int k1=0,k2=0;// k1为最长串的长度,初值为0。

p1=p2=p3=str;// p3指向最长串首字符,p1指向当前处理串首字符,while(*p2!='.')// p2为移动指针,*p2为空格表示查找到单词尾部。

if(*p2!=' '){ k2++;p2++;} else if(k2>k1){ p3=p1;p1=++p2;k1=k2;k2=0;} else { k2=0;p1=++p2;} for(k2=0;k2<=k1;k2++)printf(“%c”,*(p3+k2));printf(“n”);return;} void main()// 函数引用示例 { char a[40];int i=0;while((a[i++]=getchar())!='.');find(a);}

23.编写函数print,打印一个学生的成绩数组,该数组中有若干个学生的数据记录,每个记录包括num,name,score[3]。#include struct student { char num[7],name[9];int score[3];};// 尾部分号不得遗漏

void print(struct student* s,int n){ int i;// 运算符'*'、'&'的优先级均低于运算符'.' for(i=0;i

printf(“%s %s %4d%4d%4dn”,(*(s+i)).num,(*(s+i)).name,(*(s+i)).score[0],(*(s+i)).score[1],(*(s+i)).score[2]);return;} void main(){ struct student t[4];int i;for(i=0;i<4;i++)

scanf(“%s%s%d%d%d”,&t[i].num,&t[i].name,&t[i].score[0], &t[i].score[1],&t[i].score[2]);print(t,4);} 24.把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中的英文字符。

#include void main(){ FILE *fpd1,*fpd2;char ch;fpd1=fopen(“d1.dat”,“r”);fpd2=fopen(“d2.dat”,“w”);while(fscanf(fpd1,“%c”,&ch)!=EOF)if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')fprintf(fpd2,“%c”,ch);fclose(fpd1);fclose(fpd2);}

25.编程,把文本文件d1.dat复制到d2.dat(其中空格字符不复制)。#include void main(){ FILE *fpd1,*fpd2;char ch;fpd1=fopen(“d1.dat”,“r”);fpd2=fopen(“d2.dat”,“w”);while(fscanf(fpd1,“%c”,&ch)!=EOF)if(ch!=' ')fprintf(fpd2,“%c”,ch);fclose(fpd1);fclose(fpd2);}

26.编程,把文本文件d1.dat复制到d2.dat(其中大写英文字母要转换为小写字母)。

#include void main(){ FILE *fpd1,*fpd2;char ch;fpd1=fopen(“d1.dat”,“r”);fpd2=fopen(“d2.dat”,“w”);while(fscanf(fpd1,“%c”,&ch)!=EOF){ if(ch>='A'&&ch<='Z')ch=ch+32;fprintf(fpd2,“%c”,ch);} fclose(fpd1);fclose(fpd2);}

27.把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中除英文字符和数字以外的其它内容。#include void main(){ FILE *fpd1,*fpd2;char ch;fpd1=fopen(“d1.dat”,“r”);fpd2=fopen(“d2.dat”,“w”);while(fscanf(fpd1,“%c”,&ch)!=EOF)

if(!(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'||ch>='0'&&ch<='9'))fprintf(fpd2,“%c”,ch);fclose(fpd1);fclose(fpd2);}

28.求出1至100之间的素数(只能被1和自身整除的数)并顺序写入文件su.dat。

#include #include void main(){ FILE *fp;int i,j,k=2;fp=fopen(“su.dat”,“w”);fprintf(fp,“%4d%4d”,2,3);for(i=5;i<100;i=i+2){ for(j=3;j<=sqrt(i);j=j+2)if(i%j==0)break;if(j>sqrt(i)){ fprintf(fp,“%4d”,i);k++;if(k%10==0)fprintf(fp,“n”);} } fclose(fp);}

29.磁盘文件a1和a2,各自存放一个已按字母顺序排好的字符串,编程合并二个文件到a3 文件中,合并后仍保持字母顺序。#include #include void main(){ FILE *fp1,*fp2,*fp3;int i,j,k;char c1,c2;fp1=fopen(“a1”,“r”);fp2=fopen(“a2”,“r”);// 首先从文件a1、a2中各读入一个字符分别送入变量c1、c2,下面将作

// 循环比较,直到读到文件尾标志为止。

fp3=fopen(“a3”,“w”);c1=fgetc(fp1);c2=fgetc(fp2);do { if(c1

30.顺序文件C.DAT每个记录包含学号(8位字符)和成绩(三位整数)两个数据项。从文件读入学生成绩,将大于或等于60分的学生成绩再形成一个新的文件SCORE60.DAT保存在A盘上,并显示出学生总人数、平均成绩和及格人数。#include #include void main(){ FILE *fp1,*fp2;char s[9];int x,zrs=0,pjcj=0,jgrs=0;fp1=fopen(“c.dat”,“r”);fp2=fopen(“a:score60.dat”,“w”);fscanf(fp1,“%s%d”,s,&x);do { zrs++;pjcj+=x;if(x>=60){ jgrs++;fprintf(fp2,“%s %dn”,s,x);} fscanf(fp1,“%s%d”,s,&x);} while(!feof(fp1));printf(“总人数:%d平均成绩:%d 及格人数:%dn”,zrs,pjcj/zrs,jgrs);fclose(fp1);fclose(fp2);} 31.程序清单:

typedef int datatype;typedef struct node {datatype data;struct node *next;}linklist;„„

INVERT(linklist *head){linklisk *p,*q;p=head->next;if(p!=NULL){head->next=NULL;do {q=p->next;p->next=head->next;head->next=p;p=q;} while(p!=NULL);} } 32.程序清单:

PURGE(linklist *head){linklist *p,*q;q=head->next;if(q==NULL)return;p=q->next;while(p!=NULL)if(p->data==q->data){q=p->next;free(p);p=q->next;} else {q=p;p=p->next;} }

33、程序清单: #include main(){static char x[]=”computer”;char *p;for(p=x;p

34、#include #include main(){int m;char str[80],str2[80];printf(“input a string:n”);gets(str2);printf(“intput m:n);scanf(“%d”,&m);if(strlen(str2)

35、程序清单:

float search(float(pointer)[4],int n){float *pt;pt=*(pointer+n);return(pt);}

36、Main(){int score[][4]={{60,76,80,90},{45,86,57,90},{58,95,80,71},{78,50,60,85}};int(*p)[4],j,k,flag;p=score;for(j=0,j<4;j++)if(*(*(p+j)+k)<60)flag=1;if(flag==1){printf(“NO.%dis fail,svoreare:n”,j);for(k=0,;k<4;k++)printf(“%5d”, *(*(p+j)+k);

printf(“n”);} }

37、程序清单: main(){int b[16],x,k,r,I;printf(“enter a integer :n”): scanf(“%d”,&x);

printf(%6d’s binary number is:n”,x);k=-1;do {r=x%2;k++;*(b+k;x/=2;}while(x!=0 for(I=k;I>=0;I--)printf(“%d”,*(b+i)printf(“n”);} 38、float p(int n,int x){flaot t,t1,t2;if(n==0)return(1);else if(n==1)return(x);else {t1=(2*n-1)*x*(p((n-1),x));t2=(n-1)*p((n-2),x);t=(t1-t2)/n);return(t);}}

39、main(){int a[5][5],I,j,k=0,m,n;m=n/2+1;for(I=0,I=I;j--){k++;a[n-I-1][j]=k;} for(j=n-2-I;j>=I+1;j--){k++;a[I][j];}} for(I=0;I main(){int m[16],n,I,t,count=0;long a,k;printf(“result is:n”);for(n=10;n<200;n++){k=0;t=1;a=n*n;for(I=1;a!=0;I++){m[I]=a%10;a/=10;} for(;I>1;I--){k+=m[I-1]*t;t=t*10;} if(k==n*n)printf(“%2d:%10d%10dn”,++count,n,N*n);}}

41、void convert(char *a,int n){int I;if((I=n/10)!=0)convert(a+1,i);*a=n%10+’0’;}

42、#include main(){FILE *fp;char str[100],fikename[10];int I=0;if((fp=fopen(“upper.txt”,”w”))==NULL){printf(“can not open filen”);exit(0);} printf(“enter a string:n”);gets(str);while(str[I]!=’!’)

{if(str[I]>=’a’&&str[I]<=’z’)str[I]=str[I]-32;fputc(str[I],fp);I++;} fclose(fp);}

43、#include “stdio.h” FILE *fp;main(){int p=0,n=0,z=0,temp;fp=fopen(“number.dat”,”r”);if(fp==NULL)printf(“file not foundn”);else {while(!feof(fp)){fscanf(fp,”%d”,&temp);if(temp>0)p++;else if(temp<0)n++;else z++;} fclose(fp);printf(“posive:%3d,negtive:%3d,zero:%3dn:,p,n,z);} }

44、main(){unsigned rightrot(unsigned a,int n)

unsigned int m,b;

int n;

printf(“enter mand n:”);

scanf(%x,%d”,&m,&n);

printf(“m=%x,n=%dn”,m,n);

b=rightrot(m,n);

printf(“b=%xn”,b);} unsigned rightrot(unsigned a,int n){int rb;while(n0){rb=(a&1)<<(16-1);a=a>>1;a=a|rb;} return a;}

45、解:PX(X,N)=X-X2+X3-X4+„„+(-1)N-1XN =X*(1-X-X2+X3-X4+„„+(-1)N-1XN-1 =X*(1-PX(X,N-1)程序清单:

double px(double x,int n){if(n==1)return x;else return(x*(1-px(x,n-1));}

46、程序清单:

double opwer1(double x,int n){if(n==0)return 1;else return(x*power1(x,n-1);}

47、Printfn(int n){if(n=0&&n<=9)printf(“%d”,n);else {printf(“%d”,x%10);printn(x/10);} }

48、程序清单: t(int n){int m;printf(“%d”,x%10);m=x/10;if(m>0)r(m);}

49、程序清单:

int ack(int m,int n){if(m==0)return(n+1);else if(n==0)return(ack(m-1,1);else return(ack(m-1,ack(m,n-1)));} 50、Void intobin(int x){if(x/2>0)intobin(x/2);printf(“%d”,x%2);}

51、Void intobin(int x){if(x/8>0)intobin(x/8);printf(“%d”,x%8);}

52、Void intobin(int x){ if(x/16>0)intobin(x/16);printf(“%c”,(x%16>=9)?x%16+55:x%16+48);}

53、Main(){int x;printf(“enter a number:n”);

scanf(“%d”,&x);if(x!=0){if(x>0){ x=x%2;if(x)printf(“this number is a plus odd numbern”);else printf(“this number is a plus even numbern”);} else { x=x%2;if(x)printf(“this number is a plus odd numbern”);else printf(“this number is a plus even numbern”);} else printf(“this number is zeron”);}

54、Main(){int x,y,max;printf(“please input two number:n”);

scanf(“%d,%d”,&x,&y);if(a>b)max=a;else max=b;printf(“max=%d”,max);}

55、Main(){int j;for(j=999;j>=100;j--)if(555555%j==0)break;printf(“%d”,j);}

56、Main(){int I,count,j,sum;sum=count=0;for(I=0;I<10;I++){printf(“input ingter:n);scanf(“%d”,&j);if(j<0)continue;count++;sum=sum+j;} if(count)printf(“plus number:%d,average value :%.2f”,count,1.0*sum/count);else printf(“plus number:0,average value :0”);}

57、Main(){int year;printf(“%d”,&year);if(year<0)printf(“year is not a yaern”): else if((year%4==0&&year%100!=0)||year%400==0)printf(“year is leap year!n”);else printf(“year is not leap year!n”);}

58、main(){int n,j,k;printf(“input n:n”);

scanf(“%d”,&n);for(j=0;j

printf(“n”);} }

59、main(){int n,I,j,k;printf(“input n:n”);

scanf(“%d”,&n);for(I=0;I

printf(“n”);} } 60、Main(){ int I;float sum=1;for(I=2;I<=1000;I++)sum=sum+1.0/I;printf(“%f”,sum);} 61、Mypower(float x,int n){int I;float po=1;for(I=1,I<=n;I++)po=po*x;printf(“%f”,po);} 62、Main(){int I,j,max;int a[3][4]={};max=a[0][0];for(I=0;I<3;I++)for(j=0;j<4;j++)if(max char *strcat(char *str1,char *str2){}连接后字符串的头指针为str1。#include char *strcat(char *str1,char *str2){char *str1;while(*p!=’’)p++;while(*p++=*str2++);return(str1);} 64、#include char *revstr(char *s){} #include char *revstr(char *s){char *p=s,c;while(*p)p++;p--;while(s

8、略 69、略

70、#include #include main(){char str[80];printf(“input a string :n”);gets(str);insert(str);printf(“result is :%s”,str);} insert(char *s){int I;for(I=strlen(s);I>0;I--){*(s+2*I)=*(s+I);*(s+2*I-1)=’’;} } 71、Main(){int x;scanf(“%d”,&x);if(x%5==0&&x%7==0)printf(“yes”);else printf(“no”);} 72、#include main(){int day=0,buy=2;float sum=0,ave;do { sum=sum+buy*0.8;day++;buy=buy*2;}while(buy<=100);ave=sum/day;printf(“%f”,ave);} 73、#include main(){int I;for(I=1;I<100;I++)if(I*I==I||I*I%100==I)printf(%3d”,I);} 74、#include main(){char s[80]=””;int I,j;for(I=j=0;s[I]!=’’;I++)

if(c[I]!=’c’)s[j++]=s[I];

s[j]=’’;puts(s);} 79、main(){ int a[10];int i,j,m,f,h;int n,s;for(i=0;i<10;i++)a[i]=0;a[9]=1;printf(“please input n:n”);scanf(“%d”,&n);for(i=2;i<=n;i++){m=0;for(j=9;j>=0;j--){if(!(a[j]==0)){ f=a[j];h=(f*i%10+m)/10;a[j]=(f*i%10+m)%10;

m=f*i/10+h;} else { a[j]=a[j]+m;m=0;} } } i=0;while(a[i]==0)i++;printf(“%d!= ”,n);for(j=i;j<10;j++)printf(“%d”,a[j]);printf(“n”);} 80、#include #define N 100 main(){int a,j,jinwei,temp;int num1[N],num2[N];int i;printf(“PLEASE INPUT ONE NUMBER:n”);i=2;while(1){scanf(“%d”,&a);if(a==-1)break;num1[i++]=a;} num1[0]=i-1;i=2;printf(“PLEASE INPUT OTHER NUMBER:n”);while(1){scanf(“%d”,&a);if(a==-1)break;num2[i++]=a;} num2[0]=i-1;for(i=2;i<=num1[0];i++)printf(“%d”,num1[i]);printf(“+”);for(i=2;i<=num2[0];i++)printf(“%d”,num2[i]);printf(“=”);jinwei=0;if(num1[0]>num2[0]){j=num2[0];for(i=num1[0];i>=2;i--){ if(j>=2){ temp=jinwei;jinwei=(num1[i]+num2[j]+jinwei)/10;num1[i]=(num1[i]+num2[j]+temp)%10;

j--;} else { temp=jinwei;jinwei=(num1[i]+jinwei)/10;num1[i]=(num1[i]+temp)%10;

} } num1[1]=jinwei;for(i=1;i<=num1[0];i++)printf(“%d”,num1[i]);} else { j=num1[0];for(i=num2[0];i>=2;i--){ if(j>=2){temp=jinwei;jinwei=(num1[j]+num2[i]+jinwei)/10;num2[i]=(num1[j]+num2[i]+temp)%10;j--;} else {temp=jinwei;jinwei=(num2[i]+jinwei)/10;num2[i]=(num2[i]+temp)%10;} }

num2[1]=jinwei;for(i=1;i<=num2[0];i++)printf(“%d”,num2[i]);} } 81、include #define N 10 main(){int a,j,jinwei,temp;int num1[N],num2[N];int ji[2*N];int i;int k,k1,k2;int jinwei1,jiashu;for(i=0;i<2*N;i++)ji[i]=0;printf(“PLEASE INPUT ONE NUMBER:n”);i=1;while(1){scanf(“%d”,&a);if(a==-1)break;num1[i++]=a;} num1[0]=i-1;

printf(“PLEASE INPUT OTHER NUMBER:n”);i=1;while(1){scanf(“%d”,&a);if(a==-1)break;num2[i++]=a;} num2[0]=i-1;jinwei=0;k=2*N;for(i=num1[0];i>=1;i--){k1=k;k--;k2=k;jinwei=0;for(j=num2[0];j>=1;j--){ k1--;jiashu=(num1[i]*num2[j]+jinwei)%10;jinwei=(num1[i]*num2[j]+jinwei)/10;jinwei1=0;k2=k1;while(1){temp=jinwei1;jinwei1=(ji[k2]+jiashu+temp)/10;ji[k2]=(ji[k2]+temp+jiashu)%10;if(jinwei1==0)break;else {k2--;jiashu=0;} }

} k1--;temp=jinwei;jinwei=(temp+ji[k1])/10;ji[k1]=(temp+ji[k1])%10;if(jinwei!=0)ji[--k1]= jinwei;} printf(“nn”);for(i=1;i<=num1[0];i++)printf(“%d”,num1[i]);printf(“*”);

for(i=1;i<=num2[0];i++)printf(“%d”,num2[i]);printf(“=”);for(i=k1;i<2*N;i++)printf(“%d”,ji[i]);} 82、int count;int perm(char as[],char tem1[],int k,int num,int curr,int m){ int i,t;if(curr==0){if(num==0){printf(“{}”);count++;} else { count++;printf(“{”);for(i=0;i

第三篇:C语言基础题及答案

第一单元

程序设计和C语言

一、选择题

1. C语言的基本构成单位是:。A.函数 B.函数和过程

C.超文本过程

D.子程序

2. 一个C语言程序总是从 开始执行。A.主过程 B.主函数 C.子程序 D.主程序 3. C语言的程序一行写不下时,可以。

A.用逗号换行 B.用分号换行 C.在任意一空格处换行 D.用回车符换行 4. 以下叙述不正确的是:。

A.在C程序中,语句之间必须要用分号“;”分隔

B.若a是实型变量,C程序中a=10是正确的,因为实型变量中允许存放整型数 C.在C程序中,无论是整数还是实数都能正确无误地表示 D.在C程序中,%是只能用于整数运算的运算符 5. 以下不正确的C语言标识符是。

A.ABC B.abc C.a_bc D.ab.c 6. 下列字符串是标识符的是:。A._HJ

B.9_student

C.long

D.LINE 1 7. 以下说法中正确的是:。

A.C语言程序总是从第一个定义的函数开始执行

B.在C语言程序中,要调用的函数必须放在main()函数中定义 C.C语言程序总是从main()函数开始执行

D.C语言程序中的main()函数必须放在程序的开始部分 8. 不合法的常量是:。A.„2‟ B.“

C.„3‟

D.„483‟

9. 已知各变量的类型说明如下,则以下不符合C语言语法的表达式是:。

int k,a,b;unsigned long w=5;double x=1.422;A.x%(-3)B.w+=-2 10.

11. 若有定义:int a=7;float x=2.5;y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是:。

C.k=(a=2,b=3,a+b)

D.a+=a=+(b=4)*(a=3)在C语言中,字符型数据在内存中以 形式存放。

A.原码 B.BCD码 C.反码 D.ASCII码 A.2.500000 12. B.2.750000 C.3.500000 D.0.000000 设有说明:char w;int x;float y;double z;

B.char

C.int

D.double 则表达式w*x+z-y值的数据类型为:。A.float 13. 14. 以下 是不正确的转义字符。

若x为int型变量,则执行以下语句后,x的值为。x=6;x+=x-=x*x;B.-60

C.60 D.-24 字符串“"ABC”“的长度是。A.'' B.'' C.'081' D.'' A.36 15.

二、填空题 A.11 B.7 C.5 D.3 1. 一个函数由两部分组成,它们是 和。2. 一个C源程序至少包含一个,即。3. 设int a=12;则表达式a/=a+a的值是。

4. 表达式x=(a=3,6*a)和表达式x=a=3,6*a分别是 表达式和 表达式,两个表达式执行完的结果分别是 和,x值分别是 和。

5. 在C语言中,实数有两种表示形式,即 和。6. 在C语言中,运算符的优先级最小的是 运算符。

第二单元

顺序程序设计

一、选择题

1. 若m为float型变量,则执行以下语句后的输出为。

m=1234.123;printf(”%-8.3fn“,m);printf(”%10.3fn“,m);A.1234.123 B.1234.123 C.1234.123 D.-1234.123 1234.123 1234.123 1234.123 001234.123 2. 若x,y,z均为int型变量,则执行以下语句后的输出为。

x=(y=(z=10)+5)-5;printf(”x=%d,y=%d,z=%dn“,x,y,z);y=(z=x=0,x+10);printf(”x=%d,y=%d,z=%dn“,x,y,z);

B.X=10,Y=10,Z=10 X=0,Y=10,Z=10 D.X=10,Y=10,Z=10

X=0,Y=10,Z=0

A.X=10,Y=15,Z=10 X=0,Y=10,Z=0 X=10,Y=10,Z=0 C.X=10,Y=15,Z=10

3. 若x是int型变量,y是float型变量,所用的scanf调用语句格式为: scanf(”x=%d,y=%f“,&x,&y);则为了将数据10和66.6分别赋给x和y,正确的输入应是:。A.x=10,y=66.6<回车> B.10 66.6<回车> C.10<回车>66.6<回车> D.x=10<回车>y=66.6<回车> 4. 已知有变量定义:int a;char c;用scanf(“%d%c”,&a,&c);语句给a和c输入数据,使30存入a,字符‘b’存入c,则正确的输入是:。A.30’b’<回车> B.30 b<回车> C.30<回车>b<回车> D.30b<回车> 5. 已知有变量定义:double x;long a;要给a和x输入数据,正确的输入语句是。若要输出a和x的值,正确的输出语句。

A.scanf(“%d%f”,&a,&x);B.scanf(“%ld%f”,&a,&x);printf(“%d,%f”,a,x);printf(“%ld,%f”,a,x);C.scanf(“%ld%lf”,&a,&x);D.scanf(“%ld%lf”,&a,&x);printf(“%ld,%lf”,a,x);printf(“%ld,%f”,a,x);6. 若有定义double x=1,y;则以下的语句执行的结果是。

y=x+3/2;printf(“%f”,y);A.2.500000 B.2.5 C.2.000000 D.2 7. 若a为整型变量,则以下语句。a=-2L;printf(”%dn“,a);A.赋值不合法 B.输出为不确定的值

二、读程序写结果

1. main()

{ int x,y;scanf(”%2d%*2d%ld“,&x,&y);printf(”%dn“,x+y);

C.输出值为-2 D.输出值为2 } 执行时输入:1234567 2. main(){ int x=4,y=0,z;x*=3+2;printf(”%d“,x);x*=y=z=4;printf(”%d“,x);} 3. main(){ float x;int i;x=3.6;i=(int)x;printf(”x=%f,i=%d“,x,i);} 4. main(){ int a=2;a%=4-1;printf(”%d, “,a);a+=a*=a-=a*=3;printf(”%d“,a);} 5. main(){ int x=02,y=3;printf(”x=%d,y=%%d“,x,y);} 6. main(){ char c1=‟6‟,c2=‟0‟;printf(”%c,%c,%d,%dn“,c1,c2,c1-c2,c1+c2);} 7. main(){ int x,y,z;x=y=1;z=++x-1;printf(”%d,%dn“,x,z);z+=y++;printf(”%d,%dn“,y,z);}

三、填空题

1. 在C语言中,字符型数据和整型数据之间可以通用,一个字符数据既能以 输出,也能以 输出。

2. ”%-ms“表示如果串长小于m,则在m列范围内,字符串向 靠,补空格。3. printf函数的“格式控制”包括两部分,它们是 和。4. 编写程序求矩形的面积和周长,矩形的长和宽由键盘输入,请填空。

#include void main(){ float l,w;

printf(“please input length and width of the rectanglen”);scanf(“%f%f”,&l,&w);area=;girth=;

} 整数存入n,如:字符‘0’所对应的整数就是0。请填空。void main(){ char c;

};printf(“please input a char:n”);c=;n=;printf(,c,n);5. 编写程序,输入一个数字字符(‘0’~‘9’)存入变量c,把c转换成它所对应的第三单元

选择程序设计

一、选择题

1. 若x=0,y=3,z=3,以下表达式值为0的是 A.!x B.x

w=3;z=7;x=10;printf(”%dn“,x>10?x+100:x-10);printf(”%dn“,w++||z++);printf(”%dn“,!w>z);printf(”%dn“,w&&z);A.0 B.1 C.0 D.0 1 1 1 1 1 1 0 0 1 1 1 0 5. 分析以下程序, 下列说法正确的是。

main(){ int x=5,a=0,b=0;if(x=a+b)printf(”* * * *n“);else printf(”# # # #n“);} A.有语法错,不能通过编译 B.通过编译,但不能连接 C.输出* * * * D.输出# # # # 6. 分析以下程序, 下列说法正确的是。

main(){ int x=5,a=0,b=3;if(x=a+b)printf(”* * * *n“);else printf(”# # # #n“);

} A.有语法错,不能通过编译 B.通过编译,但不能连接 C.输出* * * * D.输出# # # # 7. 分析以下程序, 下列说法正确的是。

main(){ int x=0,a=0,b=0;if(x=a+b)printf(”* * * *n“);else printf(”# # # #n“);

} A.有语法错,不能通过编译 B.通过编译,但不能连接 C.输出* * * * D.输出# # # # 8. 分析以下程序, 下列说法正确的是。

main(){ int x=0,a=0,b=0;if(x==a+b)printf(”* * * *n“);else printf(”# # # #n“);

} A.有语法错,不能通过编译 B.通过编译,但不能连接 C.输出* * * * D.输出# # # # 1. include main(){ int a=-1,b=4,k;k=(a++<=0)&&(!(b--<=0));printf(”%d,%d,%dn“,k,a,b);} 2. main(){ int x=4,y=0,z;x*=3+2;printf(”%d“,x);x*=(y==(z=4));printf(”%d“,x);} 3. main(){ int x,y,z;x=3;y=z=4;printf(”%d“,(x>=z>=x)?1:0);printf(”%d“,z>=y && y>=x);} 4. main(){ int x=1,y=1,z=10;if(z<0)if(y>0)x=3;

二、读程序写结果 else x=5;printf(”%dt“,x);if(z=y<0)x=3;else if(y==0)x=5;else x=7;printf(”%dt“,x);printf(”%dt“,z);} 5. main(){ char x=‘B’;switch(x){ case ‘A’: printf(“It is A.”);case ‘B’: printf(“It is B.”);case ‘C’: printf(“It is C.”);default: printf(“other.”);} } 6. main(){ int x=1,y=0,a=0,b=0;switch(x){ case 1: switch(y){ case 0: a++;break;case 1: b++;break;} case 2: a++;b++;break;case 3: a++;b++;} printf(”a=%d,b=%dn“,a,b);}

三、填空题

1. 若a=5,b=6,c=7,d=8,则表达式d=a/2&&b==c||!a的值为 2. 定义 int x=10,y,z;执行y=z=x;x=y==z后,变量x的值为。3. 分段函数:输入x,计算y值,输出y,其中: x<0 y=2x+3 x=0,y=0 x>0,y=(x+7)/3 #include main(){ int x,y;scanf(”%d“,&x);if(x<0)(1);(2)y=0;(3)y=(x+7)/3;printf(“%d”,y);} 4. 由键盘输入三个数,计算以这三个数为边长的三角形面积。(1)main(){(2);printf(”Please enter 3 reals:n“);scanf(”%f%f%f“,&a,&b,&c);if((3)){ s=(a+b+c)*0.5;s1=s*(s-a)*(s-b)*(s-c);s=(4);printf(”nArea of the triangle is %fn“,s);}(5)printf(”It is not triangle!n“);} 5. 有一方程ax+bx+c=0,a,b,c的值由键盘输入,请编程序,打印出以下情况时方程的解。

(1)a=0,b≠0(2)a=0,b=0,c=0(3)a=0,b=0,c≠0(4)a≠0,b-4ac≥0(5)a≠0,b-4ac≤0

222#include ”math.h“ main(){ float a,b,c,d,pr,pi,x1,x2;scanf(”%f%f%f“,&a,&b,&c);printf(”a=%f,b=%f,c=%fn“,a,b,c);if(a==0){ if((1))printf(”only one solution x=%fn“,-c/b);else if((2))printf(”no solutionn“);else printf(”x is any valuen“);} else { d=b*b-4*a*c;if((3)){ x1=(-b+sqrt(d))/(4);x2=(-b-sqrt(d))/(5);printf(”x1=%6.2f, x2=%6.2fn“,x1,x2);} else { pr=-b/(2*a);(6);printf(”x1=%6.2f +%6.2fin“,pr,pi);printf(”x2=%6.2f-%6.2fin“,pr,pi);} } } 6. 投票表决器:

– 输入Y、y,打印agree – 输入N、n,打印disagree – 输入其他,打印lose main(){ char c;scanf(”%c“,&c);(1){

} case ‘Y’: case ‘y’: printf(“agree”);(2);case ‘N’: case ‘n’: printf(“disagree”);(3);(4):printf(“lose”);

第四单元

循环程序设计

一、选择题

1. 程序段如下:则以下说法中正确的是:。

int k=5;do{ k--;}while(k<=0);A.循环执行5次 B.循环是无限循环 C.循环体语句一次也不执行 D.循环体语句执行一次 2. 设i和x都是int类型,则for循环语句。

for(i=0,x=0;i<=9&&x!=876;i++)scanf(”%d“,&x);A.最多执行10次 B.最多执行9次 C.是无限循环 D.循环体一次也不执行 3. 下述for循环语句。

int i,k;for(i=0,k=-1;k=1;i++,k++)printf(”* * * *“);A.判断循环结束的条件非法 B.是无限循环 C.只循环一次 D.一次也不循环 4. 程序段如下:则以下说法中正确的是:。

int k=-20;while(k=0)k=k+1;A.while循环执行20次 B.循环是无限循环 C.循环体语句一次也不执行 D.循环体语句执行一次 5. 下列程序段执行后k值为。

int k=0,i,j;for(i=0;i<5;i++)for(j=0;j<3;j++)k=k+1;A.15 B.3 C.5 D.8 6. 程序段如下:则以下说法中不正确的是:。

#include main(){ int k=2,;while(k<7){ if(k%2){k=k+3;printf(“k=%dn”,k);continue;} k=k+1;printf(“k=%dn”,k);} } A.k=k+3;执行一次 B.k=k+1;执行2次 C.执行后k值为7 D.循环体只执行一次 1. main(){ int num=0;while(num<=2){ num++;printf(”%dn“,num);} } 2. main(){ int i=0,s=0;do { s+=i*2+1;printf(”i=%d,s=%dn“,i,s);i++;} while(s<10);} 3. #include main(){ int i,m=1;for(i=5;i>=1;i--){ m=(m+1)*2;printf(”m=%dn“,m);} } 4. 指出下面三个程序的功能,当输入为:”quert?“时,它们的执行结果是什么? ⑴ #include main(){ char c;c=getchar();while(c!='?'){ putchar(c);c=getchar();} } ⑵ #include main()

二、读程序写结果 { char c;while((c=getchar())!='?')putchar(++c);} ⑶ #include main(){ while(putchar(getchar())!='?');} 5. #include main(){ int i;for(i=1;i<=5;i++){ if(i%2)putchar(‘<’);else continue;putchar(‘>’);} putchar(‘#’);} 6. main(){ int a,b;for(a=1,b=1;a<=100;a++){ if(b>10)break;if(b%3==1){ b+=3;continue;} } printf(”a=%dn“,a);} 7. main()

{ int i=1;while(i<=15)if(++i%3!=2)continue;else printf(”%d “,i);printf(”n“);

} 8. #include void main(){ int i,j;for(i=0;i<=3;i++){ for(j=0;j<=i;j++)printf(”(%d,%d),“,i,j);printf(”n“);} } 9. main()

{ int i,j,k;

char space=' ';for(i=0;i<=5;i++){ for(j=1;j<=i;j++)printf(”%c“,space);for(k=0;k<=5;k++)printf(”%c“,'*');printf(”n“);

10.} #include { int i,j,k=0;for(j=11;j<=30;j++){ if(k%10==0)printf(”n“);for(i=2;i

if(i>=j-1)

{ printf(”%dt“,j);k++;}

三、填空题

1. break语句只能用于 语句和 语句中。2. 计算2+4+6+8+...+98+100 main(){ int i,(1);for(i=2;i<=100;(2))s+=i;} 3. 求满足下式的 x,y,z } } } main()

X Y Z + Y Z Z ────── 5 3 2

main(){ int x,y,z,i,result=532;for(x=1;(1);x++)for(y=1;(2);y++)for((3);(4);z++){ i=(5)+(100*y+10*z+z);if(i==result)printf(”x=%d, y=%d, z=%dn“,x,y,z);} } 4. 求 Sn=a+aa+aaa+...+aa...a之值,其中 a是一个数字。例如 2+ 22 +222+2222(此时n=4),n由键盘输入。

main(){ int a,n,count=1,Sn=0,Tn=0;printf(”请输入 a 和 n 的值:n“);scanf(”%d,%d“,&a,&n);while(count<=(1)){ Tn=(2);Sn=(3);a=a*10;(4);} printf(”a+aa+aaa+...=%dn“,Sn);} 5. 一球从 100米高度自由落下,每次落地后反跳回原来高度的一半,再落下,求它在第十次落地时,共经过多少米?第十次反弹多高?

main(){ float Sn=100.0,hn=Sn/2;int n;for(n=2;n<=(1);n++){ Sn=(2);hn=(3);} printf(”第10次落地时共经过%f米n“,Sn);printf(”第10次反弹%f米n“,hn);} 6. 打印出以下图形 * * * * * * * * * * * * * * * * * * * * * * * * * main(){ int i,j,k;for(i=0;i<=(1);i++){ for(j=0;j<=2-i;j++)printf(” “);for(k=0;k<=(2);k++)printf(”*“);(3)} for(i=0;i<=2;i++){ for(j=0;j<=(4);j++)printf(” “);for(k=0;k<=(5);k++)printf(”*“);printf(”n“);} } 7. 准备客票。某铁路线上共10个车站,问需要准备几种车票? main(){ int i,j,station,total=0;printf(”输入车站数:“);scanf(”%d“,&station);for(i=1;i<(1);i++)for(j=(2);j<=station;j++)total=(3);printf(”车票种类=%d n“,total);}

第五单元

一、选择题

1. 以下关于数组的描述正确的是。

A.数组的大小是固定的,但可以有不同的类型的数组元素。B.数组的大小是可变的,但所有数组元素的类型必须相同。C.数组的大小是固定的,但所有数组元素的类型必须相同。D.数组的大小是可变的,但可以有不同的类型的数组元素。2. 在定义int a[10];之后,对a的引用正确的是。

A.a[10] B.a[6.3] C.a(6)D.a[10-10] 3. 以下能正确定义数组并正确赋初值的语句是。

A.int n=5,b[n][n];B.int a[1][2]={{1},{3}};C.int c[2][]={{1,2},{3,4}} D.int a[3][2]={{1,2},{3,4}} 4. 以下不能正确赋值的是。

A.char s1[10];s1=”test“;B.char s2[]={‟t‟,‟e‟,‟s‟,‟t‟} C.char s3[20]= ”test“;D.char s4[4]={ ‟t‟,‟e‟,‟s‟,‟t‟} 5. 下面程序段运行时输出结果是。

char s[18]= ”a book!“;printf(”%.4s“,s);A.a book!B.a book!C.a bo D.格式描述不正确,没有确定输出 6. 下面程序段运行时输出结果是。

char s[12]= ”A book“;printf(”%dn“,strlen(s));A.12 B.8 C.7 D.6 7. 在执行int a[][3]={1,2,3,4,5,6};语句后,a[1][0]的值是。A.4 B.1 C.2 D.5

二、读程序写结果

1. #include void main(){

} int a[8]={1,0,1,0,1,0,1,0},i;for(i=2;i<8;i++)a[i]+= a[i-1] + a[i-2];printf(“%5d”,a[i]);for(i=0;i<8;i++)2. #include void main(){ float b[6]={1.1,2.2,3.3,4.4,5.5,6.6},t;int i;t=b[0];for(i=0;i<5;i++)b[i]=b[i+1];b[5]=t;for(i=0;i<6;i++)

printf(“%6.2f”,b[i]);} void main(){ int p[7]={11,13,14,15,16,17,18},i=0,k=0;while(i<7 && p[i]%2){ k=k+p[i];i++;} printf(”k=%dn“,k);} 4. void main(){ int a[3][3]={1,3,5,7,9,11,13,15,17};int sum=0,i,j;for(i=0;i<3;i++)for(j=0;j<3;j++){ a[i][j]=i+j;if(i==j)

sum=sum+a[i][j];} printf(”sum=%d“,sum);}

5. void main(){ int a[4][4],i,j,k;for(i=0;i<4;i++)for(j=0;j<4;j++)a[i][j]=i-j;for(i=0;i<4;i++){ for(j=0;j<=i;j++)3. #include printf(”%4d“,a[i][j]);printf(”n“);} }

6. #include main(){ int i,s;char s1[100],s2[100];printf(”input string1:n“);gets(s1);printf(”input string2:n“);gets(s2);i=0;while((s1[i]==s2[i])&&(s1[i]!=''))i++;if((s1[i]=='')&&(s2[i]==''))s=0;else s=s1[i]-s2[i];printf(”%dn“,s);} 输入数据 aid and

7. void main(){ } 8. #inlcude #include void main(){

char str[10][80],c[80];int i;for(i=0;i<10;i++)gets(str[i]);strcpy(c,str[0]);for(i=1;i<10;i++)if(strlen(c)

三、填空题

1. 构成数组的各个元素必须具有相同的。

2. 下面的程序是输出数组中最大元素的下标(p表示最大元素的下标)。

void main(){

} 3. 输入20个数,输出他们的平均值,输出与平均值之差的绝对值最小的数组元素。

#include void main(){

float a[20],pjz=0,s,t;int i,k;for(i=0;i<20;i++){ scanf(“%f”,&a[i]);pjz+= ;

} s=fabs(a[0]-pjz);t=a[0];for(i=1;i<20;i++)if(fabs(a[i]-pjz)

}

int s[]={1,-3,0,-9,8,5,-20,3};for(i=0,p=0;i<8;i++)if(s[i]>s[p]);

4. 输出行、列号之和为3的数组元素。

main(){ char ss[4][3]={'A','a','f','c','B','d','e','b', 'C','g','f','D'};int x,y,z;for(x=0;(1);x++)for(y=0;(2);y++){ z=x+y;if((3))printf(”%cn“,ss[x][y]);} } 5. 将一个数组中的元素按逆序重新存放。例如原来的顺序为:8,5,7,4,1, 要求改为:1,4,7,5,8。#define N 7 void main(){ int a[N]={12,9,16,5,7,2,1},k,s;printf(”n初始数组:n“);for(k=0;k

#include void main(){ /*str1表示原来的一行文字,str2表示删除指定字符后的文字*/ char str1[100],str2[100];char ch;int i=0,k=0;printf(“please input an sentence:n”);gets(str1);scanf(”%c“,&ch);for(i=0;(2);i++)if(str1[i]!=ch){ str2[(3)]=str1[i];k++;} str2[(4)]='';printf(”n%sn“,str2);} 7. 找出10个字符串中的最大者。

#include #include #define N 10 void main(){ char str[20],s[N][20];int i;for(i=0;i0)strcpy(str,s[i]);printf(”The longest string is : n%sn“,str);}

8. 某人有四张 3分的邮票和三张 5分的邮票,用这些邮票中的一张或若干张可以得到多少种不同的邮资?

main(){ static int a[27];int i,j,k,s,n=0;for(i=0;i<=4;i++)for(j=0;j<=3;j++){ s=(1);for(k=0;a[k];k++)if(s==a[k])(2);if((3)){ a[k]=s;n++;} } printf(”%d kind:“,n);for(k=0;(4);k++)printf(”%3d“,a[k]);} 9. 求矩阵的马鞍点。马鞍点即它的值在行中最大,在它所在的列中最小。#define N 10 #define M 10 main(){ int i,j,k,m,n,flag1,flag2;int a[N][M],max;printf(”n输入行数 n:“);scanf(”%d“,&n);printf(”n输入列数 m:“);scanf(”%d“,&m);for(i=0;imax)max=a[i][j];for(j=0;j

if((4))flag1=0;

if(flag1)

{ printf(”第%d行, 第%d列的 %d是鞍点n“,(5));

flag2=1;

} } } } if(!flag2)printf(”n矩阵中无鞍点!n“);}

第六单元

一、选择题

1. 在C语言中,当函数调用时。

A.实参和形参各占一个独立的存储单元 B.实参和形参共用存储单元

C.可以由用户指定实参和形参是否共用存储单元 D.由系统自动确定实参和形参是否共用存储单元 2. 以下函数调用语句中实参的个数为。

exce((v1,v2),(v3,v4,v5),v6);A.3 B.4

C.5

D.6 3. 如果在一个函数的复合语句中定义了一个变量,则该变量。

A.只在该符合语句中有效,在该符合语句外无效

B.在该函数中任何位置都有效 C.在本程序的原文件范围内均有效 D.此定义方法错误,其变量为非法变量

A.float型 B.int型 C.long型 D.double型 5. C语言规定,函数返回值的类型是由。

A.return语句中的表达式类型所决定 B.调用该函数时的主调函数类型所决定 C.调用该函数时系统临时决定

D.在定义该函数时所指定的函数类型决定 6. 在C语言程序中,以下描述正确的是。

A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义不可以嵌套,但函数的调用可以嵌套 C.函数的定义和函数的调用均不可以嵌套 D.函数的定义和函数的调用均可以嵌套 8.以下程序的运行结果是:

#include void sub(int s[],int y){ static int t=3; y=s[t];t--; } main(){ int a[]={1,2,3,4},i,x=0; for(i=0;i<4;i++){ sub(a,x);printf("%d",x);} printf("\n"); } A)1234

9.以下程序的运行结果是: main(){ int w=5;fun(w);printf("\n");} fun(int k){ if(k>O)fun(k-1); printf(" %d",k); B)432l

C)0000

D)4444 4. C语言允许函数值类型缺省定义,此时该函数值隐含的类型是。} A)5 4 3 2 l B)0 1 2 3 4 5

C)1 2 3 4 5

D)5 4 3 2 1 0 10.以下所列的各函数首部中,正确的是_______。A)void play(vat a:Integer,var b:Integer)C)void play(int a,int b)A)数组的长度

B)void play(int a,b)

D)Sub play(a as integer,b as integer)11.当调用函数时,实参是一个数组名,则向函数传送的是_______。

B)数组的首地址 D)数组每个元素中的值 C)数组每一个元素的地址

12.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是_______。A)地址传递

B)单向值传递

C)由实参传给形,再由形参传回实参 D)传递方式由用户指定

13.以下函数值的类型是_______。

fun(float x){ float y; y=3*x-4; return y; } A)int B)不确定

C)void

D)float

二、读程序写结果 1. fun1(int a,int b){ int c;a+=a;b+=b;c=fun2(a,b);return c*c;} fun2(int a,int b){ int c;c=a*b%3;return c;} main(){ int x=11,y=19;printf(”The final result is:%dn“,fun1(x,y));} 2. int x;main(){ x=5;cude();printf(”%dn“,x);} cude(){ x=x*x*x;} 3. #include long fun(int n){ long s;if(n==1||n==2)s=2;else s=n+fun(n-1);return s;} main()} 4. main(){ int i;for(i=0;i<2;i++)add();} add(){ int x=0;static int y=0;printf(”%d,%dn“,x,y);x++;y=y+2;}

5. main(){ int k=4,m=1,p;p=func(k,m);printf(”%d, “,p);p=func(k,m);printf(”%dn“,p);} func(int a,int b){ static int m=0,i=2;i+=m+1;m=i+a+b;return m;}

6.int t(int x,int y,int cp,int dp){ cp=x*x+y*y; dp=x*x-y*y; { printf(”%ldn“,fun(4));} main(){ int a=4,b=3,c=5,d=6; t(a,b,c,d);

printf("%d%dn",c,d); }

7.fun(int x,int y,int z){z=x*x+y*y;} main(){ int a=31;

fun(5,2,a); printf("%d",a); } 8.int a,b;

void fun(){ a=100;b=200; } main(){ int a=5,b=7; fun();

printf("%d%d\n",a,b); }

9.int x=3;

main(){int i;

for(i=1;i

printf("%d",x); }

10.int func(int a,intb){ return(a+b); } main(){int x=2,y=5,z=8,r; r=func(func(x,y),z); printf("%d\n",r); }

11.long fib(int n){ if(n>2)return(fib(n-1)+fib(n-2)); else return(2); } main(){ printf("%ldn",fib(3)};}

三、填空题

1. 编写一个验证正整数M是否为素数的函数,若M是素数则把1送到T中,否则零送到T中。在主函数中读入N个正整数,每读入一个则调用函数判断它是否为素数,在主函数中将T的值累加到另一个变量中。用此方法可求出N个数中素数的个数。请填空完成上述功能的程序。#include #include int prime(int m){ int i,pp=1;for(i=2;(1);i++)if(m % i==0)pp=0;if(m==1)(2)return(pp);} main(){ int a[20],i,sum=0;for(i=0;i<10;i++){ scanf(”%d“,&a[i]);sum=(3)} printf(”the number of prime data is:%d“,sum);}

2. 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述的结果。请填空完成上述功能的程序。#include #include void fltj(char str[],int a[]){ int ll,i;ll=(1)for(i=0;i

1 Pnx((2n1)xp(x)(n1)p(x))/nn1n2

#include main(){ float pn();float x,lyd;int n;scanf(”%d%f“,&n,&x);lyd=(1)printf(”pn=%f",lyd);} float pn(float x,int n){ float temp;if(n==0)temp=(2)else if(n==1)temp=(3)else temp=(4)return(temp);} 4.以下函数的功能是:求x的y次方,请填空。

double fun(double x,int y){int i; double z:

for(i=1,z=x;i

(n0)(n1)

(n1)

第一单元

程序设计和C语言

一、选择题

1.A

2.B

3.C

4.C

5.D

6.A 12.D

13.BC

14..B

15.B

二、填空

1. 函数首部、函数体 2. 主函数、main函数 3. 0 4. 赋值、逗号、18、18、18、3 5. 浮点型、指数型 6. 逗号

第二单元

顺序程序设计

一、选择题 1.C 2.A 3.A

4.D

5.C

6.C 7.C

二、读程序写结果

1. 17 2. 202_ 3. X=3.600000,i=3 4. 2,0 5. X=2,y=%d

6. 6,0,6,102 7. 2,1 2,2

三、填空

1. 字符

整数 2. 左

3. 格式说明

普通字符

4.(1)float area,girth;(2)l*w

7.C

8.D 9.A

10.D

11.A(3)2*(l+w)(4)printf(“area=%f,girth=%fn”,area,girth);5.(1)#include “stdio.h”

(2)int n(3)getchar()(4)c-„0‟

或者c-48(5)“%c,%dn”

第三单元

分支程序设计

一、选择题 1.C 2.EB

3.D

4.C

5.D

6.C 7.D 8.C

二、读程序写结果

1. 1,0,3 2. 200 3. 01 4. 1 7 0 5. It is B.It is C.other.6. a=2,b=1

三、填空

1. 0 2. 1 3.(1)y=2*x+3(2)else if(x==0)(3)else 4.(1)#include “math.h”

(2)float a,b,c,s,s1(3)(a+b>c)&&(b+c>a)&&(c+a>b)(4)sqrt(s1)(5)else 5.(1)b!=0(2)c!=0(3)d>=0(4)(2*a)(5)(2*a)(6)pi=sqrt(-d)/(2*a)6.(1)switch(c)(2)break(3)break(4)default

第四单元

循环程序设计

一、选择题

1. D 2. A

.3. B

.4. C 5. A 6. D

二、读程序写结果

1. 1 2

2. i=0,s=1 i=1,s=4 i=2,s=9 i=3,s=16 3. m=4 m=10 m=22 m=46 m=94 4.(1)quert(2)rvfsu(3)quert? 5. <><><># 6. a=5 7. 2 5 8 11 14 8.(0,0),(1,0),(1,1),(2,0),(2,1),(2,2),(3,0),(3,1),(3,2),(3,3), 9.

****** ******

****** ****** ******

****** 10. 11 13 17 19

三、填空

1. switch、循环 2.(1)s=0 29(2)i=i+2 3.(1)x<=9(2)y<=9(3)z=0(4)z<=9(5)x*100+y*10+z 4.(1)n(2)Tn+a(3)Sn+Tn(4)count++ 5.(1)10(2)Sn+hn*2(3)hn/2 6.(1)3(2)2*i(3)printf(“n”);(4)i(5)4-2*i 7.(1)station(2)i+1(3)total+2

第五单元

数组

一、选择题

1.C

2.D

3.D

4.A

5.C

二、读程序写结果

1.0

2.2.20 3.30 4.40 5.50 3. k=24 4. sum=6 5.

0

0

0

0 6.-5 7. “BBB”

8. 没有输入数据

三、填空

1. 类型

2.(1)int i,p(2)p=i(3)printf(“%dn”,p);3.(1)#include “math.h”

6.D

7.A 5 6.60 1.10 20

(2)a[i]/20(3)s=fabs(a[i]-pjz);(4)printf(“%f,%fn”,pjz,t);4.

(1)x<4(2)y<3(3)z==3 5.(1)N/2(2)a[N-1-k](3)a[N-1-k](4)k

第六单元

函数

一、选择题

1.A

2.A

3.A

4.B

二、读程序写结果

1. The final result is:4 2. 125 3. 9 4. 0,0 0,2 5. 8, 17 6. 5 6 7. 31 8. 57 9. 2 6 10. 15 11.4

三、填空

5.D

6.B 8.C 9.B 11.B 13.A

10.C 12.B 1.(1)i

(1)strlen(str);(2)str[i]>=‟A‟ && str[i]<=‟Z‟ || str[i]>=‟a‟ && str[i]<=‟z‟(3)str[i]>=‟0‟ && str[i]<=‟9‟(4)str[i]= =‟ ‟ 3.(1)pn(x,n);(2)1;(3)x;(4)((2*n-1)*x*pn(x,n-1)-(n-1)*pn(x,n-2))/n;4.x

第四篇:C语言实验报告

郑州轻工业学院 实 践 报 告

实现内容:

OJ1123最佳校友(数组)、OJ1158又是升序(指针)、OJ1180成绩统计(结构)、OJ1203做幻方(文件)

号:541507020140 学生姓名:王红旭

专业班级:电子信息科学与技术15-01 所在院系:计算机与通信工程学院 指导教师:王秉政

成绩:

实践名称:上机实验课

来源课程:[0404230]C程序设计进阶 实践时间:202_.03-05 实践地点:科学校区实验楼301

报告撰写时间:202_.05.10

1123最佳校友(数组)1 实践目的

为了方便数组的管理和使用,提高程序设计的效率。实践要求

熟练使用数组解决问题。使用的技术、知识点、工具等

C语言程序设计书本教材,数组等。需求分析和功能描述

要求;北京校友会每年举办两次,所有校友都有校友编号,每次到会的校友都在签到簿上写下自己的编号和姓名,在校友会成立5周年的聚会上将颁发“最佳校友奖”,该奖项颁发给到会次数最多的校友。现在请你编写程序,找出这个奖项的得主。若有多个校友并列第一,则均可获奖。系统总体设计

#include int main(){ int a[100]={0};int i,n,max,k;while(scanf(“%d”,&n),n>=0)

a[n]++;max=a[0];for(i=1;i<100;i++){

if(a[i]>max)

max=a[i];} k=0;for(i=0;i<100;i++){

if(a[i]==max)

{

if(k==0)

printf(“%d”,i);

else

printf(“ %d”,i);

k++;

} }

} printf(“n”);return 0;

1158又是升序(指针)实践目的

指针可以表示复杂的数据结构,能动态分布内存,及方便地址使用字符串,可作为函数间传递的参数,也可以作为函数返回值,为函数之间各类型数据的传递提供简捷便利的方法。实践要求

熟练使用指针 使用的技术、知识点、工具等

C语言程序设计书本教材,指针等 需求分析和功能描述

将输入的四个整数按由大到小的顺序输出。

已定义如下swap函数,可实现形参pa和pb所指内存单元的内容交换。请务必使用本函数实现两个变量内容的互换。void swap(int *pa, int *pb){ int t;t=*pa;*pa=*pb;*pb=t;} 5 系统总体设计

#include #include

void swap(int *pa, int *pb);int main(){

int a[10];

int i, j, n=4;

for(i=0;i<4;i++)

scanf(“%d”, &a[i]);

for(i=0;i

for(j=i;j

if(a[i]

swap(&a[i], &a[j]);

for(i=0;i

printf(“%d%c”, a[i], i!=n-1 ? ' ' : 'n');

return 0;}

void swap(int *pa, int *pb){

int t;

t=*pa;

*pa=*pb;

*pb=t;}

1180成绩统计(结构)实践目的

数组在一定情况下不能更好的完成要求,使用结构可以更好的将数据关联起来,更好的解决问题。实践要求

熟练使用结构 使用的技术、知识点、工具等

C语言程序设计书本教材,结构等 需求分析和功能描述

从键盘输入若干个学生的信息,每个学生信息包括学号、姓名、3门课的成绩,计算每个学生的总分,输出总分最高的学生的信息。系统总体设计

#include typedef struct {

char ID[20];

char name[20];

int a;

int b;

int c;}STUDENT;//int inputArr int main(){

STUDENT stu, first;

int T=0, n=0, i=0;

scanf(“%d”, &n);

first.a = first.b = first.c =-1;

for(i = 0;i < n;i++)

{

scanf(“%s %s %d %d %d”, stu.ID, stu.name, &stu.a, &stu.b, &stu.c);

if(stu.a + stu.b + stu.c > first.a + first.b + first.c)

first = stu;

}

printf(“%s %s %d %d %dn”, first.ID, first.name, first.a, first.b, first.c);

return 0;}

1203做幻方(文件)实践目的

文件是处理大数据,并可以储存数据,防止数据消失。实践要求

熟练使用文件 使用的技术、知识点、工具等

C语言程序设计书本教材,文件等 需求分析和功能描述

Apple最近迷上了做幻方,Apple还是个中高手,只要你说个奇数N就能把N*N的幻方做出来。其实你可以比他做得更好的。Apple总是画得很乱,而你可以利用程序排得很整齐^_^ 幻方的要求:每一行,每一列,还有两条斜线上数字的和都相等.5 系统总体设计

#include #include #define N 30 int sqr(int m);

int main(){

int m;

while(scanf(“%d”, &m), m!= 0)

{

sqr(m);

}

return 0;}

int sqr(int m){

int a[N][N] = {0};

int x=0, y=0;

int times, p, q, fmt;

int i, j;

x = m / 2;

y = m1;

}

}

fmt = log10(times);

if(fmt == 0)

{

for(i = 0;i < m;i++)

{

for(j = 0;j < m1]);

printf(“n”);

j++)

}

} } else if(fmt == 1){

for(i = 0;i < m;i++)

{

for(j = 0;j < m1]);

printf(“n”);

} } else if(fmt == 2){

for(i = 0;i < m;i++)

{

for(j = 0;j < m1]);

printf(“n”);

} } printf(“n”);return 0;

第五篇:C语言实验报告

实验一 C程序的运行环境和方法

一、实验目的

1.了解所用的计算机系统。

2.了解在该系统上如何进行编辑、编译、连接和运行一个C程序。3.通过运行简单的C程序了解C程序的特点。

二、实验内容和步骤

1.熟悉所用的系统。了解Windows资源管理器的使用方法:文件的查看、复制、运行等方法,Visual C++所在目录,文本文件的建立方法。2.进入Visual C++,并新建一个C++源程序文件。

3.熟悉Visual C++的集成环境,了解各菜单项有哪些子菜单。4.输入下面的程序(教材中的例1.1),注意区分大小写。

#include void main(){ printf(“This is a C program.n”);} 编译并运行程序。结果为:

5.关闭工作区,新建一个程序,然后对教材中的例1.2重复4中的操作(即只将程序改为例1.2中的程序,其它操作步骤相同)。其程序为:

#include int main(){ int a,b,sum;a=123;b=456;sum=a+b;printf(“sum is %dn”,sum);return 0;} 运行结果为:

6.关闭工作区,新建一个程序,然后输入并运行一个需要在运行时输入数据的程序

#include void main(){int a,b,c;int max(int x,int y);

printf(“input a and b:n”);scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“nmax=%dn”,c);} int max(int x,int y){int z;if(x>y)z=x;else z=y;return(z);}(1)运行程序,若程序有错,则修改错误后继续运行程序,当没有错误信息时输入:2,5并按Enter键,查看运行结果。

其运行结果为:

(2)将程序的第三行改为:int a;b;c;然后按F9看结果如何,将其修改为int a,b,c;将子程序max的第3,4行合并为一行,运行程序,看结果是否相同。将程序的第三行改为:int a;b;c;运行结果为:

将子程序max的第3,4行合并为一行,运行程序,其结果相同,结果为:

7.运行一个自己编写的程序,程序的功能是输出两行文字。其程序为:

#include void main(){ printf(“我是中国人!n”);printf(“我深深的爱着我的祖国!n”);} 运行结果为:

实验二 数据类型、运算符和表达式

一、实验目的

1.掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。

2.掌握不同数据类型之间赋值的规律。

3.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(――)运算符的使用。

4.进一步熟悉C程序的编辑、编译、连接和运行的过程。

二、实验内容和步骤

1.输入并运行下面的程序 #include void main(){char c1,c2;c1='a';c2='b';printf(“%c %c”,c1,c2);}(1)运行此程序 其结果为:

(2)加入下面的一个语句作为“}”前的最后一个语句:

printf(“%d,%dn”,c1,c2);其结果为:

(3)将第3行改为:

int c1,c2;然后再运行程序,并观察结果是否相同。相同,其结果为:

(4)将第3行改为int c1,c2;将第4,5行依次改为:

c1=a;c2=b;c1=“a”;c2=“b” c1=300;c2=400;每改为一次后运行程序,观察结果。其程序为:

#include void main(){int c1,c2;c1='a',c2='b';c1=300;c2=400;printf(“%c %cn”,c1,c2);printf(“%d %dn”,c1,c2);} 其结果为:

2.分析教材第3章习题3.5中的程序的运行结果,然后输入该程序并运行,将运行结果与前面分析的结果对比。其程序为:

#include int main(){int a,b;float x,y;char c1,c2;scanf(“a=%d b=%d”,&a,&b);scanf(“%f %e”,&x,&y);scanf(“%c %c”,&c1,&c2);printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%cn”,a,b,x,y,c1,c2);return 0;} 其运行结果为:

3.输入并运行下面的程序

#include void main(){int a,b;unsigned c,d;long e,f;a=100;b=-100;e=50000;f=32767;c=a;d=b;printf(“%d,%dn”,a,b);3

printf(“%u,%un”,a,b);printf(“%u,%un”,c,d);c=a=e;d=b=f;printf(“%d,%dn”,a,b);printf(“%u,%un”,c,d);} 请对照程序和运行结果分析: 运行结果为:

(1)将一个负整数赋给一个无符号的变量,会得到什么结果。画出它们在内存中的表示形式。

(2)将一个大于32767的长整数赋给一个整型变量,会得到什么结果。画出它们在内存中的表示形式。

(3)将一个长整数赋给无符号的变量,会得到什么结果。画出它们在内存中的表示形式。4.输入习题3.10(1)运行程序,注意i,j,m,n的值。(2)将第4,5行改为:

m=i++;n=++j;再运行。(3)将程序改为:

#include void main(){int i,j;i=8;j=10;printf(“%d,%dn”,++i,++j);i=8;j=10;printf(“%d,%dn”,i++,j++);i=8;j=10;printf(“%d,%dn”,++i,i);i=8;j=10;printf(“%d,%dn”,i++,i);} 运行程序并分析运行结果。其结果为:

5.按习题3.6的要求编程并上机运行:

要将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,字母“A”后面第4个字母是“E”,用“E”代替“A”,因此,“China”应译为“Glmre”。请编一程序,用赋初值的方法使c1、c2、c3、c4、c5这5个变量的值分别为’C’,'h', 'i','n', 'a',经过计算,使c1、c2、c3、c4、c5分别变为:'G','l','m',r','e',并输出.程序提示:

main函数算法如下:

定义char型变量 c1,c2,c3,c4,c5;给字符型变量赋值 c1=c1+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;输出c1,c2,c3,c4,c5 其程序为: #include int main(){char c1='C',c2='h',c3='i',c4='n',c5='a';c1=c1+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;printf(“password is %c%c%c%c%cn”,c1,c2,c3,c4,c5);return 0;} 其运行结果为:

实验三 最简单的C程序设计

一、实验目的

1.掌握C语言中使用最多的一种语句――赋值语句的使用方法。2.掌握各种类型数据的输入输出方法,能正确使用各种格式输出符。

二、实验内容和步骤

1.掌握各种格式输出符的使用方法。#include void main(){int a,b;float d,e;char c1,c2;5

double f,g;long n,m;unsigned p,q;a=61;b=62;c1='a';c2='b';d=3.56;e=-6.87;f=3156.890121;g=0.123456789;m=50000;n=-60000;p=32768;q=40000;printf(“a=%d,b=%dnc1=%c,c2=%cnd=%6.2f,e=%6.2fn”,a,b,c1,c2,d,e);printf(“f=%15.6f,g=%15.12fnm=%ld,n=%ldnp=%u,q=%un”,f,g,m,n,p,q);}(1)运行此程序并分析运行结果。其结果为:

(2)在此基础上,修改程序的第9-14行:

a=61;b=62;c1=a;c2=b;f=3156.890121;g=0.123456789;d=f;e=g;p=a=m=50000;q=b=n=-60000;运行程序,分析运行结果。其结果为:

(3)将9-14行改为以下的scanf语句,即用scanf函数接收从键盘输入的数据:

scanf(“%d,%d,%c,%c,%f,%f,%lf,%lf,%ld,%ld,%u,%u”,&a,&b,&c1,&c2,&d,&e,&f,&g,&m,&n,&p,&q);运行程序(无错误的情况下)输入数据如下:

61,62,a,b,3.56,-6.87,3156,890121,0.123456789,50000,-60000,32768,40000 其结果为:

2.按习题3.8的要求编写程序并运行:

设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积,圆球表面积、圆球体积、圆柱体体积。用scanf输入数据,输出计算结果,输出时要有文字说明,取小数后2位数字。其程序为:

#include int main(){float h,r,l,s,sq,vq,vz;float pi=3.141526;printf(“请输入圆半径r,圆柱高h:”);scanf(“%f,%f”,&r,&h);l=2*pi*r;s=r*r*pi;sq=4*pi*r*r;vq=3.0/4.0*pi*r*r*r;vz=pi*r*r*h;printf(“圆周长为:l=%6.2fn”,l);printf(“圆面积为:s=%6.2fn”,s);printf(“圆球面积为:sq=%6.2fn”,sq);printf(“圆球体积为:vq=%6.2fn”,vq);printf(“圆柱体积为:%6.2fn”,vz);return 0;} 其运行结果为:

3.编写程序,用getchar函数输入两个字符给c1,c2,然后分别用putchar函数和printf函数输出这两个字符。其程序为:

#include void main(){ char c1,c2;printf(“请输入两个字符: c1,c2 :”);

c1=getchar();c2=getchar();printf(“用putchar语句输出结果为:”);putchar(c1);putchar(c2);printf(“n”);printf(“用printf语句输出结果为:”);printf(“%c%cn”,c1,c2);} 其运行结果为:

实验四 选择结构程序设计

一、实验目的

1.了解C语言表示逻辑值的方法。

2.学会正确使用逻辑运算符和逻辑表达式的方法。3.熟悉if语句和switch语句。4.结合程序掌握一些简单的算法。5.学习调试程序的方法。

二、实验内容

本实验要求编程解决以下问题,然后上机调试运行程序。

x1x1x101.y2x13x11x10

用scanf函数输入x的值,求y的值。

其程序为:

#include void main(){ int x,y;printf(“请输入x:n”);scanf(“%d”,&x);if(x<1)y=x;else if(x<10)y=2*x-1;

else y=3*x-11;printf(“x=%d,y=%dn”,x,y);} 运行结果为:

2.给出一个百分制的成绩,要求输出成绩等级A,B,C,D,E,90分及以上为A,80-89为B,70-79为C,60-69为D,60分以下为E。要求从键盘输入成绩,然后输出相应等级,分别用if语句和switch语句实现。(1)使用if语句的程序如下: #include void main(){ float score;char grade;printf(“请输入学生成绩:n”);scanf(“%f”,&score);if(score>=90)grade='A';else if(score>=80)grade='B';else if(score>=70)grade='C';else if(score>=60)grade='D';else grade='E';printf(“成绩是%-5.1f,相应的等级是%cn”,score,grade);} 运行结果为:

(2)使用switch语句程序如下: #include void main(){ float score;char grade;printf(“请输入学生成绩:n”);scanf(“%f”,&score);switch(int(score/10)){ case 10: case 9: grade='A';break;case 8: grade='B';break;case 7: grade='C';break;case 6: grade='D';break;default: grade='E';break;}

printf(“成绩是%-5.1f,相应的等级是%cn”,score,grade);} 其运行结果与使用if语句运行结果一样。

3.编程实现:输入一个不多于5位的正整数,要求:(1)输出它是几位数,(2)分别输出每一位数字,(3)按逆序输出各位数字,如原数为321,则应输出123。应准备以下测试数据

要处理的数为1位正整数; 要处理的数为2位正整数; 要处理的数为3位正整数; 要处理的数为4位正整数; 要处理的数为5位正整数;

除此之外,程序还应当对不合法的输出作必要的处理。例如: 输入负数;

输入的数超过5位; 其程序为:

#include #include int main()10

{ int num,inp,ten,hundred,thousand,ten_thousand,place;printf(“请输入一个整数(0-99999):n”);scanf(“%d”,&num);if(num>99999)printf(“输入的数超过5位!n”);else if(num<0)printf(“输入的数是一个负数!n”);else { if(num>9999)place=5;else if(num>999)place=4;else if(num>99)place=3;else if(num>9)place=2;else place=1;if(num>99999||num<0)printf(“enter num is error!n”);printf(“位数:%dn”,place);printf(“每位数字为:”);ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000;hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;inp=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);switch(place){case 5:printf(“%d,%d,%d,%d,%d”,ten_thousand,thousand,hundred,ten,inp);printf(“n反序数字为:”);printf(“%d%d%d%d%d”,inp,ten,hundred,thousand,ten_thousand);break;case 4:printf(“%d,%d,%d,%d”,thousand,hundred,ten,inp);printf(“n反序数字为:”);printf(“%d%d%d%d”,inp,ten,hundred,thousand);break;case 3:printf(“%d,%d,%d”,hundred,ten,inp);printf(“n反序数字为:”);printf(“%d%d%d”,inp,ten,hundred);break;case 2:printf(“%d,%d”,ten,inp);printf(“n反序数字为:”);11

printf(“%d%d”,inp,ten);break;case 1:printf(“%d”,inp);printf(“n反序数字为:”);printf(“%d”,inp);break;} printf(“n”);return 0;} }

4.编程实现:输入4个整数,要求按由小到大的顺序输出。得到正确结果后,修改程序使之按由大到小的顺序输出。由小到大顺序输出其程序为: #include void main(){int t,a,b,c,d;printf(“请输入四个数:”);scanf(“%d,%d,%d,%d,%d”,&a,&b,&c,&d);if(a>b){t=a;a=b;b=t;} if(a>c){t=a;a=c;c=t;} 12

if(a>d){t=a;a=d;d=t;} if(b>c){t=b;b=c;c=t;} if(b>d){t=b;b=d;d=t;} if(c>d){t=c;c=d;d=t;} printf(“排序结果为:n”);printf(“%d %d %d %dn”,a,b,c,d);} 其运行结果为:

由大到小顺序输出其程序为: 将上面程序第十九行改为:

printf(“%d %d %d %dn”,d,c,b,a);其运行结果为:

5.已知a=12,b=6,要求输入一个算术运算符(+、-、*、/),对a,b进行算术运算,并输出结果。其程序为:

#include int main(){int a=12,b=6,c;char ch;printf(“请输入一个四则运算的符号:n”);scanf(“%c”,&ch);printf(“The result is:”);switch(ch){ case'+':printf(“a+b=%dn”,a+b);break;case'-':printf(“a-b=%dn”,a-b);break;case'*':printf(“a*b=%dn”,a*b);break;case'/':printf(“a/b=%dn”,a/b);break;} return 0;} 其运行结果为:

实验五 循环控制

一、实验目的

熟悉使用while语句,do-while语句和for语句实现循环的方法。掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。

二、实验内容

1.上机完成习题6.1:输入两个正整数m和n,求出它们的最大公约数和最小公倍数。

输入时,使m

修改程序使对任何的整数都能得到正确的结果。其程序为:

#include void main(){ int p,r,n,m,temp;printf(“请输入两个正整数 n,m:n”);scanf(“%d,%d”,&n,&m);if(n

2.编写程序利用公式:e1其程序为:

#include

111求e的近似值,精确到小数后6位 1!2!n!

void main(){ int n,i;double e,p,t;printf(“输入n的值:n”);scanf(“&d”,&n);e=1;t=1;p=1;i=1;while(t>=1e-7){e=e+t;i++;p=p*i;t=1.0/p;} printf(“The e is %fn”,e);} 其运行结果为:

3.编程求1到n中能被3或7整除的数之和。分别用for循环语句和while循环语句完成本题。

用for循环,其程序为: #include void main(){ int i,n,sum=0;printf(“请输入一个整数:n”);scanf(“%d”,&n);for(i=1;i<=n;i++)if(i%3==0||i%7==0)sum=sum+i;printf(“The sum is %dn”,sum);} 其运行结果为:

用while循环语句,其程序为:

#include void main(){ 15

int i=1,n,sum=0;printf(“请输入一个整数:n”);scanf(“%d”,&n);while(i<=n){ if(i%3==0||i%7==0)sum=sum+i;i++;} printf(“The sum is %dn”,sum);}

4.上机完成习题6.10:猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少桃子。

在得到正确结果后,修改题目,改为每天早上都吃了前一天剩下的一半加二个,请修改程序,并运行,检查运行结果是否正确。其程序为:

#include void main(){ int day,x=1,x1;for(day=9;day>=1;day--){ x=2*(x+1);x1=x;} printf(“total=%dn”,x1);} 其运行结果为:

实验六 数组

一、实验目的

1.掌握一维数组与二维数组的定义、赋值及输入输出方法。2.掌握字符数组和字符串函数的使用。

3.掌握与数组有关的算法(特别是排序算法)

二、实验内容

1.用选择法对10个整数排序。10个整数用scanf函数输入。其程序为:

#include void main(){int i,j,min,temp,a[11];printf(“enter data:n”);for(i=1;i<=10;i++){printf(“a[%d]=”,i);scanf(“%d”,&a[i]);} printf(“n”);printf(“The orginal numbers:n”);for(i=1;i<=10;i++)printf(“%5d”,a[i]);printf(“n”);for(i=1;i<=9;i++){min=i;for(j=i+1;j<=10;j++)if(a[min]>a[j])min=j;temp=a[i];a[i]=a[min];a[min]=temp;} printf(“nThe sorted numbers:n”);for(i=1;i<=10;i++)printf(“%5d”,a[i]);printf(“n”);} 其运行结果为:

2.有15个数存放在一个数组中,输入一个数要求用折半查找法找出该数是数组中的第几个元素的值,如果该数不在数组中,则输出无此数,要找的数用scanf函数输入。其程序为:

#include # define N 15 int main(){int i,number,top,bott,mid,loca,a[N],flag=1,sign;char c;printf(“enter data:n”);scanf(“%d”,&a[0]);i=1;while(ia[i-1])i++;else printf(“enter this data again;n”);} printf(“n”);while(flag){ printf(“input number to look for:”);scanf(“%d”,&number);

sign=0;

top=0;

bott=N-1;

if(numbera[N-1])

loca=-1;

while((!sign)&&(top<=bott))

{

mid=(bott+top)/2;

if(number==a[mid])

{loca=mid;

printf(“Has found %d,its position is %dn”,number,loca+1);

sign=1;

}

else if(number

bott=mid-1;

else

top=mid+1;

}

if(!sign||loca==-1)

printf(“cannot find %d.n”,number);

printf(“continue or not(Y/N)?”);

scanf(“%c”,&c);

if(c=='N'||c=='n')

flag=0;} return 0;} 其运行结果为:

3.将两个串连接起来,不要用strcat函数。其程序为:

#include int main(){ char s1[80],s2[40];int i=0,j=0;printf(“input string1:”);scanf(“%s”,s1);printf(“input string2:”);scanf(“%s”,s2);while(s1[i]!='')i++;while(s2[j]!='')s1[i++]=s2[j++];s1[i]='';19

printf(“nThe new string is:n”,s1);return 0;} 其运行结果为:

4.找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。至少准备两组测试数据:(1)二维数组有鞍点 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20(2)二维数组没有鞍点 1 2 3 4 11 2 4 6 8 12 3 6 9 10 15 4 8 12 16 7 用scanf函数从键盘输入数组的各元素的值,检查结果是否正确,题目未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。其程序为:

#include # define N 4 # define M 5 int main(){ int i,j,k,a[N][M],max,maxj,flag;printf(“please input matrix:n”);for(i=0;imax){max=a[i][j];maxj=j;} flag=1;for(k=0;k

if(max>a[k][maxj]){flag=0;continue;} if(flag){printf(“a[%d][%d]=%dn”,i,maxj,max);break;} } if(!flag)printf(“It is not exist!n”);return 0;} 其运行结果为:

实验七 函数

一、实验目的

1.掌握定义函数的方法。

2.掌握函数实参及形参的对应关系以及“值传递”方式。3.掌握函数的嵌套调用和递归调用的方法。

4.掌握全局变量和局部变量,动态变量、静态变量的概念和使用方法。5.学会对多文件程序的编译和运行。

二、实验内容

1.写出一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。本程序应准备以下测试数据:17,34,2,1,0,分别输入数据,运行程序并检查结果是否正确。其程序为:

#include int main(){int prime(int);int n;printf(“input an integer:n”);scanf(“%d”,&n);if(prime(n))printf(“%d is a prime.n”,n);else printf(“%d is not a prime.n”,n);return 0;21

}

int prime(int(n)){int flag=1,i;for(i=2;i

2.用一个函数来实现将一行字符串中最长的单词输出。此行字符从主函数传递给该函数。(1)把两个函数放在同一个程序文件中。

(2)将两个函数分别放在两个程序文件中,作为两个文件进行编译、连接和运行。其程序为:

#include #include int main(){ int alphabetic(char);int longest(char[]);int i;char line[100];printf(“input one line:n”);gets(line);printf(“The longest word is:”);for(i=longest(line);alphabetic(line[i]);i++)printf(“%c”,line[i]);printf(“n”);return 0;}

int alphabetic(char c)22

{if((c>='a'&&c<='z')||(c>='A'&&c<='z'))return(1);else return 0;}

int longest(char string[]){int len=0,i,length=0,flag=1,place=0,point;for(i=0;i<=strlen(string);i++)if(alphabetic(string[i]))if(flag){point=i;flag=0;} else

len++;else {flag=1;if(len>=length){len=len;place=point;len=0;} } return(place);} 其运行结果为:

3.用递归法将一个整数n转换成字符串。例如输入483.应输出字符串“483”。n的位数不确定,可以是任意的整数。其程序为:

#include int main(){void convert(int n);int number;printf(“input an integer:”);scanf(“%d”,&number);printf(“output:”);if(number<0){putchar('-');putchar(' ');number=-number;23

} convert(number);printf(“n”);return 0;}

void convert(int n){int i;if((i=n/10)!=0)convert(i);putchar(n%10+'0');putchar(32);} 其运行结果为:

4.求两个整数的最大公约数和最小公倍数。用一个函数求最大公约数用另一个函数根据求出的最大公约数求最小公倍数。分别用下面的两种方法编程。(1)不用全局变量,在主函数中输入两个数和输出结果。(2)用全部变量的方法,数据的传递通过全部变量的方法。不用全局变量其程序为: #include int main(){int hcf(int,int);int lcd(int,int,int);int u,v,h,l;scanf(“%d,%d”,&u,&v);h=hcf(u,v);printf(“H.C.F=%dn”,h);l=lcd(u,v,h);printf(“L.C.D=%dn”,l);return 0;}

int hcf(int u,int v){int t,r;if(v>u){t=u;u=v;v=t;} while((r=u%v)!=0){u=v;v=r;} return(v);24 }

int lcd(int u,int v,int h){ return(u*v/h);} 其运行结果为:

使用全局变量,其程序为: #include int Hcf,Lcd;int main(){void hcf(int,int);void lcd(int,int);int u,v;scanf(“%d,%d”,&u,&v);hcf(u,v);lcd(u,v);printf(“H.C.F=%dn”,Hcf);printf(“L.C.D=%dn”,Lcd);return 0;}

void hcf(int u,int v){int t,r;if(v>u){t=u;u=v;v=t;} while((r=u%v)!=0){u=v;v=r;} Hcf=v;}

void lcd(int u,int v){ Lcd=u*v/Hcf;} 其运行结果为:

5.写一个函数,输入一个十六进制数,输出相应的十进制数。其程序为:

#include # define MAX 1000 int main(){int htoi(char s[]);int c,i,flag,flag1;char t[MAX];i=0;flag=0;flag1=1;printf(“input a HEX number:”);while((c=getchar())!=''&&i='0'&&c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F'){flag=1;t[i++]=c;} else if(flag){t[i]='';printf(“decimal number %dn”,htoi(t));printf(“continue or not?”);c=getchar();if(c=='N'||c=='n')flag1=0;else {flag=0;i=0;printf(“ninput a HEX number:”);} } } return 0;}

int htoi(char s[]){int i,n;n=0;for(i=0;s[i]!='';i++){if(s[i]>='0'&&s[i]<='9')26

n=n*16+s[i]-'0';if(s[i]>='a'&&s[i]<='f')n=n*16+s[i]-'a'+10;if(s[i]>='A'&&s[i]<='F')n=n*16+s[i]-'A'+10;} return(n);} 其运行结果为:

6、编程实现模拟计算机完成加、减、乘、除运算;加减乘除分别通过调用函数实现 其程序为:

#include float add(float x,float y);float minus(float x,float y);float chen(float x,float y);float chu(float x,float y);void main(){ float a,b,c;char ch;printf(“please enter a and ch and b:n”);scanf(“%f %c %f”,&a,&ch,&b);switch(ch)

{

case'+':c=add(a,b);break;printf(“a+b=%4fn”,c);

case'-':c=minus(a,b);break;printf(“a-b=%4fn”,c);

case'*':c=chen(a,b);break;printf(“a*b=%4fn”,c);

case'/':c=chu(a,b);break;printf(“a/b=%4fn”,c);

default :printf(“enter data error!n”);

} printf(“所求得的结果为:%4fn”,c);

printf(“n”);}

float add(float x,float y){float c;c=x+y;return(c);}

float minus(float x,float y){float d;d=x-y;return(d);}

float chen(float x,float y){float e;e=x*y;return(e);}

float chu(float x,float y){float f;f=x/y;return(f);} 其运行结果为:

实验八

指针

一、实验目的

1.通过实验进一步掌握指针的概念,会定义和使用指针变量。2.能正确使用数组的指针和指向数组的指针变量。3.能正确使用字符串的指针和指向字符串的指针变量。4.能正确使用指向函数的指针变量。

5.了解指向指针的指针的概念及其使用方法。

二、实验内容

以下程序要求使用指针处理。

1. 输入三个整数,按由小到大的顺序输出。运行无错后改为:输入三个字符串,按由小到大的顺序输出。

三个整数按由小到大的顺序输出其程序为: #include int main(){void swap(int *p1,int *p2);int n1,n2,n3;int *p1,*p2,*p3;printf(“input three integer n1,n2,n3:n”);scanf(“%d,%d,%d”,&n1,&n2,&n3);p1=&n1;p2=&n2;p3=&n3;if(n1>n2)swap(p1,p2);if(n1>n3)swap(p1,p3);if(n2>n3)swap(p2,p3);printf(“Now ,the order is:%d,%d,%dn”,n1,n2,n3);return 0;} void swap(int *p1,int *p2){int p;p=*p1;*p1=*p2;*p2=p;} 其运行结果为:

三个字符按由小到大的顺序输出其程序为: #include #include int main(){void swap(char *,char *);char str1[20],str2[31],str3[20];29

printf(“input three line:n”);gets(str1);gets(str2);gets(str3);if(strcmp(str1,str2)>0)swap(str1,str2);if(strcmp(str1,str3)>0)swap(str1,str3);if(strcmp(str2,str3)>0)swap(str2,str3);printf(“Now, the order is:n”);printf(“%sn%sn%sn”,str1,str2,str3);return 0;}

void swap(char *p1,char *p2){char p[20];strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);} 其运行结果为:

2.将一个3×3的矩阵转置,用一函数实现。

在一主函数中用scanf函数输入以下矩阵元素: 1

5 7

11 13 15 17

将数组名作为函数参数,在执行函数的过程中实现矩阵转置,函数调用结束后在主函数中输出转置后的矩阵。其程序为:

#include int main(){void move(int *pointer);int a[3][3],*p,i;printf(“input matrix:n”);for(i=0;i<3;i++)scanf(“%d %d %d”,&a[i][0],&a[i][1],&a[i][2]);p=&a[0][0];move(p);printf(“Now, matrix:n”);for(i=0;i<3;i++)30

printf(“%d %d %dn”,a[i][0],a[i][1],a[i][2]);return 0;}

void move(int * pointer){int i,j,t;for(i=0;i<3;i++)for(j=i;j<3;j++){t=*(pointer+3*i+j);*(pointer+3*i+j)=*(pointer+3*j+i);*(pointer+3*j+i)=t;} } 其运行结果为:

3.有n人围成一个圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。其程序为:

#include int main(){int i,k,m,n,num[50],*p;printf(“input number of person: n=”);scanf(“%d”,&n);p=num;for(i=0;i

i++;if(i==n)i=0;} while(*p==0)p++;printf(“The last one is NO.%dn”,*p);return 0;} 其运行结果为:

4.用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数的原型为:

int strcmp(char *p1,char *p2);设p1指向字符串s1,p2指向字符串s2.要求当两个字符相同时返回0,若两个字符串不相等,则返回返回它们二者第一个不同字符的ASCII码的差值。两个字符串s1,s2由主函数输入,strcmp函数的返回值也由主函数输出。其程序为:

#include int strcmp(char *p1,char *p2);int main(){int m;char str1[20],str2[20],*p1,*p2;printf(“input two strings:n”);scanf(“%s”,str1);scanf(“%s”,str2);p1=&str1[0];p2=&str2[0];m=strcmp(p1,p2);printf(“result:%d,n”,m);return 0;}

strcmp(char *p1,char *p2){int i;i=0;while(*(p1+i)==*(p2+i))if(*(p1+i++)=='')return(0);return(*(p1+i)-*(p2+i));} 其运行结果为:

5.用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数,n和各整数在主函数中输入,最后在主函数中输出。其程序为:

#include void main(){ void sort(int **p,int n);int i,n,data[10],**p,*pstr[10];printf(“Input n:n”);scanf(“%d”,&n);for(i=0;i**(p+j))

{temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;} } 其运行结果为:

6.用指针实现二维数组的地址和值的输出。其程序为:

#include int main(){int a[3][4],i,j;int *p;printf(“请输入十二个数:n”);for(i=0;i<3;i++)for(j=0;j<4;j++)scanf(“%d”,&a[i][j]);for(p=a[0];p

C语言实验报告题及答案
TOP