MOOC C语言程序设计精髓(河北科技大学)1462659188 最新慕课完整章节测试答案
1 初识C语言从认识变量和常量开始
文章目录
变量在内存中所占的字节数
1、单选题:
C语言用sizeof计算变量在内存中的字节数,其中sizeof是()
选项:
A: 函数
B: 运算符
C: 标识符
D: 语句
答案: 【 运算符】
宏常量与const常量
1、单选题:
宏定义是()
选项:
A: 一条语句
B: 一种编译预处理指令
C: 一个标识符
D: 一个变量
答案: 【 一种编译预处理指令】
2、判断题:
const常量有数据类型。
选项:
A: 正确
B: 错误
答案: 【 正确】
第1周单元测验
1、单选题:
下列选项中,合法的C语言标识符是
选项:
A: _a1
B: 123abc
C: a+b
D: b!
答案: 【 _a1】
2、单选题:
以下不适合定义为用户标识符的是
选项:
A: int
B: a2
C: def2
D: _3com_
答案: 【 int 】
3、单选题:
#include <stdio.h>是
选项:
A: 编译预处理指令
B: 语句
C: 函数
D: 有语法错误
答案: 【 编译预处理指令】
4、单选题:
在windows下,程序编译链接后形成的可执行文件是
选项:
A: .obj文件
B: .exe文件
C: .c文件
D: .h文件
答案: 【 .exe文件】
5、单选题:
程序编译链接后显示" 0 error,0 warning" 代表
选项:
A: 程序中没有语法错误
B: 程序是正确的
C: 程序是不正确的
D: 程序中可能存在语法错误
答案: 【 程序中没有语法错误】
6、单选题:
关于可执行文件说法正确的是
选项:
A: 可执行文件是编译链接后生成的文件
B: 可执行文件就是源代码文件
C: 可执行文件后缀为.obj
D: 可执行文件就是main.c文件
答案: 【 可执行文件是编译链接后生成的文件】
7、单选题:
C语言用sizeof计算变量在内存中的字节数,其中sizeof是()
选项:
A: 运算符
B: 函数
C: 语句
D: 变量
答案: 【 运算符】
8、单选题:
若有定义:int a=8,b=5,c; ,执行语句c=a/b+0.4;后,c的值为
选项:
A: 1
B: 1.4
C: 2.0
D: 2
答案: 【 1】
9、单选题:
在C语言中,字符型数据在内存中以字符的( )形式存放
选项:
A: ASCII码
B: 国标码
C: BCD码
D: 反码
答案: 【 ASCII码】
10、单选题:
以下符合C语言语法的实型常量是
选项:
A: 5e-3
B: 3.14.159e
C: 1.2e0.5
D: e15
答案: 【 5e-3】
11、单选题:
下列说法正确的是
选项:
A: 在C语言中,变量必须先定义后使用。
B: 一条变量定义语句可定义多个同类型的变量。
C: 实型常量的默认类型是double类型。
D: 一条变量定义语句不可以同时定义多个变量。
E: 不同类型的变量分配的存储空间大小都是相同的。
F: 在C语言中,所有变量都必须在定义时进行初始化。
G: 变量在没有初始化的时候,其值都是0
答案: 【 在C语言中,变量必须先定义后使用。;
一条变量定义语句可定义多个同类型的变量。;
实型常量的默认类型是double类型。】
10 字符串C语言世界中的大力水手
字符串的表示与存储
1、单选题:
下列说法正确的是()。
选项:
A: 用双引号括起的一串字符是字符串常量,系统自动为其添加空字符''作为字符串的结束标志。
B: 字符数组的最后一个元素必须是字符'0'才能表示一个字符串。
C: char *pStr = "Hello China";表示定义了一个指向字符串常量的字符指针变量。此时既可以修改pStr的值,也可以通过间接寻址的方法修改pStr指向的字符。
D: char *pStr;scanf("%s", pStr);这两条语句的作用就是将用户从键盘输入的字符串保存到字符指针变量pStr中。
答案: 【 用双引号括起的一串字符是字符串常量,系统自动为其添加空字符''作为字符串的结束标志。】
第10周测验
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:");
gets(str);
Insert(str);
printf("Insert results:%sn", str);
return 0;
}
void Insert(char s[])
{
char t[N];
int i, j;
____________;
for (i=0, j=0; ____________; i++, j++)
{
________;
j++;
________;
}
s[j] = '';/* 在字符串s的末尾添加字符串结束标志 */
}
选项:
A: 第19行:strcpy(t, s)第20行:t[i]!=''第22行:s[j] = t[i]第24行:s[j] = ' '
B: 第19行:t=s;第20行:t[i]!=''第22行:s[i] = t[j]第24行:s[j] = ' '
C: 第19行:strcpy(t, s)第20行:t[i]=''第22行:t[j] = s[i]第24行:s[j] = ' '
D: 第19行:strcpy(s, t)第20行:t[i]==''第22行:s[j] = t[i]第24行:s[j] = '0 '
答案: 【 第19行:strcpy(t, s)第20行:t[i]!=''第22行:s[j] = t[i]第24行:s[j] = ' '】
20、单选题:
子函数Change的功能是将英文大写字母转换为小写字母,下面程序的输出结果是 abc_abc_def按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
void Change(__________)
{
int i;
for(;________;ch++)
{
if(____________)
_________________;
}
}
int main()
{
char s[]="ABC_abc_DEF";
Change(s);
printf("%sn",s);
return 0;
}
选项:
A: 第2行: char *ch第5行: *ch!=''第7行: *ch>='A'&& *ch<='Z'第8行: *ch=*ch-'A'+'a'
B: 第2行: char ch第5行: ch!=''第7行: *ch>='A'&& *ch<='Z'第8行: *ch=*ch-'A'+'a'
C: 第2行: char *ch第5行: *ch!=''第7行: ch>='A'&& ch<='Z'第8行: ch=ch-'A'+'a'
D: 第2行: char ch[]第5行: *ch==''第7行: *ch>='A'|| *ch<='Z'第8行: *ch=*ch-'A'+'a'
答案: 【 第2行: char *ch第5行: *ch!=''第7行: *ch>='A'&& *ch<='Z'第8行: *ch=*ch-'A'+'a'】
21、单选题:
下面程序的功能是比较用户键盘输入的口令userInput与内设的口令password是否相同。若相同,则输出"Correct password! Welcome to the system...",若userInput<password,则输出"Invalid password!user input<password",否则输出"Invalid password!user input>password"。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#include <string.h>
int main()
{
char password[7] = "secret";
char userInput[81] ;
printf("Input Password:");
scanf(_____________);
if ( ______________ )
printf("Correct password! Welcome to the system...n");
else if ( ___________________)
printf("Invalid password!user input<passwordn");
else
printf("Invalid password!user input>passwordn");
return 0;
}
选项:
A: 第8行: "%s", userInput第9行: strcmp(userInput, password) == 0第11行: strcmp(userInput, password) < 0
B: 第8行: "%c", userInput第9行: strcmp(userInput, password) = 0第11行: strcmp(userInput, password) < 0
C: 第8行: "%s", userInput第9行: userInput==password第11行: userInput<password
D: 第8行: "%c", userInput第9行: strcpy(userInput, password) == 0第11行: strcpy(userInput, password) < 0
答案: 【 第8行: "%s", userInput第9行: strcmp(userInput, password) == 0第11行: strcmp(userInput, password) < 0】
11 海陆空齐上阵又来了一堆数据
第11周测验
1、单选题:
设有以下说明语句,则下面的叙述中错误的是struct ex
{
int x ;
float y;
char z ;
} example;
选项:
A: example是结构体类型名
B: struct是结构体类型的关键字
C: x,y,z都是结构体成员名
D: ex为结构体标签。
答案: 【 example是结构体类型名】
2、单选题:
若有以下说明,则下面哪个叙述是正确的(已知short占2个字节,float占4个字节)。struct
{
short a;
float b;
} v1;union
{
short a;
float b;
} v2;
选项:
A: 执行sizeof(v1)获得的结果是8个字节,对结构体变量v1中的任何一个成员都可以进行初始化。
B: 执行sizeof(v1)获得的结果是6个字节,只能对结构体变量v1中的第一个成员进行初始化。
C: 执行sizeof(v2)获得的结果是6个字节,只能对共用体变量v2中的第一个成员进行初始化。
D: 执行sizeof(v2)获得的结果是4个字节,对共用体变量v2中的任何一个成员都可以进行初始化。
E: 执行sizeof(v2)获得的结果是8个字节,只能对共用体变量v2中的第一个成员进行初始化
F: 执行sizeof(v1)获得的结果是8个字节,只能对结构体变量v1中的第一个成员进行初始化。
G: 执行sizeof(v1)获得的结果是4个字节,对结构体变量v1中的任何一个成员都可以进行初始化。
H: 执行sizeof(v2)获得的结果是6个字节,对共用体变量v2中的任何一个成员都可以进行初始化。
答案: 【 执行sizeof(v1)获得的结果是8个字节,对结构体变量v1中的任何一个成员都可以进行初始化。】
3、单选题:
以下选项中不能正确把cl定义成结构体变量的是
选项:
A: struct color cl
{
int red;
int green;
int blue;
}
B: typedef struct
{
int red;
int green;
int blue;
} COLOR;
COLOR cl;
C: struct color
{
int red;
int green;
int blue;
} cl;
D: struct
{
int red;
int green;
int blue;
} cl;
答案: 【 struct color cl
{
int red;
int green;
int blue;
}】
4、单选题:
以下程序执行后的输出结果是#include <stdio.h>
struct STU
{
char name[10];
int num;
};
void Fun1(struct STU c)
{
struct STU b={"LiGuo",2042};
c=b;
};
void Fun2(struct STU *c)
{
struct STU b={"SunDan",2044};
*c=b;
};
int main()
{
struct STU a={"YangHan",2041},b={"WangYi",2043};
Fun1(a);
Fun2(&b);
printf("%d %dn",a.num,b.num);
return 0;
}
选项:
A: 2041 2044
B: 2041 2043
C: 2042 2044
D: 2042 2043
答案: 【 2041 2044】
5、单选题:
下面说法错误的是
选项:
A: 在一个结构体内不能包含另一个不同类型的结构体作为其成员。
B: 用结构体变量做函数参数,是将结构体变量的所有成员的内容传给被调函数,因此在被调函数中对结构体内容的修改不影响原结构体变量。
C: 结构体在内存中所占的字节数不仅与所定义的结构体类型有关,还与计算机系统本身有关。
D: 和整型、实型、字符型一样,枚举类型也是一种基本数据类型。
E: 用指向结构体变量的指针做函数参数,是将结构体变量的地址传给被调函数,因此在被调函数中对结构体内容的修改会影响原结构体变量。
答案: 【 在一个结构体内不能包含另一个不同类型的结构体作为其成员。】
6、单选题:
若能使程序运行后的输出结果如下:201501201502201503则空白处填写的表达式或语句应该是#include <stdio.h>
struct student
{
int age;
char num[8];
};
int main()
{
struct student stu[3]={{20,"201501"},{21,"201502"},{19,"201503"}};
struct student *p=stu;
____________________
return 0;
}
选项:
A: printf("%sn",(*p).num); printf("%sn",(++p)->num); printf("%sn",stu[2].num);
B: printf("%sn",(p++).num); printf("%sn",(p++).num); printf("%sn",(p++).num);
C: printf("%sn",(++p)->num); printf("%sn",(++p)->num); printf("%sn",(*p).num);
D: printf("%sn",stu[0]->num); printf("%sn",stu[1]->num); printf("%sn",stu[2]->num);
答案: 【 printf("%sn",(*p).num); printf("%sn",(++p)->num); printf("%sn",stu[2].num);】
7、单选题:
以下是时钟模拟显示程序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
typedef struct clock
{
int hour;
int minute;
int second;
}CLOCK;
/* 函数功能:时、分、秒时间的更新 */
void Update(________)
{
static long m = 1;
t->hour = m / 3600;
t->minute = __________________;
t->second = ___________;
m++;
if (t->hour == 24) m = 1;
}
/* 函数功能:时、分、秒时间的显示 */
void Display(CLOCK *t)
{
printf("%2d:%2d:%2dr", t->hour, t->minute, t->second);
}
/* 函数功能:模拟延迟1秒的时间 */
void Delay(void)
{
long t;
for (t=0; t<50000000; t++)
{
/* 循环体为空语句的循环,起延时作用 */
}
}
int main()
{
long i;
CLOCK myclock;
myclock.hour = myclock.minute = myclock.second = 0;
for (i=0; i<100000; i++) /* 利用循环,控制时钟运行的时间 */
{
Update(&myclock); /* 时钟值更新 */
Display(__________); /* 时间显示 */
Delay(); /* 模拟延时1秒 */
}
return 0;
}
选项:
A: 第10行: CLOCK *t第14行: (m – 3600 * t->hour) / 60第15行: m % 60第44行: &myclock
B: 第10行: CLOCK *t第14行: (m – 3600 * hour) / 60第15行: m / 60第44行: &myclock
C: 第10行: CLOCK t第14行: (m – 3600 * t->hour) / 60第15行: m / 60第44行: myclock
D: 第10行: CLOCK t第14行: (m – 3600 * hour) / 60第15行: m % 60第44行: myclock
答案: 【 第10行: CLOCK *t第14行: (m – 3600 * t->hour) / 60第15行: m % 60第44行: &myclock】
8、单选题:
有以下说明和定义语句,下面各输入语句中错误的是#include <stdio.h>
int main()
{
struct student
{
int age;
char sex;
char name[8];
};
struct student std;
struct student *p=&std;
.......
return 0;
}
选项:
A: scanf("%c",&std[0].sex);
B: scanf("%d",&(*p).age);
C: scanf("%s",std.name);
D: scanf("%c",&(p->sex));
答案: 【 scanf("%c",&std[0].sex); 】
9、单选题:
以下程序的功能是计算每个学生3门课成绩的总和,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
struct stu
{
char num[10];
float score[3];
};
int main()
{
struct stu s[3]={{"20021",90,95,85},{"20022",95,80,75},{"20023",100,95,90}},*p=s;
int i,j;
float sum;
__________
return 0;
}
选项:
A: for (j=0;j<3;j++)
{
sum=0;
for(i=0;i<3;i++)
{
sum=sum+p->score[i];
}
printf("%6.2fn",sum);
p++;
}
B: sum=0;
for(i=0;i<3;i++)
{
sum=sum+p->score[i];
}
printf("%6.2fn",sum);
C: sum=0;
for(i=0;i<3;i++)
{
sum=sum+p->score[i];
p++;
}
printf("%6.2fn",sum);
D: for (j=0;j<3;j++)
{
sum=0;
for(i=0;i<3;i++)
{
sum=sum+p->score[i];
p++;
}
printf("%6.2fn",sum);
}
答案: 【 for (j=0;j<3;j++)
{
sum=0;
for(i=0;i<3;i++)
{
sum=sum+p->score[i];
}
printf("%6.2fn",sum);
p++;
}】
10、单选题:
下面程序的输出结果是#include <stdio.h>
int main()
{
union
{
int i[2];
int k;
int c;
}t,*s = &t;
s->i[0] = 10;
s->i[1] = 20;
s->k=30;
printf("%dn", s->k);
printf("%dn", s->i[0]);
printf("%dn", s->c);
return 0;
}
选项:
A: 303030
B: 102030
C: 3010随机数
D: 301020
答案: 【 303030】
12 学会保存你的数据
第12周测验
1、单选题:
若要以“a+”方式打开一个已存在的文件,则以下叙述正确的是
选项:
A: 文件打开时,原有文件内容不被删除,位置指针移动到文件末尾,可做添加和读操作。
B: 文件打开时,原有文件内容不被删除,位置指针移动到文件开头,可做重写和读操作。
C: 文件打开时,原有文件内容被删除,只可做写操作。
D: 以上各种说法都不正确。
答案: 【 文件打开时,原有文件内容不被删除,位置指针移动到文件末尾,可做添加和读操作。】
2、单选题:
在C语言中,从计算机内存中将数据写入文件中,称为
选项:
A: 输出
B: 输入
C: 修改
D: 删除
答案: 【 输出】
3、单选题:
下面的程序执行后,文件test中的内容是#include <stdio.h>
#include <string.h>
void Fun(char *fname,char *st)
{
FILE *myf; int i;
myf=fopen(fname,"w" );
if (myf == NULL)
{
printf("cannot open the file.n");
exit(0);
}
for(i=0;i<strlen(st); i++)
{
fputc(st[i],myf);
}
fclose(myf);
}
int main()
{
Fun("test","new world");
Fun("test","hello");
return 0;
}
选项:
A: hello
B: new worldhello
C: new world
D: hello rld
答案: 【 hello】
4、单选题:
阅读以下程序,对程序功能的描述中正确的是#icnlude <stdio.h>
int main()
{
FILE *in, *out;
char ch, infile[10], outfile[10];
printf("Enter the infile name:n");
scanf("%s", infile);
printf("Enter the outfile name:n");
scanf("%s", outfile);
if ((in = fopen(infile, "r")) == NULL)
{
printf("cannot open infile.n");
exit(0);
}
if ((out = fopen(outfile, "w")) == NULL)
{
printf("cannot open outfile.n");
exit(0);
}
while (!feof(in))
{
fputc(fgetc(in), out);
}
fclose(in);
fclose(out);
return 0;
}
选项:
A: 程序完成将一个磁盘文件中的信息复制到另一个磁盘文件中的功能。
B: 程序完成将磁盘文件的信息在屏幕上显示的功能。
C: 程序完成将两个磁盘文件合二为一的功能。
D: 程序完成将两个磁盘文件合并并在屏幕上输出的功能。
答案: 【 程序完成将一个磁盘文件中的信息复制到另一个磁盘文件中的功能。】
5、单选题:
C语言中标准输入文件stdin是指
选项:
A: 键盘
B: 显示器
C: 鼠标
D: 硬盘
E: U盘
答案: 【 键盘】
6、单选题:
设有以下结构类型,并且结构数组student中的元素都已有值,若要将这些元素写到硬盘文件fp中,以下形式错误的是struct st
{
char name[8];
int num;
float s[4];
} student[50];
选项:
A: fwrite(student, 25 * sizeof(struct st), 1, fp);
B: fwrite(student, sizeof(struct st), 50, fp);
C: fwrite(student, 50 * sizeof(struct st), 1, fp);
D: for (i = 0; i < 50; i++) fwrite(student, sizeof(struct st), 1, fp);
答案: 【 for (i = 0; i < 50; i++) fwrite(student, sizeof(struct st), 1, fp); 】
7、单选题:
若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应该是
选项:
A: “wb+”
B: “ab+”
C: “rb+”
D: “ab”
答案: 【 “wb+” 】
8、单选题:
以下程序执行后输出结果是#include <stdio.h>
int main()
{
FILE *fp;
int i,k=0,n=0;
fp=fopen("d1.dat","w");
if (fp == NULL)
{
printf("cannot open the file.n");
exit(0);
}
for(i=1;i<4;i++)
{
fprintf(fp,"%d",i);
}
fclose(fp);
fp=fopen("d1.dat","r");
if (fp == NULL)
{
printf("cannot open infile.n");
exit(0);
}
fscanf(fp,"%d%d",&k,&n);
printf("%d %dn",k,n);
fclose(fp);
return 0;
}
选项:
A: 123 0
B: 1 2
C: 1 23
D: 0 0
答案: 【 123 0】
9、单选题:
关于文件读写,正确的叙述是
选项:
A: 可把整型数以二进制形式存放到文件中的函数是fwrite函数。
B: 使用fread可以直接将数值从二进制文件读入(拷贝)到程序的变量中。
C: 使用fprintf函数可以将信息以文本的形式写入文件(类似向屏幕输出文本信息的printf函数)。
D: 使用fscanf函数可以从文本文件,按格式读入int、float等各种类型的数值(类似从键盘读入信息的scanf函数)。
E: 以二进制形式打开的文件,如果使用fprintf向文件写入所有数据,其结果是生成的文件还是个文本文件。
F: 以文本方式打开的文件,如果使用fwrite向文件写入所有数据,其结果是生成的文件还是个二进制文件。正因如此,如果用文本编辑器打开这个文件查看文件中的内容会发现是乱码。
G: 文件打开后一定要检查是否打开成功。
H: 文件用完一定要关闭,否则,可能会引起数据丢失,或者影响其他文件的打开,因为多数情况下,系统限制同时处于打开状态的文件总数。
I: 以r(只读)、a(追加)和r+(读写)方式打开文件时,该文件必须是已存在的文件,否则将打开不成功。
J: 以w(只写)和w+(读写)方式打开一个文件时,无论该文件是否存在,都新建一个文件,这就意味着如果文件已存在,则其原有的内容将丢失。
K: 文件一旦按文本方式打开,无论用fwrite还是fprintf函数写入数字1,最后生成的都是文本,对应的内容都是字符‘1’。
L: 文件一旦按二进制方式打开,无论用fwrite还是fprintf函数写入数字1,最后生成的都是二进制文件,对应的内容都是数值1。
M: 用FILE只能定义指向文本文件的文件指针。
N: 用FILE只能定义指向二进制文件的文件指针。
O: C语言中的文件都是流式文件,只能按顺序读写,不能进行随机读写。
P: 文件的读写方式中w+和r+都是可读可写方式,二者是完全一样的。
答案: 【 可把整型数以二进制形式存放到文件中的函数是fwrite函数。;
使用fread可以直接将数值从二进制文件读入(拷贝)到程序的变量中。;
使用fprintf函数可以将信息以文本的形式写入文件(类似向屏幕输出文本信息的printf函数)。;
使用fscanf函数可以从文本文件,按格式读入int、float等各种类型的数值(类似从键盘读入信息的scanf函数)。;
以二进制形式打开的文件,如果使用fprintf向文件写入所有数据,其结果是生成的文件还是个文本文件。;
以文本方式打开的文件,如果使用fwrite向文件写入所有数据,其结果是生成的文件还是个二进制文件。正因如此,如果用文本编辑器打开这个文件查看文件中的内容会发现是乱码。;
文件打开后一定要检查是否打开成功。;
文件用完一定要关闭,否则,可能会引起数据丢失,或者影响其他文件的打开,因为多数情况下,系统限制同时处于打开状态的文件总数。;
以r(只读)、a(追加)和r+(读写)方式打开文件时,该文件必须是已存在的文件,否则将打开不成功。;
以w(只写)和w+(读写)方式打开一个文件时,无论该文件是否存在,都新建一个文件,这就意味着如果文件已存在,则其原有的内容将丢失。】
10、单选题:
以下叙述中错误的是
选项:
A: 不可以用FILE定义指向二进制文件的文件指针。
B: 二进制文件打开后可以先读文件的末尾,而顺序文件不可以。
C: 在程序结束时,应当用fclose()函数关闭已打开的文件。
D: 在利用fread()函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据。
答案: 【 不可以用FILE定义指向二进制文件的文件指针。】
11、单选题:
若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为
选项:
A: 0
B: 1
C: -1
D: 一个非0值
答案: 【 0】
12、单选题:
在进行文件操作时,写文件的一般含义是
选项:
A: 将计算机内存中的信息存入磁盘。
B: 将磁盘中的信息存入计算机内存。
C: 将计算机CPU中的信息存入磁盘。
D: 将磁盘中的信息存入计算机CPU。
答案: 【 将计算机内存中的信息存入磁盘。】
13、单选题:
以下程序希望把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。出错的原因是#include <stdio.h>
int main()
{
FILE *fout; char ch;
fout=fopen('abc.txt','w');
if (fout == NULL)
{
printf("cannot open infile.n");
exit(0);
}
ch=fgetc(stdin);
while(ch!='#')
{
fputc(ch,fout);
ch=fgetc(stdin);
}
fclose(fout);
return 0;
}
选项:
A: 函数fopen()调用形式错误
B: 输入文件没有关闭
C: 函数fgetc()调用形式错误
D: 文件指针stdin没有定义
答案: 【 函数fopen()调用形式错误】
练兵区——单选题——不计入总分
1、单选题:
下面的程序执行后,文件test中的内容是#include <stdio.h>
#include <string.h>
void Fun(char *fname,char *st)
{
FILE *myf; int i;
myf=fopen(fname,"w" );
if (myf == NULL)
{
printf("cannot open the file.n");
exit(0);
}
for(i=0;i<strlen(st); i++)
{
fputc(st[i],myf);
}
fclose(myf);
}
int main()
{
Fun("test","new world");
Fun("test","hello");
return 0;
}
选项:
A: hello
B: new worldhello
C: new world
D: hello rld
答案: 【 hello】
2、单选题:
有如下程序, 若文本文件f1.txt中原有内容为:good,则运行以下程序后文件f1.txt中的内容为#include <stdio.h>
int main()
{
FILE *fp1;
fp1=fopen("f1.txt","w");
if (fp1 == NULL)
{
printf("cannot open the file.n");
exit(0);
}
fprintf(fp1,"abc");
fclose(fp1);
return 0;
}
选项:
A: abc
B: goodabc
C: good
D: abcgood
答案: 【 abc】
3、单选题:
下列关于C语言数据文件的叙述中正确的是
选项:
A: 文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件
B: 文件由ASCII码字符序列组成,C语言只能读写文本文件
C: 文件由二进制数据序列组成,C语言只能读写二进制文件
D: 文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件
答案: 【 文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件】
4、单选题:
以下程序希望把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。出错的原因是#include <stdio.h>
int main()
{
FILE *fout; char ch;
fout=fopen('abc.txt','w');
if (fout == NULL)
{
printf("cannot open infile.n");
exit(0);
}
ch=fgetc(stdin);
while(ch!='#')
{
fputc(ch,fout);
ch=fgetc(stdin);
}
fclose(fout);
return 0;
}
选项:
A: 函数fopen()调用形式错误
B: 输入文件没有关闭
C: 函数fgetc()调用形式错误
D: 文件指针stdin没有定义
答案: 【 函数fopen()调用形式错误】
5、单选题:
阅读以下程序,对程序功能的描述中正确的是#icnlude <stdio.h>
int main()
{
FILE *in, *out;
char ch, infile[10], outfile[10];
printf("Enter the infile name:n");
scanf("%s", infile);
printf("Enter the outfile name:n");
scanf("%s", outfile);
if ((in = fopen(infile, "r")) == NULL)
{
printf("cannot open infile.n");
exit(0);
}
if ((out = fopen(outfile, "w")) == NULL)
{
printf("cannot open outfile.n");
exit(0);
}
while (!feof(in))
{
fputc(fgetc(in), out);
}
fclose(in);
fclose(out);
return 0;
}
选项:
A: 程序完成将一个磁盘文件中的信息复制到另一个磁盘文件中的功能。
B: 程序完成将磁盘文件的信息在屏幕上显示的功能。
C: 程序完成将两个磁盘文件合二为一的功能。
D: 程序完成将两个磁盘文件合并并在屏幕上输出的功能。
答案: 【 程序完成将一个磁盘文件中的信息复制到另一个磁盘文件中的功能。】
6、单选题:
设有以下结构类型,并且结构数组student中的元素都已有值,若要将这些元素写到硬盘文件fp中,以下形式错误的是struct st
{
char name[8];
int num;
float s[4];
} student[50];
选项:
A: fwrite(student, 25 * sizeof(struct st), 2, fp);
B: fwrite(student, sizeof(struct st), 50, fp);
C: fwrite(student, 50 * sizeof(struct st), 1, fp);
D: for (i = 0; i < 50; i++) fwrite(student, sizeof(struct st), 1, fp);
答案: 【 for (i = 0; i < 50; i++) fwrite(student, sizeof(struct st), 1, fp); 】
7、单选题:
C语言中标准输入文件stdin是指
选项:
A: 键盘
B: 显示器
C: 鼠标
D: 硬盘
E: U盘
答案: 【 键盘】
8、单选题:
若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应该是
选项:
A: “wb+”
B: “ab+”
C: “rb+”
D: “ab”
答案: 【 “wb+” 】
9、单选题:
关于文件读写,正确的叙述是
选项:
A: 可把整型数以二进制形式存放到文件中的函数是fwrite函数。
B: 使用fread可以直接将数值从二进制文件读入(拷贝)到程序的变量中。
C: 使用fprintf函数可以将信息以文本的形式写入文件(类似向屏幕输出文本信息的printf函数)。
D: 使用fscanf函数可以从文本文件,按格式读入int、float等各种类型的数值(类似从键盘读入信息的scanf函数)。
E: 以二进制形式打开的文件,如果使用fprintf向文件写入所有数据,其结果是生成的文件还是个文本文件。
F: 以文本方式打开的文件,如果使用fwrite向文件写入所有数据,其结果是生成的文件还是个二进制文件。正因如此,如果用文本编辑器打开这个文件查看文件中的内容会发现是乱码。
G: 文件打开后一定要检查是否打开成功。
H: 文件用完一定要关闭,否则,可能会引起数据丢失,或者影响其他文件的打开,因为多数情况下,系统限制同时处于打开状态的文件总数。
I: 以r(只读)、a(追加)和r+(读写)方式打开文件时,该文件必须是已存在的文件,否则将打开不成功。
J: 以w(只写)和w+(读写)方式打开一个文件时,无论该文件是否存在,都新建一个文件,这就意味着如果文件已存在,则其原有的内容将丢失。
K: 文件一旦按文本方式打开,无论用fwrite还是fprintf函数写入数字1,最后生成的都是文本,对应的内容都是字符‘1’。
L: 文件一旦按二进制方式打开,无论用fwrite还是fprintf函数写入数字1,最后生成的都是二进制文件,对应的内容都是数值1。
M: 用FILE只能定义指向文本文件的文件指针。
N: 用FILE只能定义指向二进制文件的文件指针。
O: C语言中的文件都是流式文件,只能按顺序读写,不能进行随机读写。
P: 文件的读写方式中w+和r+都是可读可写方式,二者是完全一样的。
答案: 【 可把整型数以二进制形式存放到文件中的函数是fwrite函数。;
使用fread可以直接将数值从二进制文件读入(拷贝)到程序的变量中。;
使用fprintf函数可以将信息以文本的形式写入文件(类似向屏幕输出文本信息的printf函数)。;
使用fscanf函数可以从文本文件,按格式读入int、float等各种类型的数值(类似从键盘读入信息的scanf函数)。;
以二进制形式打开的文件,如果使用fprintf向文件写入所有数据,其结果是生成的文件还是个文本文件。;
以文本方式打开的文件,如果使用fwrite向文件写入所有数据,其结果是生成的文件还是个二进制文件。正因如此,如果用文本编辑器打开这个文件查看文件中的内容会发现是乱码。;
文件打开后一定要检查是否打开成功。;
文件用完一定要关闭,否则,可能会引起数据丢失,或者影响其他文件的打开,因为多数情况下,系统限制同时处于打开状态的文件总数。;
以r(只读)、a(追加)和r+(读写)方式打开文件时,该文件必须是已存在的文件,否则将打开不成功。;
以w(只写)和w+(读写)方式打开一个文件时,无论该文件是否存在,都新建一个文件,这就意味着如果文件已存在,则其原有的内容将丢失。】
10、单选题:
若要以“a+”方式打开一个已存在的文件,则以下叙述正确的是
选项:
A: 文件打开时,原有文件内容不被删除,位置指针移动到文件末尾,可做添加和读操作。
B: 文件打开时,原有文件内容不被删除,位置指针移动到文件开头,可做重写和读操作。
C: 文件打开时,原有文件内容被删除,只可做写操作。
D: 以上各种说法都不正确。
答案: 【 文件打开时,原有文件内容不被删除,位置指针移动到文件末尾,可做添加和读操作。】
11、单选题:
在C语言中,从计算机内存中将数据写入文件中,称为
选项:
A: 输出
B: 输入
C: 修改
D: 删除
答案: 【 输出】
12、单选题:
以下叙述中错误的是
选项:
A: C语言中顺序读写方式不适用于二进制文件
B: C语言中的文本文件以ASCⅡ码形式存储数据
C: C语言中对二进制文件的访问速度比文本文件快
D: C语言中随机读写方式不适用于文本文件
答案: 【 C语言中顺序读写方式不适用于二进制文件】
13、单选题:
以下程序执行后输出结果是#include <stdio.h>
int main()
{
FILE *fp;
int i,k=0,n=0;
fp=fopen("d1.dat","w");
if (fp == NULL)
{
printf("cannot open the file.n");
exit(0);
}
for(i=1;i<4;i++)
{
fprintf(fp,"%d",i);
}
fclose(fp);
fp=fopen("d1.dat","r");
if (fp == NULL)
{
printf("cannot open infile.n");
exit(0);
}
fscanf(fp,"%d%d",&k,&n);
printf("%d %dn",k,n);
fclose(fp);
return 0;
}
选项:
A: 123 0
B: 1 2
C: 1 23
D: 0 0
答案: 【 123 0】
14、单选题:
以下叙述中错误的是
选项:
A: 不可以用FILE定义指向二进制文件的文件指针。
B: 二进制文件打开后可以先读文件的末尾,而顺序文件不可以。
C: 在程序结束时,应当用fclose()函数关闭已打开的文件。
D: 在利用fread()函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据。
答案: 【 不可以用FILE定义指向二进制文件的文件指针。】
15、单选题:
若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为
选项:
A: 0
B: 1
C: -1
D: 一个非0值
答案: 【 0】
2 数字间的那些事儿,做点计算哈
不同类型数据的运算
1、判断题:
通常情况下,不同类型数据的运算结果的类型是取值范围较大的那种类型。
选项:
A: 正确
B: 错误
答案: 【 正确】
在定义变量的时候对变量进行初始化
1、单选题:
下列语句中错误的是()。
选项:
A: int a, b, c;a=b=c=0;
B: int a, b, c;a=0;b=0;c=0;
C: int a=0;int b=0;int c=0;
D: int a=b=c=0;
答案: 【 int a=b=c=0;】
强制类型转换
1、判断题:
强制类型转换运算符就是强制改变一个变量原有的数据类型。
选项:
A: 正确
B: 错误
答案: 【 错误】
第2周单元测验
1、单选题:
下列程序的输出结果是#include <stdio.h>
int main()
{
int a=7,b=5;
printf("%dn",b/a);
return 0;
}
选项:
A: 0
B: 5
C: 1
D: 0.7
答案: 【 0】
2、单选题:
以下程序的输出结果是:#include <stdio.h>
int main()
{
int a=1, b=2;
a=a+b;
b=a-b;
a=a-b;
printf("%d,%dn", a, b );
return 0;
}
选项:
A: 2,1
B: 3,1
C: 3,2
D: 1,2
答案: 【 2,1】
3、单选题:
程序运行后的输出结果是#include <stdio.h>
int main()
{
int m=3,n=4,x;
x=m++;
++n;
x=x+8/n;
printf("%d,%dn",x,m);
return 0;
}
选项:
A: 4,4
B: 4,3
C: 5,4
D: 5,3
答案: 【 4,4】
4、单选题:
下面程序的运行结果是#include <stdio.h>
int main()
{
int a = 2, b = 3 ;
float x = 3.5, y = 2.5 ;
printf("%f", (float)(a+b) / 2 + (int)x % (int)y) ;
return 0;
}
选项:
A: 3.500000
B: 3.000000
C: 3.5
D: 3
答案: 【 3.500000】
5、单选题:
以下非法的赋值语句是
选项:
A: ++(i+1);
B: x=(j--);
C: n=++i;
D: j++;
答案: 【 ++(i+1);】
6、单选题:
设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是
选项:
A: 6.000000
B: 6.500000
C: 9
D: 5.500000
答案: 【 6.000000】
7、单选题:
以下程序的运行结果是#include <stdio.h>
int main()
{
int a = 12, b = 3;
float x = 18.5, y = 4.5;
printf("%fn", (float)(a * b) / 2);
printf("%dn", (int)x %(int)y);
return 0;
}
选项:
A: 18.0000002
B: 182
C: 182.000000
D: 18.0000002.000000
答案: 【 18.0000002】
8、单选题:
设有语句“int a = 3;”,执行语句“a += a -= a * a;”后,变量a的值是
选项:
A: -12
B: 3
C: 0
D: 9
答案: 【 -12】
9、单选题:
在C语言中,要求操作数必须是整型的运算符是
选项:
A: %
B: /
C: *
D: +
答案: 【 %】
10、单选题:
在下面的C语言语句中,存在错误的是
选项:
A: int a=b=10;
B: int a=10,b=10;
C: int a,b;a=b=10;
D: int a,b;a=10;b=10;
答案: 【 int a=b=10;】
11、单选题:
若以下选项中的变量已正确定义,则正确的赋值语句是
选项:
A: x3=x2=x1=0;
B: x1=26.8%3;
C: 1+2=x2;
D: x4=1+2=3;
答案: 【 x3=x2=x1=0; 】
12、单选题:
若有以下定义,则表达式“a * b + d – c”的值的类型为#include <stdio.h>
int main()
{
char a;
int b;
float c;
double d;
....
return 0;
}
选项:
A: double
B: int
C: float
D: char
答案: 【 double】
13、单选题:
在C程序中如果要使用数学函数,如sin(x),log(x)等,需要在程序中加入的语句是
选项:
A: #include <math.h>
B: #include <stdio.h>
C: #include <string.h>
D: #include <ctype.h>
答案: 【 #include <math.h>】
14、单选题:
已知int a,b;并且有a=5%3;以及b=5/3;,则a和b的值分别是( )。
选项:
A: 2和1
B: 0和1.67
C: 3和1
D: 5和1
E: 0和1
F: 3和1.67
G: 5和1.67
答案: 【 2和1】
练兵区——单选题——不计入总分
1、单选题:
设有语句“int a = 3;”,执行语句“a += a -= a * a;”后,变量a的值是
选项:
A: -12
B: 3
C: 0
D: 9
答案: 【 -12】
2、单选题:
在C程序中如果要使用数学函数,如sin(x),log(x)等,需要在程序中加入的语句是
选项:
A: #include <math.h>
B: #include <stdio.h>
C: #define <math.h>
D: #define <stdio.h>
答案: 【 #include <math.h>】
3、单选题:
设有以下定义,则下面给出的语句中错误的是int a=0;
float b=1.25;
char c='A';
#define d 2
选项:
A: d++;
B: (a+b)++;
C: (a+1)++;
D: a++;
E: b++;
F: c++;
答案: 【 d++;;
(a+b)++;;
(a+1)++;】
4、单选题:
以下程序的输出结果是:#include <stdio.h>
int main()
{
int a=1, b=2;
a=a+b;
b=a-b;
a=a-b;
printf("%d,%dn", a, b );
return 0;
}
选项:
A: 2,1
B: 3,1
C: 3,2
D: 1,2
答案: 【 2,1】
5、单选题:
下面哪条语句可以生成0-9之间的随机数
选项:
A: magic=rand()%10;
B: magic=rand()%10+1;
C: magic=rand()/10;
D: magic=rand()/10+1;
答案: 【 magic=rand()%10;】
6、单选题:
在下面的C语言语句中,存在错误的是
选项:
A: int a=b=10;
B: int a=10,b=10;
C: int a,b;a=b=10;
D: int a,b;a=10;b=10;
答案: 【 int a=b=10;】
7、单选题:
若有以下定义,则表达式“a * b + d – c”的值的类型为#include <stdio.h>
int main()
{
char a;
int b;
float c;
double d;
....
return 0;
}
选项:
A: double
B: int
C: float
D: char
答案: 【 double】
8、单选题:
下列程序的输出结果是#include <stdio.h>
int main()
{
int a=7,b=5;
printf("%dn",b/a);
return 0;
}
选项:
A: 0
B: 5
C: 1
D: 0.7
答案: 【 0】
9、单选题:
程序运行后的输出结果是#include <stdio.h>
int main()
{
int m=3,n=4,x;
x=m++;
++n;
x=x+8/n;
printf("%d,%dn",x,m);
return 0;
}
选项:
A: 4,4
B: 4,3
C: 5,4
D: 5,3
答案: 【 4,4】
10、单选题:
下面程序的运行结果是#include <stdio.h>
int main()
{
int a = 2, b = 3 ;
float x = 3.5, y = 2.5 ;
printf("%f", (float)(a+b) / 2 + (int)x % (int)y) ;
return 0;
}
选项:
A: 3.500000
B: 3.000000
C: 3.5
D: 3
答案: 【 3.500000】
11、单选题:
已知int a,b;并且有a=5%3;以及b=5/3;,则a和b的值分别是
选项:
A: 2和1
B: 0和1.67
C: 3和1
D: 5和1
E: 0和1
F: 3和1.67
G: 5和1.67
答案: 【 2和1】
12、单选题:
设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是
选项:
A: 6.000000
B: 6.500000
C: 6
D: 5.500000
答案: 【 6.000000】
13、单选题:
以下程序的运行结果是#include <stdio.h>
int main()
{
int a = 12, b = 3;
float x = 18.5, y = 4.5;
printf("%fn", (float)(a * b) / 2);
printf("%dn", (int)x %(int)y);
return 0;
}
选项:
A: 18.0000002
B: 182
C: 182.000000
D: 18.0000002.000000
答案: 【 18.0000002】
14、单选题:
在C语言中,要求操作数必须是整型的运算符是
选项:
A: %
B: /
C: *
D: +
E: -
答案: 【 %】
15、单选题:
若以下选项中的变量已正确定义,则正确的赋值语句是
选项:
A: x3=x2=x1=0;
B: x1=26.8%3;
C: 1+2=x2;
D: x4=1+2=3;
答案: 【 x3=x2=x1=0; 】
运算符的优先级和结合性
1、判断题:
二元的算术运算符的结合性都是左结合。
选项:
A: 正确
B: 错误
答案: 【 正确】
3 从键盘中来,到键盘中去,开始输入和输出啦
单个字符的输入输出
1、判断题:
单个字符既可以以c格式符也可以以d格式符输出,前者是输出这个字符,后者是输出这个字符的ASCII码值。
选项:
A: 正确
B: 错误
答案: 【 正确】
格式字符
1、判断题:
在调用printf函数输出数据时,当数据的实际位宽大于printf函数中的指定位宽时,将按照数据的实际位宽输出数据。
选项:
A: 正确
B: 错误
答案: 【 正确】
第3周测验
1、单选题:
分析下列程序,写出程序运行结果#include <stdio.h>
int main()
{
char c1 = 'a', c2 = 'b', c3 = 'c';
printf("a%cb%cc%cabcn", c1, c2, c3);
return 0;
}
选项:
A: aabbccabc
B: acbcabc
C: aabcabc
D: acbbcabc
答案: 【 aabbccabc】
2、单选题:
有如下语句,为使变量a的值为1,b的值为2,从键盘输入数据的正确形式是scanf("a=%d,b=%d",&a,&b);
选项:
A: a=1,b=2
B: 1 2
C: 1,2
D: a=1 b=2
答案: 【 a=1,b=2】
3、单选题:
#include <stdio.h>
int main()
{
int a,b,c,d;
scanf("%c%c%d,%d",&a,&b,&c,&d);
printf("%c,%c,%c,%cn",a,b,c,d);
return 0;
}若运行以上程序时从键盘上输入:6565,66<回车>。则输出结果是
选项:
A: 6,5,A,B
B: 6,5,65,66
C: 6,5,6,5
D: 6,5,6,6
答案: 【 6,5,A,B】
4、单选题:
以下程序的