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;
}