一,选择题
1,若有以下定义数组并初始化错误语句( A ).
char a[10]={'0','1','2','3','4','5','6','7','8','9'};
A) scanf("%c",a[0]);
B) scanf("%s",&a);
C) printf("%c",a[3]);
D) printf("%s",a);
2,以下程序输出结果为( )
#include "stdio.h"
main()
{
int i,b,k=0;
for(i=1;i<=5;i++)
{
b=i%2;
while (b-->=0) k++;
}
printf("%d,%d\\n",k,b);
}
A. 3,-1 B. 8,-1 C. 3,0 D. 8,-2
3,根据if比较语句,顺序给出VAR的类型。( )
if(!var)
if(var==NULL)
if(var==0)
if ((var >= - 0.00001) && (var <= 0.00001)
A. int B. BOOL C. float D. 指针
4,以下正确的描述是( )。
A) continue语句的作用是结束整个循环的执行
B) 只能在循环体内和switch语句内使用break语句
C) 在循环体内使用break语句或continue语句的作用相同
D) 从多层循环嵌套中退出时,只能使用goto语句
E) break 语句不能用于循环语句和switch语句外的任何其他语句
F) 在switch语句中使用break语句或continue语句的作用相同
G) 在循环语句中使用continue语句是为了结束本次循环,而不是终止整个循环的执行
H) 在循环语句中使用break语句是为了使流程跳出循环体,提前结束循环
5,假定在32位机器上设有以下说明和定义:
typedef union
{
long i;
int k[5];
char c;
} DATE;
struct data
{
int cat;
DATE cow;
double dog;
} too;
DATE max;
则语句 printf("%d",sizeof(struct data)+sizeof(max));的执行结果是:( )。
A. 32 B. 48 C. 52 D.
6,下面程序输出是( )
#include main ( ) { char *a="1234"; fun(a); printf("\\n"); } fun ( char *s) { char t; if(*s) {t = *s++; fun(s); } if(t !='\\0') putchar( t ); } A) 1234 B) 4321 C)1324 D) 4231 二,问答及找错 1,写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) <= (B) (A) : (B)) 2,关键字static的作用是什么?以下程序运行结果是? 在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 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, 3,说明以下程序有什么问题 A程序: int main() { char a; char *str=&a; strcpy(str,"hello"); printf(str); return 0; } 答;没有为str分配内存空间,将会发生异常 问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。 B程序: #include #include void getmemory(char *p) { p=(char *) malloc(100); } int main( ) { char *str=NULL; getmemory(str); strcpy(p,"hello world"); printf("%s/n",str); free(str); return 0; } 答: 程序崩溃,getmemory中的malloc 不能返回动态内存, free()对str操作很危险 C程序: char szstr[10]; strcpy(szstr,"01234567"); 答;正常输出,长度不一样,会造成非法的OS,覆盖别的内容. 三,编程作业 1,下面代码的功能是把一个字符串倒序,如“abcd”倒序后变为“dcba”,请指出错误,修改完成代码。 #include"string.h" main() { char*src="hello,world"; char* dest=NULL; int len=strlen(src); dest=(char*)malloc(len); char* d=dest; char* s=src[len]; while(len--!=0) d++=s--; printf("%s",dest); return 0; } 答: 方法1:一共有4个错误; int main() { char* src = "hello,world"; int len = strlen(src); char* dest = (char*)malloc(len+1);//要为分配一个空间 char* d = dest; char* s = &src[len-1]; //指向最后一个字符 while( len-- != 0 ) *d++=*s--; *d = 0; //尾部要加’\0’ printf("%sn",dest); free(dest); // 使用完,应当释放空间,以免造成内存汇泄露 dest = NULL; //防止产生野指针 return 0; } 2,按注释说明完成以下程序: int func1( double fAmt) { /* 如果输入金额fAmt大于0,返回1 */ /* 如果输入金额fAmt等于0,返回0 */ /* 如果输入金额fAmt小于0,返回-1 */ } /* 金额单位为人民币元,最小单位为0.01*/ 3,根据以下数据表完成SQL: 在数据库中有数据表 SSS ( aa char(10), bb interger, cc decimal(16,2) ),请根据以下描述写出对应的SQL语句 ① 向表SSS中增加字段 dd用于存放变长字符串,其最大长度为128 ② 依据字段aa和bb给表SSS建立唯一索引 ③ 在建立上述唯一索引时因为存在重复记录导致失败,请用一条SQL语句将该表中的重复记录查找出来 4,根据以下数据表完成SQL: 现有Customers表和Sales表的数据如下: Customers ①给出查询语句,描述:在客户表中查询名字为AA或Bolt的查询语句。 ②给出删除操作,描述:在Sales表中删除SaleId为234115的语句。下载本文
SalesCustId Name ShpCity Discount 499320 Adapto PortLand 0.05 0003 AA PortLand 0.05 888402 Seaworth Albany 0.04
要求:SaleId CustId SaleMount 234112 499320 8000 234113 888402 6500 234114 499320 5900 234115 0003 4500