您好,欢迎来到抵帆知识网。
搜索
您的当前位置:首页C语言程序设计习题与上机实验(全部答案)

C语言程序设计习题与上机实验(全部答案)

来源:抵帆知识网


C语言程序设计习题与上机实验

(参)

2008年3月30

日第一部分 同步习题集 第1章 C语言概述

一、判断题

1、正确2、正确3、错误4、错误 二、单项选择题 1、B 2、B 三、填空题 1、 /* */

3、A

4、A

5、D

6、C

7、D

8、C

2、函数首部、函数体

第2章 算法

一、

填空题

1、算法 2、算法、数据结构3、自然语言、N-S结构图、伪代码

4、顺序结构、选择结构、循环结构 5、程序设计风格、程序结构、清晰的结构

第3章 数据类型\\运算符与表达式

一、单项选择题 1、D

2、D

3、D 13、B

4、D 14、C

5、B 15、C

6、AB 7、D 16、B

17、C

8、D

9、C

10、A

11、D 12、C 二、填空题

1、2;-32768~72767;4;4 2、1.0/2*(a*x+(a+x)/(4.0*a))

第4章 最简单的C程序设计

一、单项选择题 1、B 2、B 二、填空题 1、; 2、{} 三、写结果题 1、a

3、D 3、%

4、C

5、A

6、D

7、D

4、输入输出函数

2、6,5 3、-6 4、11空格10

5、ch:dec=97;oct=141,hex=61,ASCII=a

6、修改题…printf(“%d,%d,%d,%d\\n”,++i, j--, i++, --j); 结果为:7,4,5,4 四、程序填空题 1、%c 2、%.2f

3、(1) &x,&y (2) printf(“%d,%d”,x,y);

第5章 逻辑运算和判断选择结构

一、单项选择题 1、C 2、A 3、D 11、C 12、C 二、写运行结果题 1、100 2、6 三、程序填空题 1、(1) x>y (2) u>z

4、D

5、B

6、D

7、B

8、B

9、C

10、D

3、2

4、a=2,b=1

2、(1)m= =‟c‟ (2) m= =‟b‟

3、(1)ch>=‟A‟ &&ch<=‟Z‟ (2) ch=ch-32 4、(1)x>2 && x<=10 (2) x>-1 && x<=2 四、编程题 1、

#include main( )

{

int a, b, t; }

2、编程实现以下功能:读入两个运算数(data1和data2)及一个运算符(op),计算表达式data1 op data2的值,其中op可为‘+’,‘-’,‘*’,‘/’(用switch语句实现)。 #include main( )

{ float data1, data2, result;

char op;

printf(“Please input express (data1 op data2) : ”); scanf(“%f%c%f”, &data1, &op, &data2); switch (op) {

case „+‟: result = data1 + data2; break; case „-‟: result = data1 - data2; break; + - op= =? * / int data1,data2,y; char op; printf(“Please input a,b:”); scanf(“%d,%d”, &a, &b); t = a; a = b; b = t;

printf(“a=%d,b=%d”, a, b);

给data1, op ,data2赋值 case „*‟: result = data1 * data2; break; y= y= case „/‟: result = data1 / data2; break; data1+data2 data1-data2 default: printf(“Input error!”); exit(0); }

Printf(“%g%c%g=%g”,data1, op, data2, result); y= y= data1*data2 data1/data2

输出结果 }

3、试编程判断输入的正数是否既是5又是7的倍数。若是,则输出yes,否则输出no。 #include main( ) { int x ;

printf(“Please input x”);

scanf(“%d”, &x);

if(x >=0)

if(x %5= =0&& x %7= =0)

printf(\"yes\"); else

printf(\"no\"); else

printf(“Input data error!”); } 4、

#include main( ) {

float x, y ;

printf(“Please input x:”);

scanf(“%f”, &x); if (x < 1) y = x; else if (x < 10) }

5、

#include main( ) { }

char grade ; float score;

printf(“POlease input grade:”); scanf(“%c”, &grade); switch (grade) {

case „A‟: case „a‟: score = 95;break; case „B‟: case „b‟: score = 85;break; case „C‟: case „c‟: score = 75;break; case „D‟: case „d‟: score = 65;break; case „E‟: case „e‟: score = 50;break; y = 2 * x - 11; else y = 3 * x -11; printf (“y=%g”, y);

default: printf(“Input error!”); exit(0); }

printf (“score=%f”, score);

第6章 循环结构

一、判断题

1、错误 2、正确 3、正确 4、错误 5、正确 二、单项选择题 1、A 2、C 11、C 12、B 三、写结果题 1、8,20 7、6

3、A

13、C

4、D 5、B 14、AC

6、B

7、A

8、D

9、A

10、D

10、2,3

四、程序填空题

2、2581114 3、8 8、a=41 9、 *

#

4、8 5、a=16 y=60 6、74

1、①c!=‟#‟ ②c>=‟0‟ && c<=‟9‟ 3、①i<10 ②10*i+5 五、编程题 1、

#include main( ) {

2、①t=t*i 4、①i5、①inword=0②inword=1

float max, min, score, average;

int i;

printf(“Please input score:”); scanf(“%f”, &score);

max = min = average = score; for ( i=1; i <= 34; i++) {

printf(“Please input score:”); scanf(“%f”, &score);

if (score < min ) min =score; if (score > max ) max =score;

average + = score; }

average /= 35.0;

printf(“max=%g,min=%g,average=%g”, max,. min, average);

} 2、

#include main( ) {

int a, b, r, temp;

printf(“Please input a,b”); scanf(“%d,%d”, &a, &b); while ( a<=0 || b<=0) {

printf(“Try again: ”); scanf(“%d,%d”, &a, &b); }

if (a < b)

{ r = a; a = b; b = r;} temp = a * b;

while (b != 0) { r = a % b; a = b ; b = r; }

printf(“最大公约数=%d, 最小公倍数=%d”, a , temp / a); }

第7章 数组

一、单项选择题

1、C 2、D 3、C 4、C 5、C 6、C 11、C 12、B 13、C 14、D 15、A 二、写结果题 1、3 2、he 3、AHaMA 4、How does she 三、程序填空题 1、①a[9]=x ②i<9

2、①k=i ② k != i

4、①strlen(t) ② t[k] = = c 四、编程题 1、

#include #define N 10

7、D

8、D

9、C

10、B

5、

FGH KL

3、① x !=0 ②

t+‟0‟

5、①b[j]!=‟\\0‟ ② a[i]=‟\\0‟

main( ) {

int a[N], temp, i; for (i = 0 ; i < N; i++)

{ printf(“Please input NO %d:”, i+1); scanf(“%d”, &a[i]); }

for (i = 0 ; i <= N/2 -1; i++)

{ temp = a[i];a[i]=a[N-i-1];a[N-i-1]=temp; } for (i = 0 ; i < N; i++) printf(“%3d”, a[i]); }

2、输出杨辉三角形前十行。 #include #define N 10 main( ) {

int a[N][N]; int i, j;

for (i = 0 ; i < N; i++) { }

for (i = 1 ; i < N; i++) for (j = 1 ; j <= i; j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for (i = 0 ; i < N; i++) {

a[i][i] = 1; a[i][0] = 1;

for (j = 0 ; j <= i; j++) printf(“%5d”, a[i][j]); printf(”\\n”); } }

第8章 函数

一、单项选择题

1、D中加一句z=x+y; 2、选D(题不严密) 7、B 8、A 二、写结果题 1、8

2、4

9、B i=5 3、 i=2

i=2 i=4 i=2

10、D

11、A

3、D 12、A

4、A 13、B

5、B

6、D

14、CD 15、A

4、5

三、程序填空题

1、①float fun(float a, float b); 或float fun(float , float ); ②x+y, x-y ③z+y, z-y 2、①i <= 10 ② array[i-1] ③ return avgr 3、①j=num-1 ② array[i]< array[i+1] 4、①t*i ② s+factor(k)

5、① l>h ② s, l+1, h-1 四、编程题 1、

int prime(int x) {

int i;

int flag=1; for(i=2;iint x, y;

printf(“Please input x:”); scanf(“%d”, &x); y=prime(x); if (y==1)

printf(\"%d is prime!\ else

printf(\"%d is not prime!\} 2、

#include long fun(char str[]); main() {

char datastring[10]; long data;

printf(“Please input data string:”); scanf(“%s”, datastring); data=fun(datastring);

printf(\"output number\\n\"); printf(\"%ld\ }

long fun(char str[]) {

int i; long data; data=0;

for(i=0;str[i]!='\\0';i++) data=data*10+(str[i]-'0'); return data; }

第9章 编译预处理

一、单项选择题 1、C 2、B 二、判断题

3、D

4、D

5、B

6、B

7、D

8、D

1、错误2、正确3、正确4、正确5、错误6、正确 三、编程题

1、求面积

#include

#include

#define S(a,b,c) (( (a)+(b)+(c) ) /2.0 )

#define AREA(a,b,c) sqrt(S(a,b,c)*( S(a,b,c)-a) *( S(a,b,c)-b) *( S(a,b,c)-c)) main( ) { }

double a, b, c, area;

printf(“Please input a,b,c:”);

scanf(“%lf, %lf, %lf”, &a, &b, &c); area=AREA(a,b,c); printf(“area=%lg”,area);

第10章 指针

一、单项选择题 1、B

2、B

3、D(??) 4、D

5、B

6、C

7、D

8、B 17、A

18、D

9、CD 10、D 11、B 12、C 13、D 14、D 15、C 16、B 二、写结果题

3 5

1、19 2、60 3、

5 3

4、49 5、GOOGLE 6、-2 7、Excute right! 8、xyzabc 三、程序填空题

9、4321

1、①*max=i ②a,7, &max, &min 2、①*p!=‟\\0‟ ② *p-„0‟ ③ j--> 0 3、①s+n-1或 p1+n-1 ②p2-- 4、①s1++②*s2③s1=p或puts(p)或return 5、①*q ②str[k]或*(str+k) 四、编程题

1、

#include void swap(int *p1,int *p2) {

int t;

t= *p1;*p1=*p2;*p2=t; } main() {

int a, b;

printf(“Please input a,b:”); scanf(“%d,%d”, &a, &b); swap(&a,&b);

printf(“a=%d,b=%d”,a,b); } 2、

#include int strlength(char *p) {

char *s=p; while(*p) p++; return p-s; }

main() {

char str[81];

printf(“Please input string:”); gets(str);

printf(“length=%d”,strlength(str)); }

第11章 结构体和共用体

一、单项选择题 1、A 2、A 3、D 4、D 5、A 6、D

7、D

8、D

11、B 12、C 13、A(不严密)

二、写结果题

1、Zhao 2、7,3 3、9 三、程序填空题

1、①p->link ②p!=NULL或p 四、编程题 1、

#include #define N 5 struct student {

long num;

char name[20]; float score[3];

};

void input(struct student w[], int n); void output(struct student w[], int n);

main() {

struct student st[N]; int n;

printf(\"Please input the number of worker(<10):\"); scanf(\"%d\ input(st, n); output(st, n); }

void input(struct student w[], int n) {

int i, j;

9、C

10、B

float temp; for(i=0;i{

printf(\"Please input NO %d\\n\

printf(\"Num:\");

scanf(\"%ld\getchar();

printf(\"name:\");

gets(w[i].name);

for (j=0; j < 3; j++) {

printf(“Score[%d]=”, j);

scanf(\"%f\

w[i].score[j] = temp;

} } }

void output(struct {

int i, j; for(i=0;iprintf(\"\\nOutput NO %d\\n\ printf(\"Num:\"); printf(\"%ld\ printf(\"\\nname:\"); puts(w[i].name); printf(\"score:\"); for (j=0; j < 3; j++)

printf(\"%g \ } }

student w[], int n)

第12章 位运算

一、单项选择题 1、C 2、B 二、写结果题 1、108,-2

3、D

4、B

5、0x13(无答案) x=11 y=17 z=11

6、A

7、A

8、B

2、0 3、a= 4、

第13章 文件

一、单项选择题 1、A 2、D 3、B 二、程序填空题

4、B

5、A

6、A

7、C

8、C

9、A

10、D

1、①fgetc(fp) ②count++ 2、①fname 3、①EOF ②ch, stdout 4、①f2=fopen(argv[2] ②fgetc(f1),f2 5、① ”stu_list”, ”wb” ②&stud[i],sizeof(struct student_type),1 三、编程题

1、

#include main() {

FILE *fp;

char str[255]; int i ;

if ((fp=fopen(“d:\\\est.txt”,”r”))==NULL) { }

printf(“Open error!”); exit(0);

for (i=1;i<=7;i++) { } fclose(fp); }

2、

#include main(int argc , char *argv[]) {

FILE *fp1,*fp2; if(argc!=3)

{

printf(\"you forgot to enter a filename\\n\"); exit(0);

}

if ((fp1=fopen(argv[1],”r”))==NULL) { }

if ((fp2=fopen(argv[2],”a”))==NULL) {

printf(“Open argument2 file error!”); exit(0);

printf(“Open argument1 file error!”); exit(0);

fgets(str,255,fp); printf(“%s\\n”, str);

}

while (!feof(fp1)) fputc(fgetc(fp1),fp2); fclose(fp1); fclose(fp2);

}

3、将指定的文本文件中的小写字母改为大写字母。

#include main()

{ }

4、将100~200之间的素数保存到A盘根目录的“test.txt”文本文件中。(每行存5个数,每个数占10列) include main() {

FILE *fp;

char str[255]; int i, j, count; ;

if ((fp=fopen(\"a:\\\est.txt\{ }

printf(\"Open error!\"); exit(0); FILE *fp;

char filename[81];

char ch; long pos;

printf(\"Please input filename:\"); gets(filename);

if ((fp=fopen(filename,\"r+\"))==NULL) { }

printf(\"Open error!\"); exit(0);

pos=0; while (!feof(fp)) {

fseek(fp,pos,0); ch=fgetc(fp);

if (ch>='a' && ch<='z') { }

ch = ch -32; fseek(fp,pos,0); fputc(ch,fp);

pos++; }

fclose(fp);

count = 0;

for ( i = 100;i<=200; i++) {

for(j = 2; j <= i-1; j++) if (i % j == 0) break; if (j == i )

}

{

count++;

fprintf(fp,\"%10d\if (count % 5 ==0 )

fprintf(fp,\"%c\

} }

fclose(fp);

5、将平均成绩不及格的学生数据保存到A盘的根目录的文件“stud.dat”中。 #include #define N 50 struct student {

long num; char name[20]; float score[3]; float average;

};

void input(struct student w[], int n); void save(struct student w[], int n); main() {

struct student st[N];

int n;

printf(\"Please input the number of worker(<10):\"); scanf(\"%d\ input(st, n); save(st, n);

}

void input(struct student w[], int n) {

int i, j; float temp;

for(i=0;iprintf(\"Please input NO %d\\n\ printf(\"Num:\");

scanf(\"%ld\ getchar();

printf(\"name:\"); gets(w[i].name); w[i].average = 0; for (j=0; j < 3; j++)

{ printf(\"Score[%d]=\

scanf(\"%f\ w[i].score[j] = temp;

w[i].average= w[i].average+ w[i].score[j]; }

w[i].average = w[i].average / 3.0; }

}

void save(struct student w[], int n) {

FILE *fp; int i;

if ((fp=fopen(\"a:\\\\stud.dat\ { printf(\"Open error!\"); exit(0); }

for(i=0;ifwrite(&w[i],sizeof(struct student),1,fp); }

fclose(fp); }

第二部分 综合练习与提高 第3章 数据类型、运算符与表达式

一、单项选择题

1-5 CABCD 6-10 BDBBC 11 B 二、填空题

1、(3*a*e)/(b*c) 2、3.5

3、x*x*x*x*x*x-2*x*x*x*x*x+3*x*x*x*x+4*x*x*x-5*x*x+6*x+7

第4章 最简单的C程序设计

一、单项选择题 1-4 BCDB 二、填空题 1、a=3 b=7 8.5 71.82 A a

2、a=12345,b=-198.34□□□,c=□□6.5 (□表示空格) 3、a=2, b=-1

第5章 逻辑运算和判断选择结构

一、单项选择题

1-5 DACBA 6-10 DBBBA 11-14 DBCA 二、读程序写结果 1、0 2、1 0 3、2

4、a=-1

5、*&

三、程序填空题 1、x 2、c2&&x<=10 x>-1&&x<=2 4、x= =a || x= =-a x>-a && x1、 # include

void main() { int n=0;

float score=0, max, min, sum=0, average=0; printf(\"input NO.%d score: \ scanf(\"%f\ max=min=score; while( n<=3 )

{

if(score>max) max=score; if(scoreprintf(\"input NO.%d score: \ scanf(\"%f\ }

4、3 3

average=sum/3;

printf(\"max=%.1f, min=%.1f, average=%.1f\\n\}

2、教材P98 例5.2

3、4 教材P111-112 习题5.6 5.7

第6章 循环控制

一、判断题 1-5 √×√×× 二、单项选择题

1-5 DCCDD 6-10 AABBA 11-13 CCB 三、读程序写结果 1、y=-1 2、m=1 7、*#*#*#$ 8、8 四、程序填空题

3、36 4、a=-5 9、8,-2 10、4

5、1.600000

11、1

6、8

1、a!=0或a 2、i=1, m=0 a%i= =0 3、100-5*i-j*2 l%5= =0

4、i%3= =2&& i%5= =3&& i%7= =2 j=j+1 5、n/10-i*10 n= =i*i*i+j*j*j+k*k*k 6、m%n n w 五、编程题

1、 # include

void main( ) {

int i, a=0, b=0, c=0, d=0, e=0;

char grade;

for(i=1; i<=30; i++)

{ printf(“Input NO.%d grade: ”, i);

scanf(\"%c \

switch(grade) { case 'A': a++;break; case 'B': b++;break;

case 'C': c++;break; case 'D': d++;break;

case 'E': e++;

} }

}

printf(\"A=%c B=%c C=%c D=%c E=%c \\n\

2、 #include

#include void main() {

int m,k,i,n=0;

for(m=1;m<=100;m++) { k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i= =0) break; if(i>=k+1)

{ printf(\"%6d\ /*每个数占6个字符的宽度*/

n=n+1; }

if(n%5= =0) printf(\"\\n\"); /*每5个数就换一行*/

}

printf(\"\\n\"); }

第7章 数组

一、单项选择题

1-5 BDBDB 6-10 DCADB 11-15 CDDD 二、读程序写结果 1、aabcd

2、fi

3、count[0]=6, count[1]=11

4、GDABC 6、7078

9198

三、程序填空题 1、 m<9 i = 0 2、&num[i][j]

num[i][j]!= num[j][i]

3、完整程序如下 #include void main()

{ int a[3][2]={2,10,9,4,5,119},b[2][2]={-1,-2,-3,-4}; int i,j,k,s,c[3][2]; for(i=0;i<3;i++) for(j=0;j<2;j++) { s=0;

for(k=0;k<2;k++)

s+=a[i][k]*b[k][j]; c[i][j]=s; }

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

{ for(j=0;j<2;j++) printf(\"%6d\ printf(\"\\n\"); } }

4、完整程序如下 main()

{ int a[10]={191,3,6,4,11,7,25,13,,10}; int i,j,k; for(i=0;i<10;i++) {

k=a[i]; j=i-1; while(j>=0&&ka[j+1]=a[j]; j--; }

5、LBLMNP

a[j+1]=k;

for(i=0;i<10;i++) printf(\"%d \

}

5、50 c= = t[k] 四、编程题

1、#include

void main()

{ char s1[80],s2[40];

int i=0,j=0,n=-1,result; char c;

printf(\"input s1:\"); gets(s1);

printf(\"以下为求s1的长度\\n\"); while(s1[i]!='\\0') i++; printf(\"s1长度为:%d\\n\\n\

printf(\"以下为将s1赋值给s2\\n\"); i=0;

while(s1[i]!='\\0') { s2[i]=s1[i]; i++; } s2[i]='\\0'; puts(s2); printf(\"\\n\");

printf(\"以下为连接s1和s2\\n\"); i=0;

printf(\"input s1:\"); gets(s1);

printf(\"input s2:\"); gets(s2);

while(s1[i]!='\\0') i++; while(s2[j]!='\\0') s1[i++]=s2[j++]; s1[i]='\\0'; puts(s1); printf(\"\\n\");

printf(\"以下为在s1中搜索字符\\n\"); i=0;

printf(\"input s1:\"); gets(s1);

printf(\"input a charactor:\"); c=getchar(); getchar(); while(s1[i]!='\\0') { if(s1[i]==c)

{ n=i; break; } i++;

}

printf(\"字符在字符串中的下标位置为:%d\\n\\n\

printf(\"以下为比较两个字符串\\n\"); i=0; printf(\"input s1:\"); gets(s1);

printf(\"input s2:\");

gets(s2);

while((s1[i]==s2[i])&&(s1[i]!='\\0')) i++; if(s1[i]=='\\0'&&s2[i]=='\\0') result=0; else result=s1[i]-s2[i];

printf(\"result=%d\\n\ }

第8章 函数

一、BBABA CBCDA D 二、

1. 0 2 4 6 8 10 12 14 16 18

0 2 4 6 8 10 12 14 16 18 2. -125=-5*5*5 3. 4 3 4. 3 5 7 1 5 9 5. 8,17

三、1. p++ a[i-1=a[i];

2.(a%i==0)&&(b%i==0) (m*n)/max 3. n++ flag=-1 4. x2=mid x1=mid 5.ch==‟#‟ c==‟#‟

第9章 编译预处理

一、ABAAB BBACB 二、√××√

第10章 指针

一、ADDBD ACBDD DCDBB DCDCB DCDAD ACDBCC

二、1. edcba 2. 7

3. 5, 4 4, 5 4. 80,-20 5. BAAAAA

ABCBD 6. c 7. 3 8. 9,6

9. This is A Book 10. 9876321 11. TCILISILICT 12. bad

三、1. str[i]!=‟\\0‟ j=i k+1 2. a i%10*10+i 3. a[*pk]=a[i]

4. while(*s++=*t++) *t=‟\\0‟ 5. str sp=sp+i

第11章 结构体与共用体

一、 CDDDB CC 二、 name=zhangping,old=20

第12章 位运算

一、 CBCBB

第13章 文件

一、 CADA

二、1. fname fp

2. if(strcmp(str,string)==0) fopen(argv[1],”r”) 3. *++argv,”r”

fgets(s,BUFFSIZE,fg) 4. char *argv[]

c=fgets(fp) 5. char *argv[]

!feof(fp1) 6. hello

7. fp=fopen(“data.txt”,”r”)==NULL ch-„A‟

第三部分 上机实验与指导(答案)

实验三 选择结构程序设计

1、 main() {

float score; char grade;

printf(“Please input a student‟ score:”); scanf(“%f”, &score);

while(score>100 || score<0) {

printf(“\\nInput error, try again!”);

scanf(“%f”, &score); }

switch ( (int)(score/10) ) { }

case 10: case case case case

9: grade=‟A‟; break; 8: grade=‟B‟; break; 7: grade=‟C‟; break; 6: grade=‟D‟; break;

case 5: case 4: case 3: case 2: case 1:

case 0: grade=‟E‟;

printf(“score is %5.1f, score grade is %c.\\n”, score, grade); }

2、

#include main( ) { float x, y ;

printf(“Please input x:”);

scanf(“%f”, &x); if (x < 0) y = 0;

else if (x < 10) y = x ;

else if ( x < 20 ) y = 10; else if ( x < 40)

y = 0.5 * x + 20; else

{ printf(“Input Error!”); exit (0);

} 3、

}

printf (“y=%g”, y);

include

void main(void) { int choice; /* 显示菜单及输入提示信息 */ }

printf(\"----------------------------------------------- \\n\") ; printf(\" The Menu of Data Management \\n\") ; printf(\" 1. Input Data printf(\" 2. Output Data printf(\" 4. Delete Data printf(\" 0. Quit System

\\n\") ; \\n\") ; \\n\") ; \\n\") ; \\n\") ;

printf(\" 3. Insert Data

printf(\"----------------------------------------------- \\n\") ; printf(\" Please enter your choice: \\n\") ; /* 接收从键盘输入的数;*/ scanf(\"%d\

/* 根据输入数据显示不同信息 */ switch (choice) { }

实验四 循环结构程序设计

case 1: printf(\"Input Data \") ; break; case 2: printf(\"Output Data \") ; break; case 3: printf(\"Insert Data \") ; break; case 4: printf(\"Delete Data \") ; break; case 0: printf(\"Thanks!\"); break; default: printf(\"Input Error! \");exit(0);

1、

#include main( ) {

char ch; int i;

for (i=0; i<10;i++); {

ch = getchar();

if (ch >= ‘a’ && ch <= ‘z’) { }

ch = ch - 32;

}

putchar (ch); }

2、从键盘输入一个长整数,计算其各位数之和并输出。 #include main() { }

3、从键盘输入多个学生的单科成绩(小于0结束输入),计算最大、最小值和平均值并输出。

#include main() {

float score; float average; float max,min; float sum; int i;

sum = 0;

scanf(\"%f\i=1;

max=min=score; while(score>=0) { } if (i != 1) {

average=sum/(i-1);

printf(\"average=%g\\n\sum=sum+score;

if (score>max) max=score; if (scorescanf(\"%ld\while (x > 0) {

temp=x%10; printf(\"%d+\sum = sum + temp; x=x/10;

}

printf(\"\\b=%d\

} else

printf(\"max=%g\\n\printf(\"min=%g\\n\

{

printf(\"第一个数就是负数!!\"); } }

实验五 数组

1、输入一个3行3列的9个数据,再输出行上最大,列上最小的元素,及所在的行、列号。

#include main()

{

float a[M][N]; float max; int col; int flag; int i,j;

for(i=0;i<3;i++) for(j=0;j<3;j++) {

scanf(\"%f\ } printf(\"\\n\"); for(i=0;i<3;i++) {

max=a[i][0]; col=0;

for(j=0;j<3;j++) {

if (a[i][j]>max) {

max=a[i][j]; col=j; } }

flag=0; for(j=0;j<3;j++) {

if (max>a[j][col]) {

flag=1; break; } }

if (flag == 0)

printf(\"max=%g,row=%d,col=%d\ }

}

2、输入50个字符,再统计并输出字母个数、空格个数、数字字符个数及其它字符个数。 #include main()

{

char data[50];

int alfa,count,space,other; int i;

printf(\"Please input data:\"); for(i=0;i<50;i++) scanf(\"%c\ alfa=0; count=0; other=0; space=0; for(i=0;i<50 ;i++) {

if ((data[i]>='A' && data[i]<='Z') ||(data[i]>='a' && data[i]<='z')) alfa++;

else if ( data[i]>='0' && data[i]<='9') count++;

else if (data[i] ==' ' )

space++; else

other++; }

printf(\"%d,%d,%d,%d\}

3、从键盘输入两个字符串,并判断它们是否相等。 #include main() {

char str1[10], str2[10];

int j = 0, flag; printf(“\\n”);

scanf(“%s,%s”, str1,str2); while (str1[j] == str2[j] ) { }

j++;

if (str1[j] == „\\0‟ || str2[j] == „\\0‟)

break;

if (str1[j] == „\\0‟ && str2[j] == „\\0‟) flag = 0 ; else flag = 1; if (flag == 0)

printf(“the two string are equal.”); else

}

printf(“the two string are not equal.”);

4、从键盘输入两个字符串str1和str2,并将str2接在str1后面。 #include

main() {

char str1[81], str2[40]; int i,j ;

i=0; j=0;

printf(“Please input string1:”);

gets(str1);

printf(“Please input string2:”); gets(str2);

while (str1[i] != ‟\\0‟) i++;

while (str2[j] != „\\0‟) }

实验六 函数

本例将1、2、3题全并在一起,请大家自行分解。 #include

void add(int x[], int n);

void delchar(char str[],char del); long fun(char str[]); main()

{

int score[10]={1,2,3,4,5,6,7,8,9,10}; char string[81]=\"I hate c program.\"; char datastring[10]=\"123456\"; long data; int i;

add(score,10); delchar(string,'c'); data=fun(datastring); printf(\"output data1\\n\"); for(i=0;i<10;i++)

printf(\"%2d\ printf(\"output string\\n\"); puts(string);

printf(\"output number\\n\"); printf(\"%ld\ }

void add(int x[], int n) {

int i;

str1[i++]=str2[j++]; str1[i]=‟\\0‟; printf(“%s”,str1);

for(i = 0 ;i < n ;i++) x[i] = x[i] + 1; }

void delchar(char str[],char del) {

int i, j;

for(i=j=0; str[i] != '\\0'; i++) {

if (str[i] != del) {

str[j] = str[i]; j++; } }

str[j] = '\\0'; }

long fun(char str[]) {

int i; long data; data=0;

for(i=0;str[i]!='\\0';i++) data=data*10+(str[i]-'0'); return data; }

实验七 指针

1、从键盘输入10个实数,计算最大值、最小值和平均值并输出。

main()

{

float s[10],max,min,average; float *p; int i;

p = s;

for(i = 0;i < 10;i++) scanf(“%f”,p++);

p=s;

max=min=average=*p; for(i = 1;i < 10;i++) {

average += *(p+i); if(*(p+i)>max) max=*(p+i); if(*(p+i)average /= i;

printf(“average=%.2f,max=%.2f,min=%.2f”,average,max,min); }

2、用一个子函数实现特定字符的插入

#include

void insert(char *ch, char c) {

Int m; int i;

m=strlen(ch); for(i=m-1;i>0;i--) {

*(ch+i*2) = *(ch+i); *(ch+2*i-1)= c; }

*(ch+2*m-1)='\\0'; } main() {

char ch[81]; gets(ch); insert(ch,' '); puts(ch); }

3、设计函数,从字符串中提取子串

#include

char *substring(char *str,int n,int m) {

char *p; int i; i=0;

p=str;

while(*p++!=NULL) i++;

if (n<0 || m<0 || n>m || m>i) {

printf(\"Invald parameter!\"); exit(0); }

p=str+n-1; *(str+m)='\\0'; return p; }

main()

{

char *str=\"This is a book\"; char *p;

p=substring(str,1,5); printf(\"%s\

}

4、设计函数,统计指定范围内素数的个数,并得到这些素数在主调函数中输出。

int isprim(int x,int *p) /* p=m 或 p=&m[0] */ { int i,j;

int k=1;

*p=2; /* *p==m[0] 即 m[0]=2 */ for(j=3;j<=x;j++) {

for(i=2;i*(p+k)=j; k++; } } return k; } main() {

int y; int m[100]; int i;

y=isprim(100,m); for(i=0;iprintf(\"%d \}

实验八 结构体和共用体和文件

1、创建链表,有5个职工的数据,每个职工的数据有:工号、姓名、性别、年龄、工资,再输出这些数据。

#include

#include struct worker

{

long wid;

char name[20]; char sex; int age; double salary; struct worker *next; };

struct worker *create(void) {

struct worker *p1, *p2, *head; double temp; int i;

for(i=1;i<=5;i++)

{

p1=(struct worker *)malloc(sizeof(struct worker));

printf(\"Please input NO %d\\n\ printf(\"wid:\");

scanf(\"%ld\ getchar();

printf(\"name:\"); gets(p1->name); printf(\"sex:\"); scanf(\"%c\ printf(\"age:\");

scanf(\"%d\ printf(\"salary:\"); scanf(\"%lf\ p1->salary = temp;

if ( i == 1) head = p1; else

p2->next = p1; p2 = p1; }

p2->next = NULL;

return head; }

void print(struct worker *head) {

struct worker *p1; int i=1; p1 = head;

while(p1 !=NULL) {

printf(\"\\nOutput NO %d\ printf(\"\\nwid:\"); printf(\"%ld\ printf(\"\\nname:\"); puts(p1->name); printf(\"sex:\"); printf(\"%c\ printf(\"\\nage:\"); printf(\"%d\ printf(\"\\nsalary:\"); printf(\"%lg\ p1=p1->next; } } main() {

struct worker *head; head=create(); print(head); }

2、新建指定文件,从键盘输入若干字符保存到该文件中,以回车结束。 #include main() {

FILE *fp;

char ch;

char filename[40];

printf(“Please input file name:”); gets(filename); if ((fp=fopen(filename,\"w\")) == NULL) {

printf(\"Open error!\"); exit(0); }

ch=getchar(); while(ch !='\\n') {

fputc(ch,fp); ch=getchar(); }

fclose(fp); } 3.

#include

main(int argc , char *argv[]) {

FILE *fp1,*fp2; if(argc!=3)

{

printf(\"you forgot to enter a filename\\n\"); exit(0);

}

if ((fp1=fopen(argv[1],”r”))==NULL) { } { }

printf(“Open argument2 file error!”); exit(0);

printf(“Open argument1 file error!”); exit(0);

if ((fp2=fopen(argv[2],”a”))==NULL)

while (!feof(fp1)) fputc(fgetc(fp1),fp2);

fclose(fp1); fclose(fp2); } 4.

#include #define N 5 struct student {

long num; char name[20];

float score[3]; float average; int turn; }; void void void void

main()

{

struct student st[N]; char filename[80]; int n;

printf(\"Please input Filename:\"); scanf(\"%s\

printf(\"Please input the number of worker(<10):\"); scanf(\"%d\ input(st, n); output(st, n);

save(st, n,filename); load(st, n,filename); }

void input(struct student w[], int n) {

int i, j; float temp; for(i=0;i{

printf(\"Please input NO %d\\n\ printf(\"Num:\"); scanf(\"%ld\ getchar();

printf(\"name:\"); gets(w[i].name); w[i]. average=0; for (j=0; j < 3; j++)

input(struct student w[], int n);

output(struct student w[], int n);

save(struct student w[], int n,char *filename); load(struct student w[], int n,char *filename);

{

printf(“Score[%d]=”, j);

scanf(\"%f\

w[i].score[j] = temp;

w[i]. average += w[i].score[j];

} w[i]. average /= j; w[i].turn = 0; }

}

void output(struct {

int i, j; for(i=0;iprintf(\"\\nOutput NO %d\\n\ printf(\"Num:\"); printf(\"%ld\ printf(\"\\nname:\"); puts(w[i].name); printf(\"score:\"); for (j=0; j < 3; j++)

printf(\"%g \ } } void {

save(struct student w[], int n,char *filename)

student w[], int n)

FILE *fp; int i;

if ((fp=fopen(filename,\"wb\"))==NULL) { printf(\"Open error!\"); exit(0); }

for(i=0;ifwrite(&w[i],sizeof(struct student),1,fp); fclose(fp); } void {

load(struct student w[], int n,char *filename)

FILE *fp; int i;

if ((fp=fopen(filename,\"rb\"))==NULL) {

printf(\"Open error!\"); exit(0); }

for(i=0;ifclose(fp); }

5.

#include #define N 5 struct student {

long num; char name[20];

float score[3]; float average; int turn; }; void void void void void void main() {

struct student st[N]; char filename[80];

int n;

printf(\"Please input Filename:\"); scanf(\"%s\

printf(\"Please input the number of worker(<10):\"); scanf(\"%d\ input(st, n); output(st, n);

save(st, n,filename);

load(st, n,filename); sort(st, n); grade(st, n); output(st, n); }

void input(struct student w[], int n) {

int i, j; float temp; for(i=0;iprintf(\"Please input NO %d\\n\ printf(\"Num:\"); scanf(\"%ld\ getchar();

input(struct student w[], int n); output(struct student w[], int n);

save(struct student w[], int n,char *filename); load(struct student w[], int n,char *filename); sort(struct student w[], int n); grade(struct student w[], int n);

printf(\"name:\"); gets(w[i].name); w[i]. average=0; for (j=0; j < 3; j++)

{

printf(“Score[%d]=”, j);

scanf(\"%f\

w[i].score[j] = temp;

w[i]. average += w[i].score[j];

} w[i]. average /= j; w[i].turn = 0; }

}

void output(struct {

int i, j; for(i=0;i{

printf(\"\\nOutput NO %d\\n\ printf(\"Num:\"); printf(\"%ld\ printf(\"\\nname:\"); puts(w[i].name);

printf(\"score:\"); for (j=0; j < 3; j++)

printf(\"%g \ } }

void save(struct student w[], int n,char *filename) {

FILE *fp; int i;

if ((fp=fopen(filename,\"wb\"))==NULL) {

printf(\"Open error!\"); exit(0); }

for(i=0;iFILE *fp;

int i;

if ((fp=fopen(filename,\"rb\"))==NULL) { printf(\"Open error!\");

load(struct student w[], int n,char *filename)

student w[], int n)

exit(0); }

for(i=0;ivoid sort(struct student w[], int n) { } {

int i, j;

struct student temp; for(i=0;i{ }

temp=w[i];w[i]=w[j];w[j]=temp;

void grade(struct student w[], int n)

int i; int temp=1; w[0].turn = 1; for(i=1;iif ((int)(w[i].average*10) ! = (int)(w[i-1].average*10)) temp++;

w[i].turn = temp; }

}

综合题

1、 文件复制

#include

void copy(char *file1name, char *file2name) {

FILE *fp1,*fp2;

if ((fp1=fopen(file1name,”r”))==NULL) { } { }

printf(“Open file2 error!”); return ;

printf(“Open file1 error!”); return ;

if ((fp2=fopen(file2name,”w”))==NULL)

while (!feof(fp1)) fputc(fgetc(fp1),fp2);

fclose(fp1); fclose(fp2); }

2、 文件连接

#include

void connect(char *file1name, char *file2name) {

FILE *fp1,*fp2;

if ((fp1=fopen(file1name,”r”))==NULL) { printf(“Open file1 error!”); }

if ((fp2=fopen(file2name,”a”))==NULL) { }

while (!feof(fp1)) fputc(fgetc(fp1),fp2); fclose(fp1); fclose(fp2); }

3、 文件显示

#include

void display(char *filename) {

FILE *fp1; char ch;

if ((fp1=fopen(filename,”r”))==NULL) {

printf(“Open file1 error!”); printf(“Open file2 error!”); return ; return ;

return ; }

while (!feof(fp1)) {

ch=fgetc(fp1); putchar(ch); }

fclose(fp1); }

4、 文件比较

int compare(char *file1name, char *file2name) {

FILE *fp1,*fp2; char ch1,ch2;

if ((fp1=fopen(file1name,”r”))==NULL) { } {

printf(“Open file2 error!”);

return ; }

while (!feof(fp1) || !feof(fp2) ) {

ch1=fgetc(fp1); ch2=fgetc(fp2); if (ch1 != ch2) break;

}

fclose(fp1); fclose(fp2);

return (ch1-ch2); }

5、 文件删除

int delete(char *filename) {

if (unlink(filename) ==0)

return 1; else

return 0; }

6、 文件统计

#include

int count(char *filename) {

FILE *fp1;

int count=0;

if ((fp1=fopen(filename,”r”))==NULL) { } {

fgetc(fp1); count++; }

printf(“Open file1 error!”); return ;

printf(“Open file1 error!”); return ;

if ((fp2=fopen(file2name,”r”))==NULL)

while (!feof(fp1))

fclose(fp1); return (count); }

7、 文件改名

int updatename(char *filename1, char *filename2) {

if (rename(filename1, filename2) ==0)

return 1; else

return 0; }

#include

void main(void) {

int choice; while (1) {

/* 显示菜单及输入提示信息 */

printf(\"----------------------------------------------- \\n\") ; printf(\" The Menu of Four Arithmetic Operations printf(\" 1. 文件复制 printf(\" 2. 文件连接 printf(\" 3. 文件显示 printf(\" 4. 文件比较 printf(\" 5. 文件删除

\\n\") ; \\n\") ; \\n\") ;

\\n\") ; \\n\") ;

\\n\") ;

printf(\" 6. 文件统计 \\n\") ; printf(\" 7. 文件改名 \\n\") ; printf(\" 0. Quit the System printf(\"----------------------------------------------- \\n\") ; printf(\" Please enter your choice:\\n\") ; /* 接收从键盘输入的数;*/ scanf(\"%d\

/* 根据输入数据显示不同信息 */ switch (choice) {

case 1: copy(“file1.dat”, “file2.dat”); case 3: display(“file1.dat”) ; break; case 4: compare (“file1.dat”, “file2.dat”) ; case 5: delete (“file2.dat”) ; case 6: count (“file2.dat”) ;

break; break;

\\n\") ;

break;

case 2: connect (“file1.dat”, “file2.dat”); break;

break;

case 7: updatename (“file1.dat”, “xxx.dat”) ; case 0: printf(\"Thanks!\"); exit(0);

break;

}

}

}

default: printf(\"Input Error! \");exit(0);

getch();

Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务