大学MOOC C语言程序设计精髓(泉州信息工程学院)1451070162 最新慕课完整章节测试答案
Optional (选学) 指针的孪生兄弟
文章目录
- Optional (选学) 指针的孪生兄弟
- Optional (选学) 原来内存也可以这么玩,我是指针我怕谁
- Week 1 Touch C from Variables and Constants
- Week 10 Pointer (指针), the Invincible in C Language (C语言中无敌的存在)
- Week 11 Strings (字符串)
- Week 13 Struct (结构体)
- Week 14 Learn to Protect Your Data
- Week 2 Computation of Numbers
- Week 3 Input and Output
- Week 4 Selection in Anywhere
- Week 5-6 Iteration of Loops
- Week 7 Functions (Arts of Collaboration & Division)
- Week 8 Exploring Recursion (探索递归)
- Week 9 Are You Ready for Arrays (数组)
Optional (选学) 指针的孪生兄弟
元素在二维数组中相对于首地址的偏移量
1、单选题:
二维数组a有m行n列,则在a[i][j]之前的元素个数为()
选项:
A: j*n+i
B: i*n+j
C: i*n+j-1
D: i*n+j+1
答案: 【 i*n+j】
字符指针数组
1、判断题:
char *country[] = {"America", "England", "Australia", "China", "Finland"};这条语句定义了一个字符指针数组country,并用初始化列表中的每个字符串的首地址为字符指针数组country的元素进行初始化,并不是将初始化列表中的字符串保存到字符指针数组中。
选项:
A: 正确
B: 错误
答案: 【 正确】
指针和一维数组
1、判断题:
当指针变量指向一维数组的时候,sizeof(数组名)和sizeof(指针变量名)的计算结果是相同的。
选项:
A: 正确
B: 错误
答案: 【 错误】
指针的算术运算
1、单选题:
下列说法错误的是()。
选项:
A: 指针指向数组元素时,指针算术运算才有意义
B: 两个指针指向同一个数组时,指针相减才有意义
C: 指针的算术运算允许通过对指针变量重复自增来访问数组的元素
D: p++就是将指针变量p加上一个字节
答案: 【 p++就是将指针变量p加上一个字节】
Optional (选学) 原来内存也可以这么玩,我是指针我怕谁
Optional (选学) 动态内存
指针和内存
1、判断题:
指针变量所占的内存被释放了,也就意味着它所指向的动态内存也会被自动释放。
选项:
A: 正确
B: 错误
答案: 【 错误】
2、判断题:
用free释放指针变量所指向的内存以后,就意味着该指针变量变成了空指针。
选项:
A: 正确
B: 错误
答案: 【 错误】
Week 1 Touch C from Variables and Constants
codeblocks介绍——从Hello World开始
1、单选题:
#include <stdio.h>是
选项:
A: 编译预处理指令
B: 语句
C: 函数
D: 程序入口
答案: 【 编译预处理指令】
debug
1、单选题:
codeblocks中运行到下一步(next line)的快捷键是
选项:
A: F7
B: F5
C: F8
D: F11
答案: 【 F7】
Practice One
变量在内存中所占的字节数
1、单选题:
C语言用sizeof计算变量在内存中的字节数,其中sizeof是()
选项:
A: 函数
B: 运算符
C: 标识符
D: 语句
答案: 【 运算符】
宏常量与const常量
1、单选题:
宏定义是()
选项:
A: 一条语句
B: 一种编译预处理指令
C: 一个标识符
D: 一个变量
答案: 【 一种编译预处理指令】
2、判断题:
const常量有数据类型。
选项:
A: 正确
B: 错误
答案: 【 正确】
Week 10 Pointer (指针), the Invincible in C Language (C语言中无敌的存在)
Week 10 Single Choice
1、单选题:
下面程序的功能是输入某年某月某日,计算并输出它是这一年的第几天。程序的运行结果如下:Please enter year, month, day:2014,12,29↙yearDay = 363按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int DayofYear(int year, int month, int day);
int dayTab[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int main()
{
int year, month, day, yearDay;
printf("Please enter year, month, day:");
scanf("%d,%d,%d", &year, &month, &day);
yearDay = DayofYear(year, month, day);
printf("yearDay = %dn", yearDay);
return 0;
}
/* 函数功能:对给定的某年某月某日,计算并返回它是这一年的第几天 */
int DayofYear(int year, int month, int day)
{
int i, leap;
leap = ________________________; /* 若year为闰年,即leap值为1,则用第1行元素dayTab[1][i]计算;
否则leap值为0,用第0行dayTab[0][i]计算 */
for (i=1; _______; i++)
{
day = ________________;
}
return day; /* 返回计算出的day的值 */
}
选项:
A: 第18行: ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)第20: i<month第22行: day + dayTab[leap][i]
B: 第18行: ((year % 4 == 0) || (year % 100 != 0)) || (year % 400 == 0)第20: i<month第22行: day + dayTab[i][leap]
C: 第18行: ((year % 4 == 0) && (year % 100 != 0)) && (year % 400 == 0)第20: i<12第22行: day + dayTab[leap][i]
D: 第18行: ((year % 4 != 0) && (year % 100 != 0)) || (year % 400 != 0)第20: i<=month第22行: day + dayTab[i][leap]
答案: 【 第18行: ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)第20: i<month第22行: day + dayTab[leap][i]】
2、单选题:
下面程序的功能是从键盘输入10个整数,用函数编程实现计算其最大值和最小值,并互换它们所在数组中的位置。程序运行结果如下:Input n(n<=10):10↙Input 10 Numbers:1 4 3 0 –2 6 7 2 9 -1 ↙Exchange results: 1 4 3 0 9 6 7 2 -2 -1按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
void ReadData(int a[], int n);
void PrintData(int a[], int n);
void MaxMinExchang(int a[], int n);
void Swap(int *x, int *y);
int main()
{
int a[10], n;
printf("Input n(n<=10):");
scanf("%d", &n);
printf("Input %d numbers:", n);
ReadData(a, n);
MaxMinExchang(a, n);
printf("Exchange results:");
PrintData(a, n);
return 0;
}
/* 函数功能:输入数组a的n个元素值 */
void ReadData(int a[], int n)
{
int i;
for (i=0; i<n; i++)
{
scanf("%d", &a[i]);
}
}
/* 函数功能:输出数组a的n个元素值 */
void PrintData(int a[], int n)
{
int i;
for (i=0; i<n; i++)
{
printf("%5d", a[i]);
}
printf("n");
}
/* 函数功能:将数组a中的最大数与最小数位置互换 */
void MaxMinExchang(________, int n)
{
int maxValue = a[0], minValue = a[0], maxPos = 0, minPos = 0;
int i;
for (i=1; i<n; i++)
{
if (a[i] > maxValue)
{
maxValue = _______;
maxPos = ____;
}
if (a[i] < minValue)
{
minValue = a[i];
minPos = i;
}
}
Swap(________________);
}
/* 函数功能:两整数值互换 */
void Swap(int *x, int *y)
{
int ________;
temp = *x;
_________;
*y = temp;
}
选项:
A: 第41行: int a[]第49行: a[i]第50行: i第58行: &a[maxPos], &a[minPos]第64行: temp第66行: *x = *y
B: 第41行: int a第49行: a[i]第50行: i第58行: a[maxPos], a[minPos]第64行: temp第66行: *x = *y
C: 第41行: int a[]第49行: a[0]第50行: 0第58行: &a[maxPos], &a[minPos]第64行: *temp第66行: x = y
D: 第41行: int a[]第49行: a[n-1]第50行: n-1第58行: *a[maxPos], *a[minPos]第64行: &temp第66行: x = y
答案: 【 第41行: int a[]第49行: a[i]第50行: i第58行: &a[maxPos], &a[minPos]第64行: temp第66行: *x = *y】
3、单选题:
下面程序中子函数MonthDay()的功能是将某年的第几天转换为某月某日。程序的运行结果如下:Please enter year, yearDay:2014,100↙month = 4, day = 10按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
void MonthDay(int year, int yearDay, int *pMonth, int *pDay);
int dayTab[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int main()
{
int year, month, day, yearDay;
printf("Please enter year, yearDay:");
scanf("%d,%d", &year, &yearDay);
_________________;
printf("month = %d, day = %dn", month, day);
return 0;
}
/* 函数功能:对给定的某一年的第几天,计算它是这一年的第几月第几日 */
void MonthDay(int year, int yearDay, int *pMonth, int *pDay)
{
int i, leap;
leap = _________________________;
for (i=1; yearDay>dayTab[leap][i]; i++)
{
yearDay = ______________________;
}
______________; /* 将计算出的月份值赋值给pMonth所指向的变量 */
*pDay = yearDay; /* 将计算出的日号赋值给pDay所指向的变量 */
}
选项:
A: 第10行: MonthDay(year, yearDay, &month, &day)第19行: ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)第23行: yearDay - dayTab[leap][i]第25行: *pMonth = i
B: 第10行: MonthDay(year, yearDay, month, day)第19行: ((year % 4 == 0) || (year % 100 != 0)) || (year % 400 == 0)第23行: yearDay - dayTab[leap][i]第25行: pMonth = i
C: 第10行: MonthDay(&year, &yearDay, &month, &day)第19行: ((year % 4 == 0) || (year % 100 != 0)) && (year % 400 != 0)第23行: yearDay + dayTab[i][leap]第25行: *pMonth = i
D: 第10行: MonthDay(&year, &yearDay, month, day)第19行: ((year % 4 == 0) && (year % 100 == 0)) || (year % 400 == 0)第23行: yearDay - dayTab[i][leap]第25行: pMonth = i
答案: 【 第10行: MonthDay(year, yearDay, &month, &day)第19行: ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)第23行: yearDay - dayTab[leap][i]第25行: *pMonth = i】
4、单选题:
子函数Fun的功能是比较形参变量x和y所指的内存单元中的数据大小,将两者中的最小值返回。以下程序执行后输出结果是7,8,7。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int Fun(int *x,int *y)
{
if(___________) /*如果形参变量x所指的内存单元中的数据小于y所指的内存单元中的数据,则返回该最小值*/
return *x;
else
return *y;
}
int main()
{
int a=7,b=8,_______,r;
p=&a;
q=&b;
r=____________; /*调用子函数Fun,返回变量a和b中的最小值,将其存放到变量r中。*/
printf("%d,%d,%dn",*p,*q,r);
return 0;
}
选项:
A: 第4行: *x<*y第12行: *p,*q第15行: Fun(p,q)
B: 第4行: x<y第12行: *p,*q第15行: Fun(*p,*q)
C: 第4行: *x<*y第12行: p,q第15行: Fun(&p,&q)
D: 第4行: x<y第12行: *p,*q第15行: Fun(a,b)
答案: 【 第4行: *x<*y第12行: *p,*q第15行: Fun(p,q)】
5、单选题:
下列函数的功能为________。void Exchange(int *p1, int *p2){ int p; p = *p1; *p1 = *p2; *p2 = p;}
选项:
A: 交换*p1和*p2的值
B: 正确,但无法改变*p1和*p2的值
C: 交换*p1和*p2的地址
D: 可能造成系统故障
答案: 【 交换*p1和*p2的值】
6、单选题:
声明语句int (*p)();的含义是________。
选项:
A: p是一个指向函数的指针,该函数的返回值是一个整型
B: p是一个指向一维数组的指针变量
C: p是指针变量,指向一个整型数据
D: 以上都不对
答案: 【 p是一个指向函数的指针,该函数的返回值是一个整型】
7、单选题:
声明语句int *f();中f的含义是________。
选项:
A: 一个返回值为指针类型的函数名
B: 一个用于指向函数的指针变量
C: 一个用于指向一维数组的行指针
D: 一个用于指向整型数据的指针变量
答案: 【 一个返回值为指针类型的函数名】
8、单选题:
下面程序的功能是用函数编程实现两个数组中对应元素值的交换。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。程序的运行结果示例:Input array size(n<=10):5↙Input array a:1 2 3 4 5↙Input array b:6 7 8 9 10↙Output array a: 6 7 8 9 10Output array b: 1 2 3 4 5#include <stdio.h>
#define N 10
void ReadData(int a[], int n);
void PrintData(int a[], int n);
void Swap(int *x, int *y);
int main()
{
int a[N], b[N], i, n;
printf("Input array size(n<=10):");
scanf("%d", &n);
printf("Input array a:");
ReadData(a, n);
printf("Input array b:");
ReadData(b, n);
for (i=0; i<n; i++)
{
Swap(____________);
}
printf("Output array a:");
PrintData(a, n);
printf("Output array b:");
PrintData(b, n);
return 0;
}
/* 函数功能:输入数组a的n个元素值 */
void ReadData(int a[], int n)
{
int i;
for (i=0; i<n; i++)
{
scanf("%d", &a[i]);
}
}
/* 函数功能:输出数组a的n个元素值 */
void PrintData(int a[], int n)
{
int i;
for (i=0; i<n; i++)
{
printf("%5d", a[i]);
}
printf("n");
}
/* 函数功能:两整数值互换 */
void Swap(int *x, int *y)
{
int temp;
____________;
____________;
____________;
}
选项:
A: 第17行:&a[i], &b[i]第52行:temp = *x第53行:*x = *y第54行:*y = temp
B: 第17行:a[i], b[i]第52行:temp = *x第53行:*x = *y第54行:*y = temp
C: 第17行:&a[i], &b[i]第52行:*temp = *x第53行:*x = *y第54行:*y = *temp
D: 第17行:a[i], b[i]第52行:temp = x第53行:x = y第54行:y = temp
答案: 【 第17行:&a[i], &b[i]第52行:temp = *x第53行:*x = *y第54行:*y = temp】
9、单选题:
给出下面程序的运行结果。#include <stdio.h>
int main(void)
{
static int x[] = {1,2,3};
int s = 1, i, *p = x;
for (i=0; i<3; i++)
{
s*= *(p + i);
}
printf("%dn", s);
return 0;
}
选项:
A: 6
B: 3
C: 4
D: 5
答案: 【 6】
10、单选题:
从键盘任意输入10个整数,计算并输出最大值和最小值及其它们在数组中的下标位置。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。程序运行结果示例1:Input 10 numbers:1 2 3 4 5 6 7 8 9 10↙max=10,pos=9min=1,pos=0程序运行结果示例2:Input 10 numbers:2 4 5 6 8 10 1 3 5 7 9↙max=10,pos=5min=1,pos=6#include <stdio.h>
int FindMax(int a[], int n, int *pMaxPos);
int FindMin(int a[], int n, int *pMinPos);
int main()
{
int a[10], maxValue, maxPos, minValue, minPos, i;
printf("Input 10 numbers:");
for (i=0; i<10; i++)
{
scanf("%d", &a[i]); // 输入10个数
}
maxValue = FindMax(a, 10, _________); // 找最大值及其所在下标位置
minValue = FindMin(a, 10, _________); // 找最小值及其所在下标位置
printf("max=%d,pos=%dn", maxValue, maxPos);
printf("min=%d,pos=%dn", minValue, minPos);
return 0;
}
//函数功能:求有n个元素的整型数组a中的最大值及其所在下标位置,函数返回最大值
int FindMax(int a[], int n, int *pMaxPos)
{
int i, max;
max = a[0]; //假设a[0]为最大值
__________; //假设最大值在数组中的下标位置为0
for (i=1; i<n; i++)
{
if (a[i] > max)
{
max = a[i];
__________; //pMaxPos指向最大值数组元素的下标位置
}
}
return max ;
}
//函数功能:求有n个元素的整型数组a中的最小值及其所在下标位置,函数返回最小值
int FindMin(int a[], int n, int *pMinPos)
{
int i, min;
min = a[0]; //假设a[0]为最小
__________; //假设最小值在数组中的下标位置为0
for (i=1; i<10; i++)
{
if (a[i] < min)
{
min = a[i];
__________; //pMinPos指向最小值数组元素的下标位置
}
}
return min ;
}
选项:
A: 第13行:&maxPos第14行:&minPos第25行:*pMaxPos = 0第32行:*pMaxPos = i第43行:*pMinPos = 0第50行:*pMinPos = i
B: 第13行:maxPos第14行:minPos第25行:pMaxPos = 0第32行:*pMaxPos = i第43行:pMinPos = 0第50行:*pMinPos = i
C: 第13行:maxPos第14行:minPos第25行:pMaxPos = 0第32行:pMaxPos = i第43行:pMinPos = 0第50行:pMinPos = i
D: 第13行:&maxPos第14行:&minPos第25行:pMaxPos = 0第32行:pMaxPos = i第43行:*pMinPos = 0第50行:*pMinPos = i
答案: 【 第13行:&maxPos第14行:&minPos第25行:*pMaxPos = 0第32行:*pMaxPos = i第43行:*pMinPos = 0第50行:*pMinPos = i】
11、单选题:
采用梯形法编程实现在积分区间[a,b]内计算下面两个函数的定积分。
![]()
![]()
![]()
按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。
程序运行结果示例:
y1=1.333350
y2=1.151212
#include <stdio.h>
float Fun1(float x);
float Fun2(float x);
float Integral(float (*f)(float), float a, float b);
int main()
{
float y1, y2;
y1 = Integral(Fun1, 0.0, 1.0);
y2 = Integral(Fun2, 0.0, 3.0);
printf("y1=%fny2=%fn", y1, y2);
return 0;
}
/* 函数功能:计算函数1+x*x的函数值 */
float Fun1(float x)
{
return 1 + x * x;
}
/* 函数功能:计算函数x/(1+x*x)的函数值 */
float Fun2(float x)
{
return x / (1 + x * x);
}
/* 函数功能:用梯形法计算函数的定积分 */
float Integral(float (*f)(float), float a, float b)
{
float s, h;
int n = 100, i;
s = __________;
h = __________;
for (i=1; i<n; i++)
{
s += __________;
}
return __________;
}
选项:
A: 第31行:((*f)(a) + (*f)(b)) / 2第32行:(b - a) / n第36行:(*f)(a + i * h)第38行:s * h
B: 第31行:(*f)(a+b) / 2第32行:(b - a) / n第36行:(*f)(a + i * h)第38行:s
C: 第31行:((*f)(a) + (*f)(b)) / 2第32行:(a - b) / n第36行:*f(a + i * h)第38行:s * h
D: 第31行:(*f)(a+b) / 2第32行:(a - b) / n第36行:*f(a + i * h)第38行:s
答案: 【 第31行:((*f)(a) + (*f)(b)) / 2第32行:(b - a) / n第36行:(*f)(a + i * h)第38行:s * h】
函数指针的定义和初始化
1、判断题:
int (*f)(int, int);这条语句定义的是一个函数指针f,它可以指向一个有两个整型形参和整型返回值的函数。假设int Fun(int a, int b);那么必须用f=Fun();对f进行初始化,让其指向函数Fun()。
选项:
A: 正确
B: 错误
答案: 【 错误】
指针变量做函数参数与普通变量做函数参数的区别
1、判断题:
普通变量做函数参数,是将实参值的一个副本传给形参,而指针变量做函数参数是将变量的地址值传给形参,因此你想要修改哪个变量的值,将这个变量的地址传给指针形参就好了。
选项:
A: 正确
B: 错误
答案: 【 正确】
指针的概念
1、单选题:
下列说法错误的是()。
选项:
A: 指针变量占用的内存单元字节数就是它所指向的变量所占用的内存单元字节数。
B: 指针变量指向的数据的类型,称为指针的基类型。指针变量只能指向同一基类型的变量。
C: 指针变量使用之前必须初始化,如果你不知道该用什么值对其进行初始化的话,那么就先用NULL对其进行初始化。使用未初始化的结果将是无法预知的。
D: 通过间接寻址运算符引用指针变量指向的变量的值,称为指针的解引用。
答案: 【 指针变量占用的内存单元字节数就是它所指向的变量所占用的内存单元字节数。】
筛法求素数
1、判断题:
筛法求素数的核心操作就是在一个按a[2]=2,a[3]=3,......,a[N]=N初始化的数组中依次筛掉所有素数的倍数。
选项:
A: 正确
B: 错误
答案: 【 正确】
随机生成一个各位相异的4位数
1、判断题:
void MakeDigit(int a[])
{
int i, j, temp;
srand(time(NULL));
for (i=0; i<10; i++)
{
a[i] = i;
}
for (i=0; i<10; i++)
{
j = rand() % 10;
temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}这个方法其实就是模拟了洗牌的方法对一个有序的数组元素进行随机置乱。
选项:
A: 正确
B: 错误
答案: 【 正确】
Week 11 Strings (字符串)
Week 11 Single Choice
1、单选题:
下面程序的功能是从键盘输入一个字符串,编程将其字符顺序颠倒后重新存放,并输出这个字符串。程序的运行结果如下:Input a string:abcdef↙The inversed string is:fedcba按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#include <string.h>
void Inverse(char *pStr);
int main()
{
char str[80];
printf("Input a string:n");
gets(str);//输入字符串
Inverse(str);//将存于str数组中的字符串逆序存放
printf("The inversed string is:n");
puts(str);//输出字符串
return 0;
}
void Inverse(char *pStr)
{
int len = 0;
char temp;
char *pStart = pStr;//指针变量pStart指向字符串的第一个字符
char *pEnd;//指针变量pEnd指向字符串的最后一个字符
for (; *pStart!=''; _________) //求出字符串长度
{
len++;
}
for (pStart=pStr,___________; pStart<pEnd; pStart++,pEnd--)
{
temp = _________;
________________;
*pEnd = temp;
}
}
选项:
A: 第21行: pStart++第25行: pEnd=pStr+len-1第27行: *pStart第28行: *pStart = *pEnd
B: 第21行: *pStart++第25行: pEnd=pStr+len第27行: *pStart第28行: *pStart = *pEnd
C: 第21行: pStart++第25行: pEnd=pStr+len-1第27行: pStart第28行: pStart = pEnd
D: 第21行: *pStart++第25行: pEnd=pStr+len第27行: pStart第28行: pStart = pEnd
答案: 【 第21行: pStart++第25行: pEnd=pStr+len-1第27行: *pStart第28行: *pStart = *pEnd】
2、单选题:
Squeeze函数的功能是删除字符串s中所出现的与变量c相同的字符。例如,输入为:abcdef↙c↙输出为:abdef按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#include <string.h>
void Squeeze(char *s, char c);
int main()
{
char a[80], c, *s;
s = a;
gets(a);
scanf("%c",&c);
Squeeze(s, c);
printf("%sn", s);
return 0;
}
void Squeeze(char *s, char c)
{
int i, j;
for (i = j = 0; s[i] != ''; i++)
{
if (__________)
{
__________;
j++;
}
}
_____________; /* 在字符串t2的末尾添加字符串结束标志 */
}
选项:
A: 第20行: s[i] != c第22行: s[j] = s[i]第26行: s[j] = ''
B: 第20行: s[i] == c第22行: s[j] = s[i]第26行: s[i] = ''
C: 第20行: s[j] != c第22行: s[i] = s[j]第26行: s[j] = ''
D: 第20行: s[j] == c第22行: s[j] = s[i]第26行: s[i] = ''
答案: 【 第20行: s[i] != c第22行: s[j] = s[i]第26行: s[j] = ''】
3、单选题:
以下程序中函数FindMinString的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址。例如,若运行时依次输入三个字符串:123↙1223↙124↙输出结果为1223按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#include <string.h>
char *FindMinString( _____________ )
{
if(_____________)
return(s1);
else
return(s2);
}
int main()
{
int i;
char string[20], str[3][20];
for(i=0;i<3;i++)
{
gets(str[i]);
}
strcpy(string,FindMinString(str[0],str[1])); /*对字符串进行复制*/
strcpy(string,___________________);
printf("%sn",string);
return 0;
}
选项:
A: 第3行: char *s1, char *s2第5行: strcmp(s1,s2)<0第20行: FindMinString(string,str[2])
B: 第3行: char s1, char s2第5行: s1<s2第20行: FindMinString(string,str[2])
C: 第3行: char s1, char s2第5行: strcmp(s1,s2)>0第20行: FindMinString(str[0],str[2])
D: 第3行: char *s1, char *s2第5行: s1>s2第20行: strcmp(str[1],str[2])
答案: 【 第3行: char *s1, char *s2第5行: strcmp(s1,s2)<0第20行: FindMinString(string,str[2])】
4、单选题:
子函数Move的功能是将某字符串中的第i个字符向左移动1位,覆盖第i-1个字符。下面程序通过多次调用Move函数,将字符数组b中存放的字符串依次左移3位,并在移动后的字符串末尾添上字符0补足。程序的运行结果为:234567890034567890004567890000按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
void Move( _________,int i)
{
a[i-1]=a[i];
}
int main( )
{
char b[11]={"1234567890"};
int i,j;
for (j=0;j<=2;j++)
{
for(i=1;b[i]!='';i++)
{
__________;
printf("%c",b[i-1]);
}
_________;
printf("%cn",________);
}
return 0;
}
选项:
A: 第2行: char *a第15行: Move(b,i)第18行: b[i-1]='0'第19行: b[i-1]
B: 第2行: char a第15行: Move(b,i)第18行: b[i-1]=''第19行: b[i-1]
C: 第2行: char *a第15行: Move(b,i)第18行: b[i]='0'第19行: b[i]
D: 第2行: char a第15行: Move(i,b)第18行: b[i]=''第19行: b[i]
答案: 【 第2行: char *a第15行: Move(b,i)第18行: b[i-1]='0'第19行: b[i-1]】
5、单选题:
下面能正确进行字符串赋值操作的是
选项:
A: char *s=“ABCDE”;
B: char s[5]={“ABCDE”};
C: char s[5]={'A', 'B', 'C', 'D', 'E'};
D: char *s,scanf(“%s”,s);
答案: 【 char *s=“ABCDE”; 】
6、单选题:
下列对字符串的定义中,错误的是
选项:
A: char str[7] = "FORTRAN";
B: char str[] = "FORTRAN";
C: char *str = "FORTRAN";
D: char str[] = {'F','O','R','T','R','A','N',0};
答案: 【 char str[7] = "FORTRAN";】
7、单选题:
已知:int *p(); 则p是
选项:
A: 一个函数,该函数的返回值是指向int型的指针变量
B: 指向int型的指针变量
C: int型的指针数组
D: 一个指向函数的指针变量,该函数的返回值是int型
答案: 【 一个函数,该函数的返回值是指向int型的指针变量】
8、单选题:
下面函数Fun的功能是#include <stdio.h>
#include <string.h>
int Fun(char *ps)
{
char *p;
p=ps;
while(*p++);
return (p-ps);
}
int main()
{
char *s;
int a1,a2;
s = "hello";
a1=Fun(s);
a2=strlen(s);
printf("%d,%dn", a1,a2);
return 0;
}
选项:
A: 以上三种说法都不对
B: 比较两个字符串的大小
C: 求字符串的长度
D: 将串ps复制到串s中
答案: 【 求字符串的长度】
9、单选题:
下面函数Fun的功能是void Fun(char *s1, char *s2){ while(*s2++=*s1++);}
选项:
A: 串复制
B: 求串长
C: 串比较
D: 串反向
答案: 【 串复制】
10、单选题:
给出以下定义,则正确的叙述是char x[ ]= “abcedfg”;char y[ ]={ ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’’, ‘g’ };
选项:
A: 数组x 的长度大于数组y的长度
B: 数组x 和数组y 等价
C: 数组x 和数组y 的长度相同
D: 数组x 的长度小于数组y的长度
答案: 【 数组x 的长度大于数组y的长度】
11、单选题:
执行以下代码段后,输出的字符串是#include <stdio.h>
#include <string.h>
int main()
{
char s1[10],*s2="abcdef";
strcpy(s1,s2);
puts(s1);
.......
return 0;
}
选项:
A: ab
B: cdef
C: abcdef
D: 内容不确定
答案: 【 ab】
12、单选题:
下面程序的功能是将字符数组中存放的字符串以多种书写形式输出,如“Program”,“PROGRAM”,以及逆序输出的字符串“margorp”等,程序的运行结果为:ProgramPROGRAMmargorp按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#include <string.h>
int main(void)
{
int i = 0;
char b[] = "program";
char *a = "PROGRAM";
printf("_____n", *a, b + 1); /* 输出Program */
while (_________________) /* 输出PROGRAM */
{
___________;
i++;
}
printf("n");
while (_____) /* 输出margorp */
{
putchar (___________);
}
__________;
return 0;
}
选项:
A: 第8行: %c%s第9行: *(a+i)!=''第11行: putchar(*(a + i))第15行: --i第17行: *(b + i)第19行: putchar (*(b + i))
B: 第8行: %s%s第9行: (*a+i)!=''第11行: putchar(*a + i))第15行: i--第17行: *(b + i)第19行: putchar (*(b + i))
C: 第8行: %c%s第9行: *(a+i)==''第11行: putchar(*(a + i)) 第15行: --i第17行: *b + i第19行: putchar (*b + i))
D: 第8行: %s%s第9行: (*a+i)==''第11行: putchar(*a + i))第15行: i--第17行: *b + i第19行: putchar (*b + i)
答案: 【 第8行: %c%s第9行: *(a+i)!=''第11行: putchar(*(a + i))第15行: --i第17行: *(b + i)第19行: putchar (*(b + i))】
13、单选题:
下面程序的功能是用字符指针变量作函数参数编程实现字符串连接函数strcat()的功能,将字符串srcStr连接到字符串dstStr的尾部。程序的运行结果如下:Please enter the source string:abcd↙Please enter the other string:efgh↙The concat is:abcdefgh按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
void MyStrcat(char *dstStr, char *srcStr);
int main()
{
char s[80]; //源字符串
char t[80]; //待连接字符串
printf("Please enter the source string: n");
gets(s);
printf("Please enter the other string: ");
gets(t); //输入字符串
MyStrcat(s, t); //将字符数组t中的字符串连到s的尾部
printf("The concat is:n");
puts(s); //输出连接后的字符串s
return 0;
}
void MyStrcat(char *dstStr, char *srcStr) //用字符指针作为函数参数
{
while (__________)
{
dstStr++;
}
while (*srcStr != '') //若srcStr所指字符不是字符串结束标志
{
_________; //将srcStr所指字符复制到dstStr所指的存储单元中
srcStr++; //使srcStr指向下一个字符
dstStr++; //使dstStr指向下一个存储单元
}
_____________; //在字符串dstStr的末尾添加一个字符串结束标志
}
选项:
A: 第19行: *dstStr != ''第25行: *dstStr = * srcStr第29行: *dstStr = ''
B: 第19行: dstStr != ''第25行: dstStr = srcStr第29行: *dstStr = ''
C: 第19行: *dstStr == ''第25行: *dstStr = * srcStr第29行: *dstStr = 'n'
D: 第19行: dstStr == ''第25行: dstStr = srcStr第29行: *dstStr = 'n'
答案: 【 第19行: *dstStr != ''第25行: *dstStr = * srcStr第29行: *dstStr = ''】
14、单选题:
以下程序的功能是分别测量字符数组及数组中存放的字符串的长度,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#include <string.h>
int main( )
{
char a[]="abcdefg",b[10]="abcdefg";
_________________________; /*测量字符数组a,b的长度,并输出*/
_________________________; /*测量字符数组a,b中存放的字符串的长度,并输出*/
return 0;
}
选项:
A: 第6行: printf("%d %dn",sizeof(a) ,sizeof(b))第7行: printf("%d %dn",strlen(a) ,strlen(b))
B: 第6行: printf("%d %dn",strlen(a) ,strlen(b))第7行: printf("%d %dn",sizeof(a) ,sizeof(b))
C: 第6行: printf("%d %dn",sizeof(*a) ,sizeof(*b))第7行: printf("%d %dn",strlen(*a) ,strlen(*b))
D: 第6行: printf("%d %dn",sizeof(&a) ,sizeof(&b))第7行: printf("%d %dn",strlen(&a) ,strlen(&b))
答案: 【 第6行: printf("%d %dn",sizeof(a) ,sizeof(b))第7行: printf("%d %dn",strlen(a) ,strlen(b))】
15、单选题:
下面程序的功能是将一个字符串s2插入到字符串s1中,其起始插入位置为n。程序运行示例如下:main string:hello,world!sub string:cc site of begining:(<=12)5After instert:hellocc,world!按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#include <string.h>
#define N 100
int main()
{
int n, i, j, k, len;
char s1[N], s2[N], s3[2 * N];
printf("main string:");
gets(s1);
printf("sub string:");
gets(s2);
len = strlen(s1);
do
{
printf("site of begining:(<=%d)", len);
scanf("%d", &n);
}while (__________);
for (i = 0; i < n; i++)
{
s3[i] = s1[i];
}
for (j = 0; s2[j] != ''; j++)
{
__________________;
}
for (________; s1[k] != ''; k++)
{
________________;
}
s3[j + k] = '';
printf("After instert:%sn", s3);
return 0;
}
选项:
A: 第17行: n > len第25行: s3[i + j] = s2[j]第27行: k = n第29行: s3[j + k] = s1[k]
B: 第17行: n < len第25行: s3[i] = s2[j]第27行: k = n第29行: s3[j] = s1[k]
C: 第17行: n <= len第25行: s2[j]=s3[i + j] 第27行: k = 0第29行: s3[j] = s1[k]
D: 第17行: n >= len第25行: s3[j] = s2[j]第27行: k = 0第29行: s1[k] = s3[j + k]
答案: 【 第17行: n > len第25行: s3[i + j] = s2[j]第27行: k = n第29行: s3[j + k] = s1[k]】
16、单选题:
下面程序的功能是从键盘输入一行字符(最长不超过80字符),用函数编程统计其中单词(以空格作为间隔符的字符串)的个数。基本思路是:当前被检验字符不是空格,而前一被检验字符是空格,则表示有新单词出现。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。(下面答案中两个单引号''中间都有一个空格)样例1:Input a string:How are you↙Numbers of words = 3样例2:Input a string: How are you↙Numbers of words = 3#include <stdio.h>
int CountWords(char str[]);
int main()
{
char str[81];
int num;
printf("Input a string:n");
gets(str);
num=CountWords(str);
printf("Number of words=%dn", num);
return 0;
}
int CountWords(char str[])
{
int i, num;
num = (__________) ? 1 : 0;
i=1;
while (str[i]!='')
{
if (_______________________)
{
num++;
}
__________;
}
return num;
}
选项:
A: 第17行: str[0] != ' '第21行: str[i]!=' ' && str[i-1] == ' '第25行: i++
B: 第17行: str[0] == ' '第21行: str[i]!=' ' || str[i-1] == ' '第25行: i++
C: 第17行: str[0] != ' '第21行: str[i]==' ' && str[i-1] == ' '第25行: i++
D: 第17行: str[0] != ' '第21行: str[i]!=' ' && str[i-1] != ' '第25行: num++
答案: 【 第17行: str[0] != ' '第21行: str[i]!=' ' && str[i-1] == ' '第25行: i++】
17、单选题:
下面程序的功能是实现字符串逆序存放。程序运行结果如下:Input a string:ABCDEFGHI↙Inversed results:IHGFEDCBA按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#include <string.h>
#define N 80
void Inverse(char *pStr);
int main()
{
char a[N];
printf("Input a string:");
gets(a);
Inverse(a);
printf("Inversed results:%sn", a);
return 0;
}
/* 函数功能: 实现将字符数组中的字符串逆序存放 */
void Inverse(____________)
{
int len;
char temp;
char *pStart; /* 指针变量pStart指向字符串的第一个字符 */
char *pEnd; /* 指针变量pEnd指向字符串的最后一个字符 */
len = strlen(pStr); /* 求出字符串长度 */
for (pStart=pStr,___________; pStart<pEnd; pStart++,__________)
{
temp = *pStart;
______________;
*pEnd = temp;
}
}
选项:
A: 第16行: char *pStr第23行: pEnd=pStr+len-1 pEnd--第26行: *pStart = *pEnd
B: 第16行: char pStr第23行: pEnd=pStr+len pEnd--第26行: *pStart = *pEnd
C: 第16行: char *pStr第23行: pEnd=pStr+len-1 pEnd++第26行: pStart = pEnd
D: 第16行: char pStr第23行: pEnd=pStr+len+1 pEnd++第26行: *pStart = *pEnd
答案: 【 第16行: char *pStr第23行: pEnd=pStr+len-1 pEnd--第26行: *pStart = *pEnd】
18、单选题:
下面程序的功能是从键盘输入一行字符(不超过80个),统计其中的英文字符、数字字符、空格和其他字符的个数。例如,输入的一行字符为*****c language.*****输出为English character: 9digit character: 0space: 1other character: 11按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#include <string.h>
#define STR_LEN 80
int main()
{
char str[STR_LEN+1];
int len, i, letter = 0, digit = 0, space = 0, others = 0;
printf("Please input a string:");
___________;
for (i = 0; __________; i++)
{
if (___________________________)
letter ++; /*统计英文字符 */
else if (______________________)
digit ++; /*统计数字字符 */
else if (str[i] == ' ' )
space ++; /*统计空格*/
else
others ++; /*统计其他字符的个数*/
}
printf("English character: %dn", letter);
printf("digit character: %dn", digit);
printf("space: %dn", space);
printf("other character: %dn", others);
return 0;
}
选项:
A: 第9行: gets(str)第10行: str[i] != ''第12行: str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'A' && str[i] <= 'Z'第14行: str[i] >= '0' && str[i] <= '9'
B: 第9行: scanf("%s",str)第10行: str[i] != ''第12行: 'z' >= str[i] >= 'a' || 'A' <= str[i] <= 'Z'第14行: 9 >= str[i] >= 0
C: 第9行: puts(str)第10行: str[i] != 'n'第12行: 'z' >= str[i] >= 'a' || 'A' <= str[i] <= 'Z'第14行: str[i] >= '0' && str[i] <= '9'
D: 第9行: scanf("%s",str)第10行: str[i] != 'n'第12行: str[i] >= 'a' || str[i] <= 'z' && str[i] >= 'A' || str[i] <= 'Z'第14行: str[i] >= 0 && str[i] <= 9
答案: 【 第9行: gets(str)第10行: str[i] != ''第12行: str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'A' && str[i] <= 'Z'第14行: str[i] >= '0' && str[i] <= '9' 】
19、单选题:
下面程序的功能是在字符串每个字符间插入一个空格。程序的运行结果如下:Input a string:Howareyou↙Insert results:H o w a r e y o u按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#include <string.h>
#define N 100
void Insert(char s[]);
int main()
{
char str[N];
printf("Input a string
