C语言程序设计学习与实践指导(源代码)

更新时间:2024-02-26 15:31:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2.2 例题分析与解答

2.2.1 选择题

3.以下程序的输出结果是 。

#include main( ) {

int i=4,a; }

a=i++;

printf(\

4.下述程序的输出结果是 。

#include void main( ) {

char a=3,b=6; char c=a^b<<2; printf(\}

8.已知字符A的ASCII码值是65,以下程序 。

#include main( )

{char a=’A’; int b=20; }

printf(\,%o\,(a=a+1,a+b,b),a+'a' – 'A',b );

2.3 测试题

选择题

8.如下程序的运行结果是 。

#include main( )

{int y=3,x=3,z=1;

printf(\; }

10.以下程序的输出结果是 。

#include { int i=010,j=10;

printf(\,%d\\n\,++i,j--);

}

11.下列程序的输出结果是 。

#INCLUDE MAIN( )

{INT A=0,B=0,C=0; IF (++A>0 || ++B>0) ++C;

PRINTF(\; }

3.2.1 选择题

2.阅读以下程序:

#include main( )

{char str[10];

scanf(\; printf(\; }

运行该程序,输入:HOW DO YOU DO,则程序的输出结果是( )。 3.若有以下程序段:

#include main( )

{int a=2,b=5;

printf(\}

4.以下程序段:

int k;float a;double x;

scanf(\;

printf(\;

3.根据下面的程序及数据的输入和输出形式,程序中输入语句的正确形式应该为 。

main( )

{char ch1,ch2,ch3;

输入语句

printf(\;

}

4.2.1 选择题

2.读下列程序:

#include main( )

{float a,b,t;

scanf(\;

if ( a>b) {t=a;a=b;b=t;} printf (\;

运行时从键盘输入3.8和–3.4,则正确的输出结果是 。

}

3.读下列程序:

#include main( )

{ int x,y; scanf(\ }

y=0;

if (x>=0)

{if (x>0)y=1;} else y= -1; printf (\

当从键盘输入32时,程序输出结果为 。 4.对下述程序, 是正确判断。

#include main( ) {int x,y; }

scanf(\if (x>y)

x=y:y=x; else x++;y++;

printf(\

5.以下程序的输出结果是 。

#include 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(\}

7.以下程序的输出结果是 。

#include main ( )

{int a=2,b= -1,c=2; if (a

8.以下程序的输出结果是 。

#include

main ()

{int w=4 ,x=3, y=2, z=1;

printf(\:z

4.2.2 填空题

3.请写出以下程序的输出结果 。

#include main ()

{int a=100;

if(a>100)

printf(\ else

printf(\}

4.当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是 。

if (a

if(c

if(b

else x=6; else x=7;

6.执行以下程序段后,变量a,b,c的值分别为 。

int x=10,y=9; int a,b,c;

a=(--x= =y++)? --x:++y; b=x++; c=y;

5.2.1 选择题

3.在下述程序中,判断i>j共执行了( )次。

#include main( )

{int i=0,j=10,k=2,s=0; for(;;) {i+=k; if(i>j) }

{printf(\ break;} s+=i; }

4.以下程序段的输出结果是( )。

int x=3;

do

{printf(\}while(!(--x));

5.2.2 填空题

1.以下程序段的输出结果是( )。

#include main( ) {int x=2;

while(x--);

printf(\}

2.以下程序的功能是:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入,请填空。

#include main()

{float x,amax,amin; scanf(\amax=x;amin=x; while(【1】) }

{if(x>amax)amax=x; if(【2】)amin=x; scanf(\

}

printf(\

3.以下程序段的输出结果是( )。

int k,n,m; n=10;m=1;k=1; while(k<=n) m*=2;

printf(\

4.下述程序的运行结果是( )。

#include main( )

{int s=0,k; for(k=7;k>4;k--) {switch(k)

}

{ case 1: case 4:

case 7:s++;break; case 2: case 3:

case 6:break; case 0:

case 5:s+=2;break;

}

printf(\}

5.3 测试题

5.3.1 选择题

4.下面程序段的运行结果是( )。

a=1;b=2;c=2;

while(a

5.下面程序的功能是从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n,并输出m和n中的较大者,请选择填空。

#include main()

{int m=0,n=0;

char c;

while ((【1】)!= '\\n')

{if(c>='A' && c<='Z') m++; if(c>='a' && c<='z') n++;} printf(\【2】); }

6.下面程序的功能是在输入的一批正整数中求出最大值,输入0结束循环,请选择填空。

#include main( )

{int a,max=0; scanf(\ while( )

{if(max

8.下面程序的功能是计算正整数2345的各位数字平方和,请选择填空。

#include main()

{int n,sum=0; n=2345;

do {sum=sum+【1】; n=【2】; }while(n);

printf(\}

9.若运行以下程序时,从键盘输入ADescriptor(表示回车),则下面程序的运行结果是( )。

#include

main()

{char c;

int v0=0,v1=0,v2=0; do{switch(c=getchar()) {case 'a':case 'A':

case 'e':case 'E': case 'i':case 'I': case 'o':case 'O':

case 'u':case 'U':v1+=1; defaule:v0=v0+1;v2+=1; }

}while(c!='\\n');

printf(\}

11.下面程序段的功能是将从键盘输入的偶数写成两个素数之和。请选择填空。

#include #include main( )

{int a,b,c,d;

scanf(\

for(b=3;b<=a/2;b+=2)

{for(c=2;c<=sqrt(b);c++) if(b%c= =0)break; if(c>sqrt(b)) d=【1】;else break;

for(c=2;c<=sqrt(d);c++) if(d%c= =0) break; if(c>sqrt(d)) printf(\}

5.3.2 填空题

1.下面程序是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。请 填空。

int n=0,c; c=getchar( ); while( 【1】 ) {if ( 【2】 ) n++; c=getchar( ); }

1.下面程序是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。请 填空。

int n=0,c; c=getchar( ); while( 【1】 ) {if ( 【2】 ) n++; c=getchar( ); }

?21111?2?2?2???2,求π的近似值,直到最后一项2.下面程序的功能是用公式

6123n的值小于10–6 为止。请填空。

#include #include main( )

{long i=1; 【1】pi=0;

while (i*i<=10e+6) {pi=【2】;i++;} pi=sqrt(6.0*pi);

printf(\}

3.有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?请填空。

#include main( )

{int day,x1,x2; day=0;x1=1020;

while (【1】) {x2=【2】;x1=x2;day++;} printf(\}

4.下面程序的功能是用“辗转相除法”求两个正整数的最大公约数。请填空。

#include main( ) {int r,m,n;

scanf(\if(m

r=m%n;

while(r){m=n;n=r; r=【2】;} printf(\}

5.鸡兔共有30只,脚共有90个,下面程序段是计算鸡兔共有多少只,请填空。

for(x=1;x<=29;x++) {y=30-x; if(【1】) printf(\

}

6.下面程序的功能是计算1–3+5–7+?–99+101的值,请填空。

#include main( )

{int i,t=1,s=0;

for(i=1;i<=101;i+=2) {【1】;s=s+t;【2】;} printf(\ } 7.

#include #include main()

{int i,n;double h ,s, a, b; printf(\

scanf(\【1】); n=100;h=【2】;

s=0.5*(sin(a)*cos(a)+sin(b)*cos(b)); for(i=1;i<=n-1;i++)s+=【3】; s*=h;

printf(\}

8.

#include main( )

{int i;double e,new; 【1】;new=1.0; for(i=1;【2】;i++)

{new=new/(double)i;e=e+new; } }

9.

#include main()

{int a ,i, m;

for(a=1;a<=1000;a++)

{for(【1】;i<=a/2;i++ ) if(!(a%i)) 【2】; if(m= =a) printf(“M”,a); } } 10.

#include main( )

{int i,j,k,L=1; for(i=0;i<=20;i++) }

for(j=0;j<=50;j++) {k=【1】; if(【2】) }

{printf(\ L=L+1;

if(L%5= =0)printf(\ }

6.3 测试题

6.3.1 选择题

2.下列程序执行后的输出结果是( )。

#include main( )

{char arr[2][4];

strcpy(arr,\

arr[0][3]='&'; printf(\}

3.当执行下面的程序时,如果输入ABC,则输出结果是( )。

#include #include main( )

{char ss[10]=\

gets(ss);strcat(ss, \}

4.以下程序的输出结果是( )。

#include

f(int b[ ],int m,int n) {int i,s=0;

for(i=m;i

main()

{int x,a[ ]={1,2,3,4,5,6,7,8,9} ; x=f(a,3,7);

printf(\

}

5.以下程序中函数sort()的功能是对数组a中的数据进行由大到小的排序。

#include

void sort(int a[ ],int n) {int i,j,t;

for(i=0;i<=n-1;i++) for(j=i+1;j

if(a[i]

main( )

{int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5);

for(i=0;i<10;i++)printf(\printf(\}

6.以下程序中函数reverse( )的功能是将a所指数组中的内容进行逆置。

#include

void reverse(int a[ ],int n) {int i,t;

for(i=0;i

main( )

{int b[10]={1,2,3,4,5,6,7,8,9,10};int i,s=0; reverse(b,8);

for(i=6;i<10;i++)s+=b[i]; printf(\

}

10.当运行以下程序时,从键盘输入“AhaMA[空格]Aha<回车>”,则下面程序的运行结果是( )。

#include main( )

{char s[80],c='a'; int i=0;

scanf(\

while(s[i]!= '\\0')

{if(s[i]= =c) s[i]=s[i]-32;

else if(s[i]= =c-32) s[i]=s[i]-32; i++; }

puts(s); }

15.有已排好序的字符串a,下面的程序是将字符串s中的每个字符按升序的规律插入到a中。请选择填空。

#include main( )

{char a[20]=\ int i,k,j;

for (k=0;s[k]!='\\0';k++) {j=0;

while(s[k]>=a[j] && a[j]!= '\\0')j++; for( 【1】 ) 【2】 ; a[j]=s[k]; }

puts(a); }

16.下面程序的功能是将已按升序排好的两个字符串a和b中的字符按升序归并到字符串c中,请选择填空。

#include main()

{char a[ ]=\int i=0,j=0,k=0;

while (a[i]!= '\\0' && b[j]!= '\\0') {if (a[i]

while ( 【3】 ) {c[k++]=a[i++];} while(b[j]!='\\0') {c[k++]=b[j++];} c[k]= '\\0'; puts(c); }

17.下面程序的功能是将字符串s中的所有字符c删除。请选择填空。

#include main() {char s[80]; int i,j;

gets(s);

for(i=j=0;s[i]!='\\0';i++) if(s[i]!= 'c') 【 】 ; }

s[j]= '\\0'; puts(s);

18.下面程序的功能是从键盘输入一行字符串,统计其中有多少个单词,单词之间用空格分隔。请选择填空。

#include main()

{char s[80],c1,c2=' '; int i=0,num=0; gets(s);

while(s[i]!= '\\0') {c1=s[i];

if(i= =0)c2=' '; else c2=s[i-1]; if ( 【 】 )num++; i++; }

printf(\}

19.下面程序的运行结果是( )。

#include main( )

{char ch[7]={ \int i,s=0;

for(i=0;ch[i]>='0' && ch[i]<= '9';i+=2) s=10*s+ch[i]–'0'; printf(\}

6.3.2 填空题

4.下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中。请填空。

main( )

{int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j;

for (i=0;i<=1;i++) {for(j=0; 【1】 ;j++) }

{printf(\ 【2】 ;}

printf(\

printf(\

for(i=0; 【3】 ;i++) }

{for(j=0;j<=1;j++) printf(\ printf(\

5.下面程序用“快速顺序查找法”查找数组a中是否存在某个数。请填空。

main( )

{int a[5]={25,57,34,56,12}; int i,x;

scanf(\

for(i=0;i<8;i++) if (x= =a[i]) {printf(\【1】 ; } if ( 【2】 )printf(\Can’t found! \

}

6.下面程序用插入法对数组a进行降序排序。请填空。

main()

{int a[5]={4,7,2,5,1}; int i,j,m;

for (i=1;i<5;i++) {m=a[i];j= 【1】 ;

while(j>=0 && m>a[j]) { 【2】 ;

j--; } 【3】 =m;

}

for(i=0;i<5;i++) printf(\printf(\}

7.程序用“两路合并法”把两个已按升序排列的数组合并成一个升序数组。请填空。

main()

{int a[3]={5,9,19};

int b[5]={12,24,26,34,56}; int c[8],i=0,j=0,k=0; while(i<3 && j<5) if( 【1】 )

{c[k]=b[j];k++;j++;}

else {c[k]=a[i];k++;i++;} while( 【2】 )

{c[k]=a[i];i++;k++;} while( 【3】 )

{c[k]=b[j];k++;j++;} for(i=0;i

}

8.若有以下输入(_代表空格,代表回车),则下面程序的运行结果是【 】。

1_2_3_4_5_6 main()

{int a[6],i,j,k,m;

for(i=0;i<6;i++) scanf(\for(i=5;i>=0;i--) }

{ k=a[5];

for(j=4;j>=0;j--) a[j+1]=a[j]; a[0]=k;

for(m=0;m<6;m++) printf(\ printf(\}

9.下面程序段的运行结果是【 】。

char ch[ ]=\int a,s=0;

for(a=0;ch[a]>= '0' && ch[a]<= '9';a++) s=10*s+ch[a] –'0'; printf(\

10.下面程序的功能是在一个字符数组中查找一个指定的字符,若数组含有该字符则输出该字符在数组中第一次出现的位置(下标值);否则输出–1。请填空。

#include #include main()

{char c='a',t[5]; int n,k,j; gets(t); n= 【1】 ;

for(k=0;k

else j=–1; printf(\}

11.下面程序的功能是在三个字符串中找出最小的。请填空。

#include #include main()

{char s[20],str[3][20];

int i;

for (i=0;i<3;i++) gets(str[i]); strcpy(s, 【1】 );

if(strcom(str[1],s)<0) 【2】 ;

if(strcom(str[2],s)<0) strcpy(s,str[2]); printf(\【3】 );

}

12.下面程序的运行结果是( )。

#include main() {int i;

char a[ ]=\

for(i=0;a[i]!='\\0' && b[i]!= '\\0';i++) if(a[i]= =b[i]) if(a[i]>= 'a' && a[i]<= 'z')printf(\,a[i] ―32); else printf(\ else printf(\*\}

7.2.1 选择题

3.以下程序的输出结果是( )。

#include

fun(int a,int b,int c) {c=a*b;} main() {int c;

fun(2,3,c);

printf(\,c); }

4.有如下程序:

#include int max(x,y) int x,y; {int z; if (x>y)z=x; else z=y; return(z); }

main( )

{extern int a,b;

printf(\}

int a=3,b=5;

5.如下程序的运行结果为( )。

#include f(int a)

{auto int b=0; static c=3; b=b+1; c=c+1;

return(a+b+c); }

main( )

{int a=2,i;

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

printf(\}

6.下列程序的运行结果是( )。

#include func(int a ,int b)

27.以下程序的正确运行结果是( )。

#include

void num( )

{extern int x,y;int a=15,b=10; x=a–b; y=a+b; }

int x,y; main()

{int a=7,b=5; x=a+b; y=a–b; num();

printf(\,%d\\n\,x,y); }

34

.下述程序输出的结果是( #include

void fun(int a,int b,int c) {

a=456; b=567; c=678; }

main()

{

int x=10,y=20,z=30; fun(x,y,z);

printf(\}

36

.下述程序输出的结果是( #include main() {

int i=2,p; p=f(i,i+1)

printf(\}

int f(int a,int b) {

int c; c=a; if(a>b) c=1; else

if(a==b) c=0; else c=-1; return c; }

)。 )。 37.下述程序输出的结果是( )。

#include main()

{

int a=8,b=1,p; p=func(a,b);

printf(\ p=func(a,b);

printf(\}

func(int x,int y) {

static int m=2,k=2; k+=m+1; m=k+x+y; return(m); }

39

.下述程序输出的结果是( #include main() {

int x=1;

fun(fun(x)); }

fun(int n)

{

static int s[3]={1,2,3}; int i;

for(i=0;i<3;i++) s[i]+=s[i]-n; for(i=0;i<3;i++) printf(\ printf(\ return(s[n]); }

40

.下述程序输出的结果是( #include void fun1() {

int x=0; x++;

printf(\}

void fun2() {

static int x; x++;

printf(\}

)。 )。 main() {

int i;

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

fun1(); fun2(); } }

7.3.2 填空题

3.以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请填空。

#include #include

float f(float,float); main( )

{ float x,y,z,sum;

scanf(\; sum=f(【1】) +f(【2】); printf(\,sum); }

float f(float a,float b) { float value; value=a/b; return(value); }

5.以下程序的功能是用二分法求方程2x3–4x2+3x–6=0的根,并要求绝对误差不超过0.001。请填空。

#include float f(float x)

{return(2*x*x*x–4*x*x+3*x–6);}

main( )

{float m=–100,n=90,r; r=(m+n)/2;

while(f(r)*f(n)!=0)

{ if(【1】) m=r; else n=r; if(【2】) break; r=(m+n)/2;

}

printf(\,r); }

6.若输入一个整数10,以下程序的运行结果是【 】 。

main()

{int a,e[10],c,i=0; scanf(\,&a); while(a!=0)

{c=sub(a); a=a/2; e[i]=c; i++;

}

for(;i>0;i--)printf(\,e[i–1]); }

sub(int a) {int c; }

c=a%2;

return c;

7.已有函数pow,现要求取消变量i后pow函数的功能不变。请填空。 修改前的pow函数:

pow(int x,int y)

{int i,j=1;

for(i=1;i<=y;++i) j=j*x; return(j); }

修改后的pow函数:

pow(int x,int y) {int j; for(【1】;【2】;【3】)j=j*x; return(j); }

8.以下程序的功能是求三个数的最小公倍数,请填空。

#include

max(int x,int y,int z) {if(x>y && x>z) return(x); else if(【1】)return(y); else return(z); }

main()

{int x1,x2,x3,i=1,j,x0; printf(\:\; scanf(\,&x1,&x2,&x3); x0=max(x1,x2,x3); while(1) {j=x0*i; if(【2】)break; i=i+1; }

printf(\,j); }

9.函数fun的作用是求整数n1和n2的最大公约数,并返回该值。请填空。

fun(int n1,int n2) {int temp; if(n1【1】n2)

{temp=n1;n1=n2;n2=temp;}

temp=n1%n2; while(【2】)

{ n1=n2;n2=temp;temp=n1%n2;} return(n2);

10.函数f中的形参a为一个3×3的二维数组,以下程序段的运行结果为【 】 。

f(int a[3][3]) {int i,j,k,n=3;

j=n/2+1;a[1][j]=1;i=1; for(k=2;k<=n*n;k++) }

{i=i–1;j=j+1;

if(i<1 && j>n) {i=i+2;j=j–1;} else {if(i<1)i=n; if(j>n)j=1;}

if(a[i][j]= =0) a[i][j]=k;

else {i=i+2;j=j–1;a[i][j]=k;} }

}

11.以下程序段的功能是用递归方法计算学生的年龄,已知第一位学生年龄最小,为10岁,其余学生一个比一个大2岁,求第5位学生的年龄。请填空。

递归公式如下: 10 (n=1) age(n)= age(n-1)+2 (n>1)

#include age(int n) {int c;

if(n= =1)c=10; else c=【1】 ; return(c); }

main()

{int n=5;

printf(\: %d\\n\,【2】); }

12.下面程序的运行结果是【 】 。

main( )

{int i=5;

printf(\,sub(i)); }

sub(int n) {int a;

if(n= =1)return 1; a=n+sub(n–1); return(a); }

13.函数嵌套调用与递归调用的区别是【 】 。 14.下面程序的运行结果是【 】 。

f()

{

int x=7; static y=4; x+=1;

y+=1;

printf(\ }

main() {

f(); f(); }

15.下面程序的输出结果是【 】 。

main() {

int i=2,x=5,j=7; fun(j,6);

printf(\ }

fun(int i,int j) {

int x=7;

printf(\

16.若已定义:“int a[10],i;”,以下fun函数的功能是:在第一个循环中给前10个数组元素依次赋1、2、3、4、5、6、7、8、9、10;在第二个循环中使a数组前10个元素中的值对称折叠,变成1、2、3、4、5、5、4、3、2、1,请填空。

fun(int a[]) {

int i;

for(i=1;i<=10;i++) 【1】 =i; for(i=0;i<5;i++) 【2】 =a[i]; }

}

8.2.1 选择题

3.以下程序的输出结果是( )。

char cchar(char ch) {

if(ch>='A'&&ch<='Z') ch=ch-'A'+'a'; return ch;

}

main() {

char s[]=\*p=s; while(*p) {

*p=cchar(*p); p++; }

printf(\ }

4.以下程序调用findmax函数返回数组中的最大值,在下划线处应填入的是( )。

findmax(int *a,int n) {

int *p,*s;

for(p=a, s=a; p-a

return(*s); } main() {

int x[5]={12,21,13,6,18}; printf(\ }

7.以下程序的输出结果是( )。

#include #include

main()

{ char b1[8]=\*pb=b1+3; while(--pb>=b1) strcpy(b2,pb);

printf(\ }

8.2.2 填空题

1.以下程序的输出结果是【 】 。

main()

{ char *p=\*r; long *q; q=(long*)p; q++;

r=(char*)q; printf(\ }

3.以下程序求a数组中的所有素数的和,函数isprime用来判断自变量是否为素数。素数是只能被1和本身整除且大于1的自然数。

#include

main()

{

int i,a[10],*p=a,sum=0; printf(\ for(i=0;i<10;i++)

scanf(\ for(i=0;i<10;i++)

if(isprime(*(p+ 【1】 ))==1) {

printf(\*(a+i)); sum+=*(a+i);

}

printf(\ }

isprime(x) int x; {

int i;

for(i=2;i<=x/2;i++) if(x%i==0) return (0); 【2】 ; }

4.以下四个程序中,_______不能对两个整型变量的值进行交换。 A.

#include main() {

int a=10,b=20; swap(&a,&b);

printf(\ }

swap(p,q) int *p,*q; {

int *t;

t=(int*)malloc(sizeof(int)); t=p; *p=*q; *q=*t;

B.

}

#include main() {

int a=10,b=20; swap(&a,&b);

printf(\}

swap(p,q) int p,q; {

int *t; t=*p; *p=*q; *q=t;

C.

#include main()

{

int *a,*b;

*a=10,*b=20; swap(a,b);

printf(\*a,*b); }

swap(p,q) int *p,*q; {

int t; t=*p; *p=*q; *q=t; }

}

D.

#include main()

{

int a=10,b=20; int x=&a,y=&b; swap(x,y);

printf(\}

swap(p,q) int *p,*q;

{

int t;

t=*p;*p=*q;*q=t; }

5.下面的程序调用getone函数开辟一个动态存储单元,调用assone函数把数据输入此动态存储单元,调用outone函数输出此动态存储单元中的数据,请填空。

#include getone(s) int **s;

{ *s=(int *)malloc(sizeof(int)); }

assone(a) int *a;

{ scanf(\【1】 ); }

outone(b) int *b;

{ printf(\【2】 ); }

main( ) { int *p; getone(&p); assone(p); outone(p); }

8.3.1 选择题

1.若有定义“int x,*pb;”,则以下正确的赋值表达式是(A.pb=&x B.pb=x C.*pb=&x 2

.以下程序的输出结果是( )。 #include main()

{ printf(\

A.因变量无定义输出不定值 B.0 C.–1

D.1

3

.以下程序的输出结果是( )。 void sub(int x,int y,int *z) { *z=y-x; } main()

{ int a,b,c;

sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf(\}

7

.以下程序的输出结果是( )。 void fun(float *a,float *b) { float w; *a=*a+*a; w=*a; *a=*b; *b=w; } main()

{ float x=2.0,y=3.0; float *px=&x,*py=&y; fun(px,py);

printf(\}

。 D.*pb=*x )

8.以下程序的输出结果是( )。

void sub(float x,float *y,float *z) { *y=*y-1.0; *z=*z+x;

}

main()

{ float a=2.5,b=9.0,*pa,*pb; pa=&a,pb=&b; sub(b-a,pa,pa); printf(\}

9

.以下四个程序中不能对两个整型值进行交换的是(A.main()

{ int a=10,b=20;

swap(&a,&b);

printf(\}

swap(int *p, int *q) { int *t,a;

t=&a;

*t=*p; *p=*q; *q=*t;

}

B.main()

{ int a=10,b=20;

swap(&a,&b);

printf(\}

swap(int *p, int *q) { int t;

t=*p; *p=*q; *q=t;

}

C.main()

{ int *a,*b; *a=10,*b=20;

swap(a,b);

printf(\*a,*b); }

swap(int *p, int *q) { int t;

t=*p; *p=*q; *q=t;

}

D.main()

{ int a=10,b=20; int *x=&a,*y=&b; swap(x,y);

printf(\}

。 ) swap(int *p, int *q) { int t;

t=*p; *p=*q; *q=st; }

10.以下count函数的功能是统计substr在母串str中出现的次数,请将程序补充完整。

int count(char *str,char *substr) { int i,j,k,num=0; for(i=0; 【1】 ;i++)

{for( 【2】 ,k=0;substr[k]==str[j];k++,j++) if(substr[ 【3】 ]==’\\0’) {num++;break;} }

return num; }

11.以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行符),请将程序补充完整。

void Delblank(char *s) { int i,t; char c[80];

for(i=0,t=0; 【1】 ;i++)

if(!isspace( 【2】 ))c[t++]=s[i]; c[t]='\\0'; strcpy(s,c); }

12.以下conj函数的功能是将两个字符串s和t连接起来,请将程序补充完整。

char *conj(char *s,char *t) { char *p=s; while(*s) 【1】 ; while(*t)

{ *s= 【2】 ;s++;t++;} *s='\\0'; 【3】 ;

}

8.3.2 填空题

8.以下程序用指针指向三个整型存储单元,输入三个整数,并保持这三个存储单元中的值不变,选出其中最小值并输出。

#include\ main()

{

int 【1】

a=(int *)malloc(sizeof(int)); b=(int *)malloc(sizeof(int)); c=(int *)malloc(sizeof(int)); min=(int *)malloc(sizeof(int)); printf(\输入三个整数:\

scanf(\【2】 );

printf(\输出以上整数:%d%d%d\\n\【3】 ); *min=*a; if(*a>*b) 【4】 ;

if( 【5】 >*c) 【6】 ;

printf(\输出最小的整数:%d\\n\【7】 ); }

9.阅读以下程序:

main()

{

char str1[]=\ char *ip1=str1,*ip2=str2; scanf(\ printf(\ printf(\

运行上面的程序,输入字符串HOW DO YOU DO,则程序的输出结果是______。 10.阅读下面的程序:

main() {

static char *name[]={\ \ char **ip; int i;

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

【1】 ;

printf(\*ip); } }

}

11.阅读并运行上面的程序,如果从键盘上输入字符串qwerty和字符串abcd则程序的输出结果是 【1】 。

#include\#include\

strlen(char a[],char b[]) {

int num=0,n=0;

while(*(a+num)!='\\0') num++;

while(b[n]) {

*(a+num)=b[n]; num++; n++; }

return (num); }

main() {

char str1[81],str2[81],*p1=str1,*p2=str2; gets(p1); gets(p2);

printf(\}

13.以下程序的输出结果是 【1】 。

int ast(int x,int y,int *cp,int *dp) { *cp=x+y; *dp=x-y; }

main()

{ int a,b,c,d; a=4; b=3;

ast(a,b,&c,&d);

printf(\ }

9.3 测试题

填空题

5.已知head指向一个带头结点的单向链表,链表中每个结点包含数据域(data)和指针域(next),数据域为整型。下面的sum函数是求出链表中所有结点数据域值的和,作为函数值返回。请填空完善程序。

struct link { int data;

struct link *next;}

main()

{ struct link *head; int s; ?

s=sum(head);

? }

int sum( struct link *head ) { struct link *p; int s=0; }

while(p)

{ s+= 【1】 ; return(s);

p=head->next; p= 【2】 ; }

10.2 例题分析与解答

6.以下程序的输出结果是( )。

void fun(float *p1,float *p2,float *s) { s=(float *)calloc(1,sizeof(float)); *s=*p1+*p2++; }

main()

{ float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a; fun(a,b,s);

printf(\*s); }

10.3.2 填空题

1.C语言提供了三种预处理语句,它们是 【1】 、 【2】 和条件编译。 2.下面程序中for循环的执行次数是 【1】 ,输出结果为 【2】 。

#include\ #define N 2

#define M N+1

#define NUM (M+1)*M/2 void main() { int i;

for(i=1;i<=NUM;i++); printf(\

3.下面程序的输出是 【1】 。

#define PR(ar) printf(\ main()

{ int j, a[]={ 1,3,5,7,9,11,13,15},*p=a+5; for(j=3; j; j--) { switch(j) {case 1:

case 2: PR(*p++); break; case 3: PR(*(--p)); } } }

}

4.以下程序的输出结果是 【1】 。

#define PR(ar) printf(\main()

{ int j,a[]={1,3,5,7,9,11,13,15},*p=a+5; for(j=3; j; j--) switch(j)

{ case 1:

case 2:PR(*p++); break; case 3:PR(*(--p)); } }

5.下面程序调用getone 函数开辟一个动态存储单元,调用assone 函数把数据输入此动态存储单元,调用outone 函数输出此动态存储单元中的数据。请填空。

#include \getone(int **s)

{ *s=( 【1】 )malloc(sizeof(int)); } assone(int *s)

fseek(myf,0,SEEK_END); f1=ftell(myf); fclose(myf); printf(\

6.下面程序把从终端读入的文本(用@作为文本结束标志)输出到一个名为 bi.dat 的新文件中,请填空。

#include\ main()

{ FILE *fp; char ch;

if((fp=fopen(______))==NULL) exit(0);

while((ch=getchar())!='@') fputc(ch,fp); fclose(fp); }

12.3.2 填空题

3.以下C语言程序将磁盘中的一个文件复制到另一个文件中,两个文件名在命令行中给出。请将程序补充完整。

#include\ main(argc,argv) int argc;

char *argv[]; { FILE *f1,*f2;

char ch;

if(argc< 【1】 )

{ printf(\ exit(0); }

if(((f1=fopen(argv[1],\ NULL))

{ printf(\ exit(0); }

while( 【2】 ) fputc(fgetc(f1),f2); fclose(f1); fclose(f2); }

4.以下C语言程序将磁盘中的一个文件复制到另一个文件中,两个文件名在命令行中给出,请填空。

#include \

main(int argc, char *argv[]) { FILE *f1,f2; char ch;

if(argc< 【1】 ) { printf(\命令行参数错!\\n\ f1=fopen(argv[1],\ f2=fopen(argv[2],\

while( 【2】 ) fputc(fgetc(f1), 【3】 );

【4】 ; 【5】 ; }

5.以下程序由终端键盘输入一个文件名,然后把终端键盘输入的字符依次存放到该文件中,用“#”号作为结束输入标志,请填空。

#include \main()

{ FIlE *fp; char ch,fname[10];

printf(\

if((fp= 【1】 )==NULL) { printf(\ printf(\

while((ch=getchar())!='#') fputc( 【2】 ,fp); fclose(fp); }

6.以下程序用来统计文件中字符的个数,请填空。

#include \main()

{ FILE *fp; long num=0;

if((fp=fopen(\【1】 )==NULL) { printf(\ while 【2】 { 【3】 ; num++; } printf(\ fclose(fp); )

7.以下程序编译、连接后生成可执行文件cpy.exe:

#include \void fc(FILE *);

main(int argc, char *argv[]) { FILE *fp; int i=1;

while(--argc>0)

{ fp=fopen(argv[i++],\ fc(fp); fclose(fp); } }

void fc(FILE *ifp) { char c;

while (c=getc(ifp)!='#') putchar(c-32); }

14.2.2 实验内容和步骤

(1)输入并运行下面的程序:

main( )

{int a,b,c,d,e; char s1,s2,s3; a=100; b=32;

c=a+b; d=c/3; e=a%b;

s1='a'; s2='b';

printf(\,%d,%d\\n\printf(\,%c\\n\

(2)输入并运行下面程序:

main( )

{int i,j,m,n; i=1.4; j=10;

m=++i,j++;

printf(\,%d,%d\,i,j,m);

}

实验15.2.1 从大到小输出两个数

方法1:

main( )

{float a,b;

scanf(\,%f\,&a,&b);

if ( ) printf(\,%f\\n\,a,b); else printf(\,%f\\n\,b,a); }

方法2:

main( )

{ float a,b,t;

scanf(\,%f\,&a,&b);

if ( a

实验15.3.2 求两个数的最大公约数和最小公倍数

main( )

{int p,r,n,m,k;

scanf(\,%d\,&m,&n);

p=m*n /*保存m*n的积,以便求最小公倍数时使用*/ r=m%n;

while( ) /求m和n的最大公约数*/

{ ; ; ; }

printf(\它们的最大公约数为:%d\\n\, ); k= ;

printf(\它们的最小公倍数为:%d\\n\,k ); }

实验18.1 编写函数判断是否闰年

实验要求

编一函数,判断某年是否为闰年,若是返回1,否则返回0。 算法分析

#include fun(int m) {

return (m%4==0)&&(m0!=0)||(m@0==0); }

main() { int n;

for (n=1987;n<2009;n++) if(fun(n))

printf(\}

实验18.2 编写函数计算三角形的面积

实验要求

编写计算三角形面积的程序,将计算面积定义成函数。三角形面积公式为:

A?s(s?a)(s?b)(s?c) 其中,A为三角形面积,a、b、c为三角形的三条边的长度,s=(a+b+c)/2。 算法分析

#include #include

float fun(float a,float b,float c) {float f,s; s=(a+b+c)/2;

if((s<=a)||(s<=b)||(s<=c))//或(a+b)>c&&(a+c)>b&&(b+c)>a f=0; else

f=sqrt(s*(s.a)*(s.b)*(s.c)); return f; }

main()

{ float a,b,c;

scanf(\

printf(\}

实验18.3 编写函数求最大公约数和最小公倍数

实验要求

编写两个函数,分别求出两个整数的最大公约数和最小公倍数,用主函数调用这两个函

数,并输出结果,两个整数由键盘输入。

算法分析

#include #include int fmax(int m,int n) {int r; r=m%n;

while (r!=0)

{m=n;n=r;r=m%n;} return n; }

int fmin(int m,int n) {

return m*n/fmax(m,n); }

main()

{ int a,b;

scanf(\

printf(\ printf(\}

实验18.4 编写函数求圆周率的近似值

实验要求

编写函数,利用公式:

?1121231234?1???????????? 23353573579–5

计算π的近似值,当某一项的值小于10时,认为达到精度要求。 算法分析

#include double fun() {

int n; double pi=1,t=1; n=1;

do { t=t*n/(2*n+1);

pi=pi+t; n++;

}while(t>1e.5); return 2*pi; }

main()

{

printf(\

}

实验18.5 编写函数判断某一整数是否回文数

实验要求

编一函数,判断某一整数是否为回文数,若是返回1,否则返回0。所谓回文数就是该数正读与反读是一样的。例如12321就是一个回文数。

算法分析

#include #include int huiwen(int m) {int t,n=0; t=m;

while(t)

{n++; t=t/10;}

//求出M是几位的数

t=m;

while(t)

{if(t/(int)pow(10,n.1)!=t) return 0;

else

{t=t%(int)pow(10,n.1); t=t/10; n=n.2; } }

return 1; }

main() { int x;

scanf(\ if (huiwen(x))

//比较其最高位和最低位

//去掉其最高位

//去掉其最低位 //位数去掉了两位

printf(\ else

printf(\}

实验18.6 编写函数求整数的所有因子

实验要求

编一函数primedec(m),求整数m的所有因子并输出。例如:120的因子为:2,2,2,3,5。

算法分析

#include #include void primedec(int m) {int n=2; while(m>1) {while(m%n==0)

{printf(\

n++; }

printf(\} main() {

int x; scanf(\}

实验18.7 编写函数求整数的逆序数

实验要求

编一函数,求末位数非0的正整数的逆序数,如:reverse(3407)=7043。 算法分析

#include #include int reverse(int m) {int x=0; while(m)

{x=x*10+m; m=m/10; }

return x; }

main() { int w;

scanf(\

printf(\

}

实验18.8 编写函数求字符串中字符、数字、空格的个数

实验要求

编一函数,统计一个字符串中字母、数字、空格和其他字符的个数。 算法分析

#include #include void fun13(char s[])

{int i,num=0,ch=0,sp=0,oh=0; char c;

for(i=0;(c=s[i])!='\\0';i++) if(c==' ') sp++;

else if(c>='0'&&c<='9') num++;

else if(toupper(c)>='A' && toupper(c)<='Z') ch++; else oh++;

printf(\} main()

{ char s1[81]; gets(s1); fun13(s1); }

实验18.9 用递归方法求累加和

实验要求

用递归的方法实现求1+2+3+?+n。 算法分析

#include #include int fun14(int m) {int w; if(m==1) w=1; else

w=fun14(m.1)+m; return w; }

main()

{ int x,i;

scanf(\

printf(\

}

实验18.10 用递归方法将数值转换为字符串

实验要求

用递归的方法编程,将一个整数转换成字符串。例如:输入345,应输出字符串“345”。

算法分析

#include #include void fun15(int m) { if(m!=0)

{fun15(m/10);

printf(\ } }

main() { int x;

scanf(\ printf(\ fun15(x); printf(\}

实验18.11 用递归方法求x的n次方

实验要求

采用递归的方法计算x的n次方。 算法分析

#include \#include \float p(float x,int n) {float f; if(n==0) f=1;

else

f=p(x,n.1)*x; return f; } main() {

printf(\}

实验18.12 实现分段函数

实验要求

根据勒让德多项式的定义计算Pn(x)。n和x为任意正整数,把计算Pn(x)定义成递归函数。

n?0?1?Pn(x)??xn=1

?((2n-1)P(x)?(n?1)P(x))/n)n>1n-1n-2?算法分析

#include \

float p(float x,int n) {float f; if(n==0) f=1;

else if(n==1)

f=x; else

f=((2*n.1)*p(x,n.1).(n.1)*p(x,n.2))/n; return f; }

main()

{

printf(\

}

实验18.13 函数跟踪调试

实验要求

(1)编写如下程序:用Visual C++ 6.0的单步跟踪功能和Variables窗口,对该程序进行调试。注意观察函数执行过程(要用Step Into)和函数参数的变化。

#include int max(int x,int y) {

if (x>y)

return x; else

return y; }

void main() {

int a,b;

scanf(\

printf(\

(2)编写如下程序,用Visual C++6.0的单步跟踪功能和Variables窗口,对该程序进行调试。注意观察函数执行过程(要用Step Into)和函数参数的变化,体会为什么没有实现两个参数的交换。

#include

void swap(int x,int y) {

int temp;

printf(\ temp=x; x=y; y=temp;

printf(\}

void main() {

int a,b;

printf(\

scanf(\

printf(\ swap(a,b);

printf(\

}

}

本文来源:https://www.bwwdw.com/article/nena.html

Top