实验05 指针及其在程序设计中的应用(2021级)
1.?(排序二維數組)
題目編號:Exp05-Basic03,GJBook3例-07-01
題目名稱:排序二維數組
題目描述:編寫程序對輸入的二維整型矩陣進行遞增排序。
輸入:第一行輸入兩個正整數n和m (n, m<=50)分別對應矩陣的行數和列數。隨后n行,每行輸入m個整數,每個整數間以空格間隔。
輸出:排序后的矩陣:共n行,每行m個整數,之間以一個西文空格間隔,每行最后一個數字后除必要的回車換行符無其它字符,最后一行末尾無任何多余字符。
樣例:
輸入: 2?3 9?6?5 1?2?3 輸出: 1?2?3 5?6?9 #include <stdio.h> int main(void) {int a[2500],x,y,i;scanf_s("%d %d", &x, &y);for (i = 0; i < x * y; i++)scanf_s("%d", &a[i]);int* p;p = a;int r, j, k;for (i = 1; i < x * y; i++){j = i - 1;while (*(p + j) > *(p + i) && j >= 0)j--;r = *(p + i);for (k = i - 1; k >= j + 1; k--)*(p + k + 1) = *(p + k);*(p + j + 1) = r;}int w=0;for (i = 0; i < x * y; i++){if (i % y == 0)printf("%d", *(p + i));else {printf(" %d", *(p + i));}if ((i + 1) % y == 0&&(i+1)/x!=y)printf("\n");}return 0; }2.?(字符串部分刪除)
題目編號 :Exp05-Basic04,GJBook3-07-11
題目名稱:字符串部分刪除
題目描述:
編寫程序實現:使用自編函數char * str_delete(char *s, int v, int w)從字符串s的第v個字符開始刪除w個字符,并將處理后的字符串首地址以函數返回值帶回調用點。
輸入:
第一行輸入兩個整數分別對應 v和w(0≤v, w<MIN(256,strlen(s))),測試數據已保證v和w符合要求;
第二行輸入一個長度不超過256的字符串,字符串可能含有空格。
輸出:
處理后的字符串。
?
樣例:
輸入: 2?6 ABCDEFGH?12345 輸出: AH?12345 #include <stdio.h> #include <string.h> char *str_delete(char* a, int v, int w,int count) {int i, j;for (i = v - 1;i<count; i++) //這里約束條件可以寫成 for (i = v - 1;a[i]; i++){a[i] = a[i + w];}return a; } int main() {int v, w;char s[256], ch;scanf_s("%d %d", &v, &w);ch = getchar();//上式不妨換成while (getchar() != '\n');//或者if (getchar() != '\n');詳情看https://blog.csdn.net/m0_63938421/article/details/121632384?spm=1001.2014.3001.5501gets_s(s);int count = strlen(s);char* p = s;*p= *str_delete(s, v, w,count); //為啥不能直接讓s=*str_delete(s, v, w,count); //函數返回的是一個指向數組的指針,如果要讓一個數組覆蓋另一個數組,必須用strcpy,而不是這樣直接把新數組賦值過來;printf("%s", p);//注意不能用puts(p),會把回車一起輸出。return 0; }3.?(分類統計字符)
題目編號:Exp05-Basic02,GJBook3-07-14
題目名稱:分類統計字符
題目描述:
編寫程序實現:使用自定義函數void count(char * str, int * upper, int *lower, int *space, int *num, int*other)統計給定字符串str中的大寫字母、小寫字母、空格、數字字符、其它字符的數目,并以指針參數傳回主程序中的調用點,并輸出。
輸入:從鍵盤隨機輸入一個長度不超過256的字符串,字符串內可能包含若干空白字符。
輸出:大寫字母字符個數、小寫字母字符個數、空格字符個數、數字字符個數和其它字符個數,數字間以一個西文空格間隔,最后一個數后無多余字符。
?
樣例:
輸入: 123??abc???ABC 輸出: 3?3?5?3?0垃圾版-------垃圾版-------垃圾版--------垃圾版-------垃圾版
#include <stdio.h> #include <string.h> void count(char* str, int* upper, int* lower, int* space, int* num, int* other) {int u=0, l=0, s=0, n=0, o=0;*upper = u; *lower = l; *space = s; *num = n; *other = o;int count = strlen(str);for (int i = 0;; i++){if (*(str + i) >= 'A' && *(str + i) <= 'Z'){*upper = ++u; continue;}if (*(str + i) >= 'a' && *(str + i) <= 'z'){*lower = ++l; continue;}if (*(str + i) == ' '){*space = ++s; continue;}if (*(str + i) >= '0' && *(str + i) <= '9'){*num = ++n; continue;}else { *other = ++o; continue; }} } int main() {char ch[256];gets_s(ch);int u, l, s, n, o;count(ch, &u, &l, &s, &n, &o);printf("%d %d %d %d %d", u, l, s, n, o);return 0; }高效版-------高效版-------高效版-------高效版-------高效版
#include<stdio.h> //以下是判斷行字符串長度的函數,也可以直接調用string.h中的strlen函數 int strlen(char* ch) {int sum, i;for (i = 0; ch[i] != '\0'; i++);sum = i;return sum;} //以下是計數函數,通過指針將計數傳遞給main函數中的參數,從而返回多個值 void count(char* str, int* upper, int* lower, int* space, int* num, int* other) {int in; in = strlen(str);//記錄該行有多少個字符int i;for ( i = 0; i < in; i++){if (str[i] >= 'A' && str[i] <= 'Z') *upper=*upper+1;if (str[i] >= 'a' && str[i] <= 'z') *lower=*lower+1;if (str[i] == ' ')*space=*space+1;if (str[i] >= '0' && str[i] <= '9')*num=*num+1;}*other = in - *upper - *lower - *space - *num;//計算其他字符 } int main() {char str[256];gets_s(str);int upper=0, lower=0, space=0, num=0, other=0;count(str, &upper, &lower, &space, &num, &other);printf("%d %d %d %d %d", upper, lower, space, num, other); }5.?(合法標識符)
題目編號:Exp05-Enhanc02,freshman-1031
題目名稱:合法標識符
題目描述:
已知C語言中合法標識的定義是,以_或字母開始,并由_、數字、字母構成的連續字符串。編寫程序判斷給定的字符串是否是合法C語言標識符。
輸入:輸入第一行給出正整數 N(≤10^2)是輸入的字符串個數。隨后 N 行,每行給出1個任意長度的字符串(可能含有空白字符,長度不超過256)。
輸出:
輸出第一行以Valid:X 格式給出合法標識符個數 X,第二行以Invalid:Y 格式給出非法標識符個數 Y,無多余字符,冒號為西文冒號。
樣例:
這是另一個大佬的代碼,輸入一排檢測一排,避免了二位數組的麻煩操作。
? #include <stdio.h> #include <string.h> char a[258]; int b[2]; //判斷的數組,b[0]存的是符合標準的,b[1]存的是不符合標準的 int pd(char *a){//如果是符合的就返回1,否則返回0if((a[0]!='_')&&!(a[0]<='z'&&a[0]>='a')&&!(a[0]<='Z'&&a[0]>='A')){//判斷第一個字母是否符合標準return 0;}for(int i=1;i<strlen(a);i++){//然后就是個循環,沒什么說的if(a[i]=='_'||(a[i]<='z'&&a[i]>='a')||(a[i]<='Z'&&a[i]>='A')||(a[i]<='9'&&a[i]>='0')){continue;}else{return 0;}}return 1; } int main(){int n;scanf("%d",&n);getchar(); //這個getchar()有什么用呢,大家思考一下for(int i=0;i<n;i++){gets(a);if(pd[a]){ b[0]++; }else{b[1]++;}for(int i=0;i<strlen(a);i++){a[i]='\0';}}printf("Valid:%d\n",b[0]);printf("Invalid:%d",b[1]); }?總結
以上是生活随笔為你收集整理的实验05 指针及其在程序设计中的应用(2021级)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开源即时通讯IM框架MobileIMSD
- 下一篇: 初创企业购买企业邮箱_应用创意可为201