日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言——日常刷题(一)

發布時間:2025/5/22 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言——日常刷题(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實現如下兩個函數(不調用庫函數):

int myStrLen(char *s);

該函數功能為求字符串s的長度。

void myStrConcat(char *string1, char *string2);

該函數的功能為將字符串string2拼接至字符串string1后邊。
注意: 該函數的兩個參數,在調用時有可能會指向同一個字符串,函數需要在這種情況下能正確完成指定的功能。

主函數要求使用以上兩個函數實現如下功能:
輸入:
第一行為三個整數 n( 0 < n < 10 ), a, b, 第二行為n個整數,后邊為n行字符串,每個字符串長度不超過20。

輸出:

  • 要求首先將第 b 行字符串拼接至第 a 行的字符串后再輸出。
  • 第一行為 n 個用單個空格分隔的整數(最后一個數后無空格),為按各字符串的輸入次序輸出的各字符串的長度。
  • 后邊 n 行為將輸入的字符串按輸入的第 2 行給出的順序依次輸出。
  • 輸入保證合法且字符串中不包含空格。
  • #include<stdio.h>int myStrlen(char s[]) // 傳入一個s[]數組 {int i, len = 0; // 該變量只在該作用域中有用,當函數結束時,變量就會自動銷毀for (i = 0; s[i] != '\0'; i++) // 當s[i] = '\0' 循環結束len++; // 每在 s[]中取到一個值 len +1return len; // 循環結束返回len 的值,即數組的長度 }/*將str2指向的字符串連接到str1指向的數組末尾。若str1和str2指向的內存空間重疊,則作未定義處理。 */ char* myStrConcat(char* str1, char* str2) // 傳入2個字符串參數 {char* tmp = str1;while (*str1 != '\0') //當 str1 到末尾則停止循環{str1++; // 前進到str1的末尾處}while ((*str1++ = *str2++) != '\0'); // 循環復制直到遇到 str2中的 ‘\0’return tmp; // 返回 str1的值 }int main() {/*n 數組賦值的個數,例如 n = 1 數組 k[0] 進行賦值 剩余補零,n = 5 數組k [0] k[1] k[2] k[3] k[4] 進行賦值,數組剩余補零a 數組中要取的值的下標,不能超過定義數組的長度b 數組中要取的值的下標,不能超過定義數組的長度i 控制for循環的次數*/int n, a, b, i; int k[15]; // 定義一個長度為15的數組 // char s[10][50] = {}, fu[50] = {}; char s[10][50] = {}; // 定義一個二維數據 10行 50列. 初始值為 0char fu[50] = {}; // 定義一個 一維數組 長度 50, 初始值50puts("請輸入n的值");scanf("%d", &n); // 為n 賦值puts("請輸入a的值");scanf("%d", &a); // 為a 賦值puts("請輸入b的值"); scanf("%d", &b); // 為b 賦值// scanf("%d %d %d", &n, &a, &b);puts("請為int類型 數組 k 初始化");for (i = 0; i < n; i++) // k數組的長度 為 k[n],為數組的前n個位置進行賦值,剩余位置全部補零,原數組長度 15。scanf("%d", &k[i]);puts("請為char類型 數組 s 初始化");for (i = 0; i < n; i++) // s數組的長度 為 s[n],為數組的前n行第一個位置位置進行賦值,剩余位置 默認賦值'\0',原數組長度 15。(例如s[0][0] = 20, s[0][1] = '\0' s[0][2] = '\0', )scanf("%s", s[i]);// 如果 a的值 不等于 b的值 則調用myStrConcat 函數,對字符串進行拼接將 str2 拼接到 str1后if (a != b)myStrConcat(s[a], s[b]); // 將數組第 b 個位置 拼接到 第 a 個位置后面 (例如 s[a]指的是數組的下標,從人的角度去數 位置是a + 1,因為程序的起始位置是從0開始的)else if (a == b) // 如果 a的值 等于 b的值{for (i = 0; i < myStrlen(s[a]); i++) // 調用 myStrlen函數 得到 s[a]下標對應值的長度fu[i] = s[a][i]; // s[a][i] 當 i大于等于1時,值都是為'\0',只有當 i = 0時,才會有值,初始值賦值n個位置,就有n個值myStrConcat(s[a], fu); // 將fu [] 的值 拼接到 s[a] 的后面的到一個新的 s[a]的值}puts("打印數組中每一個下標對應的值的長度");for (i = 0; i < n; i++) // 由于 只為s[]數據的前n個位置賦值,所以在這里循環n次{if (i == 0)printf("s[%d] = %d\n", i, myStrlen(s[i])); // 打印數組中每一個下標對應的值的長度(例如:s[0] 長度為1 打印 1,s[5] 長度為7 打印 7,跟數組中具體值沒有關系)elseprintf("s[%d] = %d\n", i, myStrlen(s[i]));}printf("\n");puts("遍歷數組k[]的值");for (i = 0; i < n; i++)printf("k[%d] = %d\n", i, k[i]);puts("遍歷數組s[]的值");for (i = 0; i < n; i++)printf("s[%d] = %s\n", i, s[i]);puts("遍歷數組s[k[i]]的值");for (i = 0; i < n; i++)printf("s[%d] = %s\n", i, s[k[i]]); // 將k[]數組中的值作為 s[]數組的下標, 如果打印為空值,說明s[]對應的下標位置沒有進行賦值,默認賦值'\0'return 0; }

    總結

    以上是生活随笔為你收集整理的C语言——日常刷题(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。