C语言答案

C语言答案,第1张

C语言程序设计复习:

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

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

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

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

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

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

4) 统计及格学生人数;

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

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

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

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

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

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

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

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

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

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

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

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

参考答案:

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

#include <stdioh>

void main()

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

printf("input 10 numbers :\n");

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

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

printf(“\n");

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

for(i=0;i<10-j;i++)

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

printf("the sorted numbers :\n");

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

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

}

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

pn(x)= 1 n=0

x n=1

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

3、#include <stdioh>

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)=%62f\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 ((2n-1)xp((n-1),x)-(n-1)p((n-2),x))/n;

}

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

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

#include <stdioh>

void main()

{

void sort (inta, intb,intc);

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 <stdioh>

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=0;i<10;i++)

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=1;i<10;i++)

sum=sum+a[i];

aver=sum/10;

return aver;

}

int max(int a[])

{

int i;

int m=a[0];

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

if(m<a[i])

m=a[i];

return m;

}

int min(int a[])

{

int i;

int m=a[0];

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

if(m>a[i])

m=a[i];

return m;

}

int pass(int a[])

{

int i;

int s=0;

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

if(a[i]>=60)

s++;

return s;

}

int search(int a[],int g)

{

int i;

int s=0;

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

if(a[i]==g)

s++;

return s;

}

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

Void main()

;

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

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

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

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

printf("\n");

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

scanf("%d",&number);

end=a[9];

if(number>end)

a[10]=number;

else

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

{ if(a[i]>number)

{temp1=a[i];

a[i]=number;

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

{temp2=a[j];

a[j]=temp1;

temp1=temp2;

}

break;

}

}

}

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

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=0;str[j]!='\0';j++)

{

a[i]=str[j];

a[i+1]=' ';

i+=2;

}

a[i]='\0';

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

{

str[i]=a[i];

}

str[i]='\0';

}

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

#include "stdioh"

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 <stdioh>

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 <stdioh>

#define N 5;

void main()

{

int a[N],i,temp;

printf(“enter array a:\n”);

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

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

printf(“array a:\n”);

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

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

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

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

printf(“\n”);

}

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

#include <stdioh>

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=0;i<strlen(str);i++)

{

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

{

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

{

temp=str[j];

str[j]=str[j+1];

str[j+1]=temp;

}

}

}

}

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

#include <stdioh>

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

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

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

{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=0;i<10;i++)

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

printf("\n");

inv(a,10);

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

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

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

printf("\n");

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

#include<stdioh>

#include<stringh>

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=0;i<n;i++)

{

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=0;i<5;i++)

{

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

}

printf("\n\n");

return 0;

}

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

#include < stdioh >

#include<stringh>

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

{

int i,j;

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

string[i]=string1[i];

for(j=0;string2[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 <stdioh>

void main()

{

void sort (inta, intb,intc);

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 <stdioh>

void input(int number[])

{

Int I;

Printf(“input 10 numbers:”);

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

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

}

void max_min_value(int number[])

{

int max,min,p,temp;

max=min=number;

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

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=number;p<number+10;p++)

Printf(“%d”,p);

printf(“\n”);

}

void main()

{

int number[10];

input(number);

max_min_value(number);

output(number);

}

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

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

习题解答

作业一

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

不合法的标识符:f(x) $a21 21a while tan@sohucom

2

main( )

{ int i, j, s;

i=2; j=3;

s=ij;

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

}

作业二

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

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

正确的实型(float)常量: 00 2 12e-3 5e2

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

2表达式的结果 (1) 1

(2) 0

(4) 0

(5) 95

(9) ‘A’

(11) 2

(12) 45

3 Y=sin(2x)+(a+b)/(ab)/(1+a/b)+aa/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=50/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=3x-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=x; break;

case 1: y=3-x/5;break;

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

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=1;i<10;i++)

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

{ k=100-i10-j5;

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=9; count=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: 46 解答见p156

2 p128: 411 解答见p158

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

funm_n(int m,int n)

{

int y;

if (n==1) y=m;

else y=mfunm_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);

}

4P128: 412 (3); 答案:12345678

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

main()

{

int prime,i,n=0;

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

{ 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=0;i<26;i++)

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

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

}

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

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

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

}

}

2 P132: 515 程序见p167

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

#include

#include

main()

{

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

p1=data;

printf("Input 8 numbers:");

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

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

p1++;

}

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

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

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

for (i=0,p1=data;i<8;i++,p1++)

printf("%6d",p1 ) ;

}

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

#include

#include

main()

{

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

printf("Input 16 numbers:");

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

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

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

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

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

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

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

{ printf(" ");

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

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=a; q=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:65 程序见p178

2.P135:67 程序见p181

3.P134:618 程序见p196

#include<stdioh>

int main()

{

float F,c;

while(1)

{

printf("请输入华氏温度:");

scanf("%f",&F);

c=5(F-32)/9;

printf("摄氏温度为:%02f",c);

return 0;

}

}

2011年3月全国计算机等级考试二级笔试试卷

C语言程序设计

(考试时间90分钟,满分100分)

一、 选择题(1-10,21-40每题2分,11-20每题1分,共70分)

(1)下列关于栈叙述正确的是

A)栈顶元素最先能被删除

B)栈顶元素最后才能被删除

C)栈底元素永远不能被删除

D)以上三种说法都不对

(2)下列叙述中正确的是

A)有一个以上根结点的数据结构不一定是非线性结构

B)只有一个根结点的数据结构不一定是线性结构

C)循环链表是非线性结构

D)双向链表是非线性结构

(3)某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)

A)3 B)4 C)6 D)7

(4)在软件开发中,需求分析阶段产生的主要文档是

A)软件集成测试计划 B)软件详细设计说明书

C)用户手册 D)软件需求规格说明书

(5)结构化程序所要求的基本结构不包括

A)顺序结构 B)GOTO跳转

C)选择(分支)结构 D)重复(循环)结构

(6)下面描述中错误的是

A)系统总体结构图支持软件系统的详细设计

B)软件设计是将软件需求转换为软件表示的过程

C)数据结构与数据库设计是软件设计的任务之一

D)PAD图是软件详细设计的表示工具

(7)负责数据库中查询 *** 作的数据库语言是

A)数据定义语言

B)数据管理语言

C)数据 *** 纵语言

D)数据控制语言

(8)一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是

A)1:1联系 B)1:m联系

C)m:1联系 D)m:n联系

(9)有三个关系R、S和T如下:

则由关系R和S得到关系T的 *** 作是

A)自然连接 B)交 C)除 D)并

(10)定义无符号整数类为UInt,下面可以作为类UInt实例化值的是

A)-369 B)369 C)0369 D)整数集合{1,2,3,4,5}

(11)计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是

A)C语言程序仅可以编译执行

B)C语言程序仅可以解释执行

C)C语言程序既可以编译执行又可以解释执行

D)以上说法都不对

(12)以下叙述中错误的是

A)C语言的可执行程序是由一系列机器指令构成的

B)用C语言编写的源程序不能直接在计算机上运行

C)通过编译得到的二进制目标程序需要连接才可以运行

D)在没有安装C语言集成开发环境的机器上不能运行C源程序生成的exe文件

(13)以下选项中不能用作C程序合法常量的是

A)1,234 B)'123'

C)123 D)"\x7G"

(14)以下选项中可用作C程序合法实数的是

A)1e0 B)30e02

C)E9 D)912E

(15)若有定义语句:inta=3,b=2,c=1;,以下选项中错误的赋值表达式是

A)a=(b=4)=3; B)a=b=c+1;

C)a=(b=4)+c; D)a=1+(b=c=4);

(16)有以下程序段

char name[20];

int num;

scanf("name=%s num=%d",name;&num);

当执行上述程序段,并从键盘输入:name=Lili num=1001<回车>后,name的值为

A)Lili B)name=Lili C)Lili num= D)name=Lili num=1001

(17)if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是

A)必须是逻辑值 B)必须是整数值

C)必须是正数 D)可以是任意合法的数值

(18)有以下程序

#include

main()

{ int x=011;

printf("%d\n",++x);

}

程序运行后的输出结果是

A)12 B)11 C)10 D)9

 

(19)有以下程序

#include

main()

{ int s;

scanf("%d",&s);

while(s>0)

{ switch(s)

{ case1:printf("%d",s+5);

case2:printf("%d",s+4); break;

case3:printf("%d",s+3);

default:printf("%d",s+1);break;

}

scanf("%d",&s);

}

}

运行时,若输入1 2 3 4 5 0<回车>,则输出结果是

A)6566456 B)66656 C)66666 D)6666656

(20)有以下程序段

int i,n;

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

{ n=rand()%5;

switch (n)

{ case 1:

case 3:printf("%d\n",n); break;

case 2:

case 4:printf("%d\n",n); continue;

case 0:exit(0);

}

printf("%d\n",n);

}

以下关于程序段执行情况的叙述,正确的是

A)for循环语句固定执行8次 B)当产生的随机数n为4时结束循环 *** 作

C)当产生的随机数n为1和2时不做任何 *** 作D)当产生的随机数n为0时结束程序运行

 

(21)有以下程序

#include

main()

{ char s[]="012xy\08s34f4w2";

int i,n=0;

for(i=0;s[i]!=0;i++)

if(s[i]>='0'&&s[i]<='9') n++;

printf("%d\n",n);

}

程序运行后的输出结果是

A)0 B)3 C)7 D)8

(22)若i和k都是int类型变量,有以下for语句

for(i=0,k=-1;k=1;k++) printf("\n");

下面关于语句执行情况的叙述中正确的是

A)循环体执行两次B)循环体执行一次C)循环体一次也不执行D)构成无限循环

(23)有以下程序

#include

main()

{ char b,c; int i;

b='a'; c='A';

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

{ if(i%2) putchar(i+b);

else putchar(i+c);

} printf("\n");

}

程序运行后的输出结果是

A)ABCDEF B)AbCdEf C)aBcDeF D)abcdef

(24)设有定义:doublex[10],p=x;,以下能给数组x下标为6的元素读入数据的正确语句是

A)scanf("%f",&x[6]); B)scanf("%lf",(x+6));

C)scanf("%lf",p+6); D)scanf("%lf",p[6]);

(25)有以下程序(说明:字母A的ASCII码值是65)

#include

void fun(char s)

{ while(s)

{ if(s%2) printf("%c",s);

s++;

}

}

main()

{ char a[]="BYTE";

fun(a); printf("\n");

}

程序运行后的输出结果是

A) BY B) BT C) YT D) YE

(26)有以下程序段

#include

main()

{ …

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

}

以下叙述中正确的是

A)此while语句将无限循环

B) getchar()不可以出现在while语句的条件表达式中

C)当执行此while语句时,只有按回车键程序才能继续执行

D)当执行此while语句时,按任意键程序就能继续执行

(27)有以下程序

#include

main()

{ int x=1,y=0;

if(!x) y++;

else if(x==0)

if (x) y+=2;

else y+=3;

printf("%d\n",y);

}

程序运行后的输出结果是

A)3 B)2 C)1 D) 0

(28)若有定义语句:chars[3][10],(k)[3],p;,则以下赋值语句正确的是

A)p=s; B)p=k; C)p=s[0]; D)k=s;

(29)有以下程序

#include

void fun(char c)

{ while(c)

{ if(c>='a'&&c<='z') c=c-('a'-'A');

c++;

}

}

main()

{ char s[81];

gets(s); fun(s); puts(s):

}

当执行程序时从键盘上输入Hello Beijing<回车>,则程序的输出结果是

A)hello beijing B)Hello Beijing C)HELLO BEIJING D)hELLO Beijing

(30)以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。

#include

#define N 10

void fun(int x[N])

{ int i=0;

while(i<>

}

在程序中下划线处应填入的是

A)x+i B)&x[i+1]C)x+(i++) D)&x[++i]

(31)有以下程序

#include

main()

{ char a[30],b[30];

scanf("%s",a);

gets(b);

printf("%s\n %s\n",a,b);

}

程序运行时若输入:

how are you I am fine<回车>

则输出结果是

A)how are you B)how I am fine are you I am fine

C)how are you I am fine D)row are you

(32)设有如下函数定义

int fun(int k)

{ if (k<1) return 0;

else if(k==1) return 1;

else return fun(k-1)+1;

}

若执行调用语句:n=fun(3);,则函数fun总共被调用的次数是

A)2 B)3 C)4 D)5

(33)有以下程序

#include

int fun (int x,int y)

{ if (x!=y) return ((x+y);2);

else return (x);

}

main()

{ int a=4,b=5,c=6;

printf("%d\n",fun(2a,fun(b,c)));

}

程序运行后的输出结果是 A)3 B)6 C)8 D)12

(34)有以下程序

#include

int fun()

{ static int x=1;

x=2;

return x;

}

main()

{ int i,s=1;

for(i=1;i<=3;i++) s=fun();

printf("%d\n",s);

}

程序运行后的输出结果是 A)0 B)10 C)30 D)64

(35)有以下程序

#include

#define S(x) 4(x)x+1

main()

{ int k=5,j=2;

printf("%d\n",S(k+j));

}

程序运行后的输出结果是 A)197 B)143 C)33 D)28

(36)设有定义:struct {charmark[12];int num1;double num2;} t1,t2;,若变量均已正确赋初值,则以下语句中错误的是

A)t1=t2; B)t2num1=t1num1;C)t2mark=t1mark; D)t2num2=t1num2;

(37)有以下程序

#include

struct ord

{ int x,y;}dt[2]={1,2,3,4};

main()

{

struct ord p=dt;

printf("%d,",++(p->x));printf("%d\n",++(p->y));

}

程序运行后的输出结果是 A)1,2 B)4,1 C)3,4 D)2,3

(38)有以下程序

#include

struct S

{ int a,b;}data[2]={10,100,20,200};

main()

{ struct S p=data[1];

printf("%d\n",++(pa));

}

程序运行后的输出结果是 A)10 B)11 C)20 D)21

(39)有以下程序

#include

main()

{ unsigned char a=8,c;

c=a>>3;

printf("%d\n",c);

}

程序运行后的输出结果是 A)32 B)16 C)1 D)0

(40)设fp已定义,执行语句fp=fopen("file","w");后,以下针对文本文件file *** 作叙述的选项中正确的是

A)写 *** 作结束后可以从头开始读 B)只能写不能读

C)可以在原有内容后追加写 D)可以随意读和写

二、填空题

(1)有序线性表能进行二分查找的前提是该线性表必须是 1 存储的。

(2)一棵二叉树的中序遍历结果为DBEAFC,前序遍历结果为ABDECF,则后序遍历结果为 2 。

(3)对软件设计的最小单位(模块或程序单元)进行的测试通常称为3 测试

(4)实体完整性约束要求关系数据库中元组的 4 属性值不能为空。

(5)在关系A(S,SN,D)和关系B(D,CN,NM)中,A的主关键字是S,B的主关键字是D,则称 5 是关系A的外码。

(6)以下程序运行后的输出结果是 6。

#include

main()

{ int a;

a=(int)((double)(3/2)+05+(int)1992);

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

}

(7)有以下程序

#include

main()

{ int x;

scanf("%d",&x);

if(x>15) printf("%d",x-5);

if(x>10) printf("%d",x);

if(x>5) printf("%d\n",x+5);

}

若程序运行时从键盘输入12<回车>,则输出结果为 7 。

(8)有以下程序(说明:字符0的ASCII码值为48)

#include

main()

{ char c1,c2;

scanf("%d",&c1);

c2=c1+9;

printf("%c%c\n",c1,c2);

}

若程序运行时从键盘输入48<回车>,则输出结果为 8 。

(9)有以下函数

void prt(char ch,int n)

{ int i;

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

printf(i%6!=0"%c":"%c\n",ch);

}

执行调用语句prt('',24);后,函数共输出了 9 行号。

(10)以下程序运行后的输出结果是 10。

#include

main()

{ int x=10,y=20,t=0;

if(x==y)t=x;x=y;y=t;

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

}

(11)己知a所指的数组中有N个元素。函数fun的功能是,将下标k(k>0)开始的后续元素全部向前移动一个位置。请填空。

void fun(int a[N],int k)

{ int i;

for(i=k;i

}

(12)有以下程序,请在 12 处填写正确语句,使程序可正常编译运行。

#include

12 ;

main()

{ double x,y,(p)();

scanf("%lf%lf",&x,&y);

p=avg;

printf("%f\n",(p)(x,y));

}

double avg(double a,double b)

{ return((a+b)/2);}

(13)以下程序运行后的输出结果是 13。

#include

main()

{ int i,n[5]={0};

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

{ n[i]==n[i-1]2+1; printf("%d",n[i]); }

printf("\n");

}

(14)以下程序运行后的输出结果是 14。

#include

#include

#include

main()

{ char p; int i;

p=(char )malloc(sizeof(char)20);

strcpy(p,"welcome");

for(i=6;i>=0;i--) putchar((p+i));

printf("\n-"); free(p);

}

(15)以下程序运行后的输出结果是 15。

#include

main()

{ FILE fp; int x[6]={1,2,3,4,5,6},i;

fp=fopen("testdat","wb");

fwrite(x,sizeof(int),3,fp);

rewind(fp);

fread(x,sizeof(int),3,fp);

for(i=0;i<6;i++) printf("%d",x[i]);

printf("\n");

fclose(fp);

}

2011年3月全国计算机等级考试二级笔试试卷

C语言程序设计答案

一.选择题1-5 ABDDB

6-10 ACDCB 11-15 ADBAA

16-20 ADCAD 21-25 BDBCD

26-30 CDCCC 31-35 BBBDB

36-40 CDDCB

二,填空题

1) 顺序 2) DEBFCA 3) 单元测试 4) 主键 5) D 6) 3 7) 1217

8) 09 9) 4 10) 20 0 11) i-1 12) double avg(doublea,double b) 13) 13715

14) e(E)moclew 15) 123456

2010年9月全国计算机等级考试二级C笔试试卷答案

一、选择题

1~5: BCDAA 6~10:DDCCA 11~15:CBBAD 16~20: DAACB

21~25: BCBDC 26~30 :CBDDA 31~35:ACBCD 36~40 :BACBD

二、填空

11DCBA2345 2n-1 325 4结构化 5物理设计 62008

715 8非0 9 1 4 13 40 10i 112

12a[row][col] 133 14s 15FILE

#include <stdioh>

int main()

{

int total = 18;

int i5, i2, i1;

for (i5 = 0; i5 5 <= total; i5++)

for (i2 = 0; i2 2 + i5 5 <= total; i2++)

for (i1 = 0; i1 + i2 2 + i5 5 <= total; i1++)

if (i1 + i2 2 + i5 5 == total && i1 + i2 + i5 == 10)

printf("1元%d张\t2元%d张\t5元%d张\n", i1, i2, i5);

return 0;

}

1元2张 2元8张 5元0张

1元5张 2元4张 5元1张

1元8张 2元0张 5元2张

#include <stdioh>

int main()

{

int total = 0;

int i;

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

if (i % 37 == 0)

total += i;

printf("total = %d\n", total);

return 0;

}

total = 339660

#include <stdioh>

int main()

{

int total = 0;

int i;

for (i = 300; i<= 600; i++)

if (i/100 == i%10)

total += i;

printf("total = %d\n", total);

return 0;

}

total = 13470

-125=-555

1

字节 二进制

0

1

无表达式,不能解,如有则按C语言运算规则来计算,整型与双精度的一起运算要先换算成双精度的

x(x(x(x(x(x(5x+3)-4)+2)+1)-6)+1)+10

二进制 ASCII

1,-2

没有定义j,无法运行

================================================

分都没有还想让人给你答,就想不劳而获,学习诗歌循序渐进的过程,你现在不学,将来会后悔的

以上就是关于C语言答案全部的内容,包括:C语言答案、C语言程序设计作业题-、c语言程序设计答案,怎样输入一个华氏温度,要求输出摄氏温度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9303636.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存