C语言第九次博客作业--指针
生活随笔
收集整理的這篇文章主要介紹了
C语言第九次博客作业--指针
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、PTA實驗作業
題目1:兩個4位正整數的后兩位互換
1. 本題PTA提交列表
2. 設計思路
定義循環變量i,兩個數組a[4],b[4] for i=0 to 3a[i]*p取各個位*p/=10 end for i=0 to 3b[i]*q取各個位*q/=10 end 分別對*p和*q重新賦值3.代碼截圖
4.本題調試過程碰到問題及PTA提交列表情況說明。
本題沒有多大問題,就是想再找一種更簡單的做法。
題目2: 輸出月份英文名
1. 本題PTA提交列表
2. 設計思路
if形參n不再月份范圍內return NULL 定義指針數組*a[]并賦值十二個月份return a[n-1]3.代碼截圖
4.本題調試過程碰到問題及PTA提交列表情況說明。
剛開始我用的switch語句來判斷月份,后來在舍友提醒下改成了數組來存放英文并直接返回。
- 部分正確 :月份不在范圍內
解決辦法:加入if判斷若不在范圍內,就返回NULL
題目3:過濾字符串只保留串中的字母字符
1. 本題PTA提交列表
2. 設計思路
定義*a存放ptr,循環變量i,計數變量count while(*ptr)if *ptr 是字母將*ptr存放到*(a+i)中 i++else count++ 記錄非字母ptr++繼續循環 end *(a+i)賦值結束符 return count非字母個數3.代碼截圖
4.本題調試過程碰到問題及PTA提交列表情況說明。
這道題前面一直在對p直接判斷,導致提交運行超時,后來利用另一個指針來存放符合題意的字符并返回,就不會運行超時。
二、截圖本周題目集的PTA最后排名。
三、閱讀代碼
strcpy字符串復制函數原型
char * strcpy(char * dest, const char * src) // 實現src到dest的復制 {if ((src == NULL) || (dest == NULL)) //判斷參數src和dest的有效性{return NULL;}char *strdest = dest; //保存目標字符串的首地址while ((*strDest++ = *strSrc++)!='\0'); //把src字符串的內容復制到dest下return strdest; }memcpy內存拷貝函數原型
void *memcpy(void *memTo, const void *memFrom, size_t size) {if((memTo == NULL) || (memFrom == NULL)) //memTo和memFrom必須有效return NULL;char *tempFrom = (char *)memFrom; //保存memFrom首地址char *tempTo = (char *)memTo; //保存memTo首地址 while(size -- > 0) //循環size次,復制memFrom的值到memTo中*tempTo++ = *tempFrom++ ; return memTo; }strcpy和memcpy主要有以下3方面的區別。
1、復制的內容不同。strcpy只能復制字符串,而memcpy可以復制任意內容,例如字符數組、整型、結構體、類等。
2、復制的方法不同。strcpy不需要指定長度,它遇到被復制字符的串結束符"\0"才結束,所以容易溢出。memcpy則是根據其第3個參數決定復制的長度。
strcpy字符串復制函數原型
#include "assert.h" char *strcpy(char *strDest, const char *strSrc) //使用const來約束strSrc,提高程序的健壯性。如果函數體內的語句試圖改動strSrc的內容,編譯器將指出錯誤。 { assert((strDest != NULL) && (strSrc!= NULL)); //對傳入參數strDest和strSrc進行檢查,禁止空指針傳入if (strDest == strSrc) return strDest; char *tempDest = strDest; while((*strDest++ = *strSrc++) != '\0'); return tempDest; }四、本周學習總結
1.自己總結本周學習內容。
1.1"&"與"*"互為逆運算
- "&"是取地址符
- "*"是指針聲明符和間接訪問運算符(取值運算符)
1.2指針
- 定義指針變量
指針變量就是用來儲存地址的變量
指針的作用:用來傳遞地址,作為引用類型的變量,減少內存消耗。
1.3指針與數組
數組名就是一個地址,指向這個數據的開端
*p==a[0] *(p+n)==a[n] *p+=1,(*p)++,++*p將指針p所指向的變量值加1 *p++,*(p++)先取*p的值作為表達式的值,在將指針p的值加11.4排序和查找
- 冒泡排序
- 選擇排序
- 二分查找法
1.5結構體的定義
struct time{int hour;int minute;int second; }; struct time t; struct time{int hour;int minute;int second; } t;1.6結構體嵌套
struct date{int year;int month;int day; }; struct person{char name[256];struct date birthday; };1.7結構體的引用和初始化
struct student{int number;char name[256];char sex[6];int age;int grade; }; int main() {struct student alan={01,"alan","man",16};printf(alan.name); }1.8結構體數組
struct student{int number;char name[256];char sex[6];int age;int grade; }; int main() {struct student class[5];strcpy(alan.name,"alan");printf(alan.name); }2.羅列本周一些錯題。
寫函數fun , a數組中n個整數從小到大排列,函數功能是:從a中刪除第一個遭到與x值相同的數組元素,刪除后a的數組仍然由小到大有序排列。
這道題尤其要注意最后一個空n=n-1,平時很容易忽略掉
轉載于:https://www.cnblogs.com/lmb171004/p/8044710.html
總結
以上是生活随笔為你收集整理的C语言第九次博客作业--指针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 终端概述与分类
- 下一篇: MAC--PPTP教程