A. (c语言程序执行结果分析题)按行优先的方式把一个二维数组的元素存入一个一维数组中,并输出
#include <stdio.h>
#include <malloc.h>
int main()
{
//这是一个二维数组
int arr[2][3] = {
{1,2,3},
{4,5,6}
};
//获取数组的尺寸和行列数:
int len = sizeof(arr) / sizeof(arr[0][0]);
int row = sizeof(arr) / sizeof(arr[0]);
int column = len / row;
//知道了长度就可以使用calloc创建一个给定长度的数组(但用完记得要free)
int* new_arr = (int*)calloc(len, sizeof(int));
//将二维数组内的数值写入一维数组
for (int i = 0; i < len; i++)
{
//确定行号 用索引 i 除以(每行中有几列) 得到行数
int y = i / column; // 如 第5个数 / 每列有3个,则为 4/3= “1”(第二行)
//确定列
int x = i % column; // 如 第5个数 % 每列有3个,则为 4/3= 1余 “1” (第二个)
//将该数值写入新数组
if (!new_arr) { free(new_arr); return 1; } //new_arr为空的验证,如果出现此错误则 return 1
else {
new_arr[i] = arr[y][x];
}
}
//输出新数组的数字
for (int i = 0; i < len; i++)
{
if (!new_arr) { free(new_arr); return 1; }
else {
printf("%d ", new_arr[i]);
}
}
free(new_arr);
}
B. 帮忙看几道C语言的期末题目~~谢谢!
6.a[2*’n’],这里是字符'n',用作乘法运算就是取出‘n'的ASCII码值进行运算,也就是110,a[2*110]自然没错;D)
z=(x+1)++-y,x+1运算结果作为
常量
保存在
暂存器
中,无法进行自增运算
14.
二维数组
在
内存
中其实是
一维数组
,比如int
a[3][3],然后a[0][0]就是第0个元素,a[2][2]就是第2*3+2=8个元素,而p只是一个int*,
编译器
压根就不知道p[i][i]应该是第i*1+i还是i*2+i或者i*n+i个元素,所以只能用p[i]一维数组的形式。
*p=a这里其实是int
*p
=
a;相当于int
*p,
p
=
a;在vs2010是直接报错的。
p++,p是int*类型,++就是移动一个int。
2.char只有8位,去掉一个符号位就剩下7位了,没法表示出130;
7.数组并不以'\0'结束,但是字符串是以'\0'结束,所以要
占个位置
;
5.数组'\0'算长度,字符串'\0'不算长度。
C. C语言期末考试编程题
1输入两个整数a和b,若a和b的平方和大于100,则输出平方和的百位以上的数字,否则输出a和 b的和。
要求: 1)输出结果时说明平方和是大于100还是小于100( >100或<100 )
#include<stdio.h>
int main(){
int a, b, c;
scanf("%d%d", &a, &b);
c = a * a + b * b;
if(c > 100) printf("平方和大于100\n%d\n", c%100);
else printf("平方和小于等于100\n%d\n", a + b);
return 0;
}
2输入一个整数,判断是否是5和7的公倍数,若是则输出:5and7yes,否则再判断是否是3的倍数,若是3的倍数输出:3yes,若都不是则输出:no
#include<stdio.h>
int main(){
int input;
scanf("%d", &input);
if(input % 5 == 0 && input % 7 == 0)printf("5and7yes\n");
else if(input % 3 == 0) printf("3yes\n");
else printf("no\n");
return 0;
}
第三,四题和第二题差不多
5计算公式: [ 2*x x=2
y= [ x*x+1 x<2
[ 2*x*x+3*x+1 x>2
要求: 1)从键盘输入x的值,根据x的值求y的值
2)输出y的值
#include<stdio.h>
int main(){
int x, y;
scanf("%d", &x);
if(x == 2) y = 2*x;
else if(x < 2) y = x*x+1;
else y = 2 * x * x + 3 * x + 1;
printf("%d\n", y);
return 0;
}
8 和7差不多
下面原理都差不多 用if基本都能搞定 判断条件就行了 应该LZ能搞定了 东西有点多 -。- 就写这些吧 其他的就不一一写了^ ^
D. c语言程序分析题
f中第一个参数是传值,编译器会复制一份a传递给函数f,复制的临时变量与a是两个不同的变量,它们的地址不同,此后f中的x与main中的变量a不再有任务关联
f的第二个参数是传地值,f中的y与b的地址在内存中是相同的,操作的是同一个地址
E. 帮忙看几道C语言的期末题目(二)~~3Q!
回答求助:
19.答案是C。因为x、y不是在main中声明的,所以它们是全局变量。在fun函数中用extern说明了x、y,这就使fun中的x、y也是全局变量了。你把extern删除,运行一下就是2,12了;你在main中把x、y声明一下,也就不听fun摆布了……这样你就恍然大悟了。
15.首先,二维数组可以设法降为一维数组,用一个下标操作,也可以只用前一个下标表示某一行的首地址。如a[2][3],那么可以用a[0]~a[5]操作这6个数,且a[0]、a[1]还表示第一行、第二行的首地址。所以B是正确的。
A错在说反了。实际上浮点数在计算机中都是近似值,且不连续。而整数在其范围内都是连续的,所以是精确的。
C的错在于,整型数是有范围的,把一个而无符号数最大值是有符号数的最大值的二倍+1,所以把一个大于有符号数最大值的无符号数赋给一个有符号变量就自动成了负数了。
D的错是文本文件也是用二进制数存放的。
1.C、D的错误太明显,算法有错。A能达到四舍五入,但不能截取两位小数;B正确。当把运算结果赋给整型变量m时,小数部分自然丢失,再除以100.0又获得了两位小数。严格说来B还有点问题,就是若要输出,会成为X.xxx0000的形式,还需要输出控制才能把0消除。不过这大概不是本题考虑的了。
11.我赞同你。显然是题错了。
10.不正确的是B而不是C,显然是答案错了。B错在不是偶数时,不能p++,结果就乱了……
F. c语言问题 编程分析
m = (i + j) / 2, n = (i - j) / 2
m,i,j,n都是整数。那么i+j和i-j都是偶数,所以i,j要么都是奇数要么都是偶数
G. C语言 程序分析题 求详解
这个程序应该是把
十进制数
转换成
二进制数
输出
#include
//
头文件
void
main()
{
int
a,b[10],c,i=0;
//
a存储待转换的十进制数,b[10]存储转换后的二进制位,
//
c
是存储
余数
,
printf("输入一个整数\n");
scanf("%d",&a);
//
输入需转换的十进制数
while(a!=0)
//
只要a不为零,就继续转换
{
c=a%2;
//
把a除以2
的余数赋值给c
a=a/2;
//
把商存入a进行下一次循环
b[i]=c;
//
把余数存到数组中作为二进制中的一位
i++;
}
for(;i>0;i--)
printf("%d",
b[i-1]);
//反向输出余数,即得到二进制
例如输入4
因为4
!=
0
4
/
2
=
2((商=a)...........0(余数=c=b[0])
因为2
!=
0
2
/
2
=
1((商=a)...........0(余数=c=b[1])
因为1
!=
0
1
/
2
=
0((商=a)...........1(余数=c=b[2])
因为
0
=
0
结束循环输出
b[2]
b[1]
b[0]
即
100,也就是二进制的
4
H. 问一段C语言程序期末题如何读懂这段程序
当检测到是个空格也是是(32)时,进入循环,把后面的所有字符往前挪动一位,所以这个for循环是要从i+1开始,全部移动完之后,把最后一位覆盖,其实这样做也不是最好的,复杂化了,完全可以直接申请同等大小的数组,只要不是空格就放进去,最后加上'\0',就可以了
I. C语言程序问题
1.-1
2.K=8
3.1 0 2 2 5 7 13 20
4.the sum is 8
三 1.
int fun(int x)
{
if(x<=0)return x*x+1;
else if(x<=1)return 1-x;
else return 2*x-1;
}
2.
#include<stdio.h>
int main()
{
int a[20];
a[0]=a[1]=1;
for(int i=2;i<20;i++)
a[i]=a[i-1]+a[i-2];
for(i=0;i<20;i++)
{
if(i%5==0)printf("\n");
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
3.//是不是题少东西了?只有三个数?
printf("%d",1+1*2+1*2*3);
4.
//从99开始
int counter=11;
int sum=0;
while((counter+1)*9<=300)
{
counter++;
sum+=counter*9;
}