当前位置:首页 » 编程语言 » c语言高二期末考试题
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言高二期末考试题

发布时间: 2022-09-10 23:06:29

‘壹’ c语言、、期末考试的题啊 求正解!

#include<stdio.h>
void main()
{
float sal=500;
int profit;
printf("请输入利润值:");
scanf("%d",&profit);
if(profit>1000&&profit<=2000) sal = sal+profit*0.1;
if(profit>2000&&profit<=5000) sal = sal+profit*0.15;
if(profit>5000&&profit<=10000) sal = sal+profit*0.2;
if(profit>10000) sal = sal+profit*0.25;
printf("salary = %f\n", sal);
}

‘贰’ C语言考试题

我来回答下把:
1.1
2.9
解释:t = (a>b)?a:b等价于t = ((a>b)?a:b),这下应该知道了把
3.96 `(和~键是同一个键)
解释:a=96;96是那个字符的ACSII码值的十进制表示,它的十六进制表示的ASCII码值为60,你可以对96进行除16取余法得到60,然后你去查看下字符的ASCII码 16进制表示的那个表就会发现,它对应的是这个字符,所以就是他了,别和单引号混淆就好,单引号的ASCII码十六进制表示为27
4.a[0] a[1] a[2]
5.1600
6.文本文件 二进制文件 [这个拿的不是很准]
7.fopen fclose fseek

下面:
1.C
解释:a+=a-=a*=a,首先要知道+=,-=,*=的优先级是相同的,但是他们的结合性是由右向左的,所以,他相当于a+=a-=(a=a*a),你还要知道,这是在同一条语句中多次修改同一个变量的值,这里有结合性,可以保证,但是有的时候并不可以,因为语言中明确规定,求值顺序未定义,一般尽可能不要在同一条语句里多次修改同一个变量的值,有的时候还和编译器有关的,a+=a-=(a=a*a)相当于a+=(a=a-(a=a*a)),在a=(a+(a=a-(a=a*a))),所以为0
2.B
3.D
解释:你定义一个带参数的宏#define ADD(x) (x)+(x)
你要知道,宏替换是机械化的替换,不会很智能化的,也就是说
在这里,替换的时候是替换成了这样d=(a+b)+(a+b)*c;所以最后就是80了
4. A
解释:这样理解把, char a[5]; char *p=a;这个是把数组的首地址赋给指针p来初始化指针,你后面再加一句p="abcd";不就是对指针的赋值吗,使指针不再指向数组的首地址,而是指向了字符串的首地址了.相信char *p="abcd";很常见把,呵呵...
5.C
解释:因为k=2,然后执行关系表达式k==0,结果显然判断结果为假,所以不执行循环体
6.C
7.A
指针是不能相加的

8.D
解释:这个应该好好解释下,这个题还好了
struct st{ int n;struct st *next;};
static struct st a[3]={5,&a[1],7,&a[2],9,‘\0’},*p; p=&a[0];
A p++->n B p->n++ C (*p).n++ D ++p->n
分析:首先你要知道,这是定义了一个结构体数组,这个static struct st a[3]={5,&a[1],7,&a[2],9,‘\0’}写的易读一点就是static struct st a[3]={{5,&a[1]},{7,&a[2]},{9,'\0'}},是不是明了了好多.
你做这个题目之前还需要明白一点,即箭头操作符的优先级高于++运算符,然后分析选项
选项A.p++是后缀加,所以执行(p++)->n(即p++->n) 相当于执行p->n,即得到的值是5
选项B. p->n++相当于(p->n)++,由于是后缀加,所以得到的值也是5
选项C.(*p).n++ 就是相当于((*p).n)++,更相当于(p->n)++,所以和上面的是一样的,也是5,为什么它相当于它呢,这就要你看看箭头操作符的由来了,箭头操作符的由来就是为了结合解引用操作符*和点操作符.于一起的.来简化书写,增加可读性
选项D.++p->n 相当于++(p->n),由于是前缀加,所以得到的值为6了
9.C,选择W会格式化
10. B ,数组名其实就相当于一个指针,这里对指针做运算,加1使指针下移

写出运行结果:
1.
10623-9003
2.
6 7 8

填空题:
1.
#include <stdio.h>
#include <math.h>
2. 2
3.break;
4.k+1

编程题:
1.代码如下:
#include<stdio.h>
int main()
{
int i,n;
long s=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
s*=i;
printf("%ld",s);
return 0;
}

2.代码如下

#include<stdio.h>
int main()
{
int i,s=0;
for(i=1;i<=100;i++)
s+=i;
printf("%d",s);
return 0;
}

应该没错把,楼主有什么问题可以发消息给我

‘叁’ 一道C语言编程题

程序:
/*
题目:某班有50位学生,编程统计该班C语言期末考试成绩,找出最高分,最低分,计算及格率。
输出全部成绩,并将最高分放置第一个位置,最后输出该班的及格率。
要求:从键盘输入成绩,数组,函数调用,指针。请哪位高手帮我解答一下,急用。非常感谢!
*/
#include<stdio.h>

int findmax(int *b,int n)
{
int i,j,k;
int max=b[0];
for(i=0;i<n;i++)
if(b[i]>max){max=b[i];j=i;}
for(k=j;k>0;k--)b[k]=b[k-1];
b[0]=max;
return max;
}

void main()
{
int score[50];
int i,max=0,min=0,num=0;
float rate=0.0;
for(i=0;i<50;i++)
{
printf("第%d个学生成绩:",i+1);
scanf("%d",&score[i]);
}
max=findmax(score,50);
min=score[0];
for(i=0;i<50;i++)
{
if(score[i]<min)min=score[i];
if(score[i]<60)num++;
}
rate=float(50-num)/50;
printf("\n最高分:%d 最低分:%d\n",max,min);
for(i=0;i<50;i++)
{
printf("%d ",score[i]);
if(i%10==9)printf("\n");
}
printf("\n及格率:%.2f\n",rate);
}

运行结果:
第1个学生成绩:75
第2个学生成绩:85
第3个学生成绩:97
第4个学生成绩:68
第5个学生成绩:92
第6个学生成绩:50
第7个学生成绩:48
第8个学生成绩:96
第9个学生成绩:38
第10个学生成绩:69
第11个学生成绩:89
第12个学生成绩:65
第13个学生成绩:35
第14个学生成绩:98
第15个学生成绩:38
第16个学生成绩:58
第17个学生成绩:68
第18个学生成绩:75
第19个学生成绩:48
第20个学生成绩:67
第21个学生成绩:82
第22个学生成绩:75
第23个学生成绩:48
第24个学生成绩:67
第25个学生成绩:92
第26个学生成绩:45
第27个学生成绩:63
第28个学生成绩:54
第29个学生成绩:65
第30个学生成绩:24
第31个学生成绩:57
第32个学生成绩:54
第33个学生成绩:59
第34个学生成绩:61
第35个学生成绩:86
第36个学生成绩:37
第37个学生成绩:60
第38个学生成绩:94
第39个学生成绩:54
第40个学生成绩:21
第41个学生成绩:74
第42个学生成绩:51
第43个学生成绩:72
第44个学生成绩:48
第45个学生成绩:92
第46个学生成绩:81
第47个学生成绩:75
第48个学生成绩:64
第49个学生成绩:62
第50个学生成绩:37
最高分:98 最低分:21
98 75 85 97 68 92 50 48 96 38
69 89 65 35 38 58 68 75 48 67
82 75 48 67 92 45 63 54 65 24
57 54 59 61 86 37 60 94 54 21
74 51 72 48 92 81 75 64 62 37

及格率:0.60
Press any key to continue

‘肆’ C语言:班级有30个学生参加期末考试,求他们的平均分,并统计低于平均分的人数(平均分保留1位小数)

#include<stdio.h>
#define N 30
float average(float *scores, int size)
{
float aver = 0.0f;
for(int i = 0; i < size; i++)
aver += scores[i];
return aver / size;
}
int main()
{
float scores[N];
int sum = 0;
for(int i = 0; i < N; i++)
scanf("%f", &scores[i]);
float aver = average(scores, N);
printf("Average: %.1f\n", aver);
for(int i = 0; i < N; i++)
if(scores[i] < aver)
{
sum += 1;
printf("%3.1f ", scores[i]);
}
printf("\n总共有%d个人低于平均分。\n", sum);
return 0;
}

‘伍’ C语言考试题.帮我做一下吧。

一单选题(10*1分):
1下列不属于C语言关键字的是:
D look

2 下列关于C语言的叙述错误的是:
A 英文字母大小写不加以区分 c语言是区分大小写的

3 下列转义符中错误的是:
C ‘\x111’ //转义符16进制符号后数字,只能有两位应该改为‘\x11’

4 执行语句printf(“%d”,-1);后的输出结果是:
A -1

5 设float a=2,b=4,c=3;,以下语言表达式与代数1/2(a+b)c计算结果不一致的是:
B (1/2)*(a+b)*c //首先运算(1/2),两个都是整数,运算后结果会等于0

6设int a=10,b=20,c=30;,条件表达式a<b?a=5:的值是:
A 5 //“(判断句)?(语句1):(语句2)” 条件语句,若判断句部分为真,则执行第一个语句

7设int a=9,b=-6,c;,执行语句c=a/b+0.8;后的C的值是:( )
A 1 //因为定义c为整数,所以b,d肯定是错的

8执行语句for(i=1;i++<=4;);后i的值是:( )
C5

9 设有:int i=010,j=10则printf(“%d,%d\n”++i,j--);的输出是:( )
B 9,10 //在c语言中,数字前加0则表示此数字为8进制数字

10设所有均已正确定义,下列程序段运行后x的值是:( )
a=b=c=0; x=35;
if(!a)x--; else if(b);if(c)x=3; else x=4;
B 4 //两个 if语句 前面使得x-34。再运行到第二个if时,使x变为4

下面的我也不干了, 希望我的答案加讲解对你有帮助,如果你觉得答案对你有用,就把分数给我吧!即使是0分

‘陆’ C语言考试题求大神帮忙做

//第一题
#include "stdafx.h"
#include <iostream>
using namespace std;

int main ( )
{
int iArray[30] = {0};
int iAraayRes[6] = {0};

iArray[0] = 2;
for(int i=1;i < 30;i++)
{
iArray[i] = 2+iArray[i-1];
}

int iTemp = 0;
int iCount = 0;
int iFlag = 0;

for(int j=0;j < 30;j++)
{
iTemp+=iArray[j];
iCount++;

if(0 == iCount%5)
{
iCount = 0;
iAraayRes[iFlag++] = iTemp/5;
}
}

return 0;
}

//第二题
#include "stdafx.h"
#include <iostream>
using namespace std;

int main ( )
{
int iArrayA[2][3] = {2,4,6,8,10,12};

for(int i=0;i < 3;i++)
{
for(int j=0;j < 2;j++)
{
cout<<iArrayA[j][i]<<endl;
}
}

return 0;
}
//第三题
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>

int main ( )
{
int iArrayA[5][1] = {0};

int iNum = 0;
int iFlag = 1;

while (21 != iFlag)
{
printf("请选择您的投票号\n");
printf(">");
scanf("%d",&iNum);
if(iNum <= 0 || iNum > 5)
{
printf("范围为1~5,请重新输入|n");
continue;
}
iArrayA[iNum-1][0]+=1;
iFlag++;
}

printf("产品所得票数如下\n");
for(int i = 0; i < 5;i++)
{
printf("%d号产品得票:%d\n",i+1,iArrayA[i][0]);
}

getch();
return 0;
}

‘柒’ 求高手帮我做一下C语言!!!急。。。。。!! 1.某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最

#include <stdio.h>
#define STU 30#define COURSE 3
void Input(long num[],int score[][COURSE],int n);
void GetSumAver(int score[][COURSE],int n,int sum[],float aver[]);
void Sort(long num[],int score[][COURSE],int n,int sum[],float aver[]);
void Print(long num[],int score[][COURSE],int n,int sum[],float aver[]);
int Search(long num[], int n, long x);

main()
{
int n, score[STU][COURSE], sum[STU], pos;
long num[STU], x;
float aver[STU];

printf("Please enter the total number of the students(n<=30):"); scanf("%d", &n); /*输入参加考试的学生人数*/
printf("Enter No. and score as: MT EN PH\n"); Input(num, score, n); /*输入学生成绩*/
GetSumAver(score, n, sum, aver); /*计算总分和平均分*/
printf("Before sort:\n");
Print(num, score, n, sum, aver);

Sort(num, score, n, sum, aver); /*排名次*/
printf("After sort:\n");
Print(num, score, n, sum, aver);

printf("Please enter searching number:");
scanf("%ld", &x); /*以长整型格式输入待查找学生的学号*/
pos = Search(num, n, x); /*名次查询*/
if (pos != -1)
{
printf("position:\t NO \t MT \t EN \t PH \t SUM \t AVER\n");
printf("%8d\t%4ld\t%4d\t%4d\t%4d\t%5d\t%5.0f\n",
pos+1,num[pos], score[pos][0],score[pos][1],
score[pos][2], sum[pos],aver[pos]);
}
else
{
printf("Not found!\n");
}
}

/* 函数功能:输入某班学生期末考试三门课程成绩
函数参数:长整型数组num,存放学生学号
整型数组score,存放学生成绩
整型变量n,存放学生人数
函数返回值:无
*/
void Input(long num[], int score[][COURSE], int n)
{
int i, j;

for (i=0; i<n; i++)
{
scanf("%ld", &num[i]);
for (j=0; j<COURSE; j++)
{
scanf("%d", &score[i][j]);
}
}
}

/* 函数功能:计算每个学生的总分和平均分
函数参数: 整型数组score,存放学生成绩
整型变量n,存放学生人数
整型数组sum,计算得到的每个学生的总分
实型数组aver,计算得到的每个学生的平均分
函数返回值:无
*/
void GetSumAver(int score[][COURSE], int n, int sum[], float aver[])
{
int i, j;

for (i=0; i<n; i++)
{
sum[i] = 0;
for (j=0; j<COURSE; j++)
{
sum[i] = sum[i] + score[i][j];
}
aver[i] = (float)sum[i] / COURSE;
}
}

/* 函数功能:按总分成绩由高到低排出成绩的名次
函数参数:长整型数组num,存放学生学号
整型数组score,存放学生成绩
整型变量n,存放学生人数
整型数组sum,存放每个学生的总分
实型数组aver,存放每个学生的平均分
函数返回值:无
*/
void Sort(long num[],int score[][COURSE], int n, int sum[], float aver[])
{
int i, j, k, m;
int temp1;
long temp2;
float temp3;

for (i=0; i<n-1; i++)
{
k = i;
for (j=i+1; j<n; j++)
{
if (sum[j] > sum[k]) k = j;
}
if (k != i)
{
temp1 = sum[k]; sum[k] = sum[i]; sum[i] = temp1;
temp2 = num[k]; num[k] = num[i]; num[i] = temp2;
temp3 = aver[k]; aver[k] = aver[i]; aver[i] = temp3;
for (m=0; m<COURSE; m++)
{
temp1 = score[k][m];
score[k][m] = score[i][m];
score[i][m] = temp1;
}
}
}
}

/* 函数功能: 打印名次表,表格内包括学生编号、各科分数、总分和平均分
函数参数: 长整型数组num,存放学生学号
整型数组score,存放学生成绩
整型变量n,存放学生人数
整型数组sum,存放每个学生的总分
实型数组aver,存放每个学生的平均分
函数返回值:无
*/
void Print(long num[], int score[][COURSE], int n,
int sum[], float aver[])
{
int i, j;

printf(" NO \t| MT \t EN \t PH \t SUM \t AVER\n");
printf("----------------------------------------------------\n");
for (i=0; i<n; i++)
{
printf("%ld\t| ", num[i]);
for (j=0; j<COURSE; j++)
{
printf("%4d\t", score[i][j]);
}
printf("%5d\t%5.0f\n", sum[i], aver[i]);
}
}

/* 函数功能:在学号数组中顺序查找学生的学号
函数参数:长整型数组num,存放学生学号
整型变量n,存放学生人数
长整型变量x,存放待查找学生的学号
函数返回值:找到时,返回学生学号在学号数组中的下标位置,否则返回值-1
*/
int Search(long num[], int n, long x)
{
int i;

for (i=0; i<n; i++)
{
if (num[i] == x) return(i);
}
return (-1);
}

‘捌’ C语言试题,求答案

一、选择题(共10个)

  1. ③ 2.③ 3.① 4.④ 5.③ 6.① 7.④ 8.① 9.① 10.①

二、填空题(共7个)

  1. -32768 ~ 32767(16位机)

  2. 0

  3. 下划线 下划线

  4. double a=0.618

  5. 11、6

三、判断题(共5个)

  1. X

四、阅读以下C语言程序,以下程序的程序输出的结果是2,1。

五、有两个浮点数a=5.2,b=3.1,计算并输出它们的和、差、积、商。

//#include "stdafx.h"//vc++6.0加上这一行.

#include "stdio.h"//

void main(void){

double a=5.2,b=3.1;

printf("a + b = %f a - b = %f a x b = %f a÷ b = %f ",a+b,a-b,a*b,a/b);

}

‘玖’ c语言二级考试题及答案

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)0.369 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)3.0e0.2
C)E9 D)9.12E

(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(2*a,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)t2.num1=t1.num1;C)t2.mark=t1.mark; D)t2.num2=t1.num2;

(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",++(p.a));
}
程序运行后的输出结果是 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)+0.5+(int)1.99*2);
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("test.dat","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

二、填空
1.1DCBA2345 2.n-1 3.25 4.结构化 5.物理设计 6.2008
7.15 8.非0 9. 1 4 13 40 10.i 11.2
12.a[row][col] 13.3 14.*s 15.FILE

‘拾’ c语言二级考试题目

第一题:\141的值是"a"(a的8进制ASCII码值是141),\\的值是"\",所以s打印出来就是\141aabc,当然后面有一个\t,所以长度是9。
第二题:32位机器中,int值占4个字节,这里char占4个字节(由于32位机器按4字节对齐,char占一个字节后,剩下的3个字节不足以放下4个字节的float,所以这里char后面的3个字节会被浪费,看起来char占了4个字节),float占4个字节。
union里面的所有数据一起占用一块内存,此内存为union内占用内存最多的数据的大小,也就是int[2]的大小,所以union占8个字节。
加起来就是20个字节。
不是你把题抄错了,就是没有正确答案,或者没说明机器是多少位的机器。现在一般不说明机器的位数,默认情况下都是32位的。

第三题:ps=s后,ps会指向s的第一行第一列的位置,ps+1和*(ps+1)都等于s第二行第一列的地址,对ps的操作都是对内存地址的操作,答案中只有ps[ ][ ]能取到s中的元素。
第四题:因为pb比b1大3,所以while会循环3次,第一次因为*bp 从第三个字符开始,所以*bp = “ddwer”,所以b2=“ddwer”,第二次b2=“oddwer”,第三次b2=“goddwer”,所以strlen(b2)最终等于7。
第五题:答案是3,ASCII值中“\08”表示空格,所以s实际上等于“012xy”,而n记录字符值在0到9之间的字符的个数,所以n=3。