C语言作业题(3)
来源:互联网 发布:广西广电网络收费标准 编辑:程序博客网 时间:2024/05/16 09:52
PS:机器运行环境32位系统。
一、 填空题:
1、 执行一下程序,while循环执行次数()(1分)。 int k = 0; while (!(k = 1)) {k++}
!(k=1)结果为0,不进入循环
2、 有定义:char p[] = {‘a’, ‘b’, ‘c’}, *q = p; 在下面找出一个不能计算出char型数据所占字节数的表达式是()(1分)。
sizeof(p) sizeof(char) sizeof(*q) sizeof(p[0])
sizeof(p)是数组的大小
3、 若定义:int a[9], *p = a; 不能表示a[1]地址表达式的是()(1分)。
p + 1 a + 1 a++ ++p
数组名a不能做左值
4、 (2分)改错:从指定的字符串中删除指定的字符,同一字母的大小写按不同的字符处理。
void func(char p[], char c)
{
int i , j;
for (i=0; p[i]==’\0’; i++)
{
if (c != p[i])
{
p[j++] = p[i];
}
}
}
j未初始化
p[j]=’\0’;
p[i]!=’\0’
5、 (4分)在一个32位的计算机中,计算下面的值。
void main(void)
{
struct
{
char c;
int a;
char b;
}B;
char *s1 = “0123456789”;
char s2[] = “0123456789”;
char s3[100] = “0123456789”;
int s4[100];
char q1[] = “abc”;
char q2[] = “a\n”;
char *q3 = “a\n”;
int len1 = sizeof(s1); //4,指针
int len2 = sizeof(s2);//11
int len3 = sizeof(s3);//100
int len4 = sizeof(s4);//400
int len5 = sizeof(q1);//4
int len6 = sizeof(q2);//3
int len7 = sizeof(q3);//4
int len8= sizeof(B);//12
}
6 (2分)int func(x)
{
int countx = 0;
while(x)
{
countx ++;
x = x&(x-1);
}
return countx;
}
假定x = 9999。写出下面程序的运算结果().
每次置一个二进制的一为零,9999的二进制是0010 1110 0000 1111,所以一共执行八次
7、(4分)int a[5] = {1, 3, 5, 7, 9};
int *p1 = a + 1;
int p2 = (int )(&a + 2);
printf(“%d.\n”, *(p1+1));//5
printf(“%d.\n”, *p1++);//3
printf(“%d.\n”, ++(*p1));//6
printf(“%d.\n”, *(p2-8)); //6
8、(3分)(1)、func(char *a){} 解释:传递的是字符串首元素的地址。
(2)、func(char a[]){} 解释:传递的是数组首元素的地址。
(3)、func(char a[8]){} 解释:传递的是数组首元素的地址。
9、(3分)分别写出int,float,指针类型的变量a 与“零”的比较语句。
int a ==0;
float if(a>-0.000001&&a<0.000001)
int *a == NULL;
10、(2分)下面代码输出什么,为什么?
void func(void)
{
unsigned int a = 6;
char b = -20;
if (a + b > 6)
{
printf(“> 6.\n”);
}
else
{
printf(“< 6.\n”);
}
}
char类型将会转换为unsigned int 类型进行计算
11、(2分)int a = -9; 那么按位取反和按逻辑取反是多少。
按位取反是8,逻辑取反是0
14、(2分)What will be printed as the result of the operation below:
main()
{
char *ptr = ” Cisco Systems”;
*ptr++; printf(“%s\n”,ptr);
ptr++;
printf(“%s\n”,ptr);
}
写出输出结果:
Cisco Systems
isco Systems
17、(5分)请写出下面代码在 32 位平台上的运行结果,并说明 sizeof 的性质:
#include <\stdio.h>
#include <\stdlib.h>
int main(void)
{
char a[30];
char b = (char )malloc(20 * sizeof(char));
printf(“%d\n”, sizeof(a));//30
printf(“%d\n”, sizeof(b));//4,指针
printf(“%d\n”, sizeof(a[3]));1
printf(“%d\n”, sizeof(b+3));//4,指针
printf(“%d\n”, sizeof(*(b+4)));//1
return 0 ;
}
19、(1分)
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
20、(4分)int array[10],不能对数组执行array++语句,原因是(数组名不能做左值)。该数组的数组名array代表的含义是(首元素的首地址),&array代表的含义是(数组整体的首地址),数组名不能作为左值的原因:(数组名是一段地址常量,不可更改。并且其大小与数组大小相同,没有与之大小匹配的数值)
21、(2分)下面程序段的运行结果是
char *s=”abcde” ;
s+=2 ; printf(“%d”,s);
s的地址,是随机值
22、(1分)一个栈的入栈序列是abcde,则栈的不可能输出序列是:C
A. edcba B. decba C. dceab D. abcde
23、(20分)根据下面给出的声明和数据,对每个表达式进行求值并写出他的值。在每个表达式进行求值是使用原来给出的值(也就是说,某个表达式的结果不影响后面的表达式)。假定ints数组在内存中的起始位置是0x40000100,整型值和指针的长度都是4字节。
int ints[20]={10, 20, 30, 40, 50, 60, 70, 80, 90, 100,110, 120, 130, 140, 150, 160, 170, 180, 190, 200
};
(Other declarations)
int *ip=ints+3;
24、(1分)int a[3][2] = {(1,2),(3,4),(5,6)};
int *p = a[0];
printf(“%d\n”,p[0]);
return 0;
输出结果:2
25、(2分)下题中调用GetMemory()能否使str获得期望的内存,为什么?
Void GetMemory(char *p, int num)
{
p = (char )malloc(sizeof(char) num);
}
void Test(void)
{
char *str = NULL;
GetMemory(str, 100);
strcpy(str, “hello”);
printf(“%s\n”,str);
}
不能,p是形式参数,退出函数后释放
26、(3分)已知有以下定义:
char str1[] = “abcd”;
char str2[] = “abcd”;
const char str3[] = “abcd”;
const char str4[] = “abcd”;
const char *str5 = “abcd”;
const char *str6 = “abcd;
char *str7 = “abcd”;
char *str8 = “abcd”;
判断下列表达式是否相等?
str1 == str2 不相等
str3 == str4 不相等
str5 == str6 相等
27、(2分)以下两段程序输出分别是什么,为什么?
#include <\stdio.h>
char *returnStr()
{
char p[]=”hello world!”;
return p;
}
int main()
{
char *str=NULL;
str=returnStr();
printf(“%s\n”, str);
return 0;
}
函数形参退出即销毁,返回了指针但不会指向对应的内容
28、(2分)这段程序运行的结果是()
int main()
{
const int N = 10;
const int M = 2;
int *a = new int[N];
for (int i=0; i<\N; i++)
{
a[i] = (0==i%2) ? (i+2):(i+0);
}
int (b)[N/M] = (int()[N/M])a;
for (int i=0; i<\M; ++i)
for (int j=0; j<\N/M; ++j)
printf(“%d”, b[i][j]);
return 0;
21436587109
二、编程(20分)
1、(2分)按要求完成一个程序:
int main(void)
{
char a = 0;
/*自定义你的函数名,要求:
1、调用函数完成后,a的值变为1;
2、a的改变不能通过返回值
*/
printf(“a = %d.\n”, a);
return 0;
}
#include <stdio.h>void func(int *a){ *a = 1;}int main(){ char a = 0; func(&a); printf("a = %d.\n", a); return 0;}//Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.
2、(4分)请完成以下题目。
a)请编写一个 C 函数,该函数给出一个字节中1的个数
#include <stdio.h>int func(int* p){ char *n=(char*)p; char buf=1; int ret=0; for(buf=1;buf!=0;buf<<=1) { if(((*n)&buf)!=0) ret++; } return ret;}int main(void){ int num=0; scanf("%d",&num); printf("%d",func(&num)); return 0;}
b) 请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。
int func2(char *buf, char c){ int i = 0; while (buf[i] != 0) { if (c == buf[i]) return i; i++; } return -1;}
3、(14分)
某游戏公司刚创立时只有一名员工,每名员工有3个月试用期,试用期过后转为正式员工,每名正式员工每个月都会推荐一名新员工进入公司,新员工经过3个月试用期后转为正式员工后每个月又会推荐一名新员工进入公司,假如公司创立时的第一名员工也需要试用期,并且所有员工都不会离职。据此,写出main方法打印出公司成立前a个月总员工数量
#include <stdio.h>int worker (int n){ if(n<=3) return 1; return (worker(n-1)+worker(n-3));} int main(void){ int n=0; printf("Input mounth:"); scanf("%d",n); printf("%d",worker(n)); return 0;}
某种特殊的数列a1,a2,a3的定义如下,a1=1,a2=2,an=2*a(n-1)+a(n-2)。给出任意一个正整数k,求该数列的第k项模32767的结果是多少
#include <stdio.h>#include <malloc.h>int func(int k){ if (k > 2) return(2 * func(k - 1) + func(k - 2)); if (k == 1) return 1; if (k == 2) return 2;}int main(void){ //输入n组数据 int n = 0; scanf("%d", &n); int *p = (int *)malloc(n * sizeof(int)); if (NULL == p) { printf("malloc error"); return -1; } int i = 0; for (i = 0; i < n; i++) scanf("%d", &p[i]); //计算值并输出 for (i = 0; i < n; i++) { int ret = 0; ret = func(p[i]); printf("%d\n", ret%32767); } //释放 free(p); p = NULL; return 0;}
- C语言作业题(3)
- C语言作业题(1)
- C语言作业题(2)
- C语言作业题(4)
- C语言作业题(5)
- 一道大学c语言作业题
- 科锐C语言01-作业题
- 初学C语言----循环作业题
- 一道留学作业题//C语言
- c语言作业题11.11/12
- c作业题12.06
- c语言选择结构作业题练习分享(附答案、考点、难度、分析)
- c语言选择结构作业题练习分享第二部分(附答案、考点、难度、分析)
- 初学C语言第一个难点--if作业题的两种思维解法
- 作业题
- 作业题
- 作业题
- 作业题
- Codeforces Round #449 (Div. 2) 897A. Scarborough Fair
- pandas聚合和分组运算之groupby
- 记录百度地图开发(android)百度地图定位返回4.9E-324的解决方案
- mongo-java-driver -3.2.2学习笔记-08-Monitoring
- Spring Boot 启动项目返回对象时 页面 spring boot type=Not Acceptable, status=406
- C语言作业题(3)
- NOIP 2017 Day1 总结
- 怎样查看django的安装路径
- python创建Excel文件 xlwt
- python中pandas.DataFrame对行与列求和及添加新行与列示例
- Git常用命令总结,不定期更新
- windows linux共享文件夹 samba
- scala akka http基本使用
- maven 依赖包无法下载