当前课程知识点:C语言程序设计(上) > 期末复习答案 > 《C语言程序设计(上)》期末复习参考答案 > html
一、选择题
1、表示算术关系12<=x<=y的C语言表达式为:
选择一项:
a. ( 12 <= x ) || ( x <= y )
b. ( 12 <= x ) && ( x <= y )
c. ( 12 <= x) | ( x <= y )
d. ( 12 <= x ) & ( x <= y )
2、对于以下程序片段,描述正确的是______。
int x= -1;
do
{
x=x*x;
}while(!x);
选择一项:
a. 循环执行一次
b. 循环执行两次
c. 是死循环
d. 有语法错误
3、二维数组a有m行n列,则在a[i][j]之前的元素个数为______。
选择一项:
a. i * n + j + 1
b. j * n + i
c. i * n + j
d. i * n + j – 1
4、错误的转义字符是:
选择一项:
a. ’\0’
b. ’\’’
c. ’\81’
d. ’\\’
5、已知 int i;float f;正确的语句是:
选择一项:
a. (int f)%i
b. int(f)%i
c. (int)f%i
d. int(f%i)
6、已有定义int i;float f1,f2; 执行scanf(“%2f%3d%f”,&f1,&i,&f2)时,输入“1234.5678↙”,则i,f1和f2的值应该是()
选择一项:
a. f1=1234.5,i=678;f2不确定
b. 输入格式有误
c. f1=12.000000,i=34,f2=0.567800
d. f1=12.000000,i=34,f2不确定
7、以下能对二维数组 a 进行正确初始化的语句是______。
选择一项:
a. int a[2][3] = { { 0 },{ 1 } };
b. int a[2][3] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
c. int a[2][3] = { 0, 1, 2, 3, 4, 5, 6 };
d. int a[][3] = { { 1, 2 } };
8、把字符串“China bit”输入到字符数组a中的正确操作是____
选择一项:
a. scanf(“%s”,a)
b. getchar(a)
c. scanf(“%s”&a)
d. gets(a)
9、循环语句for(i=0,j=0;j=3||i<4;i++)的循环次数是
选择一项:
a. 2次
b. 4次
c. 3次
d. 无限循环
10、已知 int a=4 ,b=5,c; 则执行表达式“c=a>b? a-b: b-(a,5);” 后,c的值是
选择一项:
a. 1
b. 0
c. 5
d. 4
11、已知语句“if(w) … ;else … ;”,与表达式w的等价表示是:
选择一项:
A. w = = 0
B. w != 1
C. w != 0
D. w = = 1
12、下面叙述中,正确的叙述是:
选择一项:
A. 在说明数组的同时可以对数组进行初始化
B. 说明多维数组可以省略每一维的大小
C. 说明数组的时候可以根据需要定义数组的起始下标
D. 说明一维数组的时候,必须给出明确的数组大小
13、下列标识符中,可以作为C语言的变量名的是:
选择一项:
A. default
B. auto
C. sizeof
D. until
14、下列描述中不正确的_____。
选择一项:
A. 不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值。
B. 对整型数组可以进行整体输入、输出。
C. 对字符型数组可以进行整体输入、输出。
D. 字符型数组中可能存放字符串。
15、从循环体内某一层跳出,继续执行循环外的语句是_____。
选择一项:
A. continue语句
B. 空语句。
C. return语句
D. break语句
16、设 x,y,z 为 int 型变量,且 x=3,y=4,z=5 ,则下面表达式中值为 0 的是_____
选择一项:
A. 'x'&&'y'
B. !((x<y)&&!z||1)
C. x||y+z&&y-z
D. x<=y
选择一项:
A. a / b / c * e * 3
B. 3 * a * e / b /c
C. a * e / b / c * 3
D. 3 * a * e / b * c
18、以下可以作为C语言合法常量的是:
选择一项:
a. -0xde
b. -028
c. -e1.0
d. ''(其中'是单引号)
19、以下描述中,正确的是:
选择一项:
A. 只能在循环体内和 switch 语句体内使用 break 语句
B. 在循环体内使用 break 语句或 continue 语句的作用相同
C. 从多层循环嵌套中退出时, 只能使用 goto 语句
D. continue 语句的作用是结束整个循环的执行
20、对于下列两条宏命令,表达式B/B的值是
#define A 3+2
#define B A*A
选择一项:
a. 5
b. 1
c. 25
d. 17
编程题一:
一、回忆高三的生活,大家可能还会有印象,老师们总是在黑板上提醒我们,“离高考还有?天”,现在,我们来用C语言实现这个功能。(我们假定每一年高考的时间都是在那一年的6月6日)
输入:当前日期
输入:高考年份n
输出:距离当年高考时间的天数
例如:
输入:2018.6.6
输入:2018
输出:0 day.
输入:2018.6.2
输入:2018
输出:4 days.
如果输入的日期已经过了当年的高考日期,则输出error.
输入:2018.1.1
输入:2017
输出:error!
测试用例1:
输入:2018.6.6
输入:2018
输出:0 day.
测试用例2:
输入:2018.6.2
输入:2018
输出:4 days.
测试用例3:
输入:2018.1.1
输入:2017
输出:error!
测试用例4:
输入:2018.1.1
输入:2018
输出:156 days.
测试用例5:
输入:2018.1.1
输入:2019
输出:521 days.
答案1:
#include "stdio.h"
#include <string.h>
#include <stdlib.h>
int main()
{
char ch[20];
int year, days = 0;
int date1[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int date2[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
scanf("%s", ch);
scanf("%d", &year);
int y, m, d;
char *p;
p = strtok(ch, ".");
y = atoi(p);
p = strtok(NULL, ".");
m = atoi(p);
p = strtok(NULL, ".");
d = atoi(p);
if (y > year)
{
printf("error!");
}
else if (y == year)
{
if (m>6)
printf("error!");
else if (m == 6)
{
if (d > 6)
printf("error!");
else
{
days = 6 - d;
if (days==0||days==1)
printf("%d day.\n", days);
else
printf("%d days.\n", days);
}
}
else
{
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
{
days = date1[m-1] - d;
for (int i = m ; i < 5; i++)
{
days += date1[i];
}
}
else
{
days = date2[m-1] - d;
for (int i = m ; i < 5; i++)
{
days += date2[i];
}
}
days += 6;
printf("%d days.\n", days);
}
}
else
{
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
{
days = date1[m-1] - d;
for (int i = m; i < 12; i++)
{
days += date1[i];
}
}
else
{
days = date2[m-1] - d;
for (int i = m ; i < 12; i++)
{
days += date2[i];
}
}
for (int i = y + 1; i < year; y++)
{
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
days += 366;
else
days += 365;
}
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
days += 158;
else
days += 157;
printf("%d days.\n", days);
}
return 0;
}
答案2:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int isSpecialYear(int tempyear)
{
if(((tempyear%4==0)&&(tempyear%100!=0))||(tempyear%400==0))
{
return 1;
}
else return 0;
}
int GetLastDay(int tempm,int tempy)
{
int num;
switch(tempm)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
num=31;
break;
case 2:
num=28+isSpecialYear(tempy);
break;
default:
num=30;
}
return num;
}
int Compare(int tempday,int tempmonth,int tempyear,int year)
{
if(tempyear<year)
return 1;
else if(tempyear==year&&tempmonth<6)
return 1;
else if(tempyear==year&&tempmonth==6&&tempday<=6)
return 1;
return 0;
}
long DataDiff(int tempday,int tempmonth,int tempyear,int year)
{
long delta = 0;
if(!Compare(tempday,tempmonth,tempyear,year))
{
return -1;
}
else
{
while(Compare(tempday,tempmonth,tempyear,year))
{
tempday++;
if(tempday>GetLastDay(tempmonth,tempyear))
{
tempday=1;
tempmonth++;
if(tempmonth>12)
{
tempmonth=1;
tempyear++;
}
}
delta++;
}
}
return delta;
}
int main()
{
char c_data[20];
int year,datayear,datamonth,dataday;
gets(c_data);
scanf("%d",&year);
char* tokenPtr=strtok(c_data,".");
char vecdata[3];
int i=0,sum;
while(tokenPtr)
{
if(i==0)
datayear=atoi(tokenPtr);
else if(i==1)
datamonth=atoi(tokenPtr);
else if(i==2)
dataday=atoi(tokenPtr);
tokenPtr=strtok(NULL,".");
i++;
}
sum=DataDiff(dataday,datamonth,datayear,year);
if(sum>2)
{
printf("%d days.\n",sum-1);
}
else if(sum>=1)
{
printf("%d day.\n",sum-1);
}
else
{
printf("error!\n");
}
}
编程题二:
有若干个长度不等的木条,我们要把其中的木条,尽可能多的组装成三角形的架子,当然,有些木条组合起来,不一定能组成三角形。
请你针对给定的输入:
输入1:n
接下来输入n个木条的长度:a1 a2 a3………an
输出:可最多组成三角形的个数。
测试用例1:
输入:3
输入:3 4 5
输出:1
测试用例2:
输入:4
输入:3 3 4 5
输出:1
测试用例3:
输入:4
输入:1 2 6 7
输出:1
测试用例4:
输入:6
输入:1 1 1 2 2 3
输出:2
测试用例5:
输入:9
输入:1 1 3 3 4 4 6 7 7
输出:3
答案1:
#include <stdio.h>
#include <stdlib.h>
int GreaterSort(const void* a, const void* b)
{
return (int*)a>(int*)b;
}
int main()
{
int n;
float temp;
float len[100000+5];
int count = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &temp);
len[i]=temp;
}
qsort(len, n,sizeof(float), GreaterSort);
for (int i = 0; i < n-2;i++)
{
if (len[i + 1] + len[i + 2] > len[i])
{
count++;
i = i + 2;
}
}
printf("%d\n",count);
return 0;
}
答案2:
#include<stdlib.h>
#include<string.h>
int main()
{
int c_n;
int i_n[200];
int is_n[200]={0};
int n,i=0;
int count=0;
int j,k,m;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&i_n[i]);
is_n[i]=1;
}
if(n<=2)
{
printf("0\n");
}
else
{
for(j=0;j<n-2;j++)
{
for(k=j+1;k<n-1;k++)
{
for(m=k+1;m<n;m++)
{
if((i_n[j]+i_n[k]>i_n[m])&&(i_n[j]+i_n[m]>i_n[k])&&(i_n[m]+i_n[k]>i_n[j])&&(is_n[j]==1)&&(is_n[k]==1)&&(is_n[m]==1))
{
count++;
is_n[j]=0;
is_n[k]=0;
is_n[m]=0;
}
}
}
}
printf("%d\n",count);
}
}
编程题三:
判断一个数是否是另一个整数的平方数,如果是就给出该数的正整数平方根,如果不是,则输出No
测试用例1:
输入:1
输出:1
测试用例2:
输入:4
输出:2
测试用例3:
输入:5
输出:No
测试用例4:
输入:9
输出:3
测试用例5:
输入:7744
输出:88
答案1:
#include<stdlib.h>
#include<math.h>
int main()
{
int n;
double m;
scanf("%d",&n);
m=sqrt(n);
if(m==floor(m+0.5))
printf("%d",(int)m);
else
printf("No");
}
答案2:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int n,m,flag=0;
scanf("%d",&n);
if(n<0)
{
printf("No\n");
}
else
{
int low=1;
int high = n;
int mid = (low + high) >> 1;
while (low <= high) {
int temp = n / mid;
if (mid == temp && n == mid * temp) {
printf("%d\n",mid);
flag=1;
}
if (temp < mid) {
high = mid - 1;
}
if (temp >= mid) {
low = mid + 1;
}
mid = (low + high) >> 1;
}
if(flag==0)
printf("No\n");
}
}
-1.1 计算机的问题求解方法
--讨论题:数学模型
-1.1 计算机的问题求解方法--作业
-1.2 C语言与C程序
--讨论题:运算符
-1.3 C语言处理系统与程序调试运行
--例程
-1.4 程序中的人机交互
--例程
--作业讨论区
-2.1 算术运算的C程序实现
--算术混合运算.c
-2.1 算术运算的C程序实现--作业
-2.2 关系运算的C程序实现
--bukao.c
--字符比较.c
--讨论题:比较大小
-2.2 关系运算的C程序实现--作业
-第二周作业--作业
-2.3 逻辑运算的C程序实现
--计算结合性
--闰年.c
--自动购票问题.c
-2.3 逻辑运算的C程序实现--作业
-2.4 位运算的C程序实现
--讨论题:位运算
-2.5 几种很个别的运算
--讨论题
--讨论题
-2.5 几种很个别的运算--作业
-2.6 混合运算及数据类型转换
--讨论题:数据类型
-2.7 顺序结构程序实例
--Video
--三角形面积.c
--讨论题:工业产值
-2.7 顺序结构程序实例--作业
-3.1 程序中的路径选择实现
--打印学生成绩.c
--一元二次方程.c
-3.1 程序中的路径选择实现--作业
-3.2 路径中的再选择——嵌套判断
--例程
--讨论题:程序改错
-3.2 路径中的再选择——嵌套判断--作业
-3.3 复杂判断问题的C程序设计
--3.3 多级选择
--银行存款.c
--讨论题:多级选择
-3.4 多分支问题的C程序设计
--加减乘除运算.c
-3.4 多分支问题的C程序设计--作业
-3.5 GOTO的适当使用
-3.6 选择结构的程序实例
--3.6 程序展示
--计算第几天.c
--讨论题:输出奇数
--讨论题:计算税金
-3.6 选择结构的程序实例--作业
-第四周作业--作业
-4.1 需要重复执行的程序
--求和.c
--打印学生成绩.c
--统计录入速度.c
--求平均数.c
-4.1 需要重复执行的程序--作业
-4.2 至少要执行一次的循环
--n的阶乘.c
--字符分类统计.c
-4.2 至少要执行一次的循环--作业
-4.3 已知循环次数用for语句
--求和问题.c
--数列求和.c
--讨论题:循环语句
-4.3 已知循环次数用for语句--作业
-4.4 循环控制——简单循环应用
--水仙花数.c
--讨论题:死循环
--讨论题:猜数字
-循环结构的程序设计(一)--4.4 循环控制——简单循环应用
-4.5 循环的嵌套
--讨论题:程序运行
-4.5 循环的嵌套--作业
-4.6 break与continue
--最大素数.c
-4.6 break与continue--作业
-4.7 循环的综合应用
--数的排列组合.c
--鸡兔同笼.c
--打印空心字符.c
--讨论题:打印图形
--讨论题:计算闰年
-第六周作业
-第六周作业--作业
-5.1 同类有序数据处理问题
-5.2 一维数组的定义和引用
--数组定义.c
--数组初始化.c
--反向输出.c
--讨论题:对称数
-5.2 一维数组的定义和引用--作业
-5.3 一维字符串数组
--讨论题:编程
-5.4 字符串处理函数
--字符串反向.c
--字符串函数
-5.5 二维数组的定义与使用
-5.6 二维数组的输入输出
-5.6 二维数组的输入输出--作业
-5.7 二维数组的应用
--转置矩阵.c
--讨论题:修改程序
-5.8 二维字符数组
--5.8 单词排序
--单词排序.c
-5.8 二维字符数组--作业
-5.9 数组综合应用
--统计成绩.c
--统计字符次数.c
--讨论题:洗牌
-本期课程结束语
--end
-第八周编程作业
-《C语言程序设计(上)》期末复习参考
--html
-《C语言程序设计(上)》期末复习参考答案
--html