C语言程序设计作业题-

Python016

C语言程序设计作业题-,第1张

《C语言程序设计》作业与思考题解答

说明:习题中P119:2.7 表示《C/C++上机实践及习题选解》中第119页的2.7题,其它以此类推,书后有解答。非《C/C++上机实践及习题选解》中的习题提供习题参考答案。

习题解答

作业一

1.合法的标识符: a12 A21 sum2 _fun C_program

不合法的标识符:f(x) $a21 21a while [email protected]

2.

main( )

{ int i, j, s

i=2j=3

s=i*j

printf(“ %d %d=%d”,i,j,s)

}

作业二

1.指出下列哪些为C语言正确的整型(int)常量、实型(float)常量、字符型(char)常量?

正确的整型(int)常量:0 -325 128 03456

正确的实型(float)常量: 0.0 2. 1.2e-3 5e2

正确的字符型(char)常量: ‘b’ ‘104’ ‘108’ ‘ ’ ‘8’

2.表达式的结果 (1) 1

(2) 0

(4) 0

(5) 9.5

(9) ‘A’

(11) 2

(12) 4.5

3. Y=sin(2*x)+(a+b)/(a*b)/(1+a/b)+*a*a/2

4.设m为整数,用逻辑表达式表示:能同时被3与7整除或者被5除余2且小于100的整数。

m%3= =0 &&m%7= =0 || m%5= =2 &&m<100

作业三

1.华氏温度通过公式C=5/9(f-32)转换成摄氏温度。试编程并上机调试运行:从键盘上输入华氏温度,利用公式计算后输出摄氏温度(要求:保留一位小数;记录调试过程中遇到的问题及解决方法)。

#include

main( )

{ float f,c

scanf(“%f”,&f)

c=5.0/9*(f-32)

printf(“c=%.1f”,c)

}

2.

用IF语句

#include

#include

main( )

{ float x,y

scanf(“%f”,&x)

if (x<0) y=fabs(x)

else if (x<10) y=x

else if (x<20) y=3-x/5

else if (x<40) y=3*x-10

else y=0

printf(“y=%f’,y)

}

用switch 语句:

#include

#include

main( )

{ float x,y

scanf(“%f”,&x)

if (x<0) y=fabs(x)

else switch ( int(x/10) )

{ case 0: y=xbreak

case 1: y=3-x/5break

case 2,3: y=3*x-10break

defaut y=0

}

printf(“y=%f’,y)

}

3. 解答见P151

4.程序如下:

#include

#include

main()

{

int i=0

char ch

ch=getchar()

while (ch!=' ')

{ if (ch=='(') i++

if (ch==')') i--

if (i<0) break

ch=getchar()

}

if (i==0) printf("(与)匹配")

else if (i<0) printf(" 缺) ")

else printf("缺少)")

}

5. 程序如下:

#include

main()

{

int i,j,k,m=0

for (i=1i<10i++)

for (j=1j<20j++)

{ k=100-i*10-j*5

if (k>0) { printf(" i=%-3dj=%-3dk=%-3d",i,j,k)

m++

if (m%4==0) putchar(' ')

}

}

printf(" m=%d ",m)

}

6. 在横线上填写合适语句,完善程序,使之完成如下功能:从键盘上输入一个不多于7位的正整数,统计其中2的个数,并求各位数字中的最小数。

#include

main( )

{int count,min,temp

long n

min=9count=0

scanf( “%ld” ,&n)

do

{ temp= n % 10

if (temp= =2) count++

if (min>temp) min=temp

n=n/10

}while ( n )

printf(“count=%d,min=%d”,count,min)

}

作业四

1.p128: 4.6 解答见p156

2. p128: 4.11 解答见p158

3.编写一递归函数计算mn ,并从键盘输入m,n的值(如4,3),求mn 的值(上机调试)。

funm_n(int m,int n)

{

int y

if (n==1) y=m

else y=m*funm_n(m,--n)

return y

}

main()

{int m,n,y

printf("Input integer(m,n):")

scanf("%d,%d",&m,&n)

y=funm_n(m,n)

printf(" %d^%-d=%-d",m,n,y)

}

4.P128: 4.12 (3)答案:12345678

5.求3-100中的素数,要求编写一函数来判断某数是否为素数。

main()

{

int prime,i,n=0

for (i=3i<=100i++)

{ prime=prime_num(i)

if (prime) { if (n%10==0) printf(" ")printf("%4d",prime)n++}

}

}

prime_num(int m)

{ int k=2,r

do {

r=m % k

if (r==0) break

k++

}while(k<m)p=""></m)>

if (r!=0) return m

else return 0

}

6. 结果如下:

main0:x=12,y=2

fun: x=6,y=25

main:x=12,y=2

fun:x=7,y=26

main:x=12,y=2

作业五

1.从键盘上输入一串英文字符(不含空格与其他字符),统计每个字符的数目,并输出字母及相应的数目。

#include

#include

main()

{

int i=0,c[52]={0},m=0

char str[80]

printf("Input a string:")

scanf("%s",str)

while (str[i])

{ if (str[i]>='A' &&str[i] <='Z') c[str[i]-'A']++

if (str[i]>='a' &&str[i] <='z') c[str[i]-'a'+26]++

i++

}

for (i=0i<26i++)

if (c[i]){ if (m%8==0) putchar(' ')m++

printf("%c:%-d ",i+'A',c[i])

}

for (i=0i<26i++)

if (c[i+26]){if (m%8==0) putchar(' ')m++

printf("%c:%-d ",i+'a',c[i+26])

}

}

2. P132: 5.15 程序见p167

3.从键盘上输入8个数,用选择法按由大到小的顺序排列并输出,要求用指针实现。

#include

#include

main()

{

int data[8],i,*p1,*p2,temp

p1=data

printf("Input 8 numbers:")

for (i=0i<8i++)

{ scanf("%d",p1)/* 或 &(*p1) */

p1++

}

for (p1=datap1<data+8-1p1++) p=""></data+8-1p1++)>

for (p2=p1+1p2<data+8p2++) p=""></data+8p2++)>

if (*p1<*p2){ temp=*p1*p1=*p2*p2=temp}

for (i=0,p1=datai<8i++,p1++)

printf("%6d",*p1 )

}

4.从键盘上输入一个4 4整数矩阵,以主对角线()为对称轴,将左下角元素中较大元素代替右上角对应元素,并将右上角元素(含对角线元素)输出。

#include

#include

main()

{

int d[4][4],i,j,temp

printf("Input 16 numbers:")

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

for (j=0j<4j++)

scanf("%d",&d[i][j])

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

for (j=0j<ij++) p=""></ij++)>

if (d[i][j]>d[j][i]) d[j][i]=d[i][j]

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

{ printf(" ")

for (j=0j<4j++)

if (j>=i) printf("%6d",d[i][j] )

else printf("%6c",' ')

}

}

5.盘上输入两个字符串a,b,下面程序将a,b的对应字符中的较大者存放在数组c的对应位置上,填空完善之。

#include

#include

main( )

{int k=0

char a[80],b[80],c[80]={‘’},*p,*q

p=aq=b

gets(a)gets(b)

while (*p!=0 || * q!=0 )

{ if ( *p!=0 ) c[k]=*p

else c[k]=*q

p++q++k++

if ( *p !=0 ) strcat(c,p)

else strcat(c,q)

puts(c)

}

作业六

1.P134:6.5 程序见p178

2.P135:6.7 程序见p181

3.P134:6.18 程序见p196

C语言程序设计复习:

1、理解以下术语的含义:数组、函数、地址 指针 指针变量 直接访问 间接访问、结构体

2、用起泡法对10个数由小到大排序(P134例题)

5、输入10个学生的成绩,分别用函数实现下列功能:

1)计算所有学生的平均分;

2) 计算学生成绩中最高分;

3) 计算学生成绩中最低分;

4) 统计及格学生人数;

5) 查找成绩为指定成绩(如90)记录,如果没有,请给出提示,如果有,请统计满足条件的记录数。

6、有一个已经排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。(P153习题7.4)

7、编写一个函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字字符间空一个空格。如输入1990,应输出“1 9 9 0”。(要求用函数)(P202习题8.8)

8、编写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。(要求用指针,不能使用strlen()函数) (P279习题10.6)

9、编写一个程序,打入月份号,输出该月的英文月名。例如,输入“3”则输出“March”(要求用指针数组)。(P279习题10.18)

10、将一个数组中的值按逆序重新存放。例如,输入的数组顺序为8,6,5,4,1,要求改为1,4,5,6,8。(P153习题7.5)

11、编写一个函数用“起泡法”对输入的10个字符按由小到大顺序排序(要用函数)。(P202习题8.11)

12、将数组a中n个整数按相反顺序存放(要用函数)。(P237例题10.7)

13、输入一行文字,找出其中大写字母、小写字母、空格、数字及其他字符各有多少。(要求用指针实现)(P279习题10.8)

14、编写一个函数,将两个字符串连接(要用自定义函数,不能用strcat函数)。(P202习题8.6)

15、输入3个字符串,按照由小到大的顺序输出。(要求用指针) (P278习题10.2)

16、输入10整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:1、输入10个数; 2、进行处理; 3、输出10个数(数据对换要求用指针实现)(P278习题10.3)

参考答案:

2、用起泡法对10个数由小到大排序

#include <stdio.h>

void main()

{ int a[10] int i,j,t

printf("input 10 numbers :\n")

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

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

printf(“\n")

for(j=0j<9j++)

for(i=0i<10-ji++)

if (a[i]>a[i+1])

printf("the sorted numbers :\n")

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

printf(“%d “,a[i])

}

3、用递归方法求n阶勒让德多项式的值,递归公式为(要求用函数):(P202习题8.13)

pn(x)=1 n=0

x n=1

((2n-1)*x-pn-1(x)-(n-1)*pn-2(x)/n n>1

3、#include <stdio.h>

void main()

{

int x,n

float p(int,int)

printf(“input n &x:”)

scanf(“%d,%d”,&n,&x)

printf(“n=%d,x=%d\n”,n,x)

printf(“P%d(%d)=%6.2f\n”,n,x,p(n,x))

}

float p(int n,int x)

{

if(n==0)

return 1

else if(n==1)

return x

else

return ((2*n-1)*x*p((n-1),x)-(n-1)*p((n-2),x))/n

}

4、输入3个整数,按由小到大的顺序输出(要求用指针类型)(P228例题)

4、输入3个整数,按由小到大的顺序输出(要求用指针类型)

#include <stdio.h>

void main()

{

void sort (int*a, int*b,int*c)

int a,b,c

scanf("%d%d%d",&a,&b,&c)

sort(&a,&b,&c)

printf("a=%d,b=%d,c=%d\n",a,b,c)

}

void sort (int *a, int *b,int *c)

{

int tmp

if (*a>*b)

{

tmp=*a

*a=*b

*b=tmp

}

if (*a>*c)

{

tmp=*a

*a=*c

*c=tmp

}

if (*b>*c)

{

tmp=*b

*b=*c

*c=tmp

}

}

5、输入10个学生的成绩,分别用函数实现下列功能:

1)计算所有学生的平均分;

6) 计算学生成绩中最高分;

7) 计算学生成绩中最低分;

8) 统计及格学生人数;

9) 查找成绩为指定成绩(如90)记录,如果没有,请给出提示,如果有,请统计满足条件的记录数。

#include <stdio.h>

void main()

{

int average(int a[])

int max(int a[])

int min(int a[])

int pass(int a[])

int search(int a[],int g)

int i,j,g

int score[10],aver,m1,m2,p,s

printf("Please input 10 scores:\n")

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

scanf("%d",&score[i])

printf("\n")

aver=average(score)

m1=max(score)

m2=min(score)

p=pass(score)

printf("平均分为: %d\n",aver)

printf("最高分为: %d\n",m1)

printf("最低分为: %d\n",m2)

printf("及格人数为: %d\n",p)

printf("需要查找吗?\n")

printf("输入1继续查找,输入0退出(1/0):")

scanf("%d",&j)

if(j==1)

{

printf("请输入要查找的分数: \n")

scanf("%d",&g)

s=search(score,g)

if(s==0)

printf("没有满足条件的记录")

else

printf("成绩为%d的学生共有%d名\n",g,s)

}

}

int average(int a[])

{

int i

int aver,sum=a[0]

for(i=1i<10i++)

sum=sum+a[i]

aver=sum/10

return aver

}

int max(int a[])

{

int i

int m=a[0]

for(i=1i<10i++)

if(m<a[i])

m=a[i]

return m

}

int min(int a[])

{

int i

int m=a[0]

for(i=1i<10i++)

if(m>a[i])

m=a[i]

return m

}

int pass(int a[])

{

int i

int s=0

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

if(a[i]>=60)

s++

return s

}

int search(int a[],int g)

{

int i

int s=0

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

if(a[i]==g)

s++

return s

}

6、已有一个已排好次序的数组,要求输入一个数后,按原先排序的规律将它插入数组中。

Void main()

int temp1,temp2,number,end,i,j

printf("初始数组如下:")

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

printf("%5d",a[i])

printf("\n")

printf("输入插入数据:")

scanf("%d",&number)

end=a[9]

if(number>end)

a[10]=number

else

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

{ if(a[i]>number)

{temp1=a[i]

a[i]=number

for(j=i+1j<1j++)

{temp2=a[j]

a[j]=temp1

temp1=temp2

}

break

}

}

}

for(i=0i<11i++)

printf("a%6d",a[i])

}

7、编写一个函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字字符间空一个空格。如输入1990,应输出“1 9 9 0”。

#include <iostream>

void main()

{

void stradd(char str[])

char str[80]

printf("输入一串数字\n\n")

gets(str)

stradd(str)

printf("\n\n加空格后的字符串\n\n")

puts(str)

}

void stradd(char str[])

{

char a[80]

int i=0,j

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

{

a[i]=str[j]

a[i+1]=' '

i+=2

}

a[i]='\0'

for(i=0a[i]!='\0'i++)

{

str[i]=a[i]

}

str[i]='\0'

}

8、编写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。(要求用指针实现)

#include "stdio.h"

int stringlength( char *str )

{int n

n=0

While(*str!=0)

{n++

str++

}

Return(n)

}

int main()

{

char str〔100〕,

int len,

printf("Please input a string: "),

scanf("%s".str),

len = stringlength( str ),

printf("The string’s length is %d.".len),

return 0

}

9、编写一个程序,打入月份号,输出该月的英文月名 n。例如,输入“3”则输出“March”,要求用指针数组处理。

#include <stdio.h>

main()

{ char *month_name[13]={"illegal month","January","February","March","April",

"May","June","July","August","September","October","November","December"}

int n

printf("Input month: ")

scanf("%d",&n)

if((n<=12)&&(n>=1))

printf("It is %s.\n",*(month_name+n))

else

printf("It is wrong.\n")

}

10、将一个数组中的值按逆序重新存放。例如,输入的数组顺序为8,6,5,4,1,要求改为1,4,5,6,8。

#include <stdio.h>

#define N 5

void main()

{

int a[N],i,temp

printf(“enter array a:\n”)

for(i=0i<Ni++)

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

printf(“array a:\n”)

for(i=0i<Ni++)

printf(“\nNow, array a:\n”)

for(i=0i<Ni++)

printf(“%4d”,a[i])

printf(“\n”)

}

11、编写一个函数用“起泡法”对输入的10个字符按由小到大顺序排序(要用函数)。

#include <stdio.h>

void main()

{ char str[80]

void sort(char str[])

printf("输入一个字符串\n\n")

gets(str)

sort(str)

printf("\n\n字符由小到大排序为:\n\n")

puts(str)

}

void sort(char str[])

{ int i,j

char temp

for(i=0i<strlen(str)i++)

{

for(j=0j<strlen(str)-i-1j++)

{

if(str[j]>str[j+1])

{

temp=str[j]

str[j]=str[j+1]

str[j+1]=temp

}

}

}

}

12、将数组a中n个整数按相反顺序存放(要用函数)。

#include <stdio.h>

void inv(int x[ ],int n)/*形参x是数组名*/

int temp,i,j,m=(n-1)/2

for(i=0i<=mi++)

{j=n-1-i

temp=x[i]x[i]=x[j]x[j]=temp}

return

void main()

{ int i,a[10]={3,7,9,11,0,6,7,5,4,2}

printf(“转换前的数组为:\n")

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

printf("%d,",a[i])

printf("\n")

inv(a,10)

printf(“转换后的数组为:\n")

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

printf("%d,",a[i])

printf("\n")

13、输入一行文字,找出期中大写字母、小写字母、空格、数字及其他字符各有多少?(要求用指针实现)

#include<stdio.h>

#include<string.h>

int main()

{

char str[40]//创建字符串数组

int count[5]=//创建计数器数组并初始化

printf("Please input a string .\n")

scanf("%s",str)

char *p=str//指针p指向字符串数组str

int n=strlen(str)//确定输入字符串的长度

for(int i=0i<ni++)

{

if(*(p+i)>='A'&&*(p+i)<='Z')

{

count[0]++//统计大写字母数目

}

else if(*(p+i)>='a'&&*(p+i)<='z')

{

count[1]++//统计小写字母数目

}

else if(*(p+i)>='0'&&*(p+i)<='9')

{

count[2]++//统计数字数目

}

else if(*(p+i)=='')

{

count[3]++//统计空格数目

}

else

{

count[4]++//统计其他字符数目

}

}

printf("大写字母 小写字母 数字 空格 其他字符:\n")

for(i=0i<5i++)

{

printf("%d\t ",count[i])//打印各统计数目

}

printf("\n\n")

return 0

}

14、编写一个函数,将两个字符串连接。

#include <stdio.h >

#include<string.h>

void concatenate(char string1[],char string2[],char string[])

{

int i,j

for(i=0string1[i]!=’\0’i++)

string[i]=string1[i]

for(j=0string2[j]!=’\0’j++)

string[i+j]=string2[j]

string[i+j]=’\0’

}

void main()

{

char s1[100],s2[100],s[100]

printf(“input string1:”)

scanf(“%s”,s1)

printf(“input string2:”)

scanf(“%s”,s2)

concatenate(s1,s2,s)

printf(“the new string is %s”,s)

}

15、输入3个字符串,按照由小到大的顺序输出。 (要求用指针实现)

#include <stdio.h>

void main()

{

void sort (int*a, int*b,int*c)

int a,b,c

scanf("%d%d%d",&a,&b,&c)

sort(&a,&b,&c)

printf("a=%d,b=%d,c=%d\n",a,b,c)

}

void sort (int *a, int *b,int *c)

{

int tmp

if (*a>*b)

{

tmp=*a

*a=*b

*b=tmp

}

if (*a>*c)

{

tmp=*a

*a=*c

*c=tmp

}

if (*b>*c)

{

tmp=*b

*b=*c

*c=tmp

}

}

16、输入10整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:1、输入10个数; 2、进行处理; 3、输出10个数(数据对换要求用指针实现)

#include <stdio.h>

void input(int number[])

{

Int I

Printf(“input 10 numbers:”)

For(i=0i<10i++)

Scanf(“%d”,&number[i])

}

void max_min_value(int number[])

{

int *max,*min,*p,temp

max=min=number

For(p=number+1p<number+10p++)

if(*p>*max)

max=p

else if(*p<*min)

min=p

temp=number[0]number[0]=*min*min=temp

if(max=number) max=min

temp=number[9]number[9]=*max*max=temp

}

void output(int number[])

{

int *p

printf(“Now, they are: “)

for(p=numberp<number+10p++)

Printf(“%d”,*p)

printf(“\n”)

}

void main()

{

int number[10]

input(number)

max_min_value(number)

output(number)

}

一、判断题(每小题1分,共15分)

1.标准C中,只有数值型数据才能进行4则混合运算。

2.标准C中,_a是合法的自定义标识符。

3.有定义:float f表达式f+=(int)3.6%2”不符合C语言语法。

4.标准C中,逻辑运算的结果只有是1表示满足条件,而结果是0表示不满足条件。

6.以下运算符排列顺序满足按照优先级从高到低的排列:‘&&’、‘!’、‘==’、‘-’。

7.语句for()是非法的。

8.在C语言程序中可以由多个源文件构成,每个源文件都可以有自己的main()函数。

9.while和do-while的主要区别是后者至少无条件执行一次。

10.数组名代表数组的首地址是常量,所以将实参数组名表示地址传给形参数组名是错误的。

11.当函数没有返回值类型时,表示函数类型为void。

12.C语言中,指针变量作函数参数时,它们不是采取单向值传递的方式。

13.一个函数中只允许有一条return语句。

14.在C语言中,如果没有说明变量的存储类型是auto类型的。

15.由于指针中所存放的地址都是整数,所以整型指针和浮点型指针可以相互赋值。

二、填空题(每空1分,共15分)

1. 若a=4b=5,c=6则表达式c==(b=-a)中c的值是 (1) 。

2. 计算表达式的值:

4&&-4的值: (2) ;

设int a=3,b=4,c=5,则表达式a||b+c&&b==c的值: (3) ;

设x=2.5, a=7, y=4.7,则表达式x+a%3*(int)(x+y)%2/4的值: (4) ;

设a=12,则表达式a*=a/5的值: (5) ;

3. 若int x = 4,y = 6,z = 0;有循环while(x = y) {z ++;y--;}

则循环语句执行完后,z值为 (6) 。

4. 变量的指针就是指该变量的 (7) 。

5. 若有定义int (*p)[4],则标识符p是 (8) ;若有定义int *p[4],则标识符p是 (9) ;

6. 已有定义:char *p[ ]={“France”,“Chinese”,“Russia”,“America”};则语句printf(“%s”,p[2]);printf(“%c”,*(p[1]+2));printf(“%c”,*(*(p+1)+1));

的输出结果分别为: (10) 、 (11) 、 (12) 。

7. 已有定义: int x=65若格式化输出结果为“A, 65”,则对应的格式化输出语句为printf(“ (13) , (14) ”, x, x)。

8. 已定义:int a[][2]={1, 2, 3, 4, 2, 6, 7, 2};则a[3][0]= (15) 。

三、简答题(每题4分,共12分)

1、简述选择语句if和else语句对与switch语句的区别。

2、简述在循环语句中,break和continue的区别。

3、若int a[5],*p=a;简述*p++和(*p)++的区别。

四、下列各程序中每个程序各有2个错误,指出错误语句,写出对应正确语句(每小题4分,共16分)

五、程序填空题:下列程序中缺少若干条语句,在对应的下划线上填上合适的语句,每一个下划线只填一条语句(每小题6分,共24分)

六、阅读下列程序,写出运行结果(第一小题4分,第二小题6分,共10分)

七、编程题(8分)

编译程序,其功能是比较字符串的大小( 不允许 用系统提供的字符串比较函数strcmp)。要求是:

(1) 通过主函数调用一个函数strcompare来实现。

(2) 要求函数strcompare实现两个字符的比较:如第一个字符小于第二个字符则返回一个负值;如两个字符相等则返回0值;如第一个字符大于第二个字符则返回一个正值。

(3) 并输出两个字符串中相同部分的子串。

《C语言程序设计基础》试卷参考答案

一、判断题(每小题1分,共15分)

1~5 ; 6~10 ; 11~15

二、填空题(每空1分,共15分)

(1) 6 (2) 1 (3) 1 (4) 2.5 (5) 24 (6) 6

(7)地址 (8) 行指针,指向有四个元素的一维数组

(9)指针数组名,该数组有四个元素,每个元素都是指针

(10)Russia (11)i (12)h (13) %c (14) %d (15)7

三、简答题(每题4分,共12分)

1、if总是判断其后面的表达式的值是否为非零值,如是非零值则执行其后面的语句或由{}括起来的复合语句,否则执行else后面的语句。而switch语句则根据其后面表达式的可数值来判断,执行switch语句体内与其中的一个case:常量值相等语句后面的语句。执行break语句后,跳出switch语句体。

2、break是终止整个循环过程;continue是终止本次循环。

3、*p++首先取a[0]的值,然后p指向a[1];(*p)++使得a[0]的值自增1,但p保持不变。

四、下列各程序中每个程序各有2个错误,指出错误语句,写出对应正确语句(每小题4 分,共16分)

1、 (1)缺#include ; (2)scanf(“%f”,a)改为 scanf(“%f”,&a)

2、 (1)缺sum=0(2)for(i=1i<=3i++) 改为for(i=0i<3i++)

3、 (1)p1=p2 改为 *p1=*p2 (2)swap(&a, *p) 改为swap(&a, p)

4、 (1)在if(m<0)语句后添加else if(m==0) a=1(2) 添加 return(a)

五、程序填空题:下列程序中缺少若干条语句,在对应的下划线上填上合适的语句,每一个下划线只填一条语句(每小题6分,共24分)

1、 (1)x=0(2)if(n==x) (3)s++或s=s+1

2、 (4)&num[i] (5)max<num[i]? (6)num[i]!=0

3、 (7)n-i-1 (8)a[j]>a[j+1] (9)a[j+1]=temp

4、 (10)count=0(11)n%10 (12)n>0或n!=0或n

六、阅读下列程序,写出运行结果(第一小题4分,第二小题6分,共10分)

1、 #*#*#*

2、 main i=1 j=2 k=2

sub i=1 j=2 k=1 x=2

sub i=1 j=2 k=1 x=3

七、编程题(8分)

#include

main()

{

int i,j, flag=0

char str1[90],str2[90]

gets(str1)

gets(str2)

i=0

do{

flag=strcompare(str1[i],str2[i])

i++

}while(str1[i]!=’’ &&str2[i]!=’’ &&flag=0)

if(flag<0)printf(“%s小于%s ”,str1,str2)

else if(flag==0) printf(“%s 等于%s ”,str1,str2)

else printf(“%s大于%s ”,str1,str2)

printf(“两个字符串中相同的字串为:”)

j=0

i--后3句可用str1[i]=’’printf(“%s”,str1)代替//用str2也可以。

while(j<i){printf(“%c”,str1[i])j++} span=""></i){printf(“%c”,str1[i])j++}>

}

int strcompare(char c1,char c2)

{

int v

v=c1-c2

return v

}