c函數演算法
#include
#include
main()
{char
a[100];
gets(a);
printf("%s\n",a);
}
gets()函數用來從標准輸入設備(鍵盤)讀取字元串直到換行符結束,但換行符會被丟棄,然後在末尾添加'\0'字元。其調用格式為:
gets(s);
其中s為字元串變數(字元串數組名或字元串指針)。
gets(s)函數與scanf("%s:",&s)/*
scanf("%s",s)
*/相似,但不完全相同,使用scanf("%s",&s);函數輸入字元串時存在一個問題,就是如果輸入了空格會認為字元串結束,空格後的字元將作為下一個輸入項處理,但gets()函數將接收輸入的整個字元串直到遇到換行為止。
要函數就這樣:
#include
#include
void
sr(char
*a)
{
gets(a);
}
main()
{char
a[100];
sr(a);
printf("%s\n",a);
}
哦哦o(∩_∩)o^_^
⑵ c語言編寫16進制轉換十進制函數演算法
例題:請編制函數ReadDat()實現從文件IN.DAT中讀取100個十六進制整數到數組xx中;請編制函數H16To10().將xx中的十六進制數轉換成十進制數並把已轉換的十進制數仍存放在字元串數組xx,最後調用函數WriteDat()把結果輸出到OUT.DAT文件中。
原始數據文件存放的格式是:每行存放10個數,並用逗號隔開。(每個數均大於0且小於等於2000)
部分源程序已給出。
請勿改動主函數main()和輸出數據函數writeDat()的內容。
#include
<stdio.h>
#include
<stdlib.h>
#include
<ctype.h>
#include
<string.h>
#define
MAX
100
char
xx[MAX][20]
void
WriteDat(void)
int
ReadDat(viod)
{
FILE
*fp;
if((fp=fopen(\
IN.DAT\
,\
r)==NULL)
return
1;
fclose(fp);
return
0;
}
void
H16To10(void)
{
}
void
main()
{
int
i;
for(i=0;i<MAX;i++)memset(xx[i],0,20);
if(ReadDat()){
printf(\
數據文件IN.DAT不能打開!\\007\\n\
);
return;
}
H16To10()
WriteDat()
}
void
WriteDat(void)
{
FILE
*fp;
int
i;
fp=fopen(\
OUT.DAT\
,\
w\
);
for(i=0;i<MAX;i++)fprintf(fp,\
%s\\n\
,xx[i]);
fclose(fp);
}
--------------------------------------------------------------------------------
/*
註:該題與題39相似,只是改變函數itoa()的格式。*/
int
ReadDat(void)
{
FILE
*fp
;
int
i,data;
char
yy[20];
if((fp=fopen("in.dat","r"))==NULL)
return
1;
for(i=0;i<100;i++)
{fscanf(fp,"%x,",&data);itoa(data,yy,16);strcpy(xx[i],yy);}
fclose(fp)
;
return
0
;
}
void
H16to10(void)
{
int
i,data;
char
yy[20];
for(i=0;i<100;i++)
{data=strtol(xx[i],NULL,16);itoa(data,yy,10);strcpy(xx[i],yy);}
}
⑶ 求用c語言編寫一個函數二分法求根的演算法
二分法計算函數f(x)=x*x*x*x+2*x*x*x-x-1;
本程序在turbo c或c++下編譯
#include "stdio.h"
#include <math.h>
float f(float x)
{float y;
y=x*x*x*x+2*x*x*x-x-1;
return y;
}
void main()
{float a=0,b=0,h,y,x;
int k,n0;
printf("please input qujian a and b");
scanf("%f%f%d",&a,&b,&n0); /*輸入含根區間a,b,循環次數n0 */
for(k=0;k<=n0;k++)
{ x=(a+b)/2;
h=(b-a)/2;
y=f(x);
if(h<10e-6||fabs(y)<10e-6)
{ printf("k=%d,x=%f,y=%f",k,x,y);
break; } /*輸出分半次數k,函數的根x,及x對應的函數值.*/
else
{if(f(a)*f(x)<0)
b=x;
else a=x;
}
}
}
⑷ C語言中sin()函數用的什麼演算法
sin(x)泰勒公式
可以變在一個 sin(x)=f(x)
f(x)
是一個關於x的加減乘除的函數,極數無限的
當然,極數越多,精度越高,運算量越大
計算機取有限極數,作近似計算即可
⑸ 用C語言編寫函數,要實現快速排序演算法或者冒泡法
冒泡法排序函數如下:
void bubble(int a[],int n)
{int i,j,t;
for(i=0;i<n-1;i++)/*共進行n-1輪*/
for(j=0;j<n-1-i;j++)/*每輪在前n-i個數中比較*/
if(a[j]>a[j+1]) /*若相鄰元素逆序*/
{t=a[j]; a[j]=a[j+1];a[j+1]=t;}/*就交換*/
}
void sort(int *a, int left, int right)
{
if(left >= right)/*如果左邊索引大於或者等於右邊的索引就代表已經整理完成一個組了*/
{
return ;
}
int i = left;
int j = right;
int key = a[left];
while(i < j) /*控制在當組內尋找一遍*/
{
while(i < j && key <= a[j])
/*而尋找結束的條件就是,1,找到一個小於或者大於key的數(大於或小於取決於你想升
序還是降序)2,沒有符合條件1的,並且i與j的大小沒有反轉*/
{
j--;/*向前尋找*/
}
a[i] = a[j];
/*找到一個這樣的數後就把它賦給前面的被拿走的i的值(如果第一次循環且key是
a[left],那麼就是給key)*/
while(i < j && key >= a[i])
/*這是i在當組內向前尋找,同上,不過注意與key的大小關系停止循環和上面相反,
因為排序思想是把數往兩邊扔,所以左右兩邊的數大小與key的關系相反*/
{
i++;
}
a[j] = a[i];
}
a[i] = key;/*當在當組內找完一遍以後就把中間數key回歸*/
sort(a, left, i - 1);/*最後用同樣的方式對分出來的左邊的小組進行同上的做法*/
sort(a, i + 1, right);/*用同樣的方式對分出來的右邊的小組進行同上的做法*/
/*當然最後可能會出現很多分左右,直到每一組的i = j 為止*/
}
⑹ c語言函數遞歸的演算法
建議你把書中的階乘等遞歸再看看,
if(x/2==0) return 1是遞歸結束條件。
按題意:(pf(f(n))指列印f(n)值)
f(8)=pf(f(4))0=pf(f(2))00=pf(f(1))000=1000
⑺ c語言 pow函數的演算法
函數名: pow
功 能: 指數函數(x的y次方)
用 法: double pow(double x, double y);
程序例:
#include <math.h>
#include <stdio.h>
int main(void)
{
double x = 2.0, y = 3.0;
printf("%lf raised to %lf is %lf\n", x, y, pow(x, y));
return 0;
}
//說實在的,我實在不想復制源代碼往上貼,朋友你自己要看例子,多操作,你就可以知道是什麼意思了!
⑻ 如何用c語言中的函數遞歸調用演算法實現n階矩陣的n次冪的求解
/*用c語言中的函數遞歸調用演算法實現n階矩陣的n次冪*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
//創建矩陣,矩陣用一維數組存儲
double *matCreate(unsigned int m, unsigned int n)
{
double *p = (double *)malloc(sizeof(double) * m * n);
if (p == NULL) printf("創建矩陣失敗!\n");
return p;
}
//輸入矩陣元素
void matInput(double *a, unsigned int m, unsigned int n)
{
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
{
scanf("%f ", &a[i * n + j]);
}
}
return;
}
//隨機產生矩陣元素,均勻分布於[from to]
void matInitRand(double *a, unsigned int m, unsigned int n, double from, double to)
{
if (a == NULL || m <= 0 || n <= 0) return;
double x;
srand(time(NULL));
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
{
x = (1.0 * rand() / RAND_MAX) * (to - from) + from;
a[i * n + j] = x;
}
}
return;
}
//轉置
void matTranspose(double *a, double *b, unsigned int m, unsigned int n)
{
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
{
b[j*n +i]=a[i * n + j] ;
}
}
}
//輸出矩陣
void matPrint(double *a, unsigned int m, unsigned int n)
{
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
{
printf("%8.4f ", a[i * n + j]);
}
putchar('\n');
}
return;
}
//矩陣乘法c=a*b
void matMul(double *a, double *b, double *c, unsigned int m, unsigned int n, unsigned int k)
{
if (a == NULL || b == NULL || c == NULL || m <= 0 || n <= 0 || k <= 0) return;
double x = 0.0f;
for (int i = 0; i < m; ++i)
{
for (int u = 0; u < k; ++u)
{
x = 0.0f;
for (int j = 0; j < n; ++j)
{
x += a[i * n + j] * b[j * k + u];
}
c[i * k + u] = x;
}
}
return;
}
//b=a^n, a:m*m階矩陣
void matFac(double *a, double *b, unsigned int n, unsigned int m)
{
double *c = (double *)malloc(sizeof(double) * m * m); //保存臨時結果
if (n > 1)
{
matFac(a, c, n - 1, m);
matMul(a, c, b, m, m, m);
}
else
memcpy(b, a, sizeof(double)*m * m);
// printf("%d:\n",n);
// matPrint(b, m,m);
free(c); //回收內存
return ;
}
#define M 3
#define N 4
#define K N
int main(int argc, char const *argv[])
{
double *A, *B, *B1,*BT, *C;
A = matCreate(M, N);
B = matCreate(N, K);
B1 = matCreate(N, K);
BT = matCreate(K,N);
C = matCreate(M, K);
if (!A || !B || !B1 || !BT || !C) return -1;
matInitRand(A, M, N, 0.0f, 1.0f);
printf("A=\n");
matPrint(A, M, N);
matInitRand(B, N, K, 0.0f, 1.0f);
printf("B=\n");
matPrint(B, N, K);
matTranspose(B,BT,N,K);
printf("B'=\n");
matPrint(BT, K,N);
matMul(A, B, C, M, N, K);
printf("C=A*B\n");
matPrint(C, M, N);
matFac(B, B1, 4, N);
printf("B^4\n");
matPrint(B1, N, K);
return 0;
}
⑼ C語言 指針和函數編程實現折半查找演算法
//二分法查找演算法
intbinary_search(intarr[],int*top,int*bot,intx){
if(*bot>=*top){
intindex=*top+(*bot-*top)/2;
int*mid=&index;
if(arr[*mid]==x)return*mid;
if(arr[*mid]>x){//x在左側
*mid=*mid-1;
returnbinary_search(arr,top,mid,x);
}
else{//x在右側
*mid=*mid+1;
returnbinary_search(arr,mid,bot,x);
}
}
return-1;
}
voidmain()
{
inta[10]={1,3,5,7,8,9,12,13,15,17};
intn=sizeof(a)/sizeof(a[0]),x=13,t=0;
int*top=&t,*bot=&n;
*bot=*bot-1;
intindex=binary_search(a,top,bot,x);
if(index>=0){
printf("%d在數組索引為[%d]的位置 ",x,index);
}
else{
printf("%d在數組中不存在! ",x);
}
}
⑽ C語言常用的函數有哪些
C語言庫函數,常用庫函數有:
1、scanf格式輸入函數
2、printf格式輸出函數
3、systemdos命令函數
4、sort排序
5、main主函數
6、fgets文件讀取字元串函數
7、fputs文件寫入字元串函數
8、fscanf文件格式讀取函數
9、fprintf文件格式寫入函數
10、fopen打開文件函數
11、getchar輸入字元函數
12、putchar輸出字元函數
13、malloc動態申請內存函數
14、free釋放內存函數
15、abs求絕對值數學函數
16、sqrt求平方根數學函數
(10)c函數演算法擴展閱讀
語言組成:
1、數據類型
C的數據類型包括:整型、字元型、實型或浮點型(單精度和雙精度)、枚舉類型、數組類型、結構體類型、共用體類型、指針類型和空類型。
2、常量與變數
常量其值不可改變,符號常量名通常用大寫。
變數是以某標識符為名字,其值可以改變的量。標識符是以字母或下劃線開頭的一串由字母、數字或下劃線構成的序列,請注意第一個字元必須為字母或下劃線,否則為不合法的變數名。變數在編譯時為其分配相應存儲單元。
3、數組
如果一個變數名後面跟著一個有數字的中括弧,這個聲明就是數組聲明。字元串也是一種數組。它們以ASCII的NULL作為數組的結束。要特別注意的是,方括內的索引值是從0算起的。
4、指針
如果一個變數聲明時在前面使用 * 號,表明這是個指針型變數。換句話說,該變數存儲一個地址,而 *(此處特指單目運算符 * ,下同。C語言中另有 雙目運算符 *) 則是取內容操作符,意思是取這個內存地址里存儲的內容。指針是 C 語言區別於其他同時代高級語言的主要特徵之一。