1、找错
void test1()
{
char string[10];
char* str1="0123456789";
strcpy(string, str1);
}
这里string数组越界,因为字符串长度为10,还有一个结束符‘\0’。所以总共有11个字符长度。string数组大小为10,这里越界了。
PS:使用strcpy函数的时候一定要注意前面目的数组的大小一定要大于后面字符串的大小,否则便是访问越界。
void test2()
{
char string[10], str1[10];
for(i=0; i<10;i++)
{
str1[i] ='a';
}
strcpy(string, str1);
}
这里有一个一眼就能看出的问题,那就是变量i没有定义,这在代码编译阶段编译器可以帮你发现,很容易搞定。然而很多问题是自己造成的漏洞,编译器是帮不上什么忙的。这里最大的问题还是str1没有结束符,因为strcpy的第二个参数应该是一个字符串常量。该函数就是利用判断第二个参数的结束符来得到是否拷贝完毕。所以在for循环后面应加上str1p[9] = '\0';
PS:字符数组和字符串的最明显的区别就是字符串会被默认的加上结束符‘\0’。
void test3(char* str1)
{
char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
}
这里的问题仍是越界问题。strlen函数得到字符串除结束符外的长度。如果这里是<=10话,就很明显越界了。
小结:上面的三个找错的函数,主要是考查对字符串和字符数组的概念的掌握以及对strcpy函数和strlen函数的理解。
2、找错
DSN get_SRM_no()
{
static int SRM_no;
int I;
for(I=0;I<MAX_SRM;I++)
{
SRM_no %= MAX_SRM;
if(MY_SRM.state==IDLE)
{
break;
}
}
if(I>=MAX_SRM)
return (NULL_SRM);
else
return SRM_no;
}
这里for循环的判断语句是后来我加上的,估计在网上流传的时候被人给弄丢了,根据对程序的分析,给补上了。估计错误应该不是这儿。
简单的阅读一下这个函数,可以大概的可以猜测出这个函数的功能是分配一个空闲的SRAM块。方法:从上次分配的RAM块后的RAM块开始检测SRAM每个RAM块,看是否是IDLE状态,如果是IDLE则返回当前的RAM块的号SRM_no.如果所有的RAM块都不是IDLE状态,则意味着无法分配一个RAM给函数调用者,返回一个表示没有RAM可分配的标志(NULL_SRM)。
经过上面的分析,则这里可以知道,这个函数的错误是for循环里面没有给SRM_no这个变量累加1。
3、写出程序运行结果
int sum(int a)
{
auto int c=0;
static int b=3;
c+=1;
b+=2;
return(a+b+c);
}
void main()
{
int I;
int a=2;
for(I=0;I<5;I++)
{
printf("%d,", sum(a));
}
}
运行结果是:8,10,12,14,16,
在求和函数sum里面c是auto变量,根据auto变量特性知每次调用sum函数时变量c都会自动赋值为0.b是static变量,根据static变量特性知每次调用sum函数时变量b都会使用上次调用sum函数时b保存的值。
简单的分析一下函数,可以知道,若传入的参数不变,则每次调用sum函数返回的结果,都比上次多2.所以答案是:8,10,12,14,16,
4、func(1) = ?
int func(int a)
{
int b;
switch(a)
{
case 1: 30;
case 2: 20;
case 3: 16;
default: 0;
}
return b;
}
在 case 语句中可能忘记了对变量b赋值。如果改为下面的代码:
int func(int a)
{
int b;
switch(a)
{
case 1: b = 30;
case 2: b = 20;
case 3: b = 16;
default: b = 0;
}
return b;
}
因为case语句中漏掉了break语句,所以无论传给函数的参数是多少,运行结果均为0。
5、a[q - p] = ?
int a[3];
a[0]=0; a[1]=1; a[2]=2;
int *p, *q;
p=a;
q=&a[2];
很明显:a[q - p] = a[2] = 2;
6、内存空间占用问题
定义 int **a[3][4], 则变量占有的内存空间为:16位系统24,32位编译系统中是48。
PS:公式:3 * 4 * sizeof(int **)
7、程序编写
编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。
void ResetTheTime(int *year,int *month,int *date,int *hour,int *minute,int*second)
{
int dayOfMonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if( *year < 0 || *month < 1 || *month > 12 ||
*date < 1 || *date > 31 || *hour < 0 || *hour > 23 ||
*minute < 0 ||*minute > 59|| *second <0 || *second >60 )
return;
if( *year%400 == 0 || *year%100 != 0 && *year%4 == 0 )
dayOfMonth[1] = 29;
if(*second >= 60)
{
*second = 0;
*minute += 1;
if(*minute >= 60)
{
*minute = 0;
*hour += 1;
if(*hour >= 24)
{
*hour = 0;
*date += 1;
if(*date > dayOfMonth[*month-1])
{
*date = 1;
*month += 1;
if(*month > 12)
{
*month=1;
*year += 1;
}
}
}
}
}
return;
}
分享到:
相关推荐
本压缩包"‘C语言基础试题及答案’"提供了七套完整的C语言选择题,每套包含10题,旨在帮助学习者巩固和检验C语言的基本概念和编程技能。 1. **基本语法**:C语言的选择题可能涵盖关键字、数据类型(如int、char、...
C语言基础试题(20211215102413).pdf
C语言基础试题(带答案)
基础试题(C语言) 一、ANSI C/C++方面的知识 一.1、简答题。下面的题目必须全部答对才给分(20分): 1、如何在C中初始化一个字符数组。 char a[]=“dsfasdfdsafas”; 2、如何在C中为一个数组分配空间。 char a[20]; 3、...
本次的“C语言基础试题.pdf”文件提供了一系列的试题和代码示例,这些试题和代码涉及到了C语言的基础知识点。以下是根据文件部分内容提取的知识点: 1. C语言的标识符规则:C语言的标识符是由字母、数字和下划线...
C语言的习题,二级考题,全部的汇编。(1)算法具有五个特性,以下选项中不属于算法特性的是 A)有穷性 B)简洁性 C)可行性 D)确定性 (2) 以下叙述中正确的是 A)用C程序实现的算法必须要有输入和...
C语言考试试题基础版 本资源摘要信息是关于C语言考试试题基础版的知识点总结。下面是对标题、描述、标签和部分内容的详细解释: 标题:C语言考试试题基础版 描述:C语言考试试题基础版 标签:C语言考试试题基础版...
本资源“C语言基础练习面试题”是针对初学者和有一定经验的开发者设计的一系列练习,旨在帮助他们巩固C语言基础知识,提升编程技能,并为面试做好准备。 在C语言的基础部分,这些练习涵盖了以下几个关键知识点: 1...
"C语言基础考试题及答案" 本资源主要涵盖了C语言的基础知识,包括变量、数据类型、运算符、控制结构、函数、数组、指针等基本概念,以及常见的编程题目和答案。通过学习和实践这些题目,可以帮助程序员和开发者更好...
下面我们将详细探讨“已经设计好的C语言基础习题100题及答案”这个资源中涵盖的知识点。 1. **基本语法**: 包含了变量声明、数据类型(如int, char, float, double等)、常量定义(如#define或const)、运算符...
根据给定的C语言基础练习题及其描述,我们可以总结出一系列重要的C语言知识点,这些知识点不仅对于在校大学生,而且对于所有初学者都是极其宝贵的。下面将详细解释这些知识点: ### 1. C语言标识符规则 C语言中的...
通过对《C语言竞赛试题.doc》和《C语言竞赛试题及解答2.doc》的深入学习,可以全面巩固C语言基础知识,提高程序设计和调试技巧,为参加编程竞赛或实际项目开发打下坚实基础。解答部分尤为重要,它能帮助学习者理解...
C语言程序设计基础试题及答案 C语言程序设计基础试题及答案是计算机科学和技术专业学生的必修课程。该课程的主要目的是让学生掌握C语言的基础知识和编程技术,提高学生的编程能力和问题解决能力。下面是C语言程序...
C语言程序设计基础试题与答案.doc
C语言程序设计基础试题及答案 C语言程序设计基础试题及答案是C语言程序设计的基础知识测试,涵盖了C语言的基本概念、变量、数据类型、运算符、控制结构、函数、数组、指针等知识点。下面将对这些知识点进行详细的...
1. 基础题:涉及基本语法和简单计算,旨在检验编程基础。 2. 算法题:要求编写算法解决特定问题,如排序、搜索等。 3. 数据结构题:涉及数组、链表、栈、队列、树、图等数据结构的应用。 4. 文件操作题:测试读写...
【标题】"国考二级C语言上机试题"所涉及的知识点主要集中在C语言编程的基础概念、语法结构、数据类型、运算符、控制结构、数组、指针、函数、输入/输出等方面。这些是全国计算机等级考试二级C语言部分的核心内容,...