當前位置:首頁 » 編程語言 » c語言編碼函數

c語言編碼函數

發布時間: 2022-04-22 14:32:54

c語言編程函數

/*function: 測量字元串長度
*in: 需要測長度的字元串
*out: 字元串長度
*/
int strlen(string str)
{
assert( str != NULL ); // #include <assert.h>
char *ch = NULL;
int iLength = 0;
ch = str;
while ( *ch != '\0')
{
ch = ch + 1;
iLength = iLength + 1;
}
return iLength;
}

Ⅱ c語言函數編寫

先寫一個輸入函數,把輸入的名字存到變數name裡面,調用函數seek(name);
子函數 string seek(string name)
循環比較name跟類數組中的名字,如果相同則return返回該同學數據,否則顯示"no find"
照著寫就行了,寫了出錯再問

Ⅲ c語言編寫函數

#include <stdio.h>
#define M 30
#define N 10
typedef struct
{
int score[N];//選手的10個得分,得分與評委一一對應
double aver;//選手的平均分
char name[81];//選手的姓名
} Choice;
int inputChoice(Choice peo[],int m,int n)
{
int i,j;
for(i=0;i<m;i++)
{
scanf("%s",peo[i].name);
for(j=0;j<n;j++)
scanf("%d",&peo[i].score[j]);
}
}
int sort(Choice peo[],int m,int n)
{
int i,j,k,t;
Choice temp;
for(i=0;i<n;i++)
{
peo[i].aver=0.0;
for(k=0;k<n-1;k++)
for(j=k+1;j<n;j++)
if(peo[i].score[k]>peo[i].score[j])
{
t=peo[i].score[k];
peo[i].score[k]=peo[i].score[j];
peo[i].score[j]=t;
}
for(j=1;j<n-1;j++)
peo[i].aver+=peo[i].score[j];
peo[i].aver/=n-2;
}
for(i=0;i<m-1;i++)
for(j=i+1;j<m;j++)
if(peo[i].aver<peo[j].aver)
{temp=peo[i];peo[i]=peo[j];peo[j]=temp;}
}
int main()
{
Choice peoples[M];
int m,n,i;
scanf("%d%d",&m,&n);
inputChoice(peoples,m,n);
sort(peoples,m,n);
for(i=0;i<3;i++)
printf("%s %.2lf ",peoples[i].name,peoples[i].aver);
return 0;
}


Ⅳ C語言函數編寫

#include<stdio.h>

void Reverse(int arr[], int size);

int main()
{
int arr[10] = {0};
printf("請輸入10個整數:\n");
for (int i=0; i<10; ++i)
{
scanf("%d", &arr[i]);
}

Reverse(arr, 10);

printf("反序:\n");
for (int i=0; i<10; ++i)
{
printf("%d ", arr[i]);
}

return 0;
}

void Reverse(int arr[], int size)
{
if (arr == NULL || size <=0)
return;

for (int beg=0, end=size-1; beg < end; ++beg, --end)
{
int tmp = arr[beg];
arr[beg] = arr[end];
arr[end] = tmp;
}
}

Ⅳ 用C語言編碼實現strlen函數

根據題意可得如下代碼:

#include<stdio.h>
intstrlen(char*s)
{
inti=0;
while(s[i]!='')i++;
returni;
}
intmain()
{
chars[10]="12345";
printf("%d ",strlen(s));
return0;
}

執行結果:

Ⅵ c語言定義函數是什麼

c語言定義函數是一段可以重復使用的代碼,用來獨立地完成某個功能,它可以接收用戶傳遞的數據,也可以不接收。

接收用戶數據的函數在定義時要指明參數,不接收用戶數據的不需要指明,根據這一點可以將函數分為有參函數和無參函數。

函數就是一段封裝好的,可以重復使用的代碼,它使得我們的程序更加模塊化,不需要編寫大量重復的代碼。函數可以提前保存起來,並給它起一個獨一無二的名字,只要知道它的名字就能使用這段代碼。

C語言特點及運用范圍:

C語言是一門面向過程的、抽象化的通用程序設計語言,廣泛應用於底層開發。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。它既具有高級語言的特點,又具有匯編語言的特點。

C語言特點:簡潔的語言、具有結構化的控制語句、豐富的數據類型、豐富的運算符、可對物理地址進行直接操作、代碼具有較好的可移植性、可生成高質量、目標代碼執行效率高的程序。

C語言是一門面向過程的計算機編程語言,C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、僅產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。C語言描述問題比匯編語言迅速、工作量小、可讀性好、易於調試、修改和移植,而代碼質量與匯編語言相當。

Ⅶ C語言函數代碼

#include <stdio.h>
#include <stdlib.h>
int isPrime(int m)
{
int flag,i;
flag=1;//默認標記為1,是素數
for(i=2;i<m;i++)//從2開始到m
{
if(m%i==0){flag=0;}//對比自身小的數字進行求余。如果能求余就不是素數,標記為0
}
return flag;//返回標記
}
int main()
{
int n,prime;
int count=0;//計數器從0開始
for(n=3;n<200;n=n+2)//奇數有可能會成為素數
{
prime=isPrime(n);//調用isPrime函數
if(prime==1)//如果返回值為1,則說明他是素數
{
count++;//計數,用來換行
printf("%5d",n);
if(count%5==0){printf("\n");}//每5個換行
}
}
system("pause");//暫停
return 0;
}

Ⅷ 用C語言編寫一個函數

#include <stdio.h>

void strtolower(char str[])
{
int i;
for (i = 0; str[i] != '\0'; ++i)
{
if (str[i] >= 'A' && str[i] <= 'Z')
str[i] = str[i] + 'a' - 'A';
}
}

int main ()
{
char str[256];
gets(str);
strtolower(str);
putchar('\n');
return 0;
}
以上程序中的strtolower函數即為所求函數

Ⅸ 用C語言編寫一個函數,該函數包含至少四個子函數的代碼

用c語言編寫一個函數請教數學教授,該函數包含了一共20個函數的代碼。

Ⅹ C語言庫函數如何編寫

/***
*printf.c - print formatted
*
* Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.
*
*Purpose:
* defines printf() - print formatted data
*
*******************************************************************************/

#include
#include
#include
#include
#include
#include
#include

/***
*int printf(format, ...) - print formatted data
*
*Purpose:
* Prints formatted data on stdout using the format string to
* format data and getting as many arguments as called for
* Uses temporary buffering to improve efficiency.
* _output does the real work here
*
*Entry:
* char *format - format string to control data format/number of arguments
* followed by list of arguments, number and type controlled by
* format string
*
*Exit:
* returns number of characters printed
*
*Exceptions:
*
*******************************************************************************/

int __cdecl printf (
const char *format,
...
)
/*
* stdout ''PRINT'', ''F''ormatted
*/
{
va_list arglist;
int buffing;
int retval;

va_start(arglist, format);

_ASSERTE(format != NULL);//斷言宏。如果輸出格式字元串指針為空,則在DEBUG版下斷言,報告錯誤。

_lock_str2(1, stdout);

buffing = _stbuf(stdout);//stdout:指定輸出到屏幕

retval = _output(stdout,format,arglist);

_ftbuf(buffing, stdout);

_unlock_str2(1, stdout);

return(retval);
}
以上為printf()的源代碼
1、從含有可選參數函數中獲得可選參數,以及操作這些參數
typedef char *va_list;
void va_start( va_list arg_ptr, prev_param );
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
假定函數含有一個必選參數和多個可選參數,必選參數聲明為普通數據類型,且能通過參數名來獲得該變數的值。可選參數通過宏va_start、va_arg和va_end(定義在stdarg.h或varargs.h中)來進行操作,即通過設置指向第一個可選參數指針、返回當前參數、在返回參數後重新設置指針來操作所有的可選參數。
va_start:為獲取可變數目參數的函數的參數提供一種便捷手段。設置arg_ptr為指向傳給函數參數列表中的第一個可選參數的指針,且該參數必須是va_list類型。prev_param是在參數列表中第一個可選參數前的必選參數。
va_arg:返回由arg_ptr所指向的參數的值,且自增指向下一個參數的地址。type為當前參數的類型,用來計算該參數的長度,確定下一個參數的起始位置。它可以在函數中應用多次,直到得到函數的所有參數為止,但必須在宏va_start後面調用。
va_end:在獲取所有的參數後,設置指針arg_ptr為NULL。
下面舉例說明:
#include
#include
int average( int first, ... );
void main( void )
{
/* Call with 3 integers (-1 is used as terminator). */
printf( "Average is: %d\n", average( 2, 3, 4, -1 ) );

/* Call with 4 integers. */
printf( "Average is: %d\n", average( 5, 7, 9, 11, -1 ) );

/* Call with just -1 terminator. */
printf( "Average is: %d\n", average( -1 ) );
}

int average( int first, ... )
{
int count = 0, sum = 0, i = first;
va_list marker;

va_start( marker, first ); /* Initialize variable arguments. */
while( i != -1 )
{
sum += i;
count++;
i = va_arg( marker, int);
}
va_end( marker ); /* Reset variable arguments. */
return( sum ? (sum / count) : 0 );
}
返回值為:
Average is: 3
Average is: 8
Average is: 0
綜上所述,在printf()函數中,可以只輸出一個字元串,也可按照一定的形式輸出含有多個可選參數的字元串信息。因此,首先就要通過這些宏來獲取所有的可選參數。在上面的源碼可以看出printf()中,只使用了宏at_start,將可選參數的首地址賦給了arglist。
2、鎖定字元串及輸出字元串到屏幕
#define _lock_str2(i,s) _lock_file2(i,s)
void __cdecl _lock_file2(int, void *);
#define _unlock_str2(i,s) _unlock_file2(i,s)
void __cdecl _unlock_file2(int, void *);
int __cdecl _stbuf(FILE *);
void __cdecl _ftbuf(int, FILE *);
int __cdecl _output(FILE *, const char *, va_list);
在output函數中,讀取格式字元串中的每一個字元,然後對其進行處理,處理方式根據每一個字元所代表的意義來進行,如:普通字元直接利用函數WRITE_CHAR(ch, &charsout);輸出到控制台。
其中的主要部分是對轉換說明符(d,c,s,f)的處理,現在將對其中的部分代碼進行詳細說明,這里只說明最基本的轉換說明符,對這些須基本的轉換說明符進行修飾的修飾符,程序中單獨進行處理。下面是函數output()(output.c)部分源代碼:
case ST_TYPE:
//表示當前處理的字元的類型為轉換說明符。
...
switch (ch) {
//下面對參數的獲取都是利用宏va_arg( va_list arg_ptr, type );來進行的。
case ''c'': {
//從參數表中獲取單個字元,輸出到緩沖字元串中,此時,type=int
buffer[0] = (char) get_int_arg(&argptr); /* get char to print */
text = buffer;
textlen = 1; /* print just a single character */
}
break;

case ''s'': {
//從參數表中獲取字元串,輸出到緩沖字元串中,此時,type=char*
int i;
char *p; /* temps */
text = get_ptr_arg(&argptr);
...
}
break;

case ''w'': {
//對寬字元進行處理
...
} /* case ''w'' */
break;
...
case ''e'':
case ''f'':
case ''g'': {
//對浮點數進行操作
...
#if !LONGDOUBLE_IS_DOUBLE
/* do the conversion */
if (flags & FL_LONGDOUBLE) {
_cldcvt((LONGDOUBLE*)argptr, text, ch, precision, capexp);
va_arg(argptr, LONGDOUBLE);
//對長雙精度型進行處理,此時,type=long double
}
else
#endif /* !LONGDOUBLE_IS_DOUBLE */
{

//對雙精度型進行處理,此時,type=double
_cfltcvt((DOUBLE*)argptr, text, ch, precision, capexp);
va_arg(argptr, DOUBLE);
}
...
break;
//對整型變數處理
case ''d'':
case ''i'':
...
goto COMMON_INT;

case ''u'':
radix = 10;
goto COMMON_INT;

case ''p'':
...
goto COMMON_INT;

case ''o'':
...

註:對於浮點型double和long double,有相應的轉換說明符(%f表示雙精度型,%lf表示長雙精度型),而float卻沒有。其中的原因是,在K&RC下,float值用於表達式或用作參數前,會自動轉換成double類型。而ANSI C一般不會自動把float轉換成double。有些程序已假定其中的float參數會被轉換成double,為了保護大量這樣的程序,所有printf()函數的float參數還是被自動轉換成double型。因此,在K&RC或ANSI C下,都無需用特定的轉換說明符來顯示float型。
綜上所述,轉換說明符必須與待列印字元的類型。通常,用戶有種選擇。例如,如要列印一個int類型的值。則只可以使用%d,%x或%o。所有這些說明符都表示要列印一個int類型的值;它們只不過提供了一個數值的幾種不同表示。類似一,可以用%f、%g和%e來表示double類型的值。但如果轉換說明與類型不匹配,將會出現意想不到的結果。為什麼呢?問題就在於C向函數傳遞信息的方式。
這個失敗的根本細節與具體實現相關。它決定了系統中的參數以何方式傳遞。函數調用如下:
float n1;
double n2;
long n3;
long n4;
...
printf("%ld,%ld,%ld,%ld",n1,n2,n3,n4);
這個調用告訴計算機,要把變數n1,n2,n3和n4的值交給計算機,它把這些變數放進稱作棧(stack)的內存區域中,來完成這一任務。計算機把這些值放進棧中,其根據是變數的類型而不是轉換說明符,比如n1,把8個位元組放入棧中(float被轉換成double),類似地,為n2放了8位元組,其後給n3和n4各放了4個位元組。接著,控制的對象轉移到printf();此函數從棧中讀數,不過在這一過程中,它是在轉換說明符的指導下,讀取數值的。說明符%ld指定printf()應讀4個位元組(va_arg( va_list arg_ptr, type )中type=long),因此printf()讀入棧中的4個位元組,作為它的第一個值。但是這只是n1的前半部分,這個值被看成一個long整數。下一個說明符%ld讀入4個位元組,這正是n1的後半部分,這個值被看成第二個long整數。類似地,第三、第四次又讀入n2的前後兩部分。因此,盡管我們對n3和n4使用了正確的說明符,printf()仍然會產生錯誤。

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:333
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:374
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:609
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:29
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:103
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:940
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:736
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:800
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:507
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:369