作业4 - 参考答案
选择题
1 2 3 4 5 6 7
| 1. 若k为int型变量,则以下程序段的执行结果是()。 k=8567; printf("|%6d|\n",k); A、|%6D| B、| 8567| C、|8567 | D、格式描述符不合法,输出不确定值
|
答案:B
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 2. 下列程序段的输出为结果()。 #include<stdio.h> int main() { int k,g; k=011; g=33; printf("%d\t",k); printf("%x\n",g); return 0; } A、11 33 B、11 33 C、9 21 D、9 21
|
答案:C
1 2 3 4 5
| 3. 若变量已正确定义,要将a和b中的数进行交换,下面不正确的语句是()。 A、a=a+b, b=a-b, a=a-b; B、a=t; t=b; b=a; C、t=a; a=b; b=t; D、t=b; b=a; a=t;
|
答案:B
1 2 3 4 5 6 7 8 9
| 4. int a=3,b=2,c=1; if(a>b>c) a=b; else a=c; 则a的值为()。 A、0 B、2 C、1 D、3
|
答案:C
1 2 3 4 5
| 5.C语言的if语句嵌套时,if与else的配对关系是()。 A、每个else与if的配对是任意的 B、每个else总是与最外层的if配对 C、每个else总是与它上面的最近的if配对 D、每个else总是与它上面的if配对
|
答案:C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 6.有如下程序段: int main() { float x=2.0,y; if(x<0.0) y=0.0; else if(x<10.0) y=1.0/x; else y=1.0; printf("%f\n",y); return 0; } 该程序的输出结果是( )。 A、0.500000 B、0.250000 C、1.000000 D、0.000000
|
答案:A
1 2 3 4 5 6 7 8
| 7.若i为整型变量,则以下循环执行次数是()。 for(i=2;i==0;) printf("%d",i--);
A、0次 B、1次 C、2次 D、无限次
|
答案:A
1 2 3 4 5 6 7
| 8.设j和k都是int类型,则for循环语句()。 for(j=0,k=0; j<=9 && k!=876; j++) scanf("%d",&k); A、循环体一次也不执行 B、最多执行9次 C、是无限循环 D、最多执行10次
|
答案:D
1 2 3 4 5 6
| 9.以下for循环的执行次数是()。 for(x=0,y=0;(y=123) && (x<4); x++) A、3次 B、是无限循环 C、4次 D、循环次数不定
|
答案:C
1 2 3 4 5
| 10.以下定义语句中不正确的是()。 A、char c1[]={'1','2','3','4','5'}; B、double x[5]={2.0,4.0,6.0,8.0,10.0}; C、int y[5]={0,1,3,5,7,9}; D、char c2[]={'\x10','\xa','\x8'};
|
答案:C
1 2 3 4 5 6 7 8
| 11.执行下面的程序段后,变量k中的值为 int k=3, s[2]; s[0]=k; k=s[1]*10; A、33 B、10 C、30 D、不定值
|
答案:D
1 2 3 4 5 6 7 8 9
| 12.有如下程序片段,用于给数组所有元素输入数据: int a[10],i=0; while(i<10) scanf("%d", ); 以下四个选项中,可以正确填入横线位置的是()。 A、&a[i+1] B、a+i C、&a[++i] D、a+i++
|
答案:D
1 2 3 4 5
| 13.C语言中函数调用的方式有()。 A、函数调用作为函数表达式一种 B、函数调用作为语句、函数表达式或函数参数三种 C、函数调用作为语句或函数表达式两种 D、函数调用作为语句一种
|
答案:B
1 2 3 4 5
| 14.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是()。 A、传递方式由用户指定 B、地址传递 C、由实参传给形参,再由形参传回实参 D、单向值传递
|
答案:D
1 2 3 4 5
| 15.C语言中,如果函数不需要返回值,函数类型应该定义为()。 A、double B、int C、void D、float
|
答案:C
1 2 3 4 5
| 16.对于建立函数的目的,正确的说法是 A、提高程序的执行效率 B、减少程序的篇幅 C、减少程序文件所占的内存 D、提高程序的可读性
|
答案:D
1 2 3 4 5
| 17.若有int i=3,*p;p=&i;下列语句中输出结果为3的是()。 A、printf("%d",*p); B、printf("%d",*i); C、printf("%d",p); D、printf("%d",&p);
|
答案:A
1 2 3 4 5
| 18.若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是( )。 A、*p=*q; B、n=*q; C、p=n; D、p=q;
|
答案:C
1 2 3 4 5
| 19.具有相同类型的指针变量p与数组a,不能进行的操作是( )。 A、p=&a[0]; B、p=a; C、p=&a; D、*p=a[0];
|
答案:C
1 2 3 4 5
| 20.下列关于指针定义的描述,错误的是( )。 A、指针变量的类型与它所指向的变量类型一致 B、指针是一种变量,该变量用来存放某个变量的地址 C、指针变量的命名规则与标识符相同 D、指针是一种变量,该变量用来存放某个变量的值
|
答案:D
程序填空
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 21. 本程序的功能是:统计一维数组中高于平均值的数据个数。 输出:6 #include<stdio.h> int main() { double sum=0,ave; int count=0; int a[10]={78,58,90,23,66,88,98,37,78,87}; for(int i=0;i<10;i++){ sum=sum+___a[i]___; } ave=sum/10; for(int i=0;i<10;i++){ if(a[i]>__ave___){ count++; } } printf("%d\n",__count__); return 0; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| 22.本程序的功能是:从键盘输入一串小写英文字符,统计每个字符出现的次数。 输入:hellochina 输出: a:1 c:1 e:1 h:2 i:1 l:2 n:1 o:1
#include<stdio.h> #include<string.h> int main() { char s[100]; int idx; int a[26]=_{0}__; gets(s); int n=__strlen(s)__; for(int i=0;i<n;i++){ idx=s[i]-'a'; a[idx]++; } for(int i=0;i<26;i++){ if(a[i]!=_0_){ printf("%c:%d\n",'a'+i,a[i]); } } return 0; }
|
程序改错
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| 23.本程序的功能是输入一个字符串(不超过20个字符),判断是否为回文串。 所谓回文串,是指一个字符串顺读和反读是一样的,如"123454321"是回文串, "abcddba"不是回文串。
输入:123454321 输出:Yes
输入:abcddba 输出:No
#include<stdio.h> #include<string.h> #define N 20 int main() { char s[N]; int i,j,n; gets(s); n=strlen(s); for(i=0,j=n;i<j;i++,j--) if(s[i]!=s[j]) continue; if(i<j) printf("No\n"); else printf("Yes\n"); return 0; }
|
示例代码:
答案1:j=n-1
答案2:break
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 24.本程序的功能是将包含N个元素的一维数组中对称位置的元素交换后输出。 输出结果为: 89 99 58 77 63 15 14 31 22 13
#include<stdio.h> #define N 10 int main() { int i,j,t; int a[N]={13,22,31,14,15,63,77,58,99,89}; for(i=0,j=N;i<j;i++,j--) { t=a[i]; a[i]=a[j]; a[i]=t; } for(i=0;i<N;i++) printf("%3d",a[j]); printf("\n"); return 0; }
|
示例代码:
答案1:j=N-1
答案2:a[j]=t
答案3:printf(“%3d”,a[i])
程序设计
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| 25.本程序中,fun()函数的功能是判断一个数n是否为完数,若是, 返回1,若不是返回0。完数定义:其真因子之和等于该数本身。
程序运行后,在main()函数中调用fun()函数进行判断,输出1000 以内的所有完数。
输出: 6 28 496
#include "stdio.h" int fun(int n) { int s=0; for(int i=1;i<=n/2;i++){ if(n%i==0){ s=s+i; } } if(s==n) return 1; else return 0; } int main() { for(int i=1;i<=1000;i++){ if(fun(i)){ printf("%4d", i); } } void TestFunc(); TestFunc(); return 0; } void TestFunc() { }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| 26.概率论中,从m个不同的数中抽取n个数的组合(m>=n)。 即 C(m,n)=m!/(n!*(m-n)!),求阶乘的功能用函数fact()实现。
如下为测试结果: 第1行输入:5 3 第2行输出结果:10
#include<stdio.h> double fact(int n) { int i; double f=1; for(i=1;i<=n;i++) f=f*i; return f; } int main() { int m,n; printf("请输入m,n:"); scanf("%d%d",&m,&n); printf("C(%d,%d)=%.0f\n",m,n,fact(m)/(fact(n)*fact(m-n))); void TestFunc(); TestFunc(); return 0; } void TestFunc() { }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| 27.功能:从键盘输入任意位数的正整数n,输出其逆序数。 完善函数reverse(),实现该功能。 程序运行后, 输入:789456 输出:654987
#include<stdio.h> long reverse(long n) { long m=0; int a=0; while(n>0){ a=n%10; m=m*10+a; n=n/10; } return m; } int main() { long n; scanf("%ld",&n); printf("%ld\n",reverse(n)); void TestFunc(); TestFunc(); return 0; } void TestFunc() { }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| 28.编写递归函数f(),功能是:返回斐波那契数列的第n项。斐波那契数列的递推公式如下: 程序运行结果为: 1 1 2 3 5 8 13 21 34 55
#include<stdio.h> long f(int n) { if(n==1||n==2){ return 1; } else{ return f(n-1)+f(n-2); } } int main () { int i; for(i=1;i<=10;i++){ printf("%ld\t",f(i)); } void TestFunc(); TestFunc(); return 0; } void TestFunc() { }
|